SOC Prime Bias: Mittel

18 May 2026 18:43 UTC

PureLogs Durch PawsRunner-Steganographie Geliefert

Author Photo
SOC Prime Team linkedin icon Folgen
PureLogs Durch PawsRunner-Steganographie Geliefert
shield icon

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

Simulationsausführung

Voraussetzung: Der Telemetrie- und Baseline-Vorflug-Check muss bestanden haben.

  • Angriffserzählung & Kommandos

    1. 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 Umgebungsvariablen ENC_PAYLOAD.
    2. Stufe 2 – Führen Sie den PowerShell-Entschlüsselungs-Loader aus
      • Ein Einzeiler liest ENC_PAYLOAD, dekodiert die Base64-Zeichenfolge, konstruiert ein .NET AesCryptoServiceProvider, leitet den Schlüssel/IV ab, entschlüsselt die Daten und führt optional den Klartext aus.
    3. 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.
  • 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

  1. 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.
  2. Ü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 AesCryptoServiceProvider Objekten und anschließendes TransformFinalBlock Aufrufe) zu verbessern wird die Resilienz gegen einfache Verschleierung steigern.