ClickFix zu MaaS: Innenansicht eines modularen Windows RAT und seines Kontrollpanels
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Netskope Threat Labs beobachtete eine ClickFix-Kampagne, die ein maßgeschneidertes Windows RAT basierend auf Node.js über bösartige MSI-Installer bereitstellt. Die Nutzlast hält wichtige Module im Speicher und nutzt gRPC-Streaming über Tor für C2. Ein OPSEC-Fehler enthüllte das Admin-Panel-Protokoll und weist auf ein Malware-as-a-Service-Modell mit Wallet-Tracking hin. Die Persistenz wird über einen benutzerdefinierten HKCU-Run-Wert gesetzt.
Untersuchung
Forscher fingen das MSI ab, dekodierten das PowerShell-Bootstrap und verfolgten die dynamische Laden von Node.js-Modulen. Sie extrahierten und entschlüsselten den Konfigurations-Blob, um eine .onion-C2-Adresse wiederherzustellen. Eine geleakte admin.proto-Datei enthüllte MaaS-Funktionen wie Multi-Operator-Management und Wallet-Überwachung, und Analysten bemerkten einen selbstheilenden Watchdog sowie die Nutzung von Tor für anonymisierten Datenverkehr.
Abwehr
Blockieren Sie die Ausführung unsignierter MSIs von unzuverlässigen Quellen und überwachen Sie HKCU…Run auf neue, verdächtige Einträge. Erkennen Sie PowerShell, das MSI-Nutzlasten von Domains wie cloud-verificate.com herunterlädt. Alarmieren Sie bei conhost.exe oder node.exe, die mit versteckten Argumenten gestartet werden, und bei tor.exe, das auf Endpunkten erscheint, die es nicht erfordern.
Reaktion
Isolieren Sie betroffene Hosts, sammeln Sie Speicher für die Analyse von im Speicher befindlichen Modulen und entfernen Sie die HKCU-Run-Persistenz. Überprüfen Sie %LOCALAPPDATA%LogicOptimizer auf Staging-Artefakte und jegliche geplante tor.exe-Aktivität, blockieren Sie dann den Onion-Endpunkt und verwandte Domains/IPs. Durchsuchen Sie das gesamte Unternehmen nach denselben Installer-Artefakten und Prozessketten.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[„<b>Aktion</b> – <b>T1204.001 Benutzerausführung: Schädlicher Link</b><br/>Opfer klickt auf einen schädlichen Link und startet PowerShell“] class action_user_exec action process_powershell_cmd[„<b>Prozess</b> – <b>T1059.001 PowerShell</b><br/>Base64-Befehl lädt MSI-Installer herunter“] class process_powershell_cmd process action_msi_install[„<b>Aktion</b> – <b>T1546.016 Installer-Pakete</b><br/>Stille MSI-Installation von Node.js“] class action_msi_install action tool_msiexec[„<b>Tool</b> – msiexec.exe<br/>Systembinär-Proxy-Ausführung“] class tool_msiexec tool action_persistence[„<b>Aktion</b> – Run-Schlüssel Persistenz<br/>Schreibt in HKCU Run“] class action_persistence action tool_tor[„<b>Tool</b> – tor.exe<br/>Externer Proxy“] class tool_tor tool action_tor_proxy[„<b>Aktion</b> – Multi-Hop Proxy<br/>C2-Verkehr über Tor SOCKS5“] class action_tor_proxy action action_grpc_comm[„<b>Aktion</b> – gRPC Webdienst<br/>Kommunikation mit .onion C2“] class action_grpc_comm action action_encrypted_channel[„<b>Aktion</b> – Verschlüsselter Kanal<br/>AES-256-CBC oder XOR“] class action_encrypted_channel action action_collection[„<b>Aktion</b> – Host-Informationserfassung<br/>Sammelt Systemdaten“] class action_collection action action_archive[„<b>Aktion</b> – Benutzerdefiniertes Archiv<br/>Mehrschichtige Verschlüsselung“] class action_archive action action_config_repo[„<b>Aktion</b> – Konfigurationsdaten<br/>Extrahiert C2-Informationen“] class action_config_repo action action_dynamic_resolution[„<b>Aktion</b> – Dynamische Auflösung<br/>Löst .onion zur Laufzeit auf“] class action_dynamic_resolution action action_ip_discovery[„<b>Aktion</b> – IP-Erkennung<br/>Ermittelt externe IP“] class action_ip_discovery action %% Edges action_user_exec –>|triggers| process_powershell_cmd process_powershell_cmd –>|downloads| action_msi_install action_msi_install –>|uses| tool_msiexec action_msi_install –>|enables| action_persistence action_persistence –>|downloads| tool_tor tool_tor –>|enables| action_tor_proxy action_tor_proxy –>|routes| action_grpc_comm action_grpc_comm –>|encrypted via| action_encrypted_channel action_encrypted_channel –>|carries| action_collection action_collection –>|archives| action_archive action_archive –>|stores config in| action_config_repo action_config_repo –>|provides| action_dynamic_resolution action_dynamic_resolution –>|connects to| action_ip_discovery action_collection –>|discovers| action_ip_discovery
Angriffsfluss
Erkennung
NodeJS-Binärdatei, die von einem ungewöhnlichen Speicherort ausgeführt wird (über cmdline)
Ansicht
Mögliche Persistenzpunkte [ASEPs – Software/NTUSER-Hive] (über registry_event)
Ansicht
Download oder Upload über Powershell (über cmdline)
Ansicht
LOLBAS Conhost (über cmdline)
Ansicht
MsiExec, das von Shell-Prozess gespawned wurde (über cmdline)
Ansicht
Mögliche IP-Lookup-Domain-Kommunikationsversuche (über dns)
Ansicht
Mögliche Tor-Netzwerk-Tools (über cmdline)
Ansicht
Erkennung von Conhost-Ausführung zum Spawnen von Node für Bootstrap-Skript [Windows-Prozesserstellung]
Ansicht
Ausführung eines bösartigen PowerShell-Befehls zum Herunterladen und Installieren des MSI [Windows Powershell]
Ansicht
Simulationsausführung
Voraussetzung: Der Telemetrie- & Basislinien-Pre-Flight-Check muss bestanden haben.
Begründung: Dieser Abschnitt beschreibt die genaue Ausführung der gegnerischen Technik (TTP), die das Erkennungsregel auslösen soll. Die Befehle und Erzählungen MÜSSEN direkt die identifizierten TTPs widerspiegeln und darauf abzielen, die genaue Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird.
-
Angriffserzählung und Befehle:
- Ziel: Der Angreifer möchte eine bösartige Node.js-Nutzlast starten (
bootstrap.js) ohne Verdacht zu erregen. - Methode: Verwende ein signiertes Windows-Binärprogramm (
conhost.exe) als Proxy, umnode.exeim headless-Modus zu starten und das Bootstrap-Skript als Argument zu übergeben. - Schritte:
- Legen Sie ein bösartiges
bootstrap.jsin ein beschreibbares Verzeichnis ab (z.B.%TEMP%). - Rufen Sie
conhost.exemit der exakten Argumentzeichenfolge auf, nach der die Regel sucht. - Der Befehl wird im Kontext des aktuellen Benutzers ausgeführt und imitiert das Spawnen eines legitimen Prozesses.
- Legen Sie ein bösartiges
# 1. Ablegen der bösartigen bootstrap.js (simulierte harmlose Inhalte für den Test) $bootstrapPath = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrapPath -Value "// bösartige Bootstrap-Platzhalter" # 2. Führen Sie conhost.exe aus, um node.exe mit den erforderlichen Flags zu starten $conhost = "$env:windirsystem32conhost.exe" $args = '--headless "node.exe" "bootstrap.js"' Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP - Ziel: Der Angreifer möchte eine bösartige Node.js-Nutzlast starten (
-
Regressionstestskript:
# ------------------------------------------------- # Regressionstest: Trigger Conhost → Node-Bootstrap # ------------------------------------------------- # Sicherstellen, dass Sysmon läuft und ProcessCreate-Ereignisse protokolliert. # Lege ein Dummy-Bootstrap-Skript ab $bootstrap = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrap -Value "// Test-Bootstrap-Inhalt" # Definieren Sie die exakte Befehlszeile, die die Erkennungsregel sucht $conhostPath = "$env:windirsystem32conhost.exe" $cmdLine = '--headless "node.exe" "bootstrap.js"' # Starten Sie conhost mit den bösartigen aussehenden Argumenten Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP Write-Host "Simulation abgeschlossen – überprüfen Sie SIEM auf Alarm." -
Bereinigungskommandos:
# Stoppen Sie verbleibende Node- oder Conhost-Prozesse, die durch den Test gestartet wurden Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force # Entfernen Sie das temporäre Bootstrap-Skript Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue Write-Host "Bereinigung abgeschlossen."