
Une collection de techniques, d'exemples et un peu de théorie pour obfusquer manuellement des scripts PowerShell afin de contourner les antivirus, compilée à des fins éducatives. Le contenu de ce dépôt est le résultat de recherches personnelles, incluant des lectures en ligne et des essais par essais-erreurs menés en laboratoire et lors de tests d'intrusion.
Une collection de techniques, d'exemples et un peu de théorie pour obfusquer manuellement des scripts PowerShell afin de contourner la détection basée sur les signatures, compilée à des fins éducatives. Le contenu de ce dépôt est le résultat de recherches personnelles, notamment la lecture de documents en ligne et des tentatives par essais et erreurs en laboratoire et lors de tests d'intrusion. Vous ne devez rien tenir pour acquis.
Présentation vidéo YouTube : youtube.com/watch?v=tGFdmAh_lXE
⚠️ Avertissement : L'utilisation des techniques et des concepts décrits dans ce dépôt pour obtenir un accès non autorisé à des systèmes que vous n'avez pas la permission de tester est illégale. Vous êtes responsable de vos actes. Ne soyez pas malveillant.
Le terme scientifique entropie, généralement défini comme la mesure du hasard ou du désordre d'un système, est important dans l'évasion antivirus. En effet, les logiciels malveillants contiennent souvent du code hautement aléatoire, chiffré et/ou encodé (obfusqué) afin de rendre son analyse et donc sa détection difficiles. Parmi diverses méthodes, les antivirus utilisent l'analyse de l'entropie pour identifier les fichiers et charges utiles potentiellement malveillants.
Il est important de comprendre ce concept car, lors de l'obfuscation d'un code, vous devez garder à l'esprit la variation d'entropie créée par les modifications que vous choisissez d'apporter. Casser les signatures est facile, mais si vous ne prêtez pas attention au niveau d'entropie, les antivirus/EDR sophistiqués le verront.
Un principe à garder à l'esprit : Plus l'entropie est grande, plus il est probable que les données soient obfusquées ou chiffrées, et plus il est probable que le fichier/la charge utile soit malveillant. Heureusement, il existe des moyens de la réduire.
Claude E. Shannon a introduit une formule dans son article de 1948 A Mathematical Theory of Communication qui peut être utilisée pour mesurer l'entropie d'un ensemble de données. Voici une implémentation Python simple de l'entropie de Shannon que vous pouvez utiliser pour mesurer l'entropie des charges utiles que vous développez :
#!/bin/python3
# Usage: python3 entropy.py <file>
import math, sys
def entropy(string):
"Calculates the Shannon entropy of a UTF-8 encoded string"
# decode the string as UTF-8
unicode_string = string.decode('utf-8')
# get probability of chars in string
prob = [ float(unicode_string.count(c)) / len(unicode_string) for c in dict.fromkeys(list(unicode_string)) ]
# calculate the entropy
entropy = - sum([ p * math.log(p) / math.log(2.0) for p in prob ])
return entropy
f = open(sys.argv[1], 'rb')
content = f.read()
f.close()
print(entropy(content))
Vous pouvez également utiliser ce calculateur d'entropie de Shannon en ligne ou l'outil Sigcheck.exe de Microsoft avec l'option -a.
La chose mature et élégante à faire avant de se lancer dans des tests d'obfuscation par essais et erreurs pour obtenir une variante de charge utile non détectée est d'identifier la ou les parties d'un script qui déclenchent la détection de logiciels malveillants. Surtout dans les scripts courts comme les commandes C2, vous pourriez être en mesure d'apporter des modifications insignifiantes et de passer inaperçu sur-le-champ.
Un excellent outil pour identifier ces déclencheurs est AMSItrigger. Voici un exemple d'utilisation avec un fichier contenant un script malveillant. La zone rouge signifie la partie sur laquelle l'obfuscation devrait être appliquée :

Vous pouvez également identifier les déclencheurs manuellement en exécutant un script morceau par morceau.
Lors de l'obfuscation de scripts, il devrait être prioritaire de remplacer les noms de variables/classes/fonctions par des noms aléatoires. Ainsi, en combinaison avec d'autres techniques, vous pourrez contourner la détection facilement. Mais vous devez garder à l'esprit l'entropie des charges utiles que vous développez. Prenons le script de reverse shell standard suivant, généralement détecté par la plupart, sinon tous, les antivirus :

Considérez maintenant la version obfusquée suivante :

Dans cette version, tous les noms de variables ont été remplacés par des noms aléatoires de 32 caractères. J'ai également remplacé (pwd).Path par $(gl). La charge utile a une entropie de Shannon de 4.96. Au moment où j'écris ceci, elle n'est pas détectée par MS Defender et un tas d'autres produits :
