Inside Out - Blog CyberSécurité Blog   /  

Comment utiliser Volatility pour l’analyse de la mémoire

How to Use Volatility for Memory Forensics and Analysis | Varonis

Si vous travaillez dans le domaine de la réponse aux incidents, vous comprenez à quel point il est essentiel d’obtenir dès que possible des analyses fiables sur les appareils compromis, le plus souvent sous la forme de journaux d’événements ou d’images de disque dur. 

Ces deux méthodes peuvent s’avérer problématiques et fastidieuses. En extrayant les journaux d’événements d’un appareil, vous pouvez facilement vous retrouver confronté à des millions de lignes de log, dont la compréhension demande du temps. Vous pouvez présenter ces journaux à une plateforme qui facilitera l’analyse, ou exécuter des requêtes manuelles sur les données à l’aide de la ligne de commande Linux.

Les images de disque dur peuvent être très longues à capturer et à transférer en raison de la taille des volumes, et cela ne tient pas compte des analyses qu’il reste à effectuer. C’est pour cela qu’en cas d’incident, je commence toujours par me demander « Peut-on capturer la mémoire ? »

En effet, la mémoire ou RAM d’un appareil est de plus petite taille qu’un disque dur, et elle est facile à capturer. Une fois l’opération effectuée, vous pouvez rapidement analyser le résultat à l’aide de l’un de mes outils préférés de réponse aux incidents : Volatility.

Dans cet article, vous allez découvrir Volatility, comment l’installer et surtout comment l’utiliser.

À savoir avant de commencer

En raison du très grand nombre de fonctionnalités de Volatility, nous n’allons pas vous en présenter une liste exhaustive. Cette introduction à l’utilisation de l’outil vous donnera des connaissances de base que vous pourrez développer ultérieurement.

Avant d’entrer dans le vif du sujet et de découvrir Volatility, vous devez comprendre certains concepts clés :

  • Que sont les données volatiles ?
  • Qu’est-ce qu’un vidage mémoire ?
  • Comment capturer la RAM de manière fiable pour les analyses
  • Comment capturer la RAM d’un appareil physique
  • Comment capturer la RAM d’une machine virtuelle

Heureusement, j’ai déjà abordé ces sujets dans un guide très utile, disponible ici.

Si vous êtes déjà à l’aise avec les sujets ci-dessus, alors vous êtes prêt à découvrir Volatility.

Comment installer Volatility

Avant de commencer, sachez qu’il existe plusieurs versions de Volatility. La plus récente est Volatility 3, qui est la version à laquelle je ferai référence dans cet article.

Avant la version 3, lorsque vous utilisiez l’outil pour analyser un vidage mémoire, il fallait spécifier le système d’exploitation de la machine concernée pour que Volatility fonctionne. Cela pouvait souvent se révéler fastidieux, en fonction de l’architecture de l’appareil et de la présence ou non d’un service pack spécifique.

Avec Volatility 3, le système d’exploitation est détecté automatiquement. Autrement dit, vous pouvez démarrer l’analyse de la RAM capturée immédiatement.

Pour télécharger la version la plus récente de Volatility, exécutez la commande suivante :

git clone https://github.com/volatilityfoundation/volatility3.git

Un dossier nommé « volatility3 » est créé. Accédez à cet emplacement pour en afficher les fichiers.

Installez les dépendances requises afin de permettre à Volatility de fonctionner sans problème.

pip3 install -r requirements.txt

Volatility devrait normalement être installé. Pour le vérifier, utilisez la syntaxe suivante afin de lancer le fichier d’aide :

python3 vol.py -h

Vous êtes prêt à utiliser Volatility. 

Identifier les processus malveillants

La première chose que je fais quand je reçois le vidage mémoire d’un appareil potentiellement compromis, c’est regarder les processus qui étaient en cours d’exécution sur l’appareil au moment de la capture de la RAM.

Comme je l’ai déjà indiqué dans l’un de mes articles précédents, j’ai toujours à l’esprit l’adage selon lequel « un malware a beau se cacher, il doit s’exécuter ». Connaître les processus en cours sur un appareil est toujours un excellent moyen d’essayer d’identifier les malwares potentiellement exécutés sur ce dernier.

pslist

Dans Volatility, plusieurs commandes peuvent être utilisées pour analyser les processus en cours d’exécution. Le premier que j’utilise est « pslist ».

python3 vol.py -f <filename> windows.pslist

La commande ci-dessus renvoie la sortie suivante :

L’image ci-dessus montre la sortie de la commande pslist. Lorsque vous exécutez ces commandes, une grande quantité de données peut être générée. C’est pourquoi il peut être judicieux d’utiliser la syntaxe suivante pour parcourir le résultat ou le placer dans un fichier texte. Cette méthode est applicable à toutes les commandes exécutées dans Volatility.

python3 vol.py -f <filename> windows.pslist | less

python3 vol.py -f <filename> windows.pslist > output.txt

