SOC Prime Bias: Kritisch

09 Apr. 2026 17:52

ChainShell: MuddyWater & Russischer MaaS

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
ChainShell: MuddyWater & Russischer MaaS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Zusammenfassung

MuddyWater, ein mit Iran verbundener Spionageakteur, nutzt die russische Plattform TAG-150 Malware-as-a-Service, um CastleRAT und einen neueren, blockchain-fähigen Node.js-C2-Agent, der als ChainShell verfolgt wird, gegen israelische und andere hochrangige Ziele zu verbreiten. Die Aktivität wird von einem exponierten, falsch konfigurierten C2-Webserver, einem PowerShell-Bereitstellungsskript (reset.ps1) und über Steganographie verborgenen PE-Nutzlasten unterstützt. Mehrere CastleRAT-Versionen (einschließlich Build 120 und Build 13) enthalten gemeinsame hartcodierte Kennungen, die auf dieselbe MaaS-Abstammung hinweisen. Die Backend-Infrastruktur scheint kampagnenspezifisch zu sein und verwendet gemeinsame Domains (zum Beispiel serialmenot.com) und für jeden Einsatz spezifische JWT-Zugangsdaten, um den Zugriff und die Verfolgung über die Bereitstellungen hinweg zu trennen.

Untersuchung

JUMPSEC überprüfte den exponierten C2-Host, stellte 15 Malware-Proben sicher und verknüpfte die Bereitstellungslogik von reset.ps1 mit der Lieferung von sowohl ChainShell als auch mehreren CastleRAT-Builds. Die Ermittler korrelierten auch Code-Signaturzertifikate (Amy Cherne und Donald Gay), die in bekannten MuddyWater-Tools gesehen wurden, mit dem TAG-150 MSI-Installer, was eine hochgradige Zuordnungsfährte bildete. Zusätzlich wurde übergreifende Ähnlichkeit bei den Proben in hartcodierten Build-Markern, wiederkehrenden geplanten Namenskonventionen von Aufgaben und in den Tools und serverseitigen Artefakten eingebetteten JWT-Kampagnen-IDs beobachtet.

Abschwächung

Überwachen Sie nach reset.ps1, zugehörigen geplanten Aufgaben und einzigartigen Mutex- oder Dateipfad-Artefakten, die mit CastleRAT und ChainShell in Verbindung stehen. Blockieren Sie bekannte TAG-150-Infrastrukturen, einschließlich serialmenot.com, ttrdomennew.com und sharecodepro.com, und untersuchen Sie PowerShell-gesteuerte Installationen von Node.js-Komponenten. Erzwingen Sie strikte Kontrollen der Code-Signatur und validieren Sie verdächtige Zertifikate gegen bekannte MuddyWater-verknüpfte Signaturmaterialien.

Reaktion

