
Obfuscateur PowerShell
===============

Invoke-Obfuscation est un obfuscateur de commandes et scripts PowerShell compatible PowerShell v2.0+.
À l'automne 2015, j'ai décidé de commencer à étudier la flexibilité du langage PowerShell et à cataloguer les différentes manières d'accomplir quelques techniques courantes que la plupart des attaquants utilisent régulièrement.
En me concentrant d'abord sur les syntaxes de commandes encodées et de berceaux de téléchargement à distance, j'ai découvert que divers caractères d'échappement qui n'entravaient pas l'exécution de la commande persistaient dans les arguments de la ligne de commande, à la fois dans le processus en cours et dans ce qui est consigné dans les journaux d'événements Security EID 4688 et Sysmon EID 1. Cela m'a conduit à explorer systématiquement les moyens d'obfusquer chaque type de « token » présent dans toute commande ou script PowerShell.
J'ai ensuite exploré des moyens plus obscurs d'effectuer une obfuscation au niveau des chaînes, diverses techniques d'encodage/chiffrement (comme ASCII/hex/octal/binaire et même SecureString), et enfin des techniques de lancement PowerShell pour abstraire les arguments de la ligne de commande de powershell.exe et les repousser vers le processus parent, voire grand-parent.
Les attaquants et les malwares courants ont commencé à utiliser des techniques d'obfuscation extrêmement basiques pour cacher la majeure partie de la commande dans les arguments de la ligne de commande de powershell.exe. J'ai développé cet outil pour aider la Blue Team à simuler des commandes obfusquées basées sur ce que je sais actuellement être syntaxiquement possible dans PowerShell 2.0-5.0, afin qu'elle puisse tester ses capacités de détection de ces techniques.
Le seul but de l'outil est de briser toutes les hypothèses que nous, défenseurs, pourrions avoir sur la façon dont les commandes PowerShell peuvent apparaître sur la ligne de commande. J'espère qu'il encouragera la Blue Team à se concentrer sur la recherche d'indicateurs d'obfuscation sur la ligne de commande, en plus de mettre à jour la journalisation PowerShell pour inclure la journalisation des modules, ScriptBlock et Transcription, car ces sources simplifient la plupart des aspects des techniques d'obfuscation générées par cet outil.
Bien que toutes les couches d'obfuscation aient été développées dans des scripts séparés, la plupart des utilisateurs trouveront que la fonction Invoke-Obfuscation est le moyen le plus simple d'explorer et de visualiser les techniques d'obfuscation actuellement supportées par ce framework.
Le code source d'Invoke-Obfuscation est hébergé sur Github, et vous pouvez le télécharger, le forker et l'examiner à partir de ce dépôt (https://github.com/danielbohannon/Invoke-Obfuscation). Veuillez signaler les problèmes ou demandes de fonctionnalités via le traqueur de bugs Github associé à ce projet.
Pour installer :
Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation
Invoke-Obfuscation est publié sous licence Apache 2.0.
v1.0 - 2016-09-25 DerbyCon 6.0 (Louisville, Kentucky, États-Unis) : Version publique d'Invoke-Obfuscation.
v1.1 - 2016-10-09 SANS DFIR Summit (Prague, République tchèque) : Ajout de la fonctionnalité de réorganisation de l'opérateur de format -f à toutes les fonctions d'obfuscation TOKEN applicables. Ajout également d'options de syntaxe supplémentaires pour la définition des valeurs de variables.
v1.2 - 2016-10-20 CODE BLUE (Tokyo, Japon) : Ajout de l'obfuscation de type TOKEN (cast de type direct avec options d'obfuscation de chaîne pour le nom du type).
v1.3 - 2016-10-22 Hacktivity (Budapest, Hongrie) : Ajout de deux nouveaux LAUNCHERs : CLIP+ et CLIP++. Ajout également d'une syntaxe de conversion de char en tableau supplémentaire (et plus simple) pour toutes les fonctions ENCODING qui ne nécessite pas For-EachObject/%.
v1.4 - 2016-10-28 BruCON (Gand, Belgique) : Ajout de la nouvelle fonction ENCODING BXOR. Amélioration également de la casse aléatoire pour tous les composants de toutes les fonctions ENCODING ainsi que pour les indicateurs d'exécution PowerShell pour tous les LAUNCHERs. Enfin, ajout de l'option abrégée -EP pour -ExecutionPolicy à tous les LAUNCHERs ainsi que la représentation entière optionnelle de l'indicateur d'exécution PowerShell -WindowStyle : Normal (0), Hidden (1), Minimized (2), Maximized (3).
v1.5 - 2016-11-04 Blue Hat (Redmond, Washington, États-Unis) : Ajout du LAUNCHER WMIC avec une certaine randomisation des arguments de ligne de commande WMIC.
v1.6 - 2017-01-24 Blue Hat IL (Tel Aviv, Israël) :
v1.7 - 2017-03-03 nullcon (Goa, Inde) :
v1.8 - 2017-07-27 Black Hat (Las Vegas, Nevada, États-Unis) :
v1.8.1 - 2017-12-19 :
v1.8.2 - 2018-01-04 :