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.
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.