Migrer le processus Meterpreter pour la stabilité

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans le cadre des tests d'intrusion, après avoir obtenu un accès initial à un système cible avec un outil tel que Metasploit, la connexion établie (ou "session") réside souvent dans le processus qui a été initialement exploité. Il peut s'agir d'un navigateur web, d'un lecteur de documents ou d'une autre application utilisateur. Ces processus peuvent être instables ou être fermés par l'utilisateur à tout moment, ce qui mettrait fin à votre session.

La migration de processus est la technique consistant à déplacer votre session de ce processus initial, potentiellement instable, vers un processus plus stable et à longue durée de vie, tel qu'un processus système central. Cela augmente considérablement la stabilité et la persistance de votre accès. Cela peut également aider à échapper à la détection, car votre code malveillant sera caché au sein d'un processus légitime et fiable.

Dans ce laboratoire, vous apprendrez le flux de travail fondamental de la migration d'un processus Meterpreter. Bien que nous soyons dans un environnement Linux, nous simulerons les étapes que vous suivriez sur un système compromis afin de comprendre cette technique cruciale de post-exploitation.

Obtenir une liste des processus en cours d'exécution avec la commande ps

Dans cette étape, votre première tâche après avoir obtenu un shell est d'inspecter le système. Vous devez voir quels processus sont actuellement en cours d'exécution pour identifier des cibles potentielles de migration. Dans une session Meterpreter réelle, vous utiliseriez la commande ps directement dans l'invite Meterpreter.

Étant donné que nous simulons cela dans un terminal Linux standard, nous utiliserons la commande ps de Linux avec les indicateurs aux pour obtenir une liste détaillée de tous les processus en cours d'exécution. Cela vous donnera une sortie similaire à ce que vous verriez dans un scénario réel.

Exécutez la commande suivante dans votre terminal pour lister tous les processus en cours d'exécution :

ps aux

Vous verrez une longue liste de processus. Portez attention à ces colonnes :

  • USER : L'utilisateur qui possède le processus.
  • PID : L'identifiant du processus (Process ID), un numéro unique qui identifie le processus.
  • COMMAND : La commande qui a lancé le processus.

Voici un exemple tronqué de la sortie :

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0 169444 13136 ?        Ss   01:23   0:02 /sbin/init
labex      10121  0.1  0.2 886980 89284 ?        Sl   01:25   0:05 /usr/lib/firefox/firefox
labex      10345  0.0  0.0 243356 25980 ?        S    01:26   0:00 /usr/lib/xfce4/panel/wrapper-2.0
...

Cette liste vous fournit les informations nécessaires pour commencer à rechercher un processus approprié dans lequel migrer.

Identifier un processus stable dans lequel migrer, comme explorer.exe

Dans cette étape, vous allez analyser la liste des processus de l'étape précédente pour sélectionner une cible appropriée pour la migration. Un bon processus cible doit être :

  1. Stable : Il doit s'agir d'un processus qui s'exécute pendant toute la session utilisateur ou la durée de fonctionnement du système.
  2. Privilèges appropriés : Il doit s'exécuter avec les mêmes privilèges ou des privilèges supérieurs à ceux de votre session actuelle.
  3. Architecture correcte : Il doit correspondre à l'architecture (32 bits ou 64 bits) de votre charge utile Meterpreter.

Sur un système Windows compromis, un exemple classique de processus stable est explorer.exe, qui gère l'interface graphique (bureau, barre des tâches, etc.) et est presque toujours en cours d'exécution lorsqu'un utilisateur est connecté. Un autre objectif courant est svchost.exe.

Dans notre environnement de laboratoire Linux, nous allons simuler cela en identifiant un processus stable similaire, appartenant à l'utilisateur. En regardant la sortie de ps aux, un processus comme xfce4-panel (le panneau du bureau XFCE) est un bon candidat.

Utilisons grep pour filtrer la liste des processus et trouver facilement le processus xfce4-panel. Cela vous aidera à identifier son identifiant de processus (PID).

ps aux | grep xfce4-panel

Votre sortie devrait ressembler à ceci. La deuxième colonne contient le PID.

labex      10345  0.0  0.0 243356 25980 ?        S    01:26   0:00 /usr/lib/xfce4/panel/wrapper-2.0
labex      12345  0.0  0.0  12345  1234 pts/0    S+   01:30   0:00 grep --color=auto xfce4-panel

Dans cet exemple, le PID de xfce4-panel est 10345. Votre PID sera différent. Vous avez maintenant identifié une cible pour la migration.

Utiliser la commande migrate avec l'ID du processus cible

Dans cette étape, vous utiliserez la commande Meterpreter principale pour la migration de processus : migrate. La syntaxe de la commande est simple : migrate <PID>. Il suffit de fournir l'ID du processus dans lequel vous souhaitez vous déplacer.