Falls Indikatoren gefunden werden, isolieren Sie betroffene Endpunkte, erfassen Sie vollständige Festplatten- und Speicherabbilder und durchsuchen Sie weitere Überreste von CastleRAT und ChainShell. Widerrufen oder misstrauen Sie kompromittierten Code-Signaturzertifikaten, setzen Sie betroffene Anmeldedaten zurück und koordinieren Sie Berichterstattung mit relevanten nationalen CERTs. Überprüfen Sie Netzwerk-Telemetrie auf Ethereum-RPC-Zugriffsmuster und JWT-Nutzung, die mit dem serialmenot.com-Kommando-und-Kontroll-Workflow verbunden sind.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef technique fill:#c2f0c2 classDef malware fill:#ff9999 classDef process fill:#ffd966 %% Nodes action_phishing["<b>Aktion</b> – <b>T1566.002 Phishing</b><br/>Bösartiges makroinaktiviertes Dokument (ClickFix/BatClickFix), das per E-Mail geliefert wird"] class action_phishing action action_user_exec["<b>Aktion</b> – <b>T1204.002 Benutzer-Ausführung</b><br/>Das Opfer öffnet das Dokument und löst PowerShell aus"] class action_user_exec action tool_powershell["<b>Werkzeug</b> – <b>T1059.001 PowerShell</b><br/>Skript-Interpreter, der den Loader lädt"] class tool_powershell tool tool_cmstp["<b>Werkzeug</b> – <b>T1218.003 CMSTP</b><br/>Systembinär-Proxy-Ausführung, die bösartige INF lädt"] class tool_cmstp tool technique_dll_sideload["<b>Technik</b> – <b>T1574.002 DLL-Sideloading</b><br/>Bösartige DLLs, die über INF geladen werden"] class technique_dll_sideload technique technique_dll_hijack["<b>Technik</b> – <b>T1574.005 Ausführung des Hijack-Flusses</b><br/>Bösartige userenv.dll und xmllite.dll, die neben legitimen Binärdateien platziert werden"] class technique_dll_hijack technique technique_scheduled_task["<b>Technik</b> – <b>T1543.001 Systemprozess erstellen oder ändern</b><br/>Geplante Aufgaben (VirtualSmokestGuy120/666) für Persistenz"] class technique_scheduled_task technique technique_steganography["<b>Technik</b> – <b>T1027.003 Steganographie</b><br/>Native PE-Nutzlasten, die innerhalb von JPEG-Bildern verborgen sind"] class technique_steganography technique technique_embedded_payload["<b>Technik</b> – <b>T1027.009 Eingebettete Nutzlasten</b><br/>Weitere Nutzlasten weiter verschleiert"] class technique_embedded_payload technique technique_data_obfusc["<b>Technik</b> – <b>T1001 Datenverschleierung</b><br/>AES-256-CBC-Verschlüsselung des C2-Verkehrs"] class technique_data_obfusc technique technique_uac_bypass["<b>Technik</b> – <b>T1548.002 Missbrauch des Steuermechanismus für Erhebungen</b><br/>CMSTP-Ausführung umgeht UAC"] class technique_uac_bypass technique technique_steal_cookie["<b>Technik</b> – <b>T1539 Websession-Cookie stehlen</b><br/>Chrome v127+ anwendungsgebundene Cookies entschlüsseln"] class technique_steal_cookie technique technique_forge_cookie["<b>Technik</b> – <b>T1606.001 Web-Zugangsdaten fälschen</b><br/>Extrahierte Cookies zur Authentifizierung verwenden"] class technique_forge_cookie technique technique_alt_auth["<b>Technik</b> – <b>T1550.004 Alternativ authentifiziertes Material verwenden</b><br/>Cookies für laterale Bewegungen missbrauchen"] class technique_alt_auth technique technique_vnc["<b>Technik</b> – <b>T1021.005 Remote Services VNC</b><br/>Verstecktes VNC bietet unsichtbare Desktop-Kontrolle"] class technique_vnc technique technique_remote_service["<b>Technik</b> – <b>T1021 Remote Services</b><br/>Zusätzliche laterale Bewegung über Remotedienste"] class technique_remote_service technique technique_dead_drop["<b>Technik</b> – <b>T1102.001 Dead Drop Resolver</b><br/>C2-Adresse gelöst aus Ethereum Smart Contract"] class technique_dead_drop technique technique_websocket_bidirectional["<b>Technik</b> – <b>T1102.002 WebSocket-Bidirektional</b><br/>WebSocket-Kanal für Befehlsaustausch"] class technique_websocket_bidirectional technique technique_websocket_oneway["<b>Technik</b> – <b>T1102.003 Einweg-Kommunikation</b><br/>Ausweich-C2-Pfad"] class technique_websocket_oneway technique technique_web_protocol["<b>Technik</b> – <b>T1071.001 Anwendungsprotokoll Webprotokolle</b><br/>Verkehr über WebSocket via HTTPS"] class technique_web_protocol technique malware_chainshell["<b>Malware</b> – <b>Name</b>: ChainShell<br/>Nutzlast-Orchestrator, der C2, Verschlüsselung und laterale Bewegungen verarbeitet"] class malware_chainshell malware %% Connections action_phishing –>|leads_to| action_user_exec action_user_exec –>|executes| tool_powershell tool_powershell –>|loads| tool_cmstp tool_cmstp –>|uses| technique_dll_sideload tool_cmstp –>|bypasses| technique_uac_bypass technique_dll_sideload –>|enables| technique_dll_hijack technique_dll_hijack –>|supports| technique_scheduled_task technique_scheduled_task –>|creates| malware_chainshell malware_chainshell –>|contains| technique_steganography malware_chainshell –>|contains| technique_embedded_payload malware_chainshell –>|encrypts| technique_data_obfusc malware_chainshell –>|steals| technique_steal_cookie technique_steal_cookie –>|enables| technique_forge_cookie technique_forge_cookie –>|enables| technique_alt_auth technique_alt_auth –>|enables| technique_vnc technique_vnc –>|uses| technique_remote_service malware_chainshell –>|resolves C2 via| technique_dead_drop technique_dead_drop –>|communicates via| technique_websocket_bidirectional technique_websocket_bidirectional –>|fallback to| technique_websocket_oneway technique_websocket_bidirectional –>|uses protocol| technique_web_protocol "

Angriffsfluss

Simulationsexekution

