Threat Hunt Plan: Iran-Affiliated Targeting of Critical Infrastructure PLCs — Rockwell, Schneider, and Siemens OT Exploitation
Revision 2.2 — 2026-07-23 (aligned to AA26-097A as updated July 22, 2026, incl. the 21-indicator STIX set)
Hunt Objective and Scope
This hunt seeks evidence of Iran-affiliated APT activity against internet-exposed operational technology, as described in joint Cybersecurity Advisory AA26-097A (originally April 7, 2026; updated July 22, 2026). The adversary reaches internet-facing PLCs from overseas leased infrastructure and connects using the vendors' own legitimate engineering software, then extracts the device project file, manipulates ladder logic and reusable code modules, and alters data on HMI and SCADA displays. The July 22 update broadened the confirmed manufacturer scope beyond Rockwell Automation/Allen-Bradley (CompactLogix, Micro850, via Studio 5000 Logix Designer) to include Schneider Electric (Modicon M340 / BMX P34, via EcoStruxure Control Expert) and Siemens (S7-1200, via TIA Portal), added exfiltration of project files (T1041), reported malicious Rockwell Add-On Instructions that disabled alarm and shutdown logic at a victim site, and expanded the machine-readable indicator set from eight to twenty-one IP addresses. The actors also deploy Dropbear SSH on victim endpoints for remote access over port 22 and target OT ports 44818, 2222, 102, and 502.
In scope: internet-facing and DMZ-adjacent OT devices (Rockwell, Schneider, Siemens, and other Modbus-capable controllers) and their upstream engineering workstations (EWS), HMIs, historians, and jump hosts; the Purdue Level 3/3.5 boundary; cellular-modem-connected field devices (pump stations, substations, remote municipal sites — the dominant exposure population); and any Windows/Linux host that runs PLC configuration software or terminates remote access into the OT network. The hunt covers network telemetry (NetFlow, firewall, PCAP), endpoint telemetry (CrowdStrike Falcon, Windows Event Logs), OT monitoring platform data (Dragos, Claroty CTD, Nozomi, Tenable OT, Forescout, Armis), and external attack-surface OSINT (Shodan, Censys).
Out of scope: enterprise IT assets with no path to the OT network. Time window: baseline the trailing 12 months where telemetry retention allows (earliest published IOC association is November 2025; confirmed compromises since at least March 2026); prioritize the trailing 90 days for active-compromise triage. All queries are read-only; no active probing of controllers is performed. All hostnames, boundary names, IP ranges, ASNs, notification handles, and rule paths in this plan are generic placeholders — substitute the tenant-specific values before execution. In particular, the 203.0.113.0/24 range, AS64500, and "Your Organization" used in the Hypothesis 5 Shodan/Censys queries are RFC 5737 documentation values shown for demonstration only.
Hypotheses and Hunt Procedures
Hypothesis 1: An Iran-affiliated actor has connected to an internet-exposed Rockwell, Schneider, or Siemens PLC from external infrastructure using engineering software, observable as inbound/outbound sessions on OT ports (44818, 2222, 102, 502) crossing the internet boundary, engineering-tool process execution on non-baseline hosts, and project-file exfiltration.
MITRE ATT&CK: Initial Access | T0883 — Internet Accessible Device | The actor accesses publicly exposed, internet-reachable PLCs installed without sufficient network hardening.
MITRE ATT&CK: Execution | T0843 — Program Download | Engineering software creates an accepted connection and transfers project/logic to the controller.
MITRE ATT&CK: Exfiltration | T1041 — Exfiltration Over C2 Channel | The actor uses vendor configuration software on leased infrastructure to steal controller project files.
Collection Queries
CrowdStrike Falcon LogScale (CQL) — multi-vendor engineering-software execution (rarity-sorted; a Logix/RSLinx, Control Expert/Unity, or TIA Portal process on a host that is not a sanctioned EWS is the signal):
#event_simpleName=ProcessRollup2 event_platform=Win
| FileName=/^(Studio5000\.exe|RSLogix5000\.exe|LogixDesigner\.exe|RSLinx\.exe|RSLinxNG\.exe|FactoryTalk.*\.exe|Micro800.*\.exe|ControlExpert\.exe|UnityPro\.exe|Unity\.exe|EcoStruxure.*\.exe|Siemens\.Automation\.Portal\.exe|s7tia.*\.exe|Openness.*\.exe)$/i
| groupBy([ComputerName, UserName, FileName, ImageFileName, CommandLine], function=count(as=hits), limit=max)
| sort(hits, order=asc, limit=max)CrowdStrike Falcon LogScale (CQL) — Windows-host connections on OT ports to a non-RFC1918 (external) address:
#event_simpleName=NetworkConnectIP4 event_platform=Win
| in(RemotePort, values=[44818, 2222, 102, 502, 22])
| !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","127.0.0.0/8","169.254.0.0/16"])
| groupBy([ComputerName, RemoteAddressIP4, RemotePort], function=count(as=hits), limit=max)
| sort(hits, order=desc, limit=max)BPF / tcpdump — rolling capture of OT engineering/control ports at the L3/3.5 boundary tap (strftime rotation, 512 MiB size cap):
tcpdump -i eth1 -s 0 -w /opt/hunt/pcap/ot-enip-%Y%m%d-%H%M%S.pcap -G 3600 -C 512 'tcp port 44818 or udp port 2222 or udp port 44818 or tcp port 102 or tcp port 502 or tcp port 22'Datadog — Logs > Explorer (Windows EWS/HMI engineering-tool launch; OT is typically on-prem, so CloudTrail/VPC-flow sources are not applicable — note this gap and use source:windows):
source:windows @Event.System.EventID:1 @Event.EventData.Image:(*Studio5000.exe OR *LogixDesigner.exe OR *ControlExpert.exe OR *Unity.exe OR *Siemens.Automation.Portal.exe)
// time range: last 90 days; use Logs > Analytics, Table view, group by @Event.EventData.ComputerDatadog — Infrastructure > Processes (Live Process Monitoring; fallback for hosts without Sysmon forwarding):
command:Studio5000 OR command:ControlExpert OR command:Siemens.Automation.Portal
// Free-text also matches the command line; provides the source:windows log search above as fallback where Live Process Monitoring is not enabledWindows Event IDs to collect on EWS/HMI hosts:
- 4688 (Process creation) — engineering-tool and dbclient/plink launch, with parent process
- 5156 (WFP allowed connection) — outbound/inbound flows on 44818/2222/102/502/22
- 4624 / 4625 (Logon success/failure) — Type 3 (network) and Type 10 (RemoteInteractive) into EWS/jump hosts
PowerShell collection:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=5156} | Where-Object { $_.Message -match '44818|2222|:102|:502|:22' } | Export-Csv -NoTypeInformation /opt/hunt/out/wfp_ot_ports.csvOT Data Collection: Dragos Platform — Communications Hub: filter connections crossing the OT/IT boundary or sourced externally on ports 44818/2222/102/502/22; review the EtherNet/IP and S7 QFDs (Query Focused Datasets) for engineering sessions and program up/download from non-EWS talkers; export the matching connection list.
OT Data Collection: Claroty CTD — Communication Analysis: scope to OT baseline; surface Insight/OT-Activity events for controller writes, program downloads, and mode changes; use the CTD PCAP export on flagged conversations (CTD retains PCAP) for offline protocol carving.
OT Data Collection: Nozomi Guardian — N2QL via the OpenAPI query endpoint (GET /api/open/query/do?query=<N2QL>), 10,000 rows/page:
links | where protocol == "ethernetip" and to_port == 44818 | sort record_created_at ascnodes | where vendor == "Rockwell Automation" or vendor == "Siemens" or vendor == "Schneider Electric"OT Data Collection: Tenable OT — GraphQL only (/graphql; no REST /api/v1/): pull Events for PLC mode changes and project upload/download, and Risks > Findings for CVE-2021-22681 across the Logix fleet; run pyTenable for a fleet-wide firmware-version and code-snapshot histogram across Rockwell, Schneider, and Siemens controllers.
OT Data Collection: Forescout eyeInspect — Command Center: filter alerts on EtherNet/IP CIP writes/ForwardOpen, S7Comm program transfer, and Schneider UMAS writes from non-baseline sources; forward CEF/syslog to the SIEM; run ICS Patrol only with engineering sign-off, never against safety controllers.
OT Data Collection: Armis Centrix (ASQ) — external source reaching OT-protocol ports (default-omit boundary; the OT-port set is the OT-scoping; set the time window in the UI picker):
in:ipConnections
serverPort:44818,2222,102,502,22
endpointA:(networkLocation:"External")Analysis Queries
CrowdStrike Falcon LogScale (CQL) — attribute the OT-port connection to its originating process (reverse-direction join: ProcessRollup2 is the streaming main query, the narrow NetworkConnectIP4 filter is the subquery — avoids the 100k subquery cap):
#event_simpleName=ProcessRollup2
| join({
#event_simpleName=NetworkConnectIP4
| in(RemotePort, values=[44818, 2222, 102, 502])
| !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","127.0.0.0/8","169.254.0.0/16"])
},
field=[aid, TargetProcessId], key=[aid, ContextProcessId], mode=inner)
| groupBy([ComputerName, UserName, ImageFileName, CommandLine], function=count(as=cnt), limit=max)
| sort(cnt, order=desc, limit=max)Wireshark / tshark — EtherNet/IP control-plane services from an unexpected source (ForwardOpen, Write Tag, controller Stop/Reset):
enip && (cip.service == 0x4d || cip.service == 0x54 || cip.service == 0x07 || cip.service == 0x05)
tshark -r /opt/hunt/pcap/ot-enip.pcap -Y "cip.service==0x4d || cip.service==0x54 || cip.service==0x07" -T fields -e frame.time -e ip.src -e ip.dst -e cip.service -e cip.classWireshark / tshark — Siemens S7comm program download/upload and CPU stop (port 102 scope):
s7comm.param.func in {0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x29}
tshark -r /opt/hunt/pcap/ot-s7.pcap -Y "s7comm.param.func==0x29 || s7comm.param.func==0x1b" -T fields -e frame.time -e ip.src -e ip.dst -e s7comm.param.funcDatadog — Logs > Analytics (Timeseries + Table, group by destination address to match the CQL groupBy on RemoteAddressIP4):
source:windows @Event.System.EventID:5156 @Event.EventData.DestPort:(44818 OR 2222 OR 102 OR 502 OR 22)
// Use Logs > Analytics; Timeseries then Table view; group by @Event.EventData.DestAddress; time range: last 90 daysDatadog Monitor (create via Monitors > New Monitor > Logs; API POST /api/v1/monitor):
Type: Log Alert
Query: source:windows @Event.System.EventID:5156 @Event.EventData.DestPort:(44818 OR 502 OR 102) -@Event.EventData.SourceAddress:(10.* OR 172.16.* OR 192.168.*)
Evaluation window: last 15 minutes
Alert condition: count > 0
Message: "ALERT: external-sourced connection to OT control port observed — investigate for AA26-097A activity @oncall-ot-soc"
Prerequisites: Windows WFP (5156) logs forwarded from EWS/HMI/jump hosts to DatadogWindows Event Log PowerShell analysis — remote-interactive logons into EWS/jump hosts in the window:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-90)} | Where-Object { $_.Properties[8].Value -eq 10 } | Select-Object TimeCreated, @{N='SrcIP';E={$_.Properties[18].Value}}, @{N='User';E={$_.Properties[5].Value}} | Export-Csv -NoTypeInformation /opt/hunt/out/rdp_logons.csvOT network and protocol analysis — baseline every talker that issues EtherNet/IP write/control services (0x4d Write Tag, 0x54 ForwardOpen, 0x07 Reset), S7 program transfer (0x1a-0x1f), or Schneider UMAS write functions, and compare against the sanctioned EWS list; any control-class service from a non-EWS or external source is a finding (T0836 / T0843 / T0858 / T0855).
Hypothesis 2: The actor has communicated with OT assets from published Iran-affiliated operator infrastructure, observable as connections to/from the 21 IOC IPs (and the community-identified adjacent operator range) in network, firewall, and endpoint telemetry within the associated time frames.
MITRE ATT&CK: Command and Control | T0885 — Commonly Used Port | The actor used common OT ports to reach controllers from overseas hosting infrastructure.
Collection Queries
CrowdStrike Falcon LogScale (CQL) — any host communicating with the 21 published CISA IOC IPs (July 22, 2026 STIX set):
#event_simpleName=NetworkConnectIP4
| in(RemoteAddressIP4, values=["79.133.46.209","84.200.205.165","88.80.150.199","88.80.150.200","88.80.150.202","135.136.1.133","141.11.164.153","175.110.121.39","175.110.121.41","175.110.121.42","175.110.121.107","185.82.73.162","185.82.73.164","185.82.73.165","185.82.73.167","185.82.73.168","185.82.73.170","185.82.73.171","185.82.73.175","185.225.17.225","192.142.54.79"])
| groupBy([aid, ComputerName, RemoteAddressIP4, RemotePort], function=count(as=hits), limit=max)
| sort(hits, order=desc, limit=max)BPF / tcpdump — targeted capture of the operator IP set (the /24 clusters cover the multi-homed operator subnet plus the July additions):
tcpdump -i eth1 -s 0 -w /opt/hunt/pcap/ioc-hosts-%Y%m%d-%H%M%S.pcap -G 3600 'net 185.82.73.0/24 or net 175.110.121.0/24 or net 88.80.150.0/24 or host 79.133.46.209 or host 84.200.205.165 or host 135.136.1.133 or host 141.11.164.153 or host 185.225.17.225 or host 192.142.54.79'Datadog — Logs > Explorer (firewall/flow logs where forwarded; explicit gap note: if NetFlow/firewall logs are not forwarded to Datadog, this hypothesis relies on the CQL/OT-platform paths and the perimeter firewall SIEM):
source:windows @Event.EventData.DestAddress:(79.133.46.209 OR 84.200.205.165 OR 88.80.150.199 OR 88.80.150.200 OR 88.80.150.202 OR 135.136.1.133 OR 141.11.164.153 OR 175.110.121.39 OR 175.110.121.41 OR 175.110.121.42 OR 175.110.121.107 OR 185.82.73.162 OR 185.82.73.164 OR 185.82.73.165 OR 185.82.73.167 OR 185.82.73.168 OR 185.82.73.170 OR 185.82.73.171 OR 185.82.73.175 OR 185.225.17.225 OR 192.142.54.79)
// time range: 2025-11-01 to current (earliest published IOC association)OT Data Collection: Armis Centrix (ASQ) — any connection touching the 21 published IOC IPs:
in:ipConnections
endpointA:(ipAddress:"79.133.46.209,84.200.205.165,88.80.150.199,88.80.150.200,88.80.150.202,135.136.1.133,141.11.164.153,175.110.121.39,175.110.121.41,175.110.121.42,175.110.121.107,185.82.73.162,185.82.73.164,185.82.73.165,185.82.73.167,185.82.73.168,185.82.73.170,185.82.73.171,185.82.73.175,185.225.17.225,192.142.54.79")OT Data Collection: Nozomi Guardian — N2QL match on the operator subnets and singleton hosts via link records:
links | where dst_ip ~= "185.82.73." or dst_ip ~= "175.110.121." or dst_ip ~= "88.80.150." or dst_ip == "135.136.1.133" or dst_ip == "79.133.46.209" or dst_ip == "84.200.205.165" or dst_ip == "141.11.164.153" or dst_ip == "185.225.17.225" or dst_ip == "192.142.54.79" | sort record_created_at ascAnalysis Queries
CrowdStrike Falcon LogScale (CQL) — pivot from any IOC-IP hit to the destination-port spread of the implicated host (many distinct OT ports to one operator host = engineering-session signal):
#event_simpleName=NetworkConnectIP4
| in(RemoteAddressIP4, values=["79.133.46.209","84.200.205.165","88.80.150.199","88.80.150.200","88.80.150.202","135.136.1.133","141.11.164.153","175.110.121.39","175.110.121.41","175.110.121.42","175.110.121.107","185.82.73.162","185.82.73.164","185.82.73.165","185.82.73.167","185.82.73.168","185.82.73.170","185.82.73.171","185.82.73.175","185.225.17.225","192.142.54.79"])
| groupBy([aid], function=count(RemotePort, distinct=true, as=DistinctPorts), limit=max)
| sort(DistinctPorts, order=desc, limit=max)Wireshark / tshark — extract the CIP/S7 conversation content from any operator-host capture to determine what was read or written:
tshark -r /opt/hunt/pcap/ioc-hosts.pcap -Y "enip || s7comm" -T fields -e frame.time -e ip.src -e ip.dst -e cip.service -e s7comm.param.func -e enip.commandOT network and protocol analysis — Disposition note: the authoring agencies flag the 21 published IPs as historical-association and recommend vetting before blocking; the seven original 185.82.73.x IPs plus the community-identified adjacent IPs (185.82.73.160/.161/.163/.166, and .169 currently dark) resolve to a single multi-homed operator workstation in AS214036 per external scan analysis — treat any hit as an investigative lead, correlate against observed EtherNet/IP/S7 services, and confirm before enforcement.
Hypothesis 3: The actor has deployed Dropbear SSH on a victim endpoint (EWS, gateway, or jump host) to maintain remote access over port 22, observable as a dropbear binary/process, an unexpected port-22 listener, and inbound SSH from external sources.
MITRE ATT&CK: Command and Control | T1219 — Remote Access Software | The actor deployed Dropbear SSH on victim endpoints to gain remote access over port 22.
Collection Queries
CrowdStrike Falcon LogScale (CQL) — Dropbear process execution:
#event_simpleName=ProcessRollup2
| FileName=/dropbear/i
| groupBy([ComputerName, UserName, FileName, ImageFileName, CommandLine, SHA256HashData], function=count(as=hits), limit=max)
| sort(hits, order=desc, limit=max)CrowdStrike Falcon LogScale (CQL) — Dropbear binary written to disk (catch-all file-write event; join to ProcessRollup2 for the writing process):
#event_simpleName=/FileWritten$/
| TargetFileName=/dropbear/i
| rename(field=ContextProcessId, as=TargetProcessId)
| join(
query={
#event_simpleName=ProcessRollup2
| table([TargetProcessId, FileName, ImageFileName, CommandLine, UserName, SHA256HashData], limit=max)
},
field=TargetProcessId, key=TargetProcessId,
include=[FileName, ImageFileName, CommandLine, UserName, SHA256HashData]
)
| groupBy([ComputerName, UserName, FileName, TargetFileName, SHA256HashData], function=count(as=hits), limit=max)
| sort(hits, order=desc, limit=max)YARA — file-system scan of EWS/jump-host staging directories for Dropbear artifacts:
yara -r /opt/hunt/rules/dropbear_ssh.yar / >> /opt/hunt/out/dropbear_hits.txtWindows Event IDs to collect:
- 4688 (Process creation) — dropbear/dbclient/plink/ssh execution with command line
- 5156 (WFP allowed connection) — new inbound flow to local port 22
PowerShell collection:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=5156} | Where-Object { $_.Message -match 'DestPort.*\b22\b|SourcePort.*\b22\b' } | Export-Csv -NoTypeInformation /opt/hunt/out/port22_flows.csvAnalysis Queries
CrowdStrike Falcon LogScale (CQL) — SSH client/tunnel command patterns (reverse-tunnel / port-forward flags):
#event_simpleName=ProcessRollup2 event_platform=Win
| FileName=/^(ssh|sshd|plink|dbclient)\.exe$/i
| CommandLine=/(-R\s|-L\s|-D\s|remote|tunnel|:22)/i
| groupBy([ComputerName, UserName, FileName, CommandLine, SHA256HashData], function=count(as=hits), limit=max)
| sort(hits, order=desc, limit=max)YARA — process-memory scan of a suspect PID for in-memory Dropbear strings (classic YARA 4.5, positional PID):
yara /opt/hunt/rules/dropbear_ssh_memory.yar <pid> >> /opt/hunt/out/dropbear_mem_hits.txtWireshark / tshark — SSH sessions to/from external hosts on 22 (identify non-standard SSH banners / Dropbear version strings):
tshark -r /opt/hunt/pcap/ot-ssh.pcap -Y "ssh.protocol contains \"dropbear\" || (tcp.port==22 && ssh)" -T fields -e frame.time -e ip.src -e ip.dst -e ssh.protocolHypothesis 4: The actor has extracted or altered a controller project file and manipulated HMI/SCADA data, observable as reads/writes of vendor project files on EWS, program download/upload on the wire, out-of-baseline changes to reusable code modules (Add-On Instructions), and displayed process values inconsistent with process state — including logic that disables alarm/shutdown functions.
MITRE ATT&CK: Impact | T1565 — Data Manipulation | The actor maliciously interacted with project files and altered data on HMI and SCADA displays.
MITRE ATT&CK: Impair Process Control | T0889 — Modify Program / T0843 — Program Download | Malicious ladder logic and Add-On Instructions replace or amend valid logic, including modules that disabled alarm and shutdown functions.
Collection Queries
CrowdStrike Falcon LogScale (CQL) — vendor project/export file writes across Rockwell (.ACD/.L5X/.L5K), Schneider (.STU/.STA/.SMBP), and Siemens (.ZAP1x/.AP1x) formats, tiered by whether the writer is a sanctioned engineering tool:
#event_simpleName=/FileWritten$/
| TargetFileName=/\.(ACD|L5X|L5K|APA|APB|STU|STA|SMBP|ZAP1[0-9]|AP1[0-9])$/i
| rename(field=ContextProcessId, as=TargetProcessId)
| join(
query={
#event_simpleName=ProcessRollup2
| table([TargetProcessId, FileName, ImageFileName, CommandLine, UserName, SHA256HashData], limit=max)
},
field=TargetProcessId, key=TargetProcessId,
include=[FileName, ImageFileName, CommandLine, UserName, SHA256HashData]
)
| case {
FileName=/^(Studio5000|RSLogix5000|LogixDesigner|ControlExpert|UnityPro|Unity|Siemens\.Automation\.Portal)\.exe$/i
| Severity := "3-MEDIUM - PLC project file written by engineering tool";
*
| Severity := "1-CRITICAL - PLC project file written by non-engineering process"
}
| groupBy([Severity, ComputerName, UserName, FileName, TargetFileName, SHA256HashData], function=count(as=hits), limit=max)
| sort(Severity, order=asc, limit=max)BPF / tcpdump — full-payload capture on EtherNet/IP and S7 to carve downloaded/uploaded logic blocks:
tcpdump -i eth1 -s 0 -w /opt/hunt/pcap/ot-logic-%Y%m%d-%H%M%S.pcap -G 3600 -C 512 'tcp port 44818 or tcp port 102'OT Data Collection: Tenable OT — GraphQL: pull Code Snapshot diffs for every Rockwell, Schneider, and Siemens controller; any code-revision or Add-On-Instruction change without a matching change ticket is a finding (Tenable catches local-only changes made at the panel that never traversed the wire).
OT Data Collection: Claroty CTD — OT-Activity events for RSLogix/Studio 5000, Control Expert, and TIA Portal program downloads and tag writes; export the flagged sessions with PCAP for logic carving.
OT Data Collection: Dragos Platform — EtherNet/IP and S7 QFDs for program up/download and Write Tag; correlate with the Notifications feed for program-modification detections; pay specific attention to changes affecting alarm/shutdown logic.
Analysis Queries
CrowdStrike Falcon LogScale (CQL) — surface only the CRITICAL tier (project file written by a non-engineering process — e.g., a script interpreter, archiver, or unknown binary):
#event_simpleName=/FileWritten$/
| TargetFileName=/\.(ACD|L5X|L5K|STU|STA|ZAP1[0-9])$/i
| rename(field=ContextProcessId, as=TargetProcessId)
| join(
query={
#event_simpleName=ProcessRollup2
| table([TargetProcessId, FileName, ImageFileName, CommandLine, UserName], limit=max)
},
field=TargetProcessId, key=TargetProcessId,
include=[FileName, ImageFileName, CommandLine, UserName]
)
| !(FileName=/^(Studio5000|RSLogix5000|LogixDesigner|ControlExpert|UnityPro|Unity|Siemens\.Automation\.Portal|explorer|OneDrive|Backup|FactoryTalk.*)\.exe$/i)
| groupBy([ComputerName, UserName, FileName, TargetFileName, CommandLine], function=count(as=hits), limit=max)
| sort(hits, order=desc, limit=max)Wireshark / tshark — reassemble a program-download byte stream to recover injected logic (Rockwell EtherNet/IP and Siemens S7):
tshark -r /opt/hunt/pcap/ot-logic.pcap -Y "cip.service==0x4d || s7comm.param.func in {0x1a,0x1b,0x1c}" -T fields -e frame.time -e ip.src -e ip.dst -e cip.service -e s7comm.param.funcYARA — scan carved project/logic files for tamper markers (reusable code-module / Add-On Instruction changes called out in the AA26-097A July 2026 update):
yara -r /opt/hunt/rules/rockwell_project_tamper.yar /opt/hunt/carve/ >> /opt/hunt/out/project_tamper_hits.txtOT network and protocol analysis — compare current controller code snapshots (Tenable OT / Claroty) against the last known-good baseline; diff reusable code modules (Add-On Instructions) specifically, per the advisory update, and confirm alarm/shutdown/interlock logic is intact; any changed rung or AOI without a change ticket is escalated.
Hypothesis 5: One or more of the organization's PLCs, HMIs, or engineering workstations is directly reachable from the public internet, observable via third-party internet-scan datasets (Shodan, Censys) that already index the exposed service — the same attack surface the actor enumerates before connecting.
MITRE ATT&CK: Initial Access | T0883 — Internet Accessible Device | The actor accesses publicly exposed, internet-reachable PLCs; external-scan datasets reveal that exposure before the adversary reaches it.
Scope note (read before running): 203.0.113.0/24, AS64500, and "Your Organization" below are RFC 5737 documentation values used for demonstration ONLY. Replace them with the organization's own registered public IP range(s), ASN(s), and org name before running — these are lookups against your OWN external attack surface, not the actor's infrastructure. Run only against address space your organization owns or is authorized to assess.
Collection Queries
Shodan (web console) — scope every query to the organization's own address space (replace the demonstration 203.0.113.0/24 / AS64500 / org placeholders with your real values); OT control ports and co-exposed remote-access services:
net:203.0.113.0/24 port:44818,2222,102,502net:203.0.113.0/24 port:5900,23,21,161org:"Your Organization" port:44818,102,502asn:AS64500 "Allen-Bradley"Shodan CLI (repeatable sweep + continuous monitoring; substitute your own netblocks for 203.0.113.0/24):
shodan search --fields ip_str,port,org,product,hostnames 'net:203.0.113.0/24 port:44818,2222,102,502'shodan search --fields ip_str,port,org,product 'net:203.0.113.0/24 port:5900,23,21,161'shodan host 203.0.113.10shodan alert create "OT-Exposure" 203.0.113.0/24
shodan alert enable <alert_id> industrial_control_systemCensys (web console / Platform) — reproduce your own exposed Rockwell/Siemens/Schneider footprint (replace the demonstration ASN 64500 / 203.0.113.0/24 with your real ASN or IP range):
host.services.protocol=EIP and host.services.eip.identity.vendor_name="Rockwell Automation/Allen-Bradley" and host.autonomous_system.asn=64500host.services.protocol=S7 and ip: 203.0.113.0/24host.services.protocol=MODBUS and ip: 203.0.113.0/24host.services.port: {44818, 2222, 102, 502} and ip: 203.0.113.0/24Censys CLI / API (censys-python; or GET https://search.censys.io/api/v2/hosts/search; substitute your own IP range):
censys search 'host.services.protocol=EIP and ip: 203.0.113.0/24' --index-type hostsAnalysis Queries
Shodan / Censys — operator-infrastructure markers (run GLOBALLY, not scoped to your space; new results indicate the actor is expanding engineering infrastructure and are a leading indicator of renewed activity):
cert.parsed.subject.common_name="DESKTOP-BOE5MUC"host.services.eip.identity.vendor_id="0x004d" and host.services.eip.identity.product_name=/DESKTOP-.+/web.endpoints.http.headers:(key="Server" and value="WIBU-SYSTEMS HTTP Server")External attack-surface analysis — cross-reference every host returned by the own-scope queries against the sanctioned OT asset inventory. Any PLC, HMI, or engineering workstation reachable from the internet is a finding requiring immediate removal from direct exposure. Specifically escalate: (1) an EtherNet/IP identity response that leaks a Windows hostname in the product_name field (vendor_id 0x004d) — that is RSLinx / FactoryTalk Linx on an internet-exposed engineering workstation, never a real PLC; (2) an exposed WIBU CodeMeter license daemon (Server: WIBU-SYSTEMS HTTP Server) — the Rockwell FactoryTalk toolchain is exposed; (3) any co-exposed VNC, Telnet, or FTP on a PLC host — direct HMI/SCADA manipulation paths.
External attack-surface analysis — cellular-modem field devices are the dominant exposure population (the majority of internet-exposed Rockwell PLCs sit on cellular-carrier ASNs). Enumerate the organization's cellular-connected remote sites (pump stations, substations, lift stations) and confirm each PLC/modem is behind a gateway with MFA rather than directly reachable. Establish continuous monitoring via Shodan Monitor and/or a scheduled Censys query so new exposure is alerted rather than discovered at the next hunt.
Threat Actor Profile
Attribution: Iran-affiliated advanced persistent threat activity assessed by the FBI, CISA, NSA, EPA, DOE, U.S. Cyber Command, and (as of the July 22, 2026 update) the Department of the Treasury as intended to cause disruptive effects within the United States, likely in response to hostilities between Iran, the United States, and Israel. The activity is the successor to the IRGC Cyber Electronic Command-affiliated actor publicly tracked as CyberAv3ngers (aka Shahid Kaveh Group; the July 22 STIX bundle formally lists the actor identities HYDROKITTEN, CYBER AVENG3RS, BAUXITE, APT Iran, and Iranian-affiliated APT under the IRGC), which compromised at least 75 Unitronics PLC/HMI devices in the November 2023 water-sector campaign.
Sophistication: Moderate but effective and consequence-focused. The current campaign is notably more sophisticated than the 2023 Unitronics operation: rather than exploiting default credentials, the actors abuse legitimate engineering software (Studio 5000 Logix Designer, EcoStruxure Control Expert, TIA Portal) to form accepted connections to exposed controllers across three major vendors — activity that closely resembles routine engineering work and evades signature-only controls. They demonstrate OT-specific knowledge (project-file structure, ladder logic, reusable code modules) and operational discipline: a single multi-homed Windows workstation running the full Rockwell toolchain in AS214036 served as the operator launch pad, and a separate single-use staging box in AS9009 was provisioned weeks ahead, activated for one operation, and abandoned. The July 22 indicator refresh added operator infrastructure across additional overseas hosting providers (185.225.17.0, 84.200.205.0, 88.80.150.0, 175.110.121.0, 141.11.164.0, 192.142.54.0, and 79.133.46.0 ranges).
Access path and TTPs: Initial access is direct exploitation of internet-exposed PLCs (T0883) from overseas leased infrastructure. Command and control uses common OT ports (T0885: 44818, 2222, 102, 502) plus Dropbear SSH over port 22 (T1219). The actors exfiltrate controller project files via the vendor software (T1041), then achieve impact by replacing or amending ladder logic and Add-On Instructions (T0889) — in at least one case disabling alarm and shutdown logic — and manipulating HMI/SCADA data (T1565). Motivation is disruption and physical consequence, not financial gain or espionage — though operational disruption and financial loss to victims have resulted.
Data Sources Required
Network: perimeter and internal firewall logs (allow/deny on 44818/2222/102/502/22), NetFlow/IPFIX at the OT/IT boundary, full-payload PCAP from a SPAN/TAP at Purdue Level 3/3.5 (bidirectional, jumbo-frame-capable), and DNS logs from OT-adjacent resolvers.
Endpoint: CrowdStrike Falcon telemetry (ProcessRollup2, NetworkConnectIP4, FileWritten-family events) from EWS, HMIs, historians, and jump hosts; Windows Security/Sysmon Event Logs (4688, 4624/4625, 5156, Sysmon 1/3/11); Linux auditd/syslog where OT gateways run Linux.
OT/ICS: OT monitoring platform data from any deployed system — Dragos (Communications Hub, QFDs, Notifications, PCAP), Claroty CTD (Communication Analysis, OT-Activity, PCAP export), Nozomi Guardian (N2QL, links/nodes/variables, STIX feed), Tenable OT (Events, Findings, Code Snapshot diffs via GraphQL), Forescout eyeInspect (Command Center alerts, ICS Patrol), and Armis Centrix (ASQ ip-connections, alerts). Controller-side: PLC code/firmware snapshots, HMI/SCADA historian and alarm logs, and engineering change-management records.
External / OSINT: internet-scan datasets — Shodan (web console, CLI, Monitor alerts) and Censys (web console/Platform, CLI, hosts search API) — for external attack-surface enumeration of the organization's own address space and detection of actor operator infrastructure. Ingest the AA26-097A STIX/JSON IOC feed directly into the SIEM/TIP.
Vendor/device: Rockwell, Schneider, and Siemens controller identity (product code, firmware revision) for CVE matching; project-file baselines (.ACD/.STU/.ZAP) for logic diffing.
Detection Signatures
SIGMA rule 1 (process_creation) — engineering software or SSH tunneling launched on a host that should not run it:
title: OT Engineering Software or SSH Tunnel on Non-EWS Host (AA26-097A)
id: 6f3d2a1b-8c47-4e59-b0a2-1d4e7c9f2a51
status: experimental
description: Rockwell, Schneider, or Siemens engineering tooling or SSH port-forwarding launched, consistent with Iran-affiliated PLC targeting.
references:
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa26-097a
author: 1898 & Co.
date: 2026-07-23
logsource:
category: process_creation
product: windows
detection:
selection_eng:
Image|endswith:
- '\Studio5000.exe'
- '\LogixDesigner.exe'
- '\ControlExpert.exe'
- '\Unity.exe'
- '\Siemens.Automation.Portal.exe'
selection_tunnel:
Image|endswith:
- '\ssh.exe'
- '\plink.exe'
- '\dbclient.exe'
CommandLine|contains:
- ' -R '
- ' -L '
- ' -D '
condition: selection_eng or selection_tunnel
falsepositives:
- Sanctioned engineering workstations during authorized maintenance windows
level: highSIGMA rule 2 (network_connection) — outbound connection to OT control ports toward an external address:
title: External-Bound Connection on OT Control Port (AA26-097A)
id: b2e8c14a-3f6d-4a7b-9c05-2e1f8d6a4b73
status: experimental
description: A Windows OT-adjacent host connects to an OT control port on a non-RFC1918 destination.
references:
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa26-097a
author: 1898 & Co.
date: 2026-07-23
logsource:
category: network_connection
product: windows
detection:
selection:
DestinationPort:
- 44818
- 2222
- 102
- 502
filter_rfc1918:
DestinationIp|cidr:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
condition: selection and not filter_rfc1918
falsepositives:
- Cloud-hosted historians or legitimate remote OT services (verify destination ownership)
level: highSIGMA rule 3 (file_event) — vendor PLC project file written by a non-engineering process:
title: PLC Project File Written by Unexpected Process (AA26-097A)
id: c9a71f2e-5b83-4d16-8e40-7a3c2b9d6e18
status: experimental
description: A Rockwell/Schneider/Siemens project or logic-export file is created by a process that is not the vendor engineering suite.
references:
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa26-097a
author: 1898 & Co.
date: 2026-07-23
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|endswith:
- '.ACD'
- '.L5X'
- '.STU'
- '.ZAP16'
filter_eng:
Image|endswith:
- '\Studio5000.exe'
- '\LogixDesigner.exe'
- '\ControlExpert.exe'
- '\Siemens.Automation.Portal.exe'
condition: selection and not filter_eng
falsepositives:
- Backup or file-sync agents copying project archives (baseline and allowlist)
level: highSnort/Suricata rule 1 — EtherNet/IP CIP write/control service inbound from outside the OT network:
alert tcp $EXTERNAL_NET any -> $OT_NET 44818 (msg:"AA26-097A ENIP CIP Write/ForwardOpen from external source"; flow:to_server,established; content:"|6f 00|"; offset:0; depth:2; content:"|4d|"; distance:0; pcre:"/\x4d|\x54|\x07/"; classtype:attempted-admin; sid:1000201; rev:1; reference:url,cisa.gov/news-events/cybersecurity-advisories/aa26-097a;)Snort/Suricata rule 2 — Siemens S7comm CPU STOP job (port 102):
alert tcp $EXTERNAL_NET any -> $OT_NET 102 (msg:"AA26-097A S7comm PLC STOP CPU"; flow:to_server,established; content:"|03 00|"; offset:0; depth:2; content:"|32 01|"; distance:0; content:"|29|"; classtype:attempted-dos; sid:1000202; rev:1; reference:url,cisa.gov/news-events/cybersecurity-advisories/aa26-097a;)Snort/Suricata rule 3 — connection to a published Iran-affiliated operator IP (July 22, 2026 IOC set):
alert ip $HOME_NET any -> [79.133.46.209,84.200.205.165,88.80.150.199,88.80.150.200,88.80.150.202,135.136.1.133,141.11.164.153,175.110.121.39,175.110.121.41,175.110.121.42,175.110.121.107,185.82.73.162,185.82.73.164,185.82.73.165,185.82.73.167,185.82.73.168,185.82.73.170,185.82.73.171,185.82.73.175,185.225.17.225,192.142.54.79] any (msg:"AA26-097A connection to Iran-affiliated APT operator IP"; classtype:trojan-activity; sid:1000203; rev:2; reference:url,cisa.gov/news-events/cybersecurity-advisories/aa26-097a;)YARA rule 1 (file/disk) — Dropbear SSH implant on disk. This rule targets a Dropbear binary staged on a Windows/Linux OT endpoint, the tool the actors deploy for port-22 remote access. The condition ORs the distinctive Dropbear banner/version strings against the ELF/PE magic so it fires on both native Linux builds and Windows-ported binaries; the multi-string threshold reduces false hits on documentation or config files that merely mention "dropbear".
rule Dropbear_SSH_Implant_Disk
{
meta:
description = "Dropbear SSH binary staged on an OT endpoint (AA26-097A)"
author = "1898 & Co."
date = "2026-07-23"
reference = "https://www.cisa.gov/news-events/cybersecurity-advisories/aa26-097a"
strings:
$banner = "SSH-2.0-dropbear" ascii
$ver = /dropbear[_-]?v?[0-9]{4}\.[0-9]{2}/ ascii
$s1 = "dropbear" ascii nocase
$s2 = "/etc/dropbear" ascii
$s3 = "dropbearkey" ascii
$elf = { 7f 45 4c 46 }
$mz = { 4d 5a }
condition:
($elf at 0 or $mz at 0) and ($banner or $ver or 2 of ($s*))
}YARA rule 2 (process memory) — Dropbear SSH in process memory. This rule targets a running Dropbear/SSH tunnel process, catching the case where the binary was deleted from disk but the implant is resident. It looks for the banner plus key-exchange and channel strings present in a live SSH server's memory; requiring the banner together with at least one protocol artifact avoids matching benign SSH clients that only transiently hold a banner string.
rule Dropbear_SSH_Process_Memory
{
meta:
description = "Dropbear SSH server resident in process memory (AA26-097A)"
author = "1898 & Co."
date = "2026-07-23"
reference = "https://www.cisa.gov/news-events/cybersecurity-advisories/aa26-097a"
strings:
$banner = "SSH-2.0-dropbear" ascii
$kex1 = "diffie-hellman-group" ascii
$kex2 = "ssh-rsa" ascii
$chan = "direct-tcpip" ascii
$auth = "publickey" ascii
condition:
$banner and 2 of ($kex1, $kex2, $chan, $auth)
}Indicators of Compromise
Network IOCs (published CISA IOCs — 21 IP addresses, July 22, 2026 STIX set):
- Original April 7 set (operator workstation AS214036 / ULTAHOST + staging box AS9009 / M247 Romania): 185.82.73.162, .164, .165, .167, .168, .170, .171, and 135.136.1.133
- July 22 additions (multiple overseas hosting providers): 79.133.46.209, 84.200.205.165, 88.80.150.199, 88.80.150.200, 88.80.150.202, 141.11.164.153, 175.110.121.39, 175.110.121.41, 175.110.121.42, 175.110.121.107, 185.82.73.175, 185.225.17.225, 192.142.54.79
- OT-port traffic on 44818, 2222 (EtherNet/IP), 102 (Siemens S7comm), 502 (Modbus), 22 (SSH/Dropbear), especially from overseas hosting providersNetwork IOCs (community-identified adjacent operator IPs — via Censys RDP-certificate pivot; NOT official CISA IOCs, same multi-homed workstation/ASN/cert family):
- IP 185.82.73.160, .161, .163, .166 (and .169 currently dark — most likely additional interface); treat the full 185.82.73.160-.171 range in AS214036 as suspectHost IOCs:
- Operator Windows workstation name DESKTOP-BOE5MUC (self-signed RDP certificate common name; RDP on non-standard TCP port 43589)
- Staging-box hostname WIN-U4IRECQ65UN (default un-sysprepped Windows Server VPS template on 135.136.1.133)
- EtherNet/IP identity response with vendor_id 0x004d and a Windows hostname in product_name = RSLinx / FactoryTalk Linx on an exposed workstation (never a real PLC)
- Exposed WIBU CodeMeter license daemon (HTTP Server header "WIBU-SYSTEMS HTTP Server") = Rockwell FactoryTalk toolchain exposed
- Dropbear SSH binary or process on an EWS, gateway, or jump host
- Vendor project file (.ACD/.L5X, .STU/.STA, .ZAP1x) created/modified by a non-engineering process
- Engineering software (Studio 5000, EcoStruxure Control Expert, TIA Portal, RSLinx) executing on a non-sanctioned-EWS hostOT/operational IOCs (behavioral, scoped to this hunt):
- EtherNet/IP Write Tag (0x4d), ForwardOpen (0x54), or Reset (0x07) from a non-EWS or external source
- S7comm program download/upload (0x1a-0x1f) or PLCStop (0x29) outside a change window; Schneider UMAS write functions from a non-EWS source
- Controller code-revision or reusable-code-module (Add-On Instruction) change with no change ticket, especially any change to alarm/shutdown/interlock logic
- PLC operating-mode change (Run/Program/Remote) or HMI/SCADA displayed-value change inconsistent with process state
- Co-exposed VNC, Telnet, or FTP on an internet-facing PLC hostIntelligence feed note: the July 22, 2026 STIX set (AA26-097A STIX XML/JSON) is the authoritative machine-readable source; ingest it directly from the CISA advisory page (cisa.gov/news-events/cybersecurity-advisories/aa26-097a) into the SIEM/TIP block list. The STIX bundle formally names the Dropbear and Secure Shell (SSH) tooling and the actor identities HYDROKITTEN / CYBER AVENG3RS / BAUXITE / APT Iran under the IRGC.
False Positive Baseline
1. Sanctioned engineering workstations running Studio 5000 / EcoStruxure Control Expert / TIA Portal / RSLinx during authorized maintenance windows — allowlist by (host, user) pair after a two-week baseline.
2. Cloud-hosted or DMZ historians and licensed remote OT services that legitimately terminate on OT ports from routable addresses — verify destination ownership before treating an "external" connection as malicious.
3. Backup, file-sync (OneDrive/vendor), or asset-management agents copying .ACD/.STU/.ZAP project archives — allowlist the specific writer process.
4. Vendor remote-support sessions (jump host / vendor VPN) that appear as new SSH or engineering flows — confirm against the ticketed support window and, where present, the brokered remote-access session log.
5. OT monitoring platform active-query traffic (Tenable OT active queries, Forescout ICS Patrol, Claroty active queries) that reads controller identity/state — read-only, scheduled, sourced from the sensor; exclude the sensor IPs.
6. Routine HMI/SCADA polling (EtherNet/IP Read Tag, S7 ReadVar, Modbus reads) at steady cadence from known HMI hosts — only write/control-class services are in scope.
7. Shodan/Censys own-scope results for assets that are intentionally and safely internet-facing (e.g., a hardened remote-access gateway) — document as risk-accepted; only unmediated PLC/HMI/EWS exposure is a finding.
Escalation Criteria
1. Any connection to or from a published Iran-affiliated IOC IP (any of the 21 in the July 22 STIX set), or a community-identified adjacent operator IP (185.82.73.160/.161/.163/.166/.169), involving an OT-adjacent asset — engage IR after vetting the address.
2. Any EtherNet/IP Write Tag / ForwardOpen / Reset, S7comm program download/upload or PLCStop, or Schneider UMAS write from a non-EWS or external source — immediate IR engagement and plant-operations notification.
3. Any vendor project file written by a non-engineering process, or any controller code-revision / Add-On-Instruction change without a matching change ticket — especially any change affecting alarm, shutdown, or interlock logic.
4. Any inbound engineering-protocol or SSH connection to a controller or EWS sourced from outside the OT network / from an internet-routable address.
5. Any Shodan/Censys own-scope result showing an unmediated PLC, HMI, or engineering workstation directly reachable from the internet — remediate exposure immediately; treat an EIP identity leaking a Windows hostname or an exposed CodeMeter daemon as high priority.
6. Any global Shodan/Censys hit on the operator markers (DESKTOP-BOE5MUC certificate family, vendor_id 0x004d with a DESKTOP-* product_name, or exposed WIBU CodeMeter tied to your ranges) — indicates actor infrastructure or a compromised exposed workstation.
7. Any YARA hit on Dropbear_SSH_Implant_Disk against an EWS, gateway, or jump host — isolate the host and preserve for forensics.
8. Any YARA hit on Dropbear_SSH_Process_Memory against a running process on an OT-adjacent host — capture the process image and network state before remediation.
9. Any PLC operating-mode change or HMI/SCADA displayed-value manipulation not attributable to a sanctioned operator action.
Hunt Completion Criteria and Reporting
The hunt is complete when: (a) all five hypotheses have been evaluated against every in-scope telemetry source with the queries above; (b) all 21 published IOC IPs and the community-identified adjacent operator range have been searched across the full retention window (back to November 2025 where available); (c) every internet-exposed OT device identified via Shodan/Censys own-scope queries has been confirmed either removed from direct exposure or explicitly risk-accepted; (d) all engineering-software executions and OT control/program-transfer services in the window have been attributed to a sanctioned host and change ticket or escalated; and (e) controller code snapshots — including reusable code modules and alarm/shutdown logic — have been diffed against a known-good baseline.
The report must document: the assets and telemetry sources in scope and any coverage gaps (e.g., NetFlow not forwarded, PCAP not retained at a given boundary, OT platform not covering a segment, cellular-modem sites without visibility); the queries run and their result counts; the external attack-surface findings (exposed hosts, with remediation status); every escalation raised and its disposition; and a mapping of findings to the AA26-097A MITRE ATT&CK techniques (T0883, T0885, T1219, T1565, T1041, plus the ICS program-modification techniques T0843/T0889). Where no adversary activity is found, the report must state the negative explicitly and note which coverage gaps limit confidence in that negative. Recommend follow-on hardening aligned to the advisory: remove PLCs from direct internet exposure behind a secure gateway, disable or secure cellular modems, set the controller mode switch to run and validate project-file integrity before returning to run mode, enforce MFA for external OT access, change default passwords, and disable unused services and default authentication keys.
Advisory IoC Reference
| IOC Type | IOC |
|---|---|
| CVE | CVE-2021-22681 | CVSS v3.1 9.8 | RSLogix 5000 v16-20 / Studio 5000 Logix Designer v21+ | Authentication bypass allowing an unauthenticated attacker to communicate with Logix controllers; Rockwell confirms it cannot be fully patched (key-protection design condition) |
| Threat Actor | CyberAv3ngers / BAUXITE / HYDROKITTEN / APT Iran (aka Shahid Kaveh Group, Storm-0784, Mr. Soul, Soldiers of Solomon, UNC5691) | Iran / IRGC-CEC affiliated | Primary TTPs: T0883 internet-accessible PLC access via engineering software, T0885 common OT ports, T1219 Dropbear SSH, T1041 project-file exfiltration, T1565 stored-data manipulation, T0889 modify program (malicious Add-On Instructions disabling alarm/shutdown logic) |
| Malware | Dropbear SSH | Remote-access tool | Lightweight SSH server deployed on victim endpoints for remote access over port 22 (formally listed in the AA26-097A STIX bundle alongside Secure Shell) |
| Network IOC | IP (CISA, Apr 7 orig): 135.136.1.133 (staging box AS9009 M247 Romania); 185.82.73.162, .164, .165, .167, .168, .170, .171 (operator workstation AS214036 ULTAHOST) |
| Network IOC | IP (CISA, Jul 22 additions): 79.133.46.209, 84.200.205.165, 88.80.150.199, 88.80.150.200, 88.80.150.202, 141.11.164.153, 175.110.121.39, 175.110.121.41, 175.110.121.42, 175.110.121.107, 185.82.73.175, 185.225.17.225, 192.142.54.79 |
| Network IOC | IP (NOT official CISA; Censys-identified adjacent operator IPs, same workstation/ASN/cert): 185.82.73.160, .161, .163, .166, .169 (.169 dark) |
| Network IOC | Ports: 44818/tcp, 2222/udp (EtherNet/IP), 102/tcp (Siemens S7comm), 502/tcp (Modbus), 22/tcp (SSH/Dropbear); operator RDP on 43589/tcp |
| File IOC | Dropbear SSH binary on an EWS/gateway/jump host; vendor project file (.ACD/.L5X, .STU/.STA, .ZAP1x) written by a non-engineering process |
| Host IOC | Operator Windows hostname DESKTOP-BOE5MUC (self-signed RDP cert CN, RDP on TCP/43589); staging-box hostname WIN-U4IRECQ65UN; EIP identity vendor_id 0x004d with a Windows hostname in product_name (RSLinx on exposed workstation); exposed WIBU CodeMeter (Server: WIBU-SYSTEMS HTTP Server) |
| Behavioral | EtherNet/IP Write Tag (0x4d) / ForwardOpen (0x54) / Reset (0x07) from a non-EWS or external source |
| Behavioral | S7comm program download-upload (0x1a-0x1f) or PLCStop (0x29), or Schneider UMAS write, outside a change window |
| Behavioral | Controller code-revision or reusable-code-module (Add-On Instruction) change with no change ticket, especially alarm/shutdown/interlock logic |
| Behavioral | Engineering software (Studio 5000 / EcoStruxure Control Expert / TIA Portal / RSLinx) executing on a non-sanctioned-EWS host |
| Behavioral | PLC operating-mode change or HMI/SCADA displayed-value manipulation inconsistent with process state; co-exposed VNC/Telnet/FTP on a PLC host |
| Behavioral | Own-scope Shodan/Censys result showing an unmediated internet-facing PLC/HMI/EWS |