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/>Der Angreifer sendet eine Phishing-E-Mail mit einem TXZ-Archiv als Anhang, das die schädliche Payload enthält.“] class initial_phishing action malicious_archive[„<b>Malware</b> – <b>Name</b>: Bösartiges TXZ-Archiv<br/><b>Beschreibung</b>: Archiv zur Bereitstellung der initialen JavaScript-Payload.“] class malicious_archive malware user_execution[„<b>Aktion</b> – <b>T1204.004 Benutzerausführung</b><br/>Das Opfer entpackt das Archiv, woraufhin JavaScript PowerShell im versteckten Modus startet und Befehle aus Umgebungsvariablen liest.“] class user_execution action powershell_loader[„<b>Prozess</b> – <b>Name</b>: PowerShell-Loader<br/><b>Beschreibung</b>: Führt eine entschlüsselte .NET-Assembly per Reflection aus, ohne sie auf die Festplatte zu schreiben.“] class powershell_loader process defense_compile[„<b>Aktion</b> – <b>T1027.004 Kompilierung nach Bereitstellung</b><br/>Die entschlüsselte .NET-Assembly wird per Reflection in den Speicher geladen.“] class defense_compile action defense_compress[„<b>Aktion</b> – <b>T1027.015 Komprimierung</b><br/>Die Payload wird mit AES entschlüsselt und anschließend mittels Gzip dekomprimiert.“] class defense_compress action defense_stego[„<b>Aktion</b> – <b>T1027.003 Steganografie</b><br/>Der Loader lädt PNG-Bilder herunter und extrahiert versteckte verschlüsselte Daten aus iTXt-/IEND-Abschnitten.“] class defense_stego action masquerade_icon[„<b>Aktion</b> – <b>T1036.008 Tarnung</b><br/>Die Binärdatei verwendet Katzenbilder als Anwendungssymbol, um harmlos zu wirken.“] class masquerade_icon action c2_encrypted[„<b>Aktion</b> – <b>T1573 Verschlüsselter Kanal</b><br/>Weitere C2-Kommunikation erfolgt über HTTPS mit AES-256-verschlüsselten Payloads.“] class c2_encrypted action credential_access[„<b>Aktion</b> – <b>T1555.003 Zugangsdaten aus Webbrowsern</b><br/>PureLogs durchsucht Browser und extrahiert gespeicherte Passwörter, Cookies und Krypto-Wallet-Dateien.“] class credential_access action purelogs_tool[„<b>Werkzeug</b> – <b>Name</b>: PureLogs<br/><b>Beschreibung</b>: Dienstprogramm zum Sammeln von Zugangsdaten aus Browserdaten.“] 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 der Exfiltration mit AES verschlüsselt.“] class collection_archive action exfiltration_http[„<b>Aktion</b> – <b>T1048.003 Exfiltration über unverschlüsseltes Nicht-C2-Protokoll</b><br/>Die Daten werden per HTTP-POST-Anfragen an mehrere externe Endpunkte gesendet.“] class exfiltration_http action initial_phishing –>|liefert| malicious_archive malicious_archive –>|löst_aus| user_execution user_execution –>|führt_aus| powershell_loader powershell_loader –>|führt_durch| 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 –>|verwendet| purelogs_tool credential_access –>|sammelt| collection_archive collection_archive –>|exfiltriert_über| exfiltration_http
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.