SOC Prime Bias: Mittel

03 Feb. 2026 20:06

Wenn Malware zurückschlägt

Author Photo
Ruslan Mikhalov Leiter der Bedrohungsforschung bei SOC Prime linkedin icon Folgen
Wenn Malware zurückschlägt
shield icon

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.

graph TB %% Class Definitions classDef action fill:#99ccff classDef file fill:#ccffcc classDef process fill:#ffeb99 classDef malware fill:#ff9999 classDef operator fill:#ff9900 %% Nodes – Files and Registry logon_script_file[„<b>Datei</b>: 0a1a98b5f9fc7c62.bat<br/><b>Ort</b>: %APPDATA%\\Microsoft\\…“] class logon_script_file file run_key[„<b>Registrierung</b>: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\bada287ebf“] class run_key file %% Nodes – Techniques (Actions) persistence_run[„<b>Technik</b> – T1037.001 Boot- oder Anmeldeskript-Initialisierung<br/><b>Beschreibung</b>: Versteckte Batch-Datei im %APPDATA%-Verzeichnis platziert und im Run-Key registriert zur Persistenz. „] class persistence_run action powershell_interpreter[„<b>Technik</b> – T1059.001 Befehls- und Skriptinterpreter: PowerShell<br/><b>Beschreibung</b>: Führt dekodierte PowerShell-Skripte mit Umgehung der Ausführungsrichtlinie aus.“] class powershell_interpreter action obfuscation[„<b>Technik</b> – T1027 Verschleierte Dateien oder Informationen<br/><b>Beschreibung</b>: XOR-verschlüsseltes Byte-Array und Logik für Kompilierung nach Lieferung.“] class obfuscation action deobfuscate[„<b>Technik</b> – T1140 Dateien oder Informationen deobfuskieren/dekodieren<br/><b>Beschreibung</b>: Base64- und XOR-Decodierung zur Erzeugung von Shellcode.“] class deobfuscate action reflective_loading[„<b>Technik</b> – T1620 Reflexives Code-Laden<br/><b>Beschreibung</b>: Allokiert Speicher im Zielprozess und schreibt Shellcode.“] class reflective_loading action process_injection[„<b>Technik</b> – T1055.002 Prozesseinschleusung: Portable Executable Injection<br/><b>Beschreibung</b>: Injiziert Shellcode via CreateRemoteThread in svchost.exe und explorer.exe.“] class process_injection action sandbox_evasion[„<b>Technik</b> – T1497 Virtualisierung/Sandbox-Umgehung<br/><b>Beschreibung</b>: Prüft VM- und Sandbox-Umgebung vor Ausführung.“] class sandbox_evasion action indirect_cmd[„<b>Technik</b> – T1202 Indirekte Befehlsausführung<br/><b>Beschreibung</b>: Aktiviert/deaktiviert Task-Manager und Benutzerkontensteuerung über C2.“] class indirect_cmd action uac_bypass[„<b>Technik</b> – T1548.002 Missbrauch des Elevation-Control-Mechanismus: Umgehung der Benutzerkontensteuerung<br/><b>Beschreibung</b>: Deaktiviert UAC und Sicherheitsoberfläche.“] class uac_bypass action scheduled_task[„<b>Technik</b> – T1053 Geplanter Task/Job<br/><b>Beschreibung</b>: Erstellt einen schtasks.exe-Task, um die Nutzlast beim Anmelden auszuführen.“] class scheduled_task action autostart[„<b>Technik</b> – T1547 Boot- oder Anmelde-Autostart-Ausführung<br/><b>Beschreibung</b>: Doppelte Persistenz über Run-Key und geplante Aufgabe.“] class autostart action cred_from_browser[„<b>Technik</b> – T1555.003 Anmeldeinformationen aus Webbrowsern<br/><b>Beschreibung</b>: Gespeicherte Anmeldeinformationen werden gesammelt.“] class cred_from_browser action alternate_auth[„<b>Technik</b> – T1550.004 Verwendung alternativer Authentifizierungsmaterialien: Web-Sitzungscookie<br/><b>Beschreibung</b>: Extrahiert Sitzungscookies und Tokens.“] class alternate_auth action archive_data[„<b>Technik</b> – T1560.002 Gesammelte Daten archivieren: Archivierung über Bibliothek<br/><b>Beschreibung</b>: Gesammelte Anmeldeinformationen werden im Speicher gezippt.“] class archive_data action compression[„<b>Technik</b> – T1027.015 Kompression<br/><b>Beschreibung</b>: Daten vor der Exfiltration in ZIP komprimieren.“] class compression action exfil_webhook[„<b>Technik</b> – T1567.004 Exfiltration über Webhook<br/><b>Beschreibung</b>: ZIP-Archiv wird an Discord Webhook und Telegram-Bot gesendet.“] class exfil_webhook action web_service[„<b>Technik</b> – T1102.003 Web-Service: Einwegkommunikation<br/><b>Beschreibung</b>: HTTPS-Verbindung zu Discord/Telegram für Exfiltration.“] class web_service action compile_after_delivery[„<b>Technik</b> – T1027.004 Kompilierung nach Lieferung<br/><b>Beschreibung</b>: Kompiliert C#-Interop-Code zur Laufzeit für Injektion.“] class compile_after_delivery action stripped_payload[„<b>Technik</b> – T1027.008 Bereinigte Nutzlast<br/><b>Beschreibung</b>: Endgültiges .NET-Assembly ohne Metadaten.“] class stripped_payload action embedded_payload[„<b>Technik</b> – T1027.009 Eingebettete Nutzlast<br/><b>Beschreibung</b>: Donut-Shellcode bettet .NET-Nutzlast ein.“] class embedded_payload action %% Nodes – Files Produced ps_script_file[„<b>Datei</b>: ps_7b948266.ps1<br/><b>Inhalt</b>: Decodiert Base64-Nutzlast und führt sie aus.“] class ps_script_file file donut_shellcode[„<b>Datei</b>: decoded.bin<br/><b>Typ</b>: Vom Donut generierter Shellcode“] class donut_shellcode file %% Nodes – Processes svchost_process[„<b>Prozess</b>: svchost.exe“] class svchost_process process explorer_process[„<b>Prozess</b>: explorer.exe“] class explorer_process process %% Nodes – Malware credential_stealer[„<b>Malware</b>: .NET-Stealer<br/><b>Beschreibung</b>: Extrahiert Passwörter, Cookies und Tokens aus Browsern.“] class credential_stealer malware %% Connections – Attack Flow logon_script_file –>|registriert in| run_key run_key –>|ermöglicht| persistence_run persistence_run –>|führt aus| powershell_interpreter powershell_interpreter –>|führt aus| ps_script_file ps_script_file –>|enthält| obfuscation obfuscation –>|erfordert| deobfuscate deobfuscate –>|produziert| donut_shellcode donut_shellcode –>|geladen von| reflective_loading reflective_loading –>|schreibt in| svchost_process svchost_process –>|injiziert via| process_injection process_injection –>|Ziel| explorer_process process_injection –>|verwendet| compile_after_delivery process_injection –>|verwendet| embedded_payload explorer_process –>|führt aus| credential_stealer credential_stealer –>|extrahiert| cred_from_browser credential_stealer –>|extrahiert| alternate_auth cred_from_browser –>|gesammelte Daten| archive_data archive_data –>|komprimiert von| compression compression –>|gesendet via| exfil_webhook exfil_webhook –>|verwendet| web_service sandbox_evasion –>|prüft vor| powershell_interpreter indirect_cmd –>|steuert| uac_bypass scheduled_task –>|Fallback-Persistenz| autostart autostart –>|stellt sicher| persistence_run

