Back to Intelligence

Cyber Av3ngers IOCONTROL + MALPDB Campaign: Nation-State PLC Exploitation Against U.S. Water & Energy Infrastructure — OTX Detection Pack

SA
Security Arsenal Team
August 23, 2026
8 min read

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:

  1. 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.
  2. 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.
  3. Execution & Manipulation — Once inside, attackers alter controller logic, manipulate operator HMI screens, and in observed intrusions have displayed propaganda messaging and defaced operator interfaces.
  4. 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 TypeValuesOperationalization
FileHash-SHA195bd07b4400095acdafce05888da27228d7d07ca, 366e435a1ea0f597deb6ebe7c0c5acdb6e8b33ebPush into EDR blocklists (MDE, CrowdStrike, SentinelOne), proxy/MTA hash reputation, and retro-hunt across file inventory. Note duplicates in the feed — deduplicate before ingestion.
Domainocferda.com, tylarion867mino.comSinkhole/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

YAML
---
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
KQL — Microsoft Sentinel / Defender
// 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)
PowerShell
# 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.com and tylarion867mino.com at 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 1111 and 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.