Glossar
Kodierter Befehl (-EncodedCommand)
PowerShell-Parameter für Base64-kodierten UTF-16LE-Befehlstext – übersteht Quoting unbeschadet und verschleiert zugleich die Absicht.
-EncodedCommand ist ein Parameter von powershell.exe (und pwsh), der einen Befehl ausführt, der als Base64 seiner UTF-16LE-Bytes übergeben wird. Er wird häufig zu -enc oder -e abgekürzt. Der legitime Zweck besteht darin, einen Befehl mit Anführungszeichen, geschweiften Klammern oder Zeilenumbrüchen durch eine andere Shell oder ein Verwaltungswerkzeug zu reichen, ohne dass er verfälscht wird. Genau diese Eigenschaft macht ihn auch zur gängigsten Methode, einen bösartigen Einzeiler vor einem flüchtigen Blick auf die Befehlszeile eines Prozesses zu verbergen.
Warum es für Untersuchungen wichtig ist
Ein kodierter Befehl ist für sich genommen nicht bösartig, aber in von Hand eingegebener Administration selten und in Malware-Launchern häufig, daher verdient er jedes Mal einen genaueren Blick. Wo Sie ihn sehen, hängt vom Artefakt ab: Die Skriptblockprotokollierung zeichnet den Block in der Regel nach der Dekodierung auf, während die Befehlszeile in den Ereignissen 400 und 800 des klassischen Protokolls, der Verlauf von PSReadLine und Transkripte die kodierte Form behalten, sodass Sie ihn dort selbst dekodieren müssen.
Das Dekodieren ist eine reine Textoperation: Das Argument wird Base64-dekodiert, dann werden die Bytes als UTF-16LE gelesen. Der Befehl wird dabei nie ausgeführt. Das Ergebnis ist häufig eine weitere Schicht, etwa ein gzip- oder deflate-Stream, [char]-Codes, Zeichenkettenverkettung oder der Formatoperator -f, die sich jeweils ebenfalls als Text rückgängig machen lassen.
Beispiel
Ein typischer Launcher, aufgezeichnet im Feld HostApplication eines Ereignisses 400:
powershell.exe -nop -w hidden -enc VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAnAHMAeQBuAHQAaABlAHQAaQBjACAAcwBhAG0AcABsAGUAJwA=
Er wird zu Write-Output 'synthetic sample' dekodiert. Beachten Sie die sich wiederholenden A-Zeichen im Base64: Sie stammen vom Null-Byte an höherwertiger Stelle jedes ASCII-Zeichens in UTF-16LE und sind ein schnelles visuelles Erkennungsmerkmal. Der Parser dekodiert das Argument, zeigt jede Schicht an und markiert zusätzlich das versteckte Fenster, das damit einhergeht.
Verwandte Begriffe
- Download-Cradle, die Nutzlast, die am häufigsten auf diese Weise verborgen wird
- Invoke-Expression (IEX), das dekodierte Zeichenketten ausführt
- Umgehung der Ausführungsrichtlinie, typischerweise in derselben Befehlszeile
- Klassisches Windows-PowerShell-Protokoll, in dem die kodierte Befehlszeile aufgezeichnet wird
Fügen Sie einen kodierten Befehl in die Deobfuskationsansicht des PowerShell Parser ein, und lesen Sie unter kodierte Befehle und Obfuskation dekodieren jede Schicht im Detail nach.