CyberAv3ngers: Hunting Iranian OT Attacks on U.S. Water Systems
CyberAv3ngers is a state-linked hacking group tied to Iran's military that targets the small computers running water plants and other essential services. Since 2023, the group has gone after utilities across the United States by finding equipment that operators left reachable from the public internet, often still protected by the factory-set password. By 2026, federal agencies warned that the group was disrupting the controllers behind water, energy, and government facilities across the country.
Think of the attackers like burglars walking down a street and testing every door to find the few left unlocked. Once they reach the controls that run pumps, valves, and safety alarms, they can change settings, erase configurations, and alter what plant operators see on their screens. These systems were never built to sit on the open internet, so a small foothold can hand an outsider real control.
A successful attack can force a water system into manual operation, disrupt treatment, and shake public confidence in the safety of the water supply. Utilities then face emergency response costs, regulatory scrutiny, and the slow work of rebuilding controls that attackers erased. Small and mid-sized providers carry the greatest risk, because they often run the leanest technology teams.
Hunting Controls & Observations
CyberAv3ngers targets operational technology (OT), where the highest-value detection opportunities sit in network telemetry at the IT/OT boundary and on the Windows engineering workstations used to program controllers, rather than on the embedded devices themselves. Organizations can hunt this activity across the following telemetry sources:
- Network Controls: IT/OT boundary firewall logs, NetFlow, DNS query logs, and network security monitoring (Zeek, Microsoft Defender for IoT) for industrial protocols and command-and-control traffic
- Endpoint Controls: EDR/XDR and Sysmon (Event ID 1 process creation, Event ID 11 file creation) on engineering workstations running PLC programming software; Linux endpoint and audit telemetry on IoT/OT gateways where available
- Identity & Access Controls: Remote-access and VPN authentication logs for the OT network, plus privileged access management records for engineering workstation logons
- OT & ICS Controls: PLC mode-change and program-download events from ICS-aware monitoring, HMI audit logs, and asset-inventory alerts for internet-exposed devices
Behavioral Indicators of Attack
The following behaviors indicate potential CyberAv3ngers or IOCONTROL activity and should be prioritized during a hunt:
- Outbound encrypted messaging sessions (typically port 8883) from OT or IoT network segments to unfamiliar external hosts, often on a fixed heartbeat interval
- OT-segment devices resolving domains through public DNS-over-HTTPS endpoints such as Cloudflare (1.1.1.1) instead of internal DNS servers
- Connections to industrial protocol ports (Unitronics PCOM 20256, EtherNet/IP 44818, Rockwell 2222, Modbus 502, S7comm 102) from external or non-engineering sources
- PLC programming software (Studio 5000 Logix Designer, RSLogix 5000, VisiLogic) running from a host that is not a sanctioned engineering workstation
- Creation of Linux boot or initialization scripts and executables in system paths on embedded OT/IoT devices, especially a script that relaunches a resident process after reboot
- PLC mode changes from Run to Program or Remote, uploads of new or altered control logic, or edits to reusable Add-On Instructions outside a change window
- Configuration or logic wipes, disabled shutdown and alarm routines, and unexpected changes to values shown on operator HMI screens
- Port-scanning activity originating from an OT device against neighboring controllers and hosts
MITRE Enterprise ATT&CK Tactics and Techniques
The behaviors documented across the source reporting map to the following MITRE ATT&CK techniques, drawn from both the Enterprise and ICS matrices and ordered by attack flow:
- Initial Access (T1190 – Exploit Public-Facing Application): The threat actor exploits internet-exposed controllers, including a critical authentication-bypass flaw (CVE-2021-22681) in Rockwell Logix engineering communications, to reach devices without valid credentials.
- Initial Access (T0883 – Internet Accessible Device (ICS)): Unitronics Vision and Rockwell Logix controllers were left reachable from the public internet, giving the threat actor a direct path to the devices.
- Initial Access (T0812 – Default Credentials (ICS)): The 2023 campaign logged into Unitronics Vision Series PLCs using the well-documented default password, requiring no exploit.
- Execution (T1059.004 – Command and Scripting Interpreter: Unix Shell): IOCONTROL executes arbitrary operating-system commands on compromised Linux-based OT and IoT devices and returns the output to its operator.
- Persistence (T1037 – Boot or Logon Initialization Scripts): IOCONTROL installs a boot script (S93InitSystemd.sh) that relaunches the malware whenever the device restarts.
- Defense Evasion (T1027 – Obfuscated Files or Information): IOCONTROL ships with a modified UPX packer and stores its configuration encrypted with AES-256-CBC to frustrate static analysis.
- Discovery (T1046 – Network Service Discovery): A built-in port-scanning module lets IOCONTROL enumerate neighboring devices and services for lateral targeting.
- Collection (T1005 – Data from Local System): In 2026 the threat actor used legitimate vendor engineering software to steal PLC project files from targeted controllers.
- Command and Control (T1071 – Application Layer Protocol): IOCONTROL uses the MQTT messaging protocol for command-and-control, allowing its traffic to blend with legitimate IoT device activity.
- Command and Control (T1573 – Encrypted Channel): The malware wraps its MQTT channel in TLS on port 8883 so that command traffic is encrypted in transit.
- Command and Control (T1572 – Protocol Tunneling): IOCONTROL resolves its C2 domains through DNS-over-HTTPS (Cloudflare) to hide lookups from network monitoring tools.
- Impact (T0889 – Modify Program (ICS)): The threat actor modifies or deletes control logic and reusable Add-On Instructions on compromised Rockwell controllers, disabling shutdown and alarm functions.
- Impact (T0832 – Manipulation of View (ICS)): Operators are shown altered or defaced values on HMI screens, obscuring the true state of the physical process.
- Impact (T0809 – Data Destruction (ICS)): The 2026 activity included wiping controller configurations, forcing utilities into manual operation and lengthy rebuilds.
Controls' Observables
The detection opportunities below are organized by control category and linked to the relevant MITRE ATT&CK techniques.
Network Controls
Network telemetry at the IT/OT boundary is the highest-value data source for detecting this threat.
- Encrypted MQTT command-and-control: Outbound sessions on port 8883 (or 1883) from OT or IoT segments to external hosts, often at a regular beacon interval.
Related MITRE Techniques: T1071, T1573. Detection Difficulty: MEDIUM - DNS-over-HTTPS evasion: OT hosts contacting public DoH resolvers such as 1.1.1.1 on port 443 instead of internal DNS.
Related MITRE Techniques: T1572. Detection Difficulty: MEDIUM - Exposed or unauthorized industrial protocol traffic: Connections to PCOM (20256), EtherNet/IP (44818), Rockwell (2222), Modbus (502), or S7comm (102) from external or non-engineering sources.
Related MITRE Techniques: T1190, T0883. Detection Difficulty: LOW
Endpoint Controls
Engineering-workstation telemetry reveals project-file theft and logic tampering.
- PLC programming software on unexpected hosts: Execution of Studio 5000 Logix Designer, RSLogix 5000, or VisiLogic outside sanctioned engineering workstations.
Related MITRE Techniques: T1005, T0889. Detection Difficulty: LOW - Project file access: Creation or modification of controller project files (.ACD, .L5X, .L5K, .vlp, .rss) on non-engineering systems.
Related MITRE Techniques: T1005. Detection Difficulty: MEDIUM - Linux persistence artifacts: New boot or initialization scripts and executables in system paths on OT/IoT gateways.
Related MITRE Techniques: T1037, T1027. Detection Difficulty: HIGH
OT & ICS Controls
Control-system monitoring detects direct manipulation of physical processes.
- Unauthorized logic changes: PLC mode switches from Run to Program or Remote, program downloads, or Add-On Instruction edits outside a change window.
Related MITRE Techniques: T0889. Detection Difficulty: MEDIUM - Process and view manipulation: Disabled shutdown or alarm routines, wiped configurations, and unexpected changes to HMI display values.
Related MITRE Techniques: T0832, T0809. Detection Difficulty: MEDIUM
Identity & Access Controls
Access logs expose remote entry points into the OT environment.
- Remote access to OT: VPN or remote-tool logons into OT segments, especially via consumer-grade tools, from unusual accounts or geographies.
Related MITRE Techniques: T1133, T1078. Detection Difficulty: MEDIUM
Insights and Recommendation
Organizations compromised by CyberAv3ngers face direct manipulation of physical processes, erased or altered control logic, disabled safety alarms, and falsified operator views. In 2023 the Municipal Water Authority of Aliquippa, Pennsylvania lost control of a booster station and reverted to manual operation, and by 2026 federal agencies warned that the group was disrupting programmable controllers across U.S. water, energy, and government facilities. Separately, a coordinated cyberattack in July 2026 disrupted operational technology at more than 30 Minnesota community water systems; state and federal responders have not publicly attributed that incident to a specific group. Recovery reaches beyond IT into rebuilding controllers from backups, emergency response costs, regulatory scrutiny under drinking-water rules, and the harder-to-measure loss of public confidence in the safety of the water supply.
Security teams should remove PLCs and HMIs from direct internet exposure and place them behind a firewall or VPN (T1190, T0883), and change every vendor default password on Unitronics and similar controllers (T0812). Setting the physical mode switch to Run blocks remote logic changes on affected Rockwell controllers (T0889), which cannot be closed by a patch alone. Segment OT from IT, isolate the engineering workstations that run Studio 5000 Logix Designer, and monitor OT egress for encrypted MQTT (port 8883) and DNS-over-HTTPS beaconing (T1071, T1572). Maintain offline, tested backups of PLC logic, replace consumer-grade remote access tools with enterprise VPN, and ingest the STIX indicators from CISA advisory AA26-097A into SIEM, IDS, and firewall platforms.
Source and Credits
This summary synthesizes multiple disclosures on the CyberAv3ngers threat group and its IOCONTROL malware. The primary technical analysis is Claroty Team82's research article "Inside a New IoT/OT Cyberweapon: IOCONTROL" published on December 10, 2024.
Additional attribution, campaign timeline, and mitigation detail draw on the CISA, FBI, NSA, and EPA joint advisory "IRGC-Affiliated Cyber Actors Exploit PLCs in Multiple Sectors (AA23-335A)" and the updated advisory "Iranian-Affiliated Cyber Actors Exploit Programmable Logic Controllers Across US Critical Infrastructure (AA26-097A)" (April 7, 2026, updated July 22, 2026), the EPA news release on the "joint cybersecurity advisory to the water sector," SentinelOne's "Iran-Backed Cyber Av3ngers Escalates Campaigns Against U.S. Critical Infrastructure," Tenable's "CyberAv3ngers FAQ," and Minnesota IT Services' "statewide cybersecurity response" published July 28, 2026.
Threat Hunting IOCs & Queries
Known Indicators of Compromise
The following static indicators come from Claroty Team82's IOCONTROL analysis. Each victim generates a unique GUID that seeds the malware's MQTT identifiers and encryption, so behavioral hunting is more durable than indicator matching. Indicators are defanged as published.
- File Hash (SHA-256):
1b39f9b2b96a6586c4a11ab2fdbff8fdf16ba5a0ac7603149023d73f33b84498(IOCONTROL sample) - C2 Domains:
tylarion867mino[.]com(parent),uuokhhfsdlk[.]tylarion867mino[.]com(C2 host),ocferda[.]com(legacy) - C2 IP Address:
159[.]100[.]6[.]69(Frankfurt; MQTT 1883/8883) - DNS-over-HTTPS Resolver:
https://1.1.1.1/dns-query(Cloudflare, used for C2 domain resolution) - File Paths:
/usr/bin/iocontrol,/etc/rc3.d/S93InitSystemd.sh,/tmp/iocontrol.log,/var/run/iocontrol.pid - MQTT Topics:
{GUID}/hello,{GUID}/push,{GUID}/output - Ports of Interest: 8883/1883 (IOCONTROL MQTT), 20256 (Unitronics PCOM), 44818 & 2222 (Rockwell EtherNet/IP), 502 (Modbus), 102 (S7comm)
- Related Malware Names: OrpraCab, QueueCat (earlier tracking of IOCONTROL)
IOCONTROL MQTT Command-and-Control Over TLS
Behavior Targeted: Outbound MQTT sessions from OT or IoT segments to external hosts, the command-and-control channel used by IOCONTROL to blend in with legitimate IoT traffic.
MITRE ATT&CK: T1071 (Application Layer Protocol), T1573 (Encrypted Channel)
Expected Results: OT or IoT source addresses repeatedly reaching external destinations on port 8883 or 1883, often at a fixed interval.
False Positive Likelihood: LOW-MEDIUM
Tuning Guidance: Scope to your OT/IoT subnets and allowlist sanctioned vendor MQTT cloud endpoints; MQTT leaving an OT segment to the internet is rarely legitimate.
Splunk SPL Query
index=network sourcetype=pan:traffic earliest=-30d
(dest_port=8883 OR dest_port=1883)
| where (cidrmatch("10.50.0.0/16", src_ip) OR cidrmatch("172.20.0.0/16", src_ip)) // TODO: your OT/IoT segments
| where NOT (cidrmatch("10.0.0.0/8", dest_ip) OR cidrmatch("172.16.0.0/12", dest_ip) OR cidrmatch("192.168.0.0/16", dest_ip))
| stats count AS sessions min(_time) AS first_seen max(_time) AS last_seen values(dest_ip) AS dest_ips by src_ip, dest_port
| where sessions > 5
| convert ctime(first_seen) ctime(last_seen)
| sort - sessions
// TUNING: Replace the OT/IoT source CIDRs with your environment's segments.
// TUNING: IOCONTROL beacons on a fixed interval; pivot on regular time deltas between sessions.
// FALSE POSITIVES: LOW-MEDIUM - allowlist sanctioned vendor MQTT cloud endpoints by dest_ip.
Microsoft KQL Query (Defender/Sentinel)
// CyberAv3ngers / IOCONTROL - MQTT over TLS beaconing from OT/IoT hosts
DeviceNetworkEvents
| where Timestamp > ago(30d)
| where RemotePort in (8883, 1883)
| where RemoteIPType == "Public" // external destinations only
| summarize Sessions = count(), FirstSeen = min(Timestamp), LastSeen = max(Timestamp),
RemoteIPs = make_set(RemoteIP, 20) by DeviceName, RemotePort
| where Sessions > 5
| order by Sessions desc
// TUNING: Scope DeviceName to OT gateways and IoT hosts; MQTT egress to public IPs is suspicious.
// TUNING: Correlate with regular-interval beaconing (a fixed delta between connections).
// FALSE POSITIVES: LOW-MEDIUM - allowlist sanctioned vendor MQTT cloud endpoints.
Note: These queries were generated with AI assistance. Test thoroughly in your environment before production use.
DNS-over-HTTPS Resolver Use from OT Segments
Behavior Targeted: OT hosts resolving domains through public DNS-over-HTTPS providers, the evasion technique IOCONTROL uses to hide C2 lookups from network monitoring.
MITRE ATT&CK: T1572 (Protocol Tunneling), T1071.004 (Application Layer Protocol: DNS)
Expected Results: Devices on OT segments connecting to public DoH resolver addresses on port 443, where those hosts should only use internal DNS.
False Positive Likelihood: LOW
Tuning Guidance: Restrict to OT source ranges; on IT endpoints, browsers legitimately use DoH, so this hunt is most reliable inside the OT boundary.
Splunk SPL Query
index=network sourcetype=pan:traffic earliest=-30d
dest_port=443
(dest_ip="1.1.1.1" OR dest_ip="1.0.0.1" OR dest_ip="8.8.8.8" OR dest_ip="8.8.4.4" OR dest_ip="9.9.9.9")
| where (cidrmatch("10.50.0.0/16", src_ip) OR cidrmatch("172.20.0.0/16", src_ip)) // TODO: your OT/IoT segments
| stats count min(_time) AS first_seen max(_time) AS last_seen by src_ip, dest_ip
| convert ctime(first_seen) ctime(last_seen)
| sort - count
// TUNING: Replace the OT/IoT source CIDRs with your environment's segments.
// TUNING: Add other DoH provider IPs used in your region to the destination list.
// FALSE POSITIVES: LOW - OT devices should resolve names through internal DNS only.
Microsoft KQL Query (Defender/Sentinel)
// CyberAv3ngers / IOCONTROL - DNS-over-HTTPS from OT/IoT hosts
DeviceNetworkEvents
| where Timestamp > ago(30d)
| where RemotePort == 443
| where RemoteUrl has "dns-query"
or RemoteIP in ("1.1.1.1", "1.0.0.1", "8.8.8.8", "8.8.4.4", "9.9.9.9")
| summarize Count = count(), FirstSeen = min(Timestamp), LastSeen = max(Timestamp),
Urls = make_set(RemoteUrl, 10) by DeviceName, RemoteIP
| order by Count desc
// TUNING: Scope DeviceName to OT gateways and IoT hosts; internal DNS should be the only resolver.
// TUNING: Extend the resolver list with additional DoH providers seen in your environment.
// FALSE POSITIVES: LOW on OT segments; IT browsers use DoH legitimately.
Note: These queries were generated with AI assistance. Test thoroughly in your environment before production use.
Unauthorized Industrial Protocol Connections to Controllers
Behavior Targeted: Connections to PLC protocol ports from external or non-engineering sources, indicating an internet-exposed controller or unauthorized programming consistent with CVE-2021-22681 abuse.
MITRE ATT&CK: T1190 (Exploit Public-Facing Application), T0883 (Internet Accessible Device)
Expected Results: Sources outside the engineering workstation allowlist, or external addresses, reaching Unitronics PCOM (20256), EtherNet/IP (44818), Rockwell (2222), Modbus (502), or S7comm (102).
False Positive Likelihood: LOW
Tuning Guidance: Maintain an allowlist of sanctioned engineering workstations and HMIs; any other source reaching these ports is high priority.
Splunk SPL Query
index=network sourcetype=pan:traffic earliest=-7d action=allowed
(dest_port=20256 OR dest_port=44818 OR dest_port=2222 OR dest_port=502 OR dest_port=102)
| eval proto=case(dest_port=="20256","Unitronics PCOM", dest_port=="44818","EtherNet/IP",
dest_port=="2222","Rockwell", dest_port=="502","Modbus", dest_port=="102","S7comm")
| where NOT (cidrmatch("10.20.0.0/16", src_ip)) // TODO: engineering workstation / HMI ranges
| stats count dc(src_ip) AS distinct_sources values(src_ip) AS sources min(_time) AS first_seen max(_time) AS last_seen
by dest_ip, dest_port, proto
| convert ctime(first_seen) ctime(last_seen)
| sort - count
// TUNING: Replace the allowlisted CIDR with your sanctioned engineering/HMI ranges.
// TUNING: Flag any external (non-RFC1918) src_ip separately as an internet-exposure alert.
// FALSE POSITIVES: LOW - PLC protocol traffic from unexpected sources warrants investigation.
Microsoft KQL Query (Defender/Sentinel)
// CyberAv3ngers - connections to industrial protocol ports from unexpected hosts
DeviceNetworkEvents
| where Timestamp > ago(7d)
| where RemotePort in (20256, 44818, 2222, 502, 102)
| extend Proto = case(RemotePort == 20256, "Unitronics PCOM", RemotePort == 44818, "EtherNet/IP",
RemotePort == 2222, "Rockwell", RemotePort == 502, "Modbus", "S7comm")
| where DeviceName !in~ ("ENG-WKS-01", "ENG-WKS-02") // TODO: sanctioned engineering workstations
| summarize Count = count(), Targets = make_set(RemoteIP, 20), FirstSeen = min(Timestamp), LastSeen = max(Timestamp)
by DeviceName, RemotePort, Proto
| order by Count desc
// TUNING: Replace the engineering-workstation allowlist with your sanctioned hosts.
// TUNING: For internet-exposure visibility, pair this with your OT boundary firewall logs.
// FALSE POSITIVES: LOW - industrial protocol traffic from non-engineering hosts is unusual.
Note: These queries were generated with AI assistance. Test thoroughly in your environment before production use.
PLC Programming Software on Unexpected Hosts
Behavior Targeted: Execution of controller programming software outside sanctioned engineering workstations, consistent with project-file theft and control-logic tampering.
MITRE ATT&CK: T1005 (Data from Local System), T0889 (Modify Program)
Expected Results: Studio 5000 Logix Designer, RSLogix 5000, or VisiLogic launching on hosts that are not part of the engineering-workstation baseline.
False Positive Likelihood: LOW
Tuning Guidance: Allowlist sanctioned engineering workstations; pair with file-creation events for project file extensions to catch logic export or theft.
Splunk SPL Query
index=windows sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
earliest=-30d
(Image="*\\LogixDesigner.exe" OR Image="*\\RSLogix 5000*" OR Image="*\\Studio 5000*"
OR Image="*\\VisiLogic*" OR Image="*\\RSLinx*")
| stats count min(_time) AS first_seen max(_time) AS last_seen values(Image) AS images values(User) AS users
by Computer
| convert ctime(first_seen) ctime(last_seen)
| sort - last_seen
// TUNING: Allowlist sanctioned engineering workstations by Computer; any other host is high priority.
// TUNING: Add Sysmon EventCode=11 for creation of *.ACD, *.L5X, *.L5K, *.vlp, *.rss project files.
// FALSE POSITIVES: LOW - PLC programming software rarely runs outside engineering hosts.
Microsoft KQL Query (Defender/Sentinel)
// CyberAv3ngers - PLC engineering software on unexpected hosts (project theft / logic tampering)
DeviceProcessEvents
| where Timestamp > ago(30d)
| where FileName in~ ("LogixDesigner.exe", "RSLogix5000.exe", "VisiLogic.exe", "RSLinx.exe")
or ProcessCommandLine has_any ("Studio 5000", "RSLogix 5000", "VisiLogic")
| summarize Count = count(), FirstSeen = min(Timestamp), LastSeen = max(Timestamp),
Users = make_set(AccountName, 10), Cmds = make_set(ProcessCommandLine, 5) by DeviceName, FileName
| order by LastSeen desc
// TUNING: Maintain an allowlist of sanctioned engineering workstations (DeviceName); alert on all others.
// TUNING: Pair with DeviceFileEvents for *.ACD, *.L5X, *.L5K, *.vlp, *.rss project file access.
// FALSE POSITIVES: LOW - this software is specific to OT engineering staff.
Note: These queries were generated with AI assistance. Test thoroughly in your environment before production use.
