MuddyWater — Iranian MOIS Espionage APT

Iran's Ministry of Intelligence & Security cyber-espionage group. 2026 campaigns deliver the Rust implant RustyWater and lean on a custom PowerShell-C2 lineage (POWERSTATS → MuddyC3 → PhonyC2 → MuddyC2Go → DarkBeatC2) plus heavily-abused RMM tools (Atera, ScreenConnect, SimpleHelp, N-able). Defensive hunt & harden pack — no offensive code.
Threat
MuddyWater (Mango Sandstorm · TA450 · Seedworm · G0069)
Severity
NATION-STATE · ESPIONAGE
Type
State APT · PowerShell C2 · RMM abuse
2026 implant
RustyWater (Rust RAT) · MuddyC2Go
Targets
Israel/GCC gov, military, finance, telecom, maritime
Version
v0.4 · 2026-06-12
Author
HuntPack
01

Executive Summary

MuddyWater (a.k.a. Mango Sandstorm, TA450, Seedworm, Earth Vetala, MERCURY, Static Kitten, G0069) is a cyber-espionage group attributed to Iran's Ministry of Intelligence and Security (MOIS), active since 2017. In early 2026, amid Middle-East tensions, the group escalated against Israeli government, military, financial, telecom, and maritime targets (and GCC critical infrastructure) with a new Rust-based implant, RustyWater, built for stealth and persistence.

MuddyWater's defining tradecraft is a custom PowerShell command-and-control lineage that it continually rebuilds — POWERSTATS → MuddyC3 → PhonyC2 → MuddyC2Go (the current Go-based framework that side-loads and runs an embedded PowerShell C2 agent) → DarkBeatC2. It pairs this with aggressive abuse of legitimate RMM tools (Atera, ScreenConnect, SimpleHelp, N-able) for persistence and remote control, plus spearphishing, LOLBins, and exploitation of internet-facing apps. Because the RMM and PowerShell are legitimate, behavior — not signatures — is the detection target.

