Threat Summary
A multi-agency U.S. government advisory has been updated to warn of ongoing, active exploitation of programmable logic controllers (PLCs) across American critical infrastructure. The campaign, attributed to Cyber Av3ngers — an intrusion set assessed to be linked to the IRGC's Cyber-Electronic Command (IRGC-CEC) — is not opportunistic spray-and-pray scanning. This is a deliberate OT-focused operation with a repeatable intrusion methodology:
- Reconnaissance — Mass scanning of internet-facing industrial control systems, with particular interest in Unitronics Vision-series PLCs and exposed HMIs common in water/wastewater and small energy operators.
- Initial Access — The adversary connects using legitimate engineering software with valid credentials (default passwords like
1111, stolen credentials, or weak/no authentication), making their sessions indistinguishable from authorized maintenance technicians at the network layer. - Execution & Manipulation — Once inside, attackers alter controller logic, manipulate operator HMI screens, and in observed intrusions have displayed propaganda messaging and defaced operator interfaces.
- Payload Deployment — The campaign has been tied to the IOCONTROL malware family (a modular backdoor observed on Linux-based and IoT/OT edge devices) and the MALPDB toolkit/loader family, both enabling persistent remote access to compromised OT environments.
Objective: Pre-positioning and disruption. Targeting of water facilities and energy-sector control systems is consistent with strategic signaling and latent destructive capability rather than financially motivated extortion. The actors' ability to modify ladder logic and operator displays demonstrates hands-on-keyboard OT expertise.
The convergence of IT-valid credentials, OT-native tooling, and nation-state attribution makes this campaign a top-tier priority for any organization operating ICS/OT environments with any internet-reachable surface.
Threat Actor / Malware Profile
Cyber Av3ngers (IRGC-CEC linked)
- Mandate: Ideologically motivated disruption of U.S. and allied critical infrastructure, publicly claimed under the Cyber Av3ngers persona for psychological impact.
- Access method: Internet-exposed PLCs/HMIs with default or harvested credentials; connections made through vendor engineering suites (e.g., Unitronics VisiLogic/Remote Operator) so traffic resembles legitimate maintenance.
- Operator behavior: PLC logic download/upload, HMI screen manipulation, defacement messaging, disabling of remote monitoring.
IOCONTROL
- Distribution: Deployed post-compromise onto OT-adjacent Linux/embedded hosts, gateways, and exposed control devices.
- Payload behavior: Modular backdoor capable of command execution, file staging, and lateral tasking from operator-controlled C2. Modules retrieved on-demand to limit static footprint.
- C2 communication: Outbound connections to adversary-controlled domains (see IOCs:
ocferda.com,tylarion867mino.com); beaconing observed over HTTP/HTTPS with operator-defined configuration blobs. - Persistence: Cron entries, systemd service unit installation, and rc.local modification on embedded/Linux hosts; on compromised PLC-adjacent systems, persistence rides the legitimate engineering channel.
- Anti-analysis: Encrypted/packed modules, DGA-adjacent and dynamic DNS infrastructure, and low-and-slow beaconing that blends into legitimate OT telemetry noise.
MALPDB
- Role: Loader/toolkit observed alongside the campaign, used for staging payloads and extracting operator-relevant data from engineering workstations.
- Behavior: Drops secondary binaries, harvests configuration and credential material, and establishes secondary persistence via scheduled tasks and service registration.
IOC Analysis
The pulse indicators fall into two operational classes:
| Indicator Type | Values | Operationalization |
|---|---|---|
| FileHash-SHA1 | 95bd07b4400095acdafce05888da27228d7d07ca, 366e435a1ea0f597deb6ebe7c0c5acdb6e8b33eb | Push into EDR blocklists (MDE, CrowdStrike, SentinelOne), proxy/MTA hash reputation, and retro-hunt across file inventory. Note duplicates in the feed — deduplicate before ingestion. |
| Domain | ocferda.com, tylarion867mino.com | Sinkhole/block at DNS resolvers and egress proxies. Pivot on passive DNS (whois history, certificate transparency) to enumerate sibling C2 infrastructure — Cyber Av3ngers infrastructure rotates frequently, so domain pivots matter more than the static indicators. |
Tooling guidance:
- Zeek/Suricata + passive DNS for retro-lookup of resolution events in OT DMZs.
- VirusTotal/MalwareBazaar to enrich the SHA1 hashes and pull correlated samples.
- NetworkMiner or Wireshark on span ports to detect non-engineering hosts initiating PLC protocol traffic (Modbus/TCP 502, Unitronics PCOM 20256/TCP, S7comm 102/TCP).
- Because the actors use valid credentials, IOC blocking alone is insufficient — behavioral detection on engineering-software sessions from anomalous sources is mandatory.
Detection Engineering
---
title: Outbound Connection to IOCONTROL C2 Domains
id: 8f1c2a44-9b3e-4c7a-b5d1-1a2b3c4d5e6f
status: experimental
description: Detects DNS resolution or outbound connections to known IOCONTROL/Cyber Av3ngers C2 infrastructure observed in PLC exploitation campaigns against U.S. critical infrastructure.
author: Security Arsenal Threat Intelligence
logsource:
category: dns
product: zeek
service: dns
detection:
selection:
query|contains:
- 'ocferda.com'
- 'tylarion867mino.com'
condition: selection
falsepositives:
- Unlikely — these domains have no legitimate business use
level: critical
tags:
- attack.command_and_control
- attack.t1071
date: 2026/08/23
---
title: Non-Engineering Host Initiating PLC Protocol Communication
id: 4d5e6f70-1a2b-4c3d-8e9f-0a1b2c3d4e5f
status: experimental
description: Detects Modbus, S7comm, or Unitronics PCOM protocol connections originating from hosts outside the approved engineering workstation segment — consistent with Cyber Av3ngers PLC access methodology.
author: Security Arsenal Threat Intelligence
logsource:
category: network_connection
detection:
selection_ports:
DestinationPort:
- 502
- 102
- 20256
filter_engineering_subnet:
SourceIp|cidr:
- '10.50.0.0/24'
condition: selection_ports and not filter_engineering_subnet
falsepositives:
- Vendor remote support sessions — validate against change tickets and maintenance windows
level: high
tags:
- attack.initial_access
- attack.t1190
- attack.t0813
date: 2026/08/23
---
title: Suspicious Persistence via Cron or Systemd on OT-Adjacent Linux Hosts
id: 7a8b9c0d-2e3f-4a5b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects creation or modification of cron jobs, systemd units, or rc.local on Linux hosts — a persistence mechanism used by the IOCONTROL backdoor deployed in OT environments.
author: Security Arsenal Threat Intelligence
logsource:
product: linux
category: file_event
detection:
selection:
TargetFilename|contains:
- '/etc/cron.d/'
- '/var/spool/cron/'
- '/etc/systemd/system/'
- '/etc/rc.local'
condition: selection
falsepositives:
- Legitimate package installation and configuration management — correlate with approved deployments
level: high
tags:
- attack.persistence
- attack.t1053.003
- attack.t1543.002
date: 2026/08/23
// Hunt: IOCONTROL C2 communication + anomalous connections to OT/PLC ports
let suspiciousDomains = dynamic(["ocferda.com", "tylarion867mino.com"]);
union isfuzzy=true
(DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where RemoteUrl has_any (suspiciousDomains)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort, ActionType),
(DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where RemotePort in (502, 102, 20256)
| where InitiatingProcessFileName !in~ ("VisiLogic.exe", "Unitronics.RemoteOperator.exe", "TIA.exe")
| summarize ConnectionCount = count(), DistinctTargets = dcount(RemoteIP), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated)
by DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemotePort
| order by FirstSeen asc),
(DeviceFileEvents
| where TimeGenerated > ago(14d)
| where SHA1 in ("95bd07b4400095acdafce05888da27228d7d07ca", "366e435a1ea0f597deb6ebe7c0c5acdb6e8b33eb")
| project TimeGenerated, DeviceName, FileName, FolderPath, SHA1, InitiatingProcessFileName)
# Security Arsenal — Cyber Av3ngers / IOCONTROL / MALPDB Host & Network Hunt
# Run elevated on OT-adjacent Windows engineering workstations and jump hosts
$ErrorActionPreference = 'SilentlyContinue'
$report = @()
Write-Host "[1/5] Checking for known malicious file hashes..." -ForegroundColor Cyan
$badHashes = @('95bd07b4400095acdafce05888da27228d7d07ca','366e435a1ea0f597deb6ebe7c0c5acdb6e8b33eb')
Get-ChildItem -Path 'C:\Program Files','C:\Program Files (x86)','C:\ProgramData','C:\Users' -Recurse -File -ErrorAction SilentlyContinue |
Where-Object { $badHashes -contains (Get-FileHash $_.FullName -Algorithm SHA1 -ErrorAction SilentlyContinue).Hash } |
ForEach-Object { $report += [PSCustomObject]@{Check='MaliciousHash'; Detail=$_.FullName} }
Write-Host "[2/5] Checking DNS cache and recent connections to C2 domains..." -ForegroundColor Cyan
$c2 = @('ocferda.com','tylarion867mino.com')
Get-DnsClientCache | Where-Object { $e = $_; $c2 | Where-Object { $e.Entry -like "*$_*" } } |
ForEach-Object { $report += [PSCustomObject]@{Check='DNSCache-C2'; Detail="$($_.Entry) -> $($_.Data)"} }
Get-NetTCPConnection -State Established | Where-Object {
($_.RemotePort -in 502,102,20256) -or
($_.OwningProcess -and ($c2 | Where-Object { (Resolve-DnsName $_.RemoteAddress -ErrorAction SilentlyContinue).NameHost -like "*$_*" }))
} | ForEach-Object { $report += [PSCustomObject]@{Check='SuspiciousNetConn'; Detail="PID $($_.OwningProcess) -> $($_.RemoteAddress):$($_.RemotePort)"} }
Write-Host "[3/5] Auditing scheduled tasks for MALPDB-style persistence..." -ForegroundColor Cyan
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'temp|appdata|programdata' -and $_.State -ne 'Disabled' } |
ForEach-Object { $report += [PSCustomObject]@{Check='SuspiciousTask'; Detail="$($_.TaskName) :: $($_.Actions.Execute)"} }
Write-Host "[4/5] Auditing Run keys and services..." -ForegroundColor Cyan
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' | ForEach-Object {
Get-ItemProperty $_ | ForEach-Object { $_.PSObject.Properties } | Where-Object { $_.Value -match 'temp|appdata' } |
ForEach-Object { $report += [PSCustomObject]@{Check='RunKey'; Detail="$($_.Name) = $($_.Value)"} }
}
Write-Host "[5/5] Flagging logons from unexpected sources (valid-credential abuse)..." -ForegroundColor Cyan
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; LogonType=10} -MaxEvents 500 |
Where-Object { $_.Message -notmatch '10\.50\.0\.' } |
ForEach-Object { $report += [PSCustomObject]@{Check='AnomalousRDP'; Detail=$_.TimeCreated} }
$report | Format-Table -AutoSize
$report | Export-Csv -Path ".\CyberAv3ngers_Hunt_$(Get-Date -Format 'yyyyMMdd_HHmm').csv" -NoTypeInformation
Write-Host "Hunt complete. $($report.Count) findings." -ForegroundColor Yellow
Response Priorities
Immediate (0–4 hours)
- Block
ocferda.comandtylarion867mino.comat DNS, proxy, and firewall layers; push both SHA1 hashes to EDR blocklists. - Enumerate all internet-exposed PLCs, HMIs, and OT gateways — query Shodan/Censys internally and externally for your IP ranges on ports 502, 102, 20256, 44818, 20000.
- Change default PLC credentials immediately (Unitronics default
1111and similar); where remote engineering access is required, place it behind a VPN with MFA. - Run the hunt script and KQL queries across OT-adjacent Windows and Linux hosts; review DNS/passive DNS history for the C2 domains over the last 90 days.
24 Hours
- Force credential rotation for all accounts with access to engineering workstations, jump hosts, and remote maintenance channels — the adversary operates with valid credentials, so assume compromise of any shared/service credential touching OT.
- Audit RDP/VNC/engineering-software session logs against maintenance tickets; any session without a corresponding change record is an incident.
- Verify integrity of PLC logic: compare running logic and HMI projects against known-good backups for any controller that was internet-reachable.
1 Week
- Remove all direct internet exposure of ICS assets. Route engineering access through a hardened jump host with session recording and just-in-time credential issuance.
- Deploy OT-aware network monitoring (Zeek with ICS protocol analyzers, or a commercial OT NDR) on control-zone span ports to baseline PLC communication.
- Implement network segmentation enforcing one-way engineering flows; alert on any PLC-protocol session originating outside the approved engineering segment (Sigma rule #2 above).
- Establish a PLC logic integrity baseline program — periodic automated comparison of controller logic against signed gold images.
Related Resources
Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.