Voici les titres des clés « pslist » que vous devez connaître pour commencer à utiliser l’outil :

  • PID - Process ID number (Numéro d’identification du processus)
  • PPID - Parent process ID number (Numéro d’identification du processus parent)
  • ImageFileName - Nom du processus en cours d’exécution
  • Offset - Valeur hexadécimale représentant l’emplacement dans la mémoire du processus en cours d’exécution
  • CreateTime - Heure de démarrage du processus
  • ExitTime - Heure d’arrêt du processus

Lorsque j’utilise cette fonction, je survole le nom des processus et je regarde si l’un d’entre eux me saute aux yeux. Si quelque chose attire votre attention, faites une simple recherche Google pour déterminer rapidement s’il s’agit d’un processus légitime ou si vous devez creuser davantage.

pstree

Après avoir jeté un œil au nom des processus, je regarde lesquels en ont lancé d’autres. Il est ainsi plus facile de repérer les activités suspectes, car vous pouvez par exemple voir quel processus a lancé « cmd.exe » ou « powershell.exe » et vérifier si cette activité vous semble légitime ou non.

Une autre raison pour laquelle j’utilise « pstree », c’est que les pirates nomment souvent le processus exécuté par leur malware comme des processus Windows, par exemple « svchost.exe ». Le malware peut ainsi passer inaperçu, car son nom ne se distingue pas des nombreux autres processus Windows.

La commande « pstree » constitue un excellent moyen de repérer les processus malveillants se faisant passer pour des processus Windows. Ces derniers s’exécutent toujours à partir d’emplacements définis sur le disque et leur processus parent est généralement un processus défini. Par exemple, « taskhostw » s’exécutera toujours à partir de l’emplacement « %systemroot%\system32\taskhostw.exe » et son processus parent sera toujours « svchost.exe ». Par conséquent, si vous constatez que « taskhostw » s’exécute à partir d’un autre emplacement ou que son processus parent est différent, vous devez absolument pousser votre exploration.

python3 vol.py -f <filename> windows.pstree

L’image ci-dessous montre la sortie de la commande « pstree ». Notez que la sortie de la colonne « PID » est légèrement modifiée.

Le contenu de cette colonne est désormais trié par processus, lesquels sont associés à leurs processus enfant. Cependant, afin de clarifier la visualisation pour l’utilisateur, chaque processus enfant se voit attribuer le symbole * devant son PID, et chaque processus enfant suivant en reçoit un supplémentaire en préfixe de son PID.

L’image ci-dessous montre que le processus « System » a lancé « smss.exe », qui a à son tour lancé un autre processus « smss.exe », qui a quant à lui lancé « winlogon.exe », etc.

C’est très pratique pour les responsables de la réponse aux incidents, car cela facilite le repérage des activités de processus en cours sur la machine et l’identification de celles qui pourraient être malveillantes.

Identifier les connexions réseau malveillantes

Lorsqu’un vidage mémoire est capturé, toutes les connexions réseau au moment de la capture sont également enregistrées dans la RAM capturée. C’est une excellente chose pour les agents de réponse aux incidents, car toute connexion réseau malveillante peut être identifiée, notamment le port source, l’IP de destination, le port de destination et le processus auquel l’activité réseau est liée.

netscan

Pour afficher les connexions réseau associées avec le vidage mémoire analysé, exécutez la commande suivante :

python3 vol.py -f <filename> windows.netscan

Les informations suivantes s’affichent :

La sortie de la commande netscan comporte 10 colonnes :

    • Offset - Emplacement dans la mémoire
    • Proto - Protocole réseau utilisé par le processus
    • LocalAddr - Adresse source de la connexion réseau
    • LocalPort - Port source de la connexion réseau
  • ForeignAddr - Adresse de destination de la connexion réseau
  • ForeignPort - Port de destination de la connexion réseau
  • State - État de la connexion réseau : établie, fermée ou écoute
  • PID - ID du processus associé
  • Owner - Compte associé au processus
  • Created - Heure à laquelle la connexion réseau a été initiée

L’image ci-dessous montre des connexions réseau générées par un processus nommé « smsfwder.exe ».

Volatility a identifié trois connexions à trois adresses IP distinctes communiquant sur les ports 443 et 8080.

La vérification de chaque adresse IP à l’aide de Symantec Site Review confirme que cette activité est associée à un serveur de contrôle et de commande malveillant connu.

Ces indicateurs de compromission peuvent maintenant être utilisés pour rechercher d’autres appareils potentiellement compromis qui auraient besoin d’être isolés du reste du réseau dans le cadre du plan de réponse aux incidents d’une entreprise.

Identifier du code injecté

En effet, les malwares sont souvent packés, de sorte que leur code malveillant est masqué. La création d’un tel code demande du temps : les malandrins mettent donc tout en œuvre pour qu’il ne soit pas facile de l’étudier et de déterminer rapidement ce qu’il fait et comment le neutraliser.

Un malware packé est « encapsulé » dans du code, ce qui permet de masquer les lignes écrites par l’auteur du malware. Cette technique est appelée « packing ».