Defender priority: The two highest-value, lowest-noise signals are Q1 (an RMM agent — Atera/ScreenConnect/SimpleHelp/N-able — installed/running on a host with no IT-support reason) and Q2/Q3 (MuddyC2Go's Go-loader → embedded-PowerShell-C2 pattern). Treat any hit as a likely nation-state intrusion and escalate to IR.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry
1 · Vendor researchDeep Instinct — MuddyC2GoGo-based C2 framework; embedded PowerShell agent; Israel targetingyes
1 · News of recordCSO Online / Rescana — RustyWater2026 Rust implant; stealth/persistence; Israeli gov & infra targetingyes
1 · Vendor researchPicus / eSentire — Iranian threat actors / MuddyWater exposedC2 lineage (POWERSTATS→MuddyC3→PhonyC2→MuddyC2Go→DarkBeatC2); RMM abuse list; LOLBinsyes
2 · ReferenceMITRE ATT&CK G0069 · Horizon3 Iranian APT reportTechnique mapping, aliases, RMM & PowerShell TTPsyes

Decisions: behavior-first (custom C2 + RMM rotate, but the patterns persist); anchor on RMM-on-non-IT-host + the MuddyC2Go Go-loader→PowerShell-C2 chain + RustyWater; geopolitically-scoped (Israel/GCC) so relevant orgs should run this at elevated priority.

03

Hunt Brief & Attack Chain

Working hypothesis: MuddyWater gains access via spearphishing or an exploited internet-facing app, installs an RMM agent for resilient remote control, runs MuddyC2Go's embedded PowerShell C2 and/or the RustyWater implant, and conducts espionage with LOLBins.

StepBehaviorTelemetryHunt Angle
1 · Initial accessSpearphishing (archive/installer lure) or exploited edge appProcessRollup2; mail/proxyQ5; N1
2 · RMM footholdAtera/ScreenConnect/SimpleHelp/N-able agent installed for remote controlProcessRollup2; ServiceInstalledQ1; N2
3 · C2MuddyC2Go Go-loader runs an embedded PowerShell C2 agentProcessRollup2; NetworkConnectIP4Q2 / Q3
4 · ImplantRustyWater (Rust RAT) deployed for persistenceProcessRollup2; file writeQ4
5 · Recon / collectionLOLBins; AD discovery; data stagingProcessRollup2Q6
6 · PersistenceScheduled task / service / Run key for C2/RMMtask/service/registryN3

Affected surface & telemetry

SurfaceRequired TelemetryPriorityGap Risk
Windows endpoints / serversProcess lineage + command line (ProcessRollup2)CriticalLow — standard sensor
RMM agentsProcess/service install; software inventoryHighLow — reliable
PowerShell C2Script-block logging (4104); command line; egressHighMedium — enable 4104
Edge / mailMail gateway; appliance/VPN logsMediumMedium — initial access
04

Consolidated IOC Table

MuddyWater rebuilds its infrastructure constantly — atomic C2 IPs/domains are perishable. Behavior (RMM-on-non-IT-host + the C2 chain + RustyWater) is the durable signal. Copy-ready blocks in §9.
TypeValueConfActionContext
BehaviorRMM agent (Atera/ScreenConnect/SimpleHelp/N-able) on a non-IT hosthighdetectMuddyWater foothold — flagship
ToolingMuddyC2Go · PhonyC2 · DarkBeatC2 · POWERSTATS · MuddyC3highhuntCustom PowerShell-C2 lineage
ImplantRustyWater (Rust RAT, 2026)mediumhuntStealthy persistence implant
BehaviorGo binary side-loads + runs an embedded PowerShell C2 agenthighdetectMuddyC2Go execution pattern
Behaviorhidden/encoded PowerShell beaconing to external hostmediumhuntPOWERSTATS/MuddyC2Go agent
05

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1566.001 / T1190 — Spearphishing / exploit public appArchive/installer lure; edge exploitationQ5; N1
Command & ControlT1219 — Remote Access Software (RMM)Atera/ScreenConnect/SimpleHelp/N-able abuseQ1; N2
Execution / C2T1059.001 — PowerShell (MuddyC2Go / POWERSTATS)Go-loader → embedded PowerShell C2 agentQ2, Q3
Defense EvasionT1027 / T1620 — Obfuscation / in-memory loadEncoded/hidden PowerShell; Rust implantQ3, Q4
DiscoveryT1087 / T1082 / T1018 — Account / system / networkLOLBin reconnaissanceQ6
PersistenceT1053.005 / T1543.003 — Scheduled task / serviceC2/RMM auto-startN3
06

Native Audit-Log Hunts

HuntSourceLogicResponse
N1 · Spearphishing deliveryMail gateway / EID 4688Archive/installer attachment → script/installer execution preceding RMM/C2Sweep host; quarantine sender
N2 · Unsanctioned RMMSoftware inventory / service installAtera/ScreenConnect/SimpleHelp/N-able present on a host with no IT-support justificationInvestigate; uninstall; treat as intrusion
N3 · C2 persistenceTask Scheduler / Services / Run keysAuto-start entries running PowerShell or an unsigned Go binary that beaconsRemove; isolate
N4 · PowerShell C2EID 4104 (Script Block Logging)Obfuscated blocks with web beaconing / download-and-exec (POWERSTATS/MuddyC2Go)Extract C2; block; investigate fleet
07

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Field names validated against the Falcon event reference; process hunts include SyntheticProcessRollup2. Env edit: if any RMM tool is sanctioned, allow-list its managed deploy + the IT-support host group in Q1.
Q1 · RMM agent on a non-IT host (MuddyWater foothold)
CONF HIGHFP MEDCOST LOW

Looks for: RMM agents MuddyWater abuses, on endpoints outside the sanctioned support fleet. Accomplishes: the highest-value foothold signal. FP: sanctioned RMM — allow-list its deploy + IT host group.

// HUNT: MuddyWater RMM abuse (RMM agent on a non-IT host)
// MITRE: T1219 | CONF: high  FP: medium  COST: low
// TUNING: allow-list any sanctioned RMM + the IT-support host group
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(atera|AteraAgent|ScreenConnect|Connectwisecontrol|SimpleHelp|remote_access|Windows-?Agent|BASupSrvc|syncro|N-?able|takecontrol)[^\\]*\.exe$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, ParentBaseFileName], limit=200)
Q2 · Go binary side-loading an embedded PowerShell C2 (MuddyC2Go)
CONF HIGHFP LOW-MEDCOST LOW

Looks for: a binary from a user-writable path spawning powershell.exe with download/exec or hidden-window flags. Accomplishes: the MuddyC2Go loader→PowerShell-C2 pattern. FP: some installers — verify the path + command.

