Glossaire
Commande encodée (-EncodedCommand)
Paramètre PowerShell qui prend une chaîne Base64 de texte en UTF-16LE, utilisé pour passer des scripts résistant aux guillemets — et pour masquer l'intention.
-EncodedCommand est un paramètre de powershell.exe (et de pwsh) qui exécute une commande fournie sous forme de Base64 de ses octets UTF-16LE. Il est souvent abrégé en -enc ou -e. Son usage légitime consiste à faire passer une commande contenant des guillemets, des accolades ou des sauts de ligne à travers un autre shell ou un outil d'administration sans qu'elle soit altérée. Cette même propriété en fait le moyen le plus courant de cacher une ligne malveillante à un coup d'œil rapide sur la ligne de commande d'un processus.
Pourquoi c'est important en investigation
Une commande encodée n'est pas malveillante en soi, mais elle est rare dans l'administration tapée à la main et fréquente dans les lanceurs de logiciels malveillants : elle mérite donc un examen à chaque fois. L'endroit où vous la voyez dépend de l'artefact : la journalisation des blocs de script enregistre généralement le bloc après décodage, tandis que la ligne de commande des événements 400 et 800 du journal classique, l'historique PSReadLine et les transcriptions conservent la forme encodée, qu'il faut alors décoder.
Le décodage est une opération purement textuelle : on décode l'argument en Base64, puis on lit les octets comme de l'UTF-16LE. La commande n'est jamais exécutée. Le résultat est souvent une nouvelle couche, par exemple un flux gzip ou deflate, des codes [char], une concaténation de chaînes ou l'opérateur de format -f, chacune pouvant elle aussi être inversée sous forme de texte.
Exemple
Un lanceur typique, enregistré dans le champ HostApplication d'un événement 400 :
powershell.exe -nop -w hidden -enc VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAnAHMAeQBuAHQAaABlAHQAaQBjACAAcwBhAG0AcABsAGUAJwA=
Il se décode en Write-Output 'synthetic sample'. Notez les caractères A répétés dans le Base64 : ils proviennent de l'octet de poids fort nul de chaque caractère ASCII en UTF-16LE et constituent un indice visuel rapide. Le parseur décode l'argument, affiche chaque couche et signale également la fenêtre masquée qui l'accompagne.
Termes associés
- Cradle de téléchargement, la charge utile le plus souvent cachée de cette façon
- Invoke-Expression (IEX), qui exécute les chaînes décodées
- Contournement de la stratégie d'exécution, généralement sur la même ligne de commande
- Journal classique Windows PowerShell, où la ligne de commande encodée est enregistrée
Collez une commande encodée dans la vue de désobfuscation de PowerShell Parser, et lisez décoder les commandes encodées et l'obfuscation pour le détail de chaque couche.