Detect and score DetectionEngine
Rule matching (R001–R018) → generates SIEMAlert per match
Dedup: skip if same (rule_id, src, dst) seen within 300s window
Severity scoring — 3-factor additive model
score_asset = ASSET_CRITICALITY[dst_purdue] 0–3
L0/L1/L2 = 3 L3/L3.5 = 2 L4 = 1 External = 0
score_conf = CONFIDENCE[confidence_key] 1–3
KNOWN_ATTACKER_IP = 3 PROTOCOL_ANOMALY = 2 HEURISTIC = 1
score_zone = ZONE_CONTEXT[zone_key] 0–2
OT_FIELD_TARGETED = 2 FIREWALL_CROSSED = 2 PURDUE_VIOLATED = 1 SAME_ZONE = 0
score_total = asset + conf + zone (range 0–8)
CRITICAL ≥ 8
HIGH ≥ 6
MEDIUM ≥ 4
LOW ≥ 2
INFO < 2