// HUNT: MuddyC2Go loader spawning an embedded PowerShell C2 agent
// MITRE: T1059.001, T1027 | CONF: high  FP: low-med  COST: low
// TUNING: exclude sanctioned installers; focus on user-path parents + hidden/iex commands
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^powershell\.exe$/i
| ParentImageFileName=/\\(ProgramData|Users\\[^\\]+\\AppData|Temp)\\.+\.exe$/i
| CommandLine=/(-w\s+hidden|-windowstyle\s+hidden|-nop|-ep\s+bypass|iex|FromBase64String|DownloadString|Invoke-WebRequest)/i
| table([@timestamp, ComputerName, UserName, ParentImageFileName, CommandLine], limit=200)
Q3 · Hidden/encoded PowerShell beaconing externally
CONF MEDFP MEDCOST MED

Looks for: powershell.exe making repeated outbound connections to an external host. Accomplishes: POWERSTATS/MuddyC2Go agent C2. FP: admin scripts — scope to external, correlate with Q2/4104.

// HUNT: PowerShell C2 beacon (POWERSTATS / MuddyC2Go agent)
// MITRE: T1059.001, T1071.001 | CONF: medium  FP: medium  COST: medium
// TUNING: exclude internal/admin endpoints; correlate to Q2 + EID 4104
#event_simpleName=NetworkConnectIP4
| ContextBaseFileName=/^powershell\.exe$/i
| RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|169\.254\.|127\.)/
| table([@timestamp, ComputerName, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Q4 · RustyWater Rust implant indicators
CONF MEDFP LOW-MEDCOST LOW

Looks for: a freshly-written executable in a user path that beacons, consistent with the RustyWater implant. Accomplishes: catches the 2026 implant. FP: correlate write→exec→network; verify with vendor hashes when available.

// HUNT: RustyWater implant (user-path exe write -> exec -> beacon)
// MITRE: T1105, T1071.001 | CONF: medium  FP: low-med  COST: low
// TUNING: add vendor RustyWater hashes/paths as published; correlate to Q1/Q2 on same aid
#event_simpleName=/NewExecutableWritten|PeFileWritten/
| TargetFileName=/\\(ProgramData|Users\\[^\\]+\\AppData|Temp)\\.+\.(exe|dll)$/i
| table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData], limit=200)
Q5 · Spearphishing → script/installer execution lineage
CONF MEDFP MEDCOST LOW

Looks for: Office/archive apps spawning script hosts / installers (MuddyWater lure chain). FP: some legit macros/installers — correlate with a following RMM/C2 hit.

// HUNT: MuddyWater spearphishing execution lineage
// MITRE: T1566.001, T1204.002 | CONF: medium  FP: medium  COST: low
// TUNING: correlate to a following Q1/Q2 hit; exclude sanctioned macro/installer flows
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(winword|excel|powerpnt|outlook|WinRAR|Rar|7zFM)\.exe$/i
| FileName=/^(powershell|pwsh|mshta|wscript|cscript|cmd|msiexec)\.exe$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Q6 · LOLBin reconnaissance burst
CONF MEDFP MEDCOST LOW

Looks for: a burst of built-in discovery commands on a host with a recent RMM/C2 hit. Accomplishes: the espionage recon stage. FP: admin scripts — correlate with Q1/Q2/Q3.

// HUNT: MuddyWater LOLBin reconnaissance
// MITRE: T1087, T1082, T1018 | CONF: medium  FP: medium  COST: low
// TUNING: scope to hosts with a recent Q1/Q2/Q3 hit; allow-list admin AIDs
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(whoami|nltest|net|net1|systeminfo|ipconfig|tasklist|quser|qwinsta|arp|route|netstat|dsquery)\.exe$/i
| groupBy([aid, ComputerName, UserName], function=[count(), collect([FileName, CommandLine], limit=20)])
| _count >= 5
| sort(_count, order=desc)
08

CrowdStrike Custom IOA Recommendations