Voraussetzung: Der Telemetrie- & Basislinien-Vorab-Check muss bestanden worden sein.

  • Angriffserzählung & Befehle:

    1. Phase 1 – Einen einfachen C2-Server vorbereiten (auf einem Angreifergerät oder einer kontrollierten VM ausführen). Der Server hört auf Port 9999 und gibt empfangene Daten zurück.

    2. Phase 2 – Auf dem Ziel-Windows-Host eine PowerShell-Hintertür starten die eine TCP-Verbindung zum C2-Server auf Port 9999 öffnet. Die Nutzlast nutzt native .NET-Klassen, um die Erstellung eines separaten ausführbaren Programms zu vermeiden und eine „living-off-the-land“-Vorgehensweise zu simulieren.

    3. Phase 3 – Optionaler Proxy-Hop: Das PowerShell-Skript kontaktiert zuerst einen lokalen HTTP-Proxy (der auf 127.0.0.1:8080 lauscht), der den TCP-Verkehr an den entfernten C2-Server weiterleitet und demonstriert, dass der Zielport unverändert bleibt.

    Diese Schritte erzeugen Firewall-Ereignisse mit DestinationPort = 9999und erfüllen damit die Sigma-Regel.

  • Regressionstest-Skript:

    # -------------------------------------------------
    # CastleRAT‑stil C2-Simulation – PowerShell
    # -------------------------------------------------
    # 1. C2-Server-Adresse definieren (ersetzen Sie durch Ihre Test-IP)
    $c2Ip = "10.0.0.50"
    $c2Port = 9999
    
    # 2. OPTIONAL: Lokalen Proxy definieren (wenn Sie den Proxy-Hop testen möchten)
    $useProxy = $false
    $proxyHost = "127.0.0.1"
    $proxyPort = 8080
    
    # 3. Funktion zum Öffnen eines TCP-Streams (direkt oder über Proxy)
    function Invoke-C2Connection {
        param (
            [string]$destIp,
            [int]$destPort,
            [bool]$viaProxy
        )
        if ($viaProxy) {
            # Einfache HTTP-CONNECT-Tunnel
            $proxyUri = "http://$proxyHost`:$proxyPort"
            $client = New-Object System.Net.Sockets.TcpClient($proxyHost,$proxyPort)
            $stream = $client.GetStream()
            $connectRequest = "CONNECT $destIp`:$destPort HTTP/1.1`r`nHost: $destIp`r`n`r`n"
            $bytes = [System.Text.Encoding]::ASCII.GetBytes($connectRequest)
            $stream.Write($bytes,0,$bytes.Length)
            # Proxy-Antwort verwerfen
            $buffer = New-Object byte[] 1024
            $null = $stream.Read($buffer,0,$buffer.Length)
            Write-Host "[+] Proxy-Tunnel hergestellt"
            return $stream
        } else {
            $client = New-Object System.Net.Sockets.TcpClient($destIp,$destPort)
            Write-Host "[+] Direkte TCP-Verbindung hergestellt"
            return $client.GetStream()
        }
    }
    
    # 4. Verbindung öffnen
    $stream = Invoke-C2Connection -destIp $c2Ip -destPort $c2Port -viaProxy:$useProxy
    
    # 5. Einfaches Signal senden
    $beacon = "CastleRAT Beacon $(Get-Date -Format o)`n"
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($beacon)
    $stream.Write($bytes,0,$bytes.Length)
    Write-Host "[+] Beacon gesendet"
    
    # 6. Kanal für kurze Zeit geöffnet halten (Persistenz simulieren)
    Start-Sleep -Seconds 15
    
    # 7. Bereinigung
    $stream.Close()
    Write-Host "[+] Verbindung geschlossen"
  • Bereinigungskommandos:

    # Sicherstellen, dass alle verbleibenden TCP-Verbindungen geschlossen sind
    Get-NetTCPConnection -RemotePort 9999 -State Established | ForEach-Object {
        try {
            $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
            if ($proc) { Stop-Process -Id $proc.Id -Force }
        } catch {}
    }
    
    # Entfernen Sie alle temporären Proxy-Listener, falls sie lokal gestartet wurden
    Stop-Process -Name "python" -Force -ErrorAction SilentlyContinue

Zusätzliche Beobachtungen & Härtungsempfehlungen

  1. Portbasierte Erkennung anreichern: Kombinieren Sie die Portprüfung mit bekannten bösartigen C2-IPs/Domains, TLS-Fingerprinting oder Abnormalitäten im Datenverkehrsaufkommensheuristik.
  2. Zulässige Liste legitimer Dienste: Erstellen Sie eine Ausnahmeliste für Anwendungen, die legitimerweise Ports 9999 oder 8888 verwenden (z. B. bestimmte Datenbank- oder Management-Tools).
  3. Verhaltensbaselines: Richten Sie statistische Modelle ein, um seltene ausgehende Verbindungen zu Hochrisiko-Ports von Nicht-Server-Endpunkten zu kennzeichnen.
  4. Prozesskontext: Korrelation von Firewall-Ereignissen mit dem ursprünglichen Prozess (ImageFileName, Befehlzeile). Verbindungen von unerwarteten Prozessen kennzeichnen (z.B. powershell.exe, cmd.exe).

Durch die Anwendung dieser Abwehrmaßnahmen kann die Widerstandsfähigkeit der Regel von der aktuellen 2 auf eine 4-5 Reichweite erhöht werden, was die Anzahl der Fehlalarme erheblich reduziert und gleichzeitig die Erkennung von echtem CastleRAT C2-Datenverkehr bewahrt.