Créer un profil Linux personnalisé pour Volatility 3
Ce guide explique comment générer soi-même un fichier ISF (Intermediate Symbol Format) au format JSON, requis par Volatility 3 pour analyser un dump mémoire Linux.
La théorie : Pourquoi on fait ça ?
Quand un système d’exploitation est compilé (en C), le compilateur transforme toutes les structures de données (comme task_struct qui décrit un processus) en simples adresses mémoire et décalages (offsets).
Pour que Volatility puisse lire le dump, il doit faire le chemin inverse : savoir à quel offset de la mémoire se trouve le nom du processus, son PID, etc.
Pour cela, il lui faut le fichier ISF (Intermediate Symbol Format, un fichier JSON), qui est généré à partir des symboles de débogage (DWARF) du noyau exact qui tournait sur la machine.
Étape 1 : Installer dwarf2json
dwarf2json est l’outil officiel de la fondation Volatility, écrit en Go, qui lit les fichiers de débogage Linux et génère le fichier ISF JSON.
-
Installez le langage Go si vous ne l’avez pas (via Homebrew sur macOS) :
1brew install go -
Clonez et compilez
dwarf2json:1 2 3git clone https://github.com/volatilityfoundation/dwarf2json.git cd dwarf2json go buildVous avez maintenant un exécutable
./dwarf2json.
Étape 2 : Récupérer le bon noyau (Le plus difficile)
Dans notre cas, la version exacte du noyau trouvée dans le dump est 5.4.0-4-amd64 (version Debian 5.4.19-1).
Comme c’est un ancien noyau (début 2020), il n’est plus sur les dépôts classiques, il faut aller dans les archives (Snapshots) de Debian. Il nous faut :
- Le paquet de débogage (qui contient le gros fichier
vmlinuxavec les symboles DWARF). - Le paquet standard (qui contient le fichier
System.map).
Téléchargez les paquets depuis snapshot.debian.org en utilisant leur identifiant de fichier unique pour éviter les liens brisés :
|
|
Étape 3 : Extraire les fichiers (façon macOS)
Un fichier .deb est en fait une archive ar qui contient des fichiers tar. Sous macOS, comme on ne peut pas toujours utiliser dpkg -x nativement, on le fait manuellement.
-
Créez des dossiers pour extraire le contenu :
1mkdir pkg_dbg pkg_std -
Extrayez le paquet de débogage (pour récupérer
vmlinux) :1 2 3 4cd pkg_dbg ar x ../linux-image-5.4.0-4-amd64-dbg_5.4.19-1_amd64.deb tar -xf data.tar.xz cd .. -
Extrayez le paquet standard (pour récupérer
System.map) :1 2 3 4cd pkg_std ar x ../linux-image-5.4.0-4-amd64_5.4.19-1_amd64.deb tar -xf data.tar.xz cd ..
À ce stade, vos deux fichiers vitaux sont extraits :
- Le
vmlinuxest dans :pkg_dbg/usr/lib/debug/boot/vmlinux-5.4.0-4-amd64 - Le
System.mapest dans :pkg_std/boot/System.map-5.4.0-4-amd64
Étape 4 : Générer le fichier JSON
Retournez dans le dossier où se trouve l’exécutable dwarf2json et lancez la génération en lui fournissant les deux fichiers :
|
|
Note : Cette commande prend quelques minutes et va consommer pas mal de mémoire RAM, c’est normal, l’outil décode tout l’arbre du noyau Linux !
Étape 5 : Installer le profil dans Volatility 3
Maintenant que vous avez votre fichier ISF (debian-5.4.0-4-amd64.json), il suffit de le mettre à la disposition de Volatility.
- Allez dans le répertoire de votre installation de Volatility 3.
- Repérez le dossier des symboles Linux, généralement :
volatility3/symbols/linux/(ouvolatility3/volatility3/symbols/linux/). - Placez-y votre fichier
debian-5.4.0-4-amd64.json.
(Astuce : Volatility gère les fichiers compressés pour gagner de la place, vous pouvez compresser le fichier avec xz debian-5.4.0-4-amd64.json pour obtenir un .json.xz).
Maintenant vous pouvez lancez vos commandes avec le bon profil. Volatility va scanner le dossier symbols/linux/, lire l’en-tête de votre dump mémoire, trouver que la signature correspond à votre fichier JSON, et vous afficher la liste des processus sans erreur !