ENUMERATE-GRID-INFRASTRUCTURE
Concurrent TCP scanning across 7 OT/AI protocols: IEC 60870-5-104 (port 2404), DNP3 (20000), Modbus (502), BACnet (47808), OPC-UA (4840), ICCP (1911), HTTP EMS (80/443/8080/8443). AI forecasting service fingerprinting via banner grab and endpoint probe. Attack surface score 0–1.0. SubstationProfile with capacity_mw, current_load_mw, response_time_ms.
OPEN
INJECT-ADVERSARIAL-DATA
Fast Gradient Sign Method (FGSM) adversarial perturbation on SCADA load time-series. epsilon_mw=40 MW maximum perturbation bound. Gaussian temporal smoothing sigma=2.0 to preserve autocorrelation and seasonal drift — perturbation appears as measurement noise. Z-score stealth scoring: perturbation passes if max_z < stealth_threshold (0.88). IEC 60870-5-104 C_SE_NC_1 setpoint command and Modbus register spoof delivery vectors.
INJECT
UNDER-FORECAST-DEMAND
AR(24) autoregressive model with 100-iteration optimal perturbation search to maximise forecast gap. Targets peak_hours=[16–22 UTC] when grid operates nearest capacity. anomaly_threshold_sigma=3.0 z-score alert suppression — perturbation vectors designed so SCADA anomaly detection z-score stays below threshold. bypass_confidence scoring. ForecastBypassResult with original_forecast_mw, manipulated_forecast_mw, gap_mw, gap_percentage, alert_suppressed.
INJECT
TRIGGER-PEAK-DEMAND
NTP-synchronised multi-substation coordinated demand signal injection. Trigger modes: TIME (5-min future UTC), NTP_SYNC (pool.ntp.org offset compensation), COORDINATE (immediate synchronised), EVENT (load event trigger). ARMAGEDDON mode: demand_increase = total_reserve_mw * 0.95 — creates demand within 5% of capacity. demand_increase_mw formula: max(gap_mw * multiplier, total_reserve * 0.85). Requires ROE phrase "energy grid cascading failure authorised".
UNLEASHED
SUBSTATION-OVERLOAD
IEC 60255-151 standard inverse-time overcurrent relay: t = 0.14 / (M^0.02 - 1) * 2.0 seconds, where M = (load / (capacity * pickup_factor)). When M > 1.0 the relay trips after computed trip_time_s. IEC104 C_SE_NC_1 (type=49) single-command setpoint injection, DNP3 CROB direct operate breaker open (function_code=0x03). DC power flow redistribution: overloaded substation load transferred to survivors weighted by remaining headroom capacity.
UNLEASHED
CASCADE-PROPAGATE
N-k contingency cascade iteration (max_iterations=20). Each iteration: identify overloaded survivors (load/capacity > 1.0), redistribute failed-substation load proportional to headroom, add newly overloaded substations to failed set. Cascade becomes unstoppable when capacity_lost_mw ≥ 50% of total grid capacity — at that point no surviving substation can absorb further redistributed load. Returns CascadeResult with stages, capacity_lost_fraction, unstoppable flag.
UNLEASHED
BLACKOUT-CONFIRM
Region classification: major_metropolitan (>500 MW), large_city (200–500 MW), medium_city (50–200 MW). Population estimate: capacity_mw * 1000 / kW_per_capita (1.2 kW/capita). Restoration complexity CATASTROPHIC when capacity_lost > 50% or critical infra affected. Critical infrastructure detection: hospital_life_support, water_treatment, financial_clearing, emergency_services, telecommunications. Unrecoverable classification when fraction_lost ≥ 0.9. BlackoutConfirmation with severity, region_type, population_affected.
UNLEASHED
HARVEST-GRID-DATA
30-path HTTP harvest across common EMS/SCADA web API paths: /actuator/env, /.env, /api/config, /api/v1/config, /v1/model/info, /api/forecasts, /api/substations, /debug/vars, /internal/config, and 21 more. Extracts: API keys (sk-/hf_/AKIA patterns), SCADA credentials from /api/credentials and /config/auth, model weights from /model/weights and /artifacts, contingency plans from /api/contingency and /plans/emergency. Results classified by data_type: credential/api_key/scada_config/model_weight/contingency_plan.
INJECT
PERSIST-GRID-BACKDOOR
4 persistence mechanisms: (1) training_pipeline_cron — cron @reboot job + SCADA webhook re-injection into EMS training API, (2) scada_hook — Modbus register polling hook via /api/hooks and /scada/callbacks, (3) model_weight_trigger_neuron — malicious weight delta injected via /api/model/update to create trigger neuron, (4) scheduled_job_api — cron job registered via /api/scheduler/jobs for recurring forecast poisoning. execute=True only at ARMAGEDDON gate. Requires ROE "energy grid persistence backdoor authorised" + --confirm-armageddon.
ARMAGEDDON
REPORT
GLK-{hex12} report ID. Ed25519 signature via cryptography library. ML-DSA-65 via dilithium-py (FIPS 204) — HMAC-SHA3-256 fallback. 6 WMD classes, MITRE ATT&CK T1565/T1499/T1190/T1552/T1543, ATLAS AML.T0043/AML.T0054/AML.T0040. JSON + human-readable text. Saves to gridlock-reports/.
OPEN
ARMAGEDDON GATE — PERSIST-GRID-BACKDOOR
PERSIST-GRID-BACKDOOR requires: (1) GRIDLOCK_ARMAGEDDON_KEY environment variable, (2) ROE JSON file containing phrase "energy grid persistence backdoor authorised", (3) explicit --confirm-armageddon flag. Installs 4 persistence mechanisms into energy grid AI/SCADA infrastructure. Irreversible without complete system rebuild. Operator authority required.