Angriffsablauf

Erkennungen

Möglicher Missbrauch von Telegram als Kommando- und Kontrollkanal (via dns_query)

SOC Prime Team
02 Feb 2026

Mögliche Persistenzpunkte [ASEPs – Software/NTUSER Hive] (via registry_event)

SOC Prime Team
02 Feb 2026

Aufruf verdächtiger Windows-API-Funktionen von PowerShell (via powershell)

SOC Prime Team
02 Feb 2026

Verdächtige PowerShell-Strings (via powershell)

SOC Prime Team
02 Feb 2026

Mögliche Verwendung von Schtasks oder AT für Persistenz (via cmdline)

SOC Prime Team
02 Feb 2026

Verdächtiger Versuch der Manipulation des Alternativen Datenstroms (ADS) Zone.Identifier (via process_creation)

SOC Prime Team
02 Feb 2026

PowerShell-Ausführung einer Datei in einem verdächtigen Verzeichnis unter Verwendung von Bypass-Ausführungsrichtlinie (via cmdline)

SOC Prime Team
02 Feb 2026

IOCs (DestinationIP) zur Erkennung: Wenn Malware zurückspricht

SOC Prime AI-Regeln
02 Feb 2026

IOCs (SourceIP) zur Erkennung: Wenn Malware zurückspricht

SOC Prime AI-Regeln
02 Feb 2026

IOCs (HashMd5) zur Erkennung: Wenn Malware zurückspricht

SOC Prime AI-Regeln
02 Feb 2026

IOCs (HashSha1) zur Erkennung: Wenn Malware zurückspricht

SOC Prime AI-Regeln
02 Feb 2026

Persistenz über Run-Schlüssel für Batch-Datei-Ausführung [Windows-Registrierungsereignis]

SOC Prime AI-Regeln
02 Feb 2026

Erkennung von Speicherinjektion und Nutzlastausführung via PowerShell [Windows PowerShell]

SOC Prime AI-Regeln
02 Feb 2026

Erkennung von Batch- und PowerShell-Ausführung für versteckte Malware-Persistenz [Windows-Prozesserstellung]

SOC Prime AI-Regeln
02 Feb 2026

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:

    1. 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).
    2. Verschleierung – Die heruntergeladene Nutzlast ist mit dem Schlüssel 0xAA XOR-verschleiert. Das Skript enthält den wörtlichen String „XOR“, um die zweite Klausel der Regel zu erfüllen.
    3. Dekodierung & Entschleierung – Der Angreifer dekodiert den Base64-String, wendet die XOR-Operation im Speicher an und speichert den klaren Shellcode in einem Byte-Array.
    4. 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“.
    5. 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."