ICS Security Simulator
Ground-truth labelled ICS attack datasets mapped to MITRE ATT&CK for ICS. Build training data for IDS, SIEM, SOC, and red/blue-team exercises without touching a real plant.
How it works
ICS Security runs as an overlay on a Virtual-SCADA simulation. You describe the plant in natural language and flag the attack campaign you want injected. The engine produces the clean-and-attack telemetry side-by-side with ground-truth labels mapped to MITRE ATT&CK for ICS technique ids — the exact data shape IDS / SIEM training pipelines need.
MITRE ATT&CK for ICS v15 coverage
Every injected event carries a first-class v15 technique ID, the tactic chain leading to it, and cross-references to CWE and CAPEC identifiers. Attack graphs are STIX-2.1 shaped. ICS Security v15 additions covered:
T0807Command-Line InterfaceT0814Denial of ServiceT0830Adversary-in-the-Middle (was: Man-in-the-Middle)T0831Manipulation of ControlT0832Manipulation of ViewT0836Modify ParameterT0838Modify Alarm SettingsT0842Network SniffingT0843Program DownloadT0855Unauthorized Command MessageT0856Spoof Reporting MessageT0858Change Operating ModeT0859Valid AccountsT0866Exploitation of Remote ServicesT0869Standard Application ProtocolT0872Indicator Removal on HostT0878Alarm SuppressionT0881Service StopT0883Internet Accessible DeviceT0889Modify Program
Stage-2 bundle additions
Alongside the classic seven artefacts, Stage-2 / Stage-2.1 runs ship several additional sealed deliverables:
privacy_evidence.json— source_provenance, ε/δ budget ledger, DP mechanism, per-site receipts (federated runs only).baseline_detector_receipt.json— hash-pinned IsolationForest fit (training rows SHA, estimator params, feature names, tree thresholds SHA). Consumers re-fit deterministically from the receipt alone.federation_receipts.json(federated only) — per-site DPHE receipts + aggregated summary + aggregation backend (mpc_additive_v1,tee_sgx_v1,trusted_v1).unknown_physics_composition.json— composer output when the plant doesn't match a Tier-1/Tier-2 archetype. Includes the species graph, mass-balance invariants, and any DimensionChecker violations surfaced during composition.
Live attack streaming
Attack events stream over the same SSE endpoint as benign telemetry: GET /v1/client/runs/{run_id}/stream. Attack-window slices are also written to a traffic.pcapng segment index in the sealed bundle. Every injected event is Merkle-chained into a hash-chained operator journal — re-ordering, insertion, or deletion breaks the chain.
Deep-dive references
- MITRE ATT&CK ICS techniques — every technique the platform supports, grouped by the effect on the control loop (write-side manipulation vs read-side manipulation) and supply chain.
- Bundle contents — the labelled artifacts (
scada_telemetry,commands,alarms,ics_security,traffic_pcapng) the customer receives. - Validation Gate — the four-dimensional gate specifically penalises attack runs that produce zero anomaly labels.
Quickstart
from radmah_sdk import RadMah
sdk = RadMah(api_key="...", base_url="https://api.radmah.ai")
job = sdk.jobs.create(
kind="simulate",
engine="virtual_scada",
seed=42,
options={
"description": (
"Hospital HVAC plant with one chiller, two AHUs, three zone "
"valves. Spoof a zone-temperature sensor (T0856)."
),
"total_seconds": 120,
"protocols": ["bacnet", "modbus"],
"ics_security_enabled": True,
},
)