Étant donné que nous sommes dans un environnement simulé et que nous n'avons pas de session Meterpreter active, nous ne pouvons pas exécuter la commande migrate directement. Au lieu de cela, nous allons simuler cette action en trouvant l'ID de notre processus cible (xfce4-panel) et en écrivant la commande migrate correspondante dans un fichier texte.

Tout d'abord, obtenons l'ID du processus xfce4-panel et stockons-le dans une variable. La commande pgrep est parfaite pour cela.

PID=$(pgrep xfce4-panel | head -n 1)

Cette commande trouve l'ID de xfce4-panel et le stocke dans la variable PID. Maintenant, simulons la commande migrate en l'écrivant dans un fichier nommé simulated_command.txt.

echo "migrate $PID" > simulated_command.txt

Visualisons le fichier pour confirmer que notre commande simulée est correcte.

cat simulated_command.txt

La sortie devrait afficher la commande migrate suivie de l'ID du processus xfce4-panel.

migrate 10345

Vous avez maintenant simulé avec succès l'exécution de la commande migrate.

Vérifier le succès de la migration

Dans cette étape, vous apprendrez comment confirmer que la migration de processus a réussi. Après avoir exécuté la commande migrate dans une session Meterpreter réelle, vous devez vérifier que votre session s'exécute désormais dans le nouveau processus cible.

La commande pour cela est getpid. Avant la migration, getpid renvoie l'ID du processus d'origine, vulnérable. Après une migration réussie, getpid renverra l'ID du nouveau processus stable dans lequel vous avez migré.

Pour simuler cette vérification, nous allons d'abord afficher ce que serait la sortie de getpid. Nous pouvons le faire en affichant l'ID de notre processus cible, xfce4-panel, que nous avons identifié précédemment.

Exécutez la commande suivante pour simuler la vérification :

echo "Verification: If migration were real, 'getpid' would now return $(pgrep xfce4-panel | head -n 1)"

La sortie sera un message de confirmation affichant l'ID cible :

Verification: If migration were real, 'getpid' would now return 10345

En comparant la sortie de getpid avant et après la migration, un testeur d'intrusion peut être assuré que sa session est désormais plus stable et sécurisée au sein du nouveau processus.

Discuter de l'importance de la migration de processus

Dans cette dernière étape, nous résumerons les raisons critiques pour lesquelles la migration de processus est une technique fondamentale en post-exploitation. Comprendre le "pourquoi" est aussi important que de savoir le "comment".

Il existe deux motivations principales pour migrer le processus Meterpreter :

  1. Stabilité et Persistance : C'est la raison la plus courante. L'exploit initial cible souvent une application au niveau utilisateur comme un navigateur web ou un lecteur PDF. Si l'utilisateur ferme cette application, votre session Meterpreter est immédiatement terminée. En migrant vers un processus système central et de longue durée (comme explorer.exe sous Windows), votre session est liée à la session de connexion de l'utilisateur ou même à la durée de fonctionnement du système, ce qui la rend beaucoup plus persistante et fiable.

  2. Discrétion et Évasion : Un processus compromis comme firefox.exe établissant des connexions réseau inhabituelles peut être un signal d'alarme pour les pare-feu, les systèmes de détection d'intrusion (IDS) et les analystes de sécurité. Cependant, un processus comme svchost.exe (le processus Service Host sous Windows) est censé établir des connexions réseau. En cachant votre session à l'intérieur d'un tel processus, votre trafic réseau est moins susceptible d'être examiné, vous permettant d'opérer avec une plus grande discrétion.

Un avantage secondaire peut parfois être l'escalade de privilèges. Si vous pouvez migrer d'un processus s'exécutant en tant qu'utilisateur standard vers un processus s'exécutant avec des privilèges SYSTEM ou root, vous augmentez effectivement vos propres permissions sur la machine cible.

Maîtriser la migration de processus est une étape clé pour passer de la simple obtention d'un accès au maintien d'un contrôle stable et à long terme sur un système cible.

Résumé

Dans ce laboratoire, vous avez parcouru les concepts essentiels et le flux de travail de la migration de processus Meterpreter. Bien que réalisé dans un environnement Linux simulé, vous avez appris les étapes universelles impliquées dans cette technique critique de post-exploitation.

Vous avez appris à :

  • Lister les processus en cours d'exécution pour sonder le système cible à l'aide de la commande ps.
  • Identifier les caractéristiques d'un processus stable adapté à la migration.
  • Simuler l'utilisation de la commande Meterpreter migrate <PID> pour déplacer la session.
  • Comprendre comment la commande getpid est utilisée pour vérifier une migration réussie.

Plus important encore, vous comprenez maintenant que la migration de processus est cruciale pour assurer la stabilité et la discrétion de votre accès lors d'un test d'intrusion, transformant une brèche fragile en une présence persistante.