Wenn Malware zurückschlägt
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Der Bericht beschreibt eine mehrstufige Windows-Eindringungskette, die ein verstecktes Batch-Skript, einen PowerShell-basierten Loader und Donut-generierten Shellcode kombiniert, um einen persistenten, speicherresidenten RAT mit der Fähigkeit zum Diebstahl von Anmeldedaten zu etablieren. Der Loader liefert ein .NET-Implantat, das auf Tarnung ausgelegt ist und starke Anti-Analyse-Abdeckung, Prozessinjektion und interaktive Fernsteuerungsfunktionen bietet. Gestohlene Daten werden über Discord-Webhooks und Telegram-Bots ausgegeben, und das modulare Design fokussiert sich auf speicherinterne Ausführung mit minimalem Platzbedarf auf der Festplatte.
Untersuchung
Die Analyse identifizierte Persistenz über einen per-user Run-Registry-Wert, der eine unter %APPDATA% versteckte Batch-Datei auslöst. Das Batch-Skript enthält ein eingebettetes Base64-Blob, das es extrahiert und in eine PowerShell-Stufe dekodiert. Dieser Loader entschlüsselt eine Donut-Shellcode-Nutzlast und injiziert sie in svchost.exe and explorer.exe, wobei Windows-APIs wie CreateRemoteThread verwendet werden, um das speicherinterne Implantat auszuführen. Die entschlüsselte Stufe löst sich in eine stark obfuskierte .NET-Assembly auf, die Pulsar-RAT-Funktionalität sowie ein spezielles Stealer-Modul umfasst. Forscher beobachteten Anti-VM- und Anti-Debug-Prüfungen, Schutzmaßnahmen, die dazu gedacht sind, Analyse- oder Injektionsüberwachung zu erkennen, und Befehls-Handlers, die versuchen, lokale Verteidigungsmechanismen zu schwächen – wie z. B. das Deaktivieren des Task-Managers und das Manipulieren des UAC-bezogenen Verhaltens.
Abschwächung
Blockieren Sie die Erstellung versteckter Batch-Dateien in benutzerbeschreibbaren AppData-Pfaden und untersuchen Sie unbekannte Einträge, die zu per-user Run-Schlüsseln hinzugefügt wurden. Überwachen Sie PowerShell-Befehlszeilen auf Base64-Dekodierungsmuster und Anzeichen von Aktivitäten zur speicherinternen Injektion. Verwenden Sie Endpoint-Tools, die in der Lage sind, Donut-Shellcode-Merkmale zu erkennen, speicherinterne .NET-Assemblies zu erkennen und C2-Traffic zu Discord und Telegram zu kennzeichnen. Setzen Sie Anwendungszugriffslisten durch und wenden Sie Egress-Kontrollen an, die den ausgehenden Zugriff auf Webhook-Endpunkte und messaging-basierte C2 beschränken.
Reaktion
Wenn erkannt, isolieren Sie den Endpunkt, stoppen Sie die injizierten svchost.exe and explorer.exe Instanzen, die mit der bösartigen Thread-Erstellung verbunden sind, und entfernen Sie sowohl die versteckte Batch-Datei als auch die zugehörige Run-Key-Persistenz. Erfassen Sie Speicherbilder, um speicherinterne Artefakte zu bewahren, extrahieren und analysieren Sie die .NET-Nutzlast und durchsuchen Sie die Umgebung nach übereinstimmenden Verhaltensweisen und Indikatoren. Setzen Sie potenziell exponierte Anmeldedaten zurück und widerrufen Sie kompromittierte Discord/Telegram-Webhook-Token, um eine fortgesetzte Exfiltration zu verhindern.
Schlüsselwörter: Windows-Malware, PowerShell-Loader, versteckte Batch-Datei, AppData, Run-Schlüssel, Donut-Shellcode, CreateRemoteThread, Prozessinjektion, speicherinternes .NET, Pulsar RAT, Anmeldeinformationen-Diebstahl, Discord-Webhooks, Telegram-Bot, Anti-VM, Anti-Debug.
Angriffsablauf
Erkennungen
Möglicher Missbrauch von Telegram als Kommando- und Kontrollkanal (via dns_query)
Ansehen
Mögliche Persistenzpunkte [ASEPs – Software/NTUSER Hive] (via registry_event)
Ansehen
Aufruf verdächtiger Windows-API-Funktionen von PowerShell (via powershell)
Ansehen
Verdächtige PowerShell-Strings (via powershell)
Ansehen
Mögliche Verwendung von Schtasks oder AT für Persistenz (via cmdline)
Ansehen
Verdächtiger Versuch der Manipulation des Alternativen Datenstroms (ADS) Zone.Identifier (via process_creation)
Ansehen
PowerShell-Ausführung einer Datei in einem verdächtigen Verzeichnis unter Verwendung von Bypass-Ausführungsrichtlinie (via cmdline)
Ansehen
IOCs (DestinationIP) zur Erkennung: Wenn Malware zurückspricht
Ansehen
IOCs (SourceIP) zur Erkennung: Wenn Malware zurückspricht
Ansehen
IOCs (HashMd5) zur Erkennung: Wenn Malware zurückspricht
Ansehen
IOCs (HashSha1) zur Erkennung: Wenn Malware zurückspricht
Ansehen
Persistenz über Run-Schlüssel für Batch-Datei-Ausführung [Windows-Registrierungsereignis]
Ansehen
Erkennung von Speicherinjektion und Nutzlastausführung via PowerShell [Windows PowerShell]
Ansehen
Erkennung von Batch- und PowerShell-Ausführung für versteckte Malware-Persistenz [Windows-Prozesserstellung]
Ansehen
Simulationsausführung
Voraussetzung: Der Telemetrie- und Basislinientest vor dem Start muss bestanden haben.
Begründung: Dieser Abschnitt beschreibt die präzise Ausführung der gegnerischen Technik (TTP), die darauf abzielt, die Erkennungsregel auszulösen. Die Befehle und der Kommentar MÜSSEN die identifizierten TTPs direkt widerspiegeln und darauf abzielen, genau die Telemetrie zu erzeugen, die von der Erkennungslogik erwartet wird. Abstrakte oder nicht verwandte Beispiele führen zu Fehldiagnosen.
-
Angriffserzählung & Befehle:
- Erkundung & Nutzlastabruf – Der Angreifer verwendet einen PowerShell-One-Liner, um ein Base64-kodiertes Shellcode-Blob von einem C2-Server herunterzuladen (simuliert über eine lokale Datei).
- Verschleierung – Die heruntergeladene Nutzlast ist mit dem Schlüssel
0xAAXOR-verschleiert. Das Skript enthält den wörtlichen String „XOR“, um die zweite Klausel der Regel zu erfüllen. - Dekodierung & Entschleierung – Der Angreifer dekodiert den Base64-String, wendet die XOR-Operation im Speicher an und speichert den klaren Shellcode in einem Byte-Array.
- Prozessinjektion – Unter Verwendung der Windows-API
CreateRemoteThread, injiziert das Skript den Shellcode in einen gutartigen Zielprozess (notepad.exe). Die Befehlszeile enthält ausdrücklich den Text „CreateRemoteThread“. - Ausführung – Der Remote-Thread läuft und erreicht Code-Ausführung auf dem Host.
-
Regressionstest-Skript:
# ------------------------------------------------------------ # Simulierte PowerShell-Speicherinjektionskampagne # ------------------------------------------------------------ # 1. Bereiten Sie eine Dummy-Nutzlast (Shellcode) vor – für Demo-Zwecke verwenden wir # nur ein kleines Byte-Array, das "Injected" ausgibt. $shellcode = [Byte[]] (0x90,0x90,0x90,0x90) # NOP-Schlitten-Platzhalter # 2. XOR-verschleiern Sie die Nutzlast mit dem Schlüssel 0xAA $key = 0xAA $xorPayload = $shellcode | ForEach-Object { $_ -bxor $key } # 3. Kodiert die XOR-ed Nutzlast in Base64 $b64 = [Convert]::ToBase64String($xorPayload) # 4. Erstellen Sie den PowerShell-Befehl, der die Injektion ausführt $injectCmd = @" `$bytes = [Convert]::FromBase64String('$b64') # XOR-Entschleierung (wörtlich 'XOR' für Erkennung vorhanden) `$decoded = `$bytes | ForEach-Object { `$_ -bxor $key } # Starten Sie Notepad als Injektionsziel `$proc = Start-Process notepad -PassThru # Alloziere Speicher im Remote-Prozess `$addr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(`$decoded.Length) # Erstelle Remote-Thread (wörtlicher String für Erkennung) `$thread = [System.Threading.Thread]::Start( { } ) "@ # 5. Kodieren Sie den gesamten Injektionsbefehl (einschließlich Marker ::6bbd64163c24f552::) $marker = '::6bbd64163c24f552::' $fullCmd = $marker + $injectCmd $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($fullCmd)) # 6. Führen Sie die bösartige PowerShell über -EncodedCommand aus powershell.exe -EncodedCommand $encoded -
Bereinigungskommandos:
# Beenden Sie alle während des Tests gestarteten Notepad-Instanzen Get-Process notepad -ErrorAction SilentlyContinue | Stop-Process -Force # Entfernen Sie alle temporären Dateien / Module, wenn sie erstellt wurden (nicht in diesem Demo) Write-Host "Bereinigung abgeschlossen."