PureLogs Durch PawsRunner-Steganographie Geliefert
Detection stack
- AIDR
- Alert
- ETL
- Query
Zusammenfassung
Die Kampagne basiert auf einer Phishing-E-Mail mit einem TXZ-Archiv, das einen JavaScript-Loader liefert, der Umgebungsvariablen setzt und conhost.exe im kopflosen Modus startet. Der Loader entschlüsselt dann eine .NET-Assembly namens PawsRunner, die PNG-Bilder mit verstecktem, verschlüsseltem Inhalt über steganographische Techniken abruft. Aus diesen Bildern extrahiert die Malware die endgültige Nutzlast: den PureLogs .NET-Infostealer. Sobald aktiviert, verbindet sich PureLogs mit einem Remote-Kommandoserver über HTTPS und exfiltriert Browser-Anmeldedaten sowie Systeminformationen.
Untersuchung
Die Analyse ergab, dass der JavaScript-Loader Befehle aus Prozessumgebungsvariablen abruft, PowerShell mit einem versteckten Fensterflag startet und eine AES-verschlüsselte Nutzlast entschlüsselt, die über .NET-Reflexion ausgeführt wird. PawsRunner wechselt zwischen drei Netzwerk-APIs und drei verschiedenen User-Agent-Strings beim Abrufen von PNG-Dateien, analysiert dann iTXt and IEND -Blöcke, um die versteckten Daten zu lokalisieren, und entschlüsselt die nächste Stufe mit RC4. PureLogs verwendet wiederum TripleDES und Gzip, um eine DLL-Downloader zu laden, stellt TLS-geschützte HTTP-Anfragen an bestimmte Endpunkte und sammelt eine breite Palette von browserbezogenen Daten vom Opfersystem.
Abschwächung
Organisationen sollten TXZ-Anhänge am E-Mail-Gateway blockieren, nach conhost.exe Instanzen suchen, die ohne sichtbares Fenster laufen, und PowerShell erkennen, das mit dem -w hidden Flag gestartet wurde. Sicherheitsteams sollten auch Signaturen für sowohl PawsRunner als auch PureLogs bereitstellen, ausgehenden Datenverkehr zur identifizierten Command-and-Control-Domain und IP-Adresse beschränken und die Ausführung nicht signierter .NET-Assemblies begrenzen. Wo möglich, sollte Steganographie-Erkennung auf verdächtige eingehende Bilddateien angewendet werden.
Reaktion
Wenn diese Aktivität entdeckt wird, isolieren Sie den betroffenen Endpunkt, beenden Sie verdächtige conhost.exe und PowerShell-Prozesse und entfernen Sie alle abgelegten .NET-Binärdateien vom System. Kompromittierte Anmeldedaten sollten widerrufen, Multi-Faktor-Authentifizierung durchgesetzt und gespeicherte Browser-Passwörter zurückgesetzt werden. Ermittler sollten auch Netzwerkforensik durchführen, um zu bestätigen, dass keine zusätzliche Kommando- und Kontrollkommunikation stattgefunden hat, und Abhilfeschritte zur Vermeidung einer erneuten Infektion anwenden.
"graph TB %% Klassendefinitionen classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ffdd99 classDef malware fill:#ff9999 %% Knoten initial_phishing["<b>Aktion</b> – <b>T1566.001 Spearphishing-Anhang</b><br/>Angreifer sendet eine Phishing-E-Mail mit einem TXZ-Archivanhang, der die bösartige Nutzlast enthält."] class initial_phishing action malicious_archive["<b>Malware</b> – <b>Name</b>: Bösartiges TXZ-Archiv<br/><b>Beschreibung</b>: Archiv, das zur Bereitstellung der initialen JavaScript-Nutzlast verwendet wird."] class malicious_archive malware user_execution["<b>Aktion</b> – <b>T1204.004 Benutzer-Ausführung</b><br/>Opfer extrahiert das Archiv, das JavaScript ruft PowerShell im versteckten Modus auf und liest Befehle aus Umgebungsvariablen."] class user_execution action powershell_loader["<b>Prozess</b> – <b>Name</b>: PowerShell-Loader<br/><b>Beschreibung</b>: Führt entschlüsselte .NET-Assembly über Reflexion aus, ohne auf die Festplatte zu schreiben."] class powershell_loader process defense_compile["<b>Aktion</b> – <b>T1027.004 Kompilieren nach Lieferung</b><br/>Entschlüsselte .NET-Assembly wird im Speicher über Reflexion geladen."] class defense_compile action defense_compress["<b>Aktion</b> – <b>T1027.015 Kompression</b><br/>Nutzlast wird AESu2011entschlüsselt und anschließend mit Gzip dekomprimiert."] class defense_compress action defense_stego["<b>Aktion</b> – <b>T1027.003 Steganographie</b><br/>Loader lädt PNG-Bilder herunter und extrahiert versteckte verschlüsselte Daten aus iTXt/IEND-Blöcken."] class defense_stego action masquerade_icon["<b>Aktion</b> – <b>T1036.008 Vortäuschung</b><br/>Binary verwendet Katzenbilder als Anwendungssymbol, um harmlos zu erscheinen."] class masquerade_icon action c2_encrypted["<b>Aktion</b> – <b>T1573 Verschlüsselter Kanal</b><br/>Weitere C2-Kommunikation erfolgt über HTTPS mit AESu2011256 verschlüsselten Nutzdaten."] class c2_encrypted action credential_access["<b>Aktion</b> – <b>T1555.003 Anmeldedaten aus Webbrowsern</b><br/>PureLogs listet Browser auf und extrahiert gespeicherte Passwörter, Cookies und Kryptou2011wallet-Dateien."] class credential_access action purelogs_tool["<b>Werkzeug</b> – <b>Name</b>: PureLogs<br/><b>Beschreibung</b>: Anmeldeu2011-dump-Werkzeug, das Browserdaten sammelt."] class purelogs_tool tool collection_archive["<b>Aktion</b> – <b>T1560.003 Gesammelte Daten archivieren</b><br/>Gesammelte Daten werden mit Gzip komprimiert und vor Exfiltration mit AES verschlüsselt."] class collection_archive action exfiltration_http["<b>Aktion</b> – <b>T1048.003 Exfiltration über unverschlüsseltes Nichtu2011C2-Protokoll</b><br/>Daten werden über HTTP POST-Anfragen an mehrere externe Endpunkte gesendet."] class exfiltration_http action %% Verbindungen initial_phishing –>|liefert| malicious_archive malicious_archive –>|löst aus| user_execution user_execution –>|führt aus| powershell_loader powershell_loader –>|führt aus| defense_compile defense_compile –>|verwendet| defense_compress defense_compress –>|verwendet| defense_stego defense_stego –>|ermöglicht| masquerade_icon masquerade_icon –>|etabliert| c2_encrypted c2_encrypted –>|ermöglicht| credential_access credential_access –>|nutzt| purelogs_tool credential_access –>|sammelt| collection_archive collection_archive –>|exfiltriert über| exfiltration_http %% Klassen Zuweisungen class initial_phishing action class malicious_archive malware class user_execution action class powershell_loader process class defense_compile action class defense_compress action class defense_stego action class masquerade_icon action class c2_encrypted action class credential_access action class purelogs_tool tool class collection_archive action class exfiltration_http action "
Angriffsfluss
Erkennungen
Die Möglichkeit der Ausführung über versteckte PowerShell-Befehlszeilen (via cmdline)
Ansicht
LOLBAS WScript / CScript (via process_creation)
Ansicht
Rufen Sie verdächtige .NET-Methoden aus PowerShell auf (via powershell)
Ansicht
Mögliche PowerShell-Verschleierungsindikatoren (via powershell)
Ansicht
LOLBAS Conhost (via cmdline)
Ansicht
IOCs (HashSha256) zur Erkennung: PureLogs: Lieferung über PawsRunner Steganography
Ansicht
IOCs (SourceIP) zur Erkennung: PureLogs: Lieferung über PawsRunner Steganography
Ansicht
IOCs (DestinationIP) zur Erkennung: PureLogs: Lieferung über PawsRunner Steganography
Ansicht
PowerShell-AES-Entschlüsselung von Umgebungsvariablen [Windows Powershell]
Ansicht
Erkennung der Ausführung bösartiger Prozesse über versteckte Conhost- und PowerShell-Prozesse [Windows Process Creation]
Ansicht
Simulationsausführung
Voraussetzung: Der Telemetrie- und Baseline-Vorflug-Check muss bestanden haben.
-
Angriffserzählung & Kommandos
- Stufe 1 – Bereiten Sie die verschlüsselte Nutzlast vor
- Der Angreifer erstellt eine kleine Dummy-Nutzlast (
"geheim"), verschlüsselt diese mit AES-256 mit einem bekannten Schlüssel, kodiert den Chiffretext in Base64 und speichert ihn in einer UmgebungsvariablenENC_PAYLOAD.
- Der Angreifer erstellt eine kleine Dummy-Nutzlast (
- Stufe 2 – Führen Sie den PowerShell-Entschlüsselungs-Loader aus
- Ein Einzeiler liest
ENC_PAYLOAD, dekodiert die Base64-Zeichenfolge, konstruiert ein .NETAesCryptoServiceProvider, leitet den Schlüssel/IV ab, entschlüsselt die Daten und führt optional den Klartext aus.
- Ein Einzeiler liest
- Stufe 3 – Generieren Sie Erkennungstelemetrie
- Der PowerShell-Befehl enthält das wörtliche Wort „AES“ (z.B.
New-Object System.Security.Cryptography.AesCryptoServiceProvider) und wird als EventID 4104 protokolliert, um die Erkennungsregel zu erfüllen.
- Der PowerShell-Befehl enthält das wörtliche Wort „AES“ (z.B.
- Stufe 1 – Bereiten Sie die verschlüsselte Nutzlast vor
-
Regressionstestskript
# ------------------------------------------------- # PowerShell AES Decryption Simulation (Löst Erkennung aus) # ------------------------------------------------- # 1. Definieren Sie einen statischen 256-Bit-Schlüssel und IV (für Demo-Zwecke) $key = [byte[]](0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10, 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20) $iv = [byte[]](0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0) # 2. Klartext-Nutzlast (Beispiel) $plain = [System.Text.Encoding]::UTF8.GetBytes("geheime Daten") # 3. Verschlüsseln Sie die Nutzlast mit AES (CBC, PKCS7) $aes = [System.Security.Cryptography.AesCryptoServiceProvider]::new() $aes.Key = $key $aes.IV = $iv $aes.Mode = [System.Security.Cryptography.CipherMode]::CBC $aes.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7 $encryptor = $aes.CreateEncryptor() $cipherBytes = $encryptor.TransformFinalBlock($plain,0,$plain.Length) $cipherB64 = [Convert]::ToBase64String($cipherBytes) # 4. Speichern Sie den Chiffretext in einer Umgebungsvariablen # 5. Entschlüsselungs-Loader – die genaue Zeile, die protokolliert wird (enthält "AES") $loader = @" `$enc = [System.Environment]::GetEnvironmentVariable('ENC_PAYLOAD') `$bytes = [Convert]::FromBase64String(`$enc) `$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider `$aes.Key = $($key -join ',') `$aes.IV = $($iv -join ',') `$decryptor = `$aes.CreateDecryptor() `$plain = `$decryptor.TransformFinalBlock(`$bytes,0,`$bytes.Length) `$result = [System.Text.Encoding]::UTF8.GetString(`$plain) Write-Output `"Entschlüsselt: `$result`" "@ # Führen Sie den Loader aus (wird als EventID 4104 erfasst) Invoke-Expression $loader -
Aufräumbefehle
# Entfernen Sie die Umgebungsvariable # Löschen Sie alle temporären Variablen aus der Sitzung Remove-Variable -Name key,iv,plain,cipherBytes,cipherB64,loader -ErrorAction SilentlyContinue
Post‑Simulationsvalidierung
- Führen Sie die Validierungsabfrage (KQL-Beispiel oben aus), aber filtern Sie nach
ScriptBlockText enthält "AES"um zu bestätigen, dass die Erkennung ausgelöst wurde. - Überprüfen Sie die Alarmdetails im SIEM; verifizieren Sie, dass der Alarmname mit der Regel übereinstimmt (falls definiert) und dass die Schwere als Hoch.
Berichtsbedingungen
- Die Regel erkennt erfolgreich das einfache Nutzungsszenario von „AES“.
- Gegner können entgehen, indem sie das Wort aufteilen (z.B.
"AE"+"S"), die .NET-Klasse über Reflexion laden oder die Entschlüsselung in kompilierten Binärdateien durchführen. - Die Regel durch Verhaltensindikatoren (Verwendung von Umgebungsvariablen für Chiffretext, hoch-Entropie-Strings, Erstellung von
AesCryptoServiceProviderObjekten und anschließendesTransformFinalBlockAufrufe) zu verbessern wird die Resilienz gegen einfache Verschleierung steigern.