IOA NameField PatternsBenign ExclusionsDeployment Path
MuddyWater — unsanctioned RMM agentImage matches abused RMM agents (Atera/ScreenConnect/SimpleHelp/N-able) outside the sanctioned host groupSanctioned RMM + IT-support host groupEndpoint Security → Custom IOA → Process Creation
MuddyWater — user-path binary spawns hidden PowerShell C2Parent *\ProgramData\*/*\AppData\* exe; Child powershell.exe with hidden/iex/encodedSanctioned installers (allow-list)Custom IOA → Process Creation
Q1 and Q2 are the strongest promotions (high-value, low noise with allow-lists). Q3–Q6 stay correlated hunts.
09

Machine-Readable IOC Appendix

Grouped IOC Quick-Copy

One-click blocks for detection and RMM governance. MuddyWater rebuilds infrastructure constantly — behavior + the tool lineage are durable; add per-incident atoms during triage.

Abused RMM Agentsinventory / govern
AteraAgent.exe / atera*       # Atera RMM
ScreenConnect / Connectwisecontrol*.exe   # ScreenConnect / CW Control
SimpleHelp (remote_access.exe / *Support*) # SimpleHelp
N-able / BASupSrvc.exe / takecontrol*     # N-able Take Control
syncro* / Windows-Agent*                  # other RMM seen in MuddyWater intrusions
# Inventory + alert on ANY of these outside the sanctioned IT-support fleet
Tooling / C2 Lineageattribution
RustyWater    # 2026 Rust-based RAT implant (current)
MuddyC2Go     # current Go-based C2 framework (embedded PowerShell agent)
PhonyC2       # prior PowerShell C2 framework (largely retired)
MuddyC3 / POWERSTATS   # earlier PowerShell C2 / backdoor lineage
DarkBeatC2 / Dindoor   # additional custom C2 / tooling
# Aliases: Mango Sandstorm, TA450, Seedworm, Earth Vetala, MERCURY, Static Kitten, MuddyKrill (G0069)
Behavioral Signaturesdetection logic
RMM agent (Atera/ScreenConnect/SimpleHelp/N-able) on a non-IT host
User-path binary (ProgramData/AppData) spawning powershell -w hidden / -nop / iex (MuddyC2Go)
powershell.exe beaconing repeatedly to an external host (POWERSTATS/MuddyC2Go agent)
Office/archive app spawning powershell/mshta/msiexec (spearphishing lure)
LOLBin recon burst (whoami/nltest/net/systeminfo) on a host with an RMM/C2 hit
Freshly-written user-path exe/dll that beacons (RustyWater implant)
Hardening / Blockcut the foothold
# RMM governance is the single biggest win against MuddyWater:
WDAC/AppLocker: allow only ONE sanctioned RMM tool; deny all others (Atera/SimpleHelp/N-able/etc.)
PowerShell Constrained Language Mode + ScriptBlock logging (4104) + AMSI
Block executable content from email; ASR rules; patch internet-facing apps
Egress: alert on PowerShell/Go-binary outbound to non-corporate hosts
MFA on all external access; geo/risk-based conditional access (Israel/GCC orgs: elevated priority)
10

Hardening — Tiered & Deployable

RMM governance + PowerShell constraint cut MuddyWater's two favorite primitives.

Immediate — Govern RMM & PowerShell
  • WDAC/AppLocker: sanction ONE RMM tool; deny all othersM1038 / M1042. Atera/ScreenConnect/SimpleHelp/N-able outside the sanctioned deploy = block. Directly defeats Q1.
  • PowerShell Constrained Language Mode + ScriptBlock logging (4104) + AMSIM1038 / M1040 / M1049. Blunts MuddyC2Go/POWERSTATS; feeds Q3/N4.
  • Block executable content from email; ASR rulesM1042. Cuts the spearphishing lure.
  • Patch internet-facing apps; MFA on all external accessM1051 / M1032.
Near term — Detect & constrain (pilot first)
  • Inventory + alert on any RMM agent outside the IT fleetM1042. Feeds Q1/N2.
  • Egress control: alert on PowerShell/Go-binary outbound to non-corporate hostsM1037.
  • Monitor scheduled tasks/services running PowerShell or unsigned Go binariesM1018. Feeds N3.
Strategic — Reduce espionage surface
  • Application allowlisting enterprise-wideM1038. Denies custom implants & unsanctioned RMM.
  • Tier 0/1/2 admin model; least privilegeM1026. Limits espionage reach.
  • Geopolitically-aware monitoring (Israel/GCC orgs): elevated priority + threat-intel feedsM1047.
11

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the host(s); cut external access for implicated accounts; preserve the RMM agent + PowerShell artifactsSOC L2Containment timestamp; Q1/Q2 events
TriageMap spearphishing → RMM → C2 → implant timeline; extract C2 from 4104; scope which hosts share the RMM/certIRProcess/script timeline; C2
EradicateRemove RMM/implant + persistence; block C2; reset all credentials touched (espionage = assume broad theft)IRRemoval log; cred reset
RecoverRebuild compromised hosts; rotate creds/keys; verify no lateral foothold to DCs/sensitive systemsIR + ITRebuild tickets; lateral review
HardenDeny unsanctioned RMM; PowerShell CLM; promote Q1/Q2 IOAs; raise monitoring priorityDetection EngControl status; IOA enabled
12

Detection Coverage Map & Validation

TechniqueBehaviorCQLIOACoverage
T1219RMM footholdQ1IOA-1Good with allow-list
T1059.001MuddyC2Go loader → PowerShell C2Q2IOA-2Good
T1071.001PowerShell C2 beaconQ3Partial + EID 4104 (N4)
T1105RustyWater implantQ4Partial add vendor hashes
T1566.001Spearphishing lineageQ5Partial + mail gw (N1)
T1087 / T1082 / T1018LOLBin reconQ6Partial correlate

Validation gates: (1) confirm process + command-line + 4104 telemetry; (2) enumerate sanctioned RMM + IT host group (allow-list for Q1); (3) lab-test a benign user-path binary → powershell -w hidden (Q2) and a benign RMM install on a test host (Q1); (4) promote Q1/Q2 to Custom IOA; keep Q3–Q6 correlated. Israel/GCC orgs: run at elevated priority.

13

Hunt Summary Ticket

TITLE:        Hunt — MuddyWater (Iranian MOIS espionage APT)
SEVERITY:     Critical (nation-state espionage; broad credential/data theft)
SCOPE:        Windows endpoints/servers; Israel/GCC orgs at elevated priority
HYPOTHESIS:   Spearphishing / edge exploit -> RMM foothold (Atera/ScreenConnect/SimpleHelp/
              N-able) -> MuddyC2Go Go-loader -> embedded PowerShell C2 -> RustyWater implant
              -> LOLBin recon / espionage.
QUERIES RUN:  Q1 RMM on non-IT host (IOA) | Q2 Go-loader -> hidden PowerShell (IOA) |
              Q3 PowerShell C2 beacon | Q4 RustyWater implant | Q5 phishing lineage |
              Q6 LOLBin recon burst
              + Native N1-N4 (mail gw, RMM inventory, persistence, 4104 PowerShell C2)
DO FIRST:     Q1, Q2 — treat any hit as a nation-state intrusion; escalate to IR
FINDINGS:     <pending analyst execution>
GAPS:         C2 atoms perishable; RustyWater needs vendor hashes; edge access needs appliance logs
ACTIONS:      Deny unsanctioned RMM (WDAC/AppLocker); PowerShell CLM + 4104; ASR; MFA; promote Q1/Q2
OWNER:        HuntPack
VERSION:      v0.4 - 2026-06-12
14

Changelog

v0.42026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.32026-06-12Re-hunt + reformatted to the review-v2 gold layout (fixed left-sidebar scrollspy TOC, collapsible, cloud selector inside the CQL section, per-card Copy/Open-in-Falcon, Grouped IOC Quick-Copy grid, coverage+validation, .ticket). Refreshed from Deep Instinct/CSO/Picus: 2026 RustyWater Rust implant, MuddyC2Go current framework + full C2 lineage, abused-RMM list, Israel/GCC targeting. 6 CQL + 4 native hunts, 2 IOA candidates.
v0.12026-05-26Initial pack: MuddyWater overview + PowerShell-C2 hunts. Pre-gold top-bar layout.
15

References

TierSourceUsed For
1Deep Instinct — MuddyC2GoCurrent Go-based C2 framework; embedded PowerShell agent
1CSO Online — MuddyWater Rust implant (RustyWater)2026 RustyWater implant; targeting
1Picus — Iranian threat actors · eSentire — MuddyWater exposedC2 lineage, RMM abuse list, LOLBins
2MITRE ATT&CK — MuddyWater (G0069)Aliases, technique mapping

HuntPack v0.3 · MuddyWater (Iran/MOIS) · Generated 2026-06-12 · Defensive use only — no offensive code. The group rebuilds infrastructure constantly; the durable signals are RMM-on-non-IT-host, the MuddyC2Go→PowerShell-C2 pattern, and RustyWater. Validate field names and sanctioned-RMM allow-lists in your tenant before promoting any query.