Par conséquent, lorsqu’un malware est packé, il doit se dépacker. Cela se déroule dans la mémoire : une aubaine pour Volatility, car c’est exactement ce que l’outil est conçu pour analyser.

Si ce concept est nouveau pour vous, je vous recommande de lire l’article que j’ai déjà publié sur le dépacking des malwares. Retenez que lorsqu’un malware se dépacke, il crée un processus enfant et injecte l’exécutable/le malware dépacké dans ce dernier.

malfind

Pour rechercher du code injecté avec Volatility, utilisez la fonctionnalité « malfind ». Cette commande affiche une liste des processus que Volatility soupçonne de contenir du code injecté d’après les informations d’en-tête affichées au format hexadécimal, les droits d’accès et du code assembleur extrait. La présence d’un processus dans la sortie ne signifie pas nécessairement que celui-ci est un malware.

La sortie de la commande « malfind » est illustrée ci-dessous.

Les éléments clés à connaître sont le PID, le nom du processus, la protection et la zone encadrée en rouge.

Le PID et le nom du processus sont explicites. La « Protection » concerne la sortie « PAGE_EXECUTE_READWRITE ». Cela signifie que le processus a des droits en exécution, en lecture et en écriture. Ceci est courant pour les malwares, car ils doivent pouvoir s’exécuter ou exécuter d’autres fichiers téléchargés/déposés. Ils doivent lire les fichiers sur l’appareil compromis et pouvoir en écrire sur le disque. Par conséquent, tout processus capturé possédant ces autorisations apparaît dans la sortie de la commande « malfind ».

Comme il s’agit ici d’une introduction, le moyen le plus simple de commencer avec « malfind » est de se concentrer sur le nom des processus et sur la zone que j’ai encadrée en rouge.

Elle affiche le début des données contenues dans le processus au format hexadécimal, suivi des mêmes valeurs au format ASCII. Si vous avez déjà lu certains de mes articles précédents, j’ai utilisé des outils tels que x64dbg et PeStudio pour afficher l’en-tête d’un exécutable Windows, qui est un type de fichier courant utilisé pour déployer des malwares.

L’en-tête d’un fichier exécutable Windows au format hexadécimal commence toujours par « 4D 5A », ou « MZ » au format ASCII. Voici un malware que j’ai ouvert dans HxD, un éditeur hexadécimal. Avec cet outil, je peux afficher l’en-tête du fichier qui contient ces informations.

En tant que technicien de réponse aux incidents, si vous voyez ces valeurs pour un processus dans la sortie de commande « malfind », vous avez très certainement identifié un malware qui s’est injecté dans un autre processus.

procdump

Les commandes abordées dans cet article devraient vous permettre de commencer à identifier les malwares potentiels en cours d’exécution dans la mémoire d’un appareil. Avec la commande « netscan », j’ai pu identifier un processus nommé « smsfwder.exe » qui générait des connexions réseau malveillantes vers une infrastructure C2 connue. Pour enquêter plus loin avec Volatility, je peux extraire ce processus pour une analyse plus poussée à l’aide d’une fonctionnalité appelée « procdump ».

python3 vol.py -f <filename> -o <location to dump process> windows.dumpfiles –pid <PID>

Cette commande extrait l’exécutable et toutes les DLL associées. Dans l’image ci-dessous, j’ai extrait le processus dans un dossier nommé « procdump ».

Ensuite, vous pouvez essayer d’extraire des informations supplémentaires du processus vidé en effectuant quelques vérifications simples. Vous pouvez par exemple exécuter la commande « strings » sur ce dernier pour voir si vous pouvez identifier d’autres indicateurs de compromission comme des adresses IP, des noms de fichiers, des emplacements persistants, etc.

Quelques réflexions pour conclure

Cet article devrait vous donner une base solide et une compréhension claire de l’utilité de Volatility pour la réponse aux incidents. Toutefois, il ne s’agit pas d’un remède miracle. N’oubliez pas que vous analysez uniquement les processus exécutés dans la mémoire au moment de la capture de la RAM. Cet outil est très utile pour faire le tri et commencer à enquêter sur un hôte potentiellement compromis, mais si le malware n’était pas en cours d’exécution au moment de la capture du vidage mémoire, vous ne détecterez aucune activité malveillante. Il en va de même pour les connexions réseau.

En raison de l’étendue des fonctions de l’outil, je n’ai pu qu’effleurer la surface de son utilisation, mais je vous recommande vivement d’y consacrer plus de temps, de vous familiariser avec et de l’ajouter à votre arsenal de solutions de réponse aux incidents. Je vous conseille de vous reporter à l’aide mémoire Volatility créé par Ashley Pearson. Vous y découvrirez comment utiliser les fonctionnalités que je n’ai pas pu vous présenter dans cet article.


Vous souhaitez en savoir plus sur la façon dont Varonis peut vous aider à améliorer la posture de sécurité de votre entreprise ? Découvrez comment notre solution peut vous aider à lutter contre les menaces internes et garantir la protection des données de votre entreprise.