Hackflash #3 : Dumper les heaps avec volatility

Nul ne peut prétendre s'investir sérieusement dans le forensics sans apprendre à utiliser volatility. Ce merveilleux outil sert à extraire toute sorte d'informations d'un dump de la mémoire d'une machine, capable qu'il est d'y retrouver les traces de structures de l'OS.
Volatility
Un travail souvent demandé à l'outil, c'est dumper les heaps d'un process, dans l'espoir que l'analyse de ces dernières permettra de trouver des traces de l'activité d'un utilisateur. L'exemple classique est le texte qu'un utilisateur était en train d'écrire dans le Bloc-Notes.
Etrangement, volatility ne permet pas d'emblée de procéder à un dump aussi sélectif. Heureusement, il suffit de bidouiller légèrement le code d'un plug-in pour y arriver.
Pour dumper les heaps, l'utilisateur de volatility doit utiliser le plug-in vaddump. Toutefois, il doit ensuite faire en suite le tri en se référant au résultat généré par vadtree pour ne retenir que les heaps.
Dans ces conditions, le mieux est de créer son propre plug-in en adaptant très légèrement le code de vaddump.
Tout d'abord, rendez-vous ici sur GitHub pour récupérer le code Python de volatility sous la forme d'une archive du master.
Dans votre répertoire de travail, créez alors un répertoire plugins. Ouvrez l'archive du master, et extrayez le fichier volatility/plugins/vadinfo.py dans ce répertoire. Renommez le fichier en vaddumpheaps.py.
Ouvrez ce fichier dans un éditeur quelconque. Supprimez tout le contenu, sauf les imports et les classes VADInfo et VADDump.
Ajoutez alors cet import :
from volatility.plugins.vadinfo import VADInfo
Renommez la classe VADDump en VADDumpHeaps.
A la find de la méthode __init__(), ajoutez ces lignes :
config.add_option("HEAPS-ONLY", short_option = 'H', default = False,
                  action = 'store_true', help = 'Heaps only')
Dans la méthode render_text() method, recherchez cette boucle :
for vad, _addrspace in task.get_vads(vad_filter = filter, skip_max_commit = True):
AVANT la boucle, ajoutez cette ligne :
heaps = task.Peb.ProcessHeaps.dereference()
DANS la boucle, avant le premier test, ajoutez ces lignes :
if self._config.HEAPS_ONLY and not vad.Start in heaps:
    continue
Enregistrez le fichier.
Lancez volatility-2.6.exe depuis votre répertoire, c'est-à-dire celui qui contient le nouveau répertoire plugins, lequel contient donc le nouveau vaddumpheaps.py :
> mkdir 666Heaps
> volatility-2.6.exe --plugins=plugins -p 666 -D 666Heaps -H vaddumpheaps
Cela suppose que vous ayez créé un fichier .volatilityrc qui contient quelque chose comme ce qui suit, afin de ne pas avoir à spécifier le fichier et le profil chaque fois que vous utilisez volatility :
[DEFAULT]
PROFILE=Win7SP1x86
LOCATION=file://memory.dmp
Le nouveau plug-in ne dumpera que les heaps. Cela revient donc à produire le fameux heaps, dont il est question dans l'incontournable The Art of Memory Forensics, mais qui n'a jamais existé.
Hackflash #3 : Dumper les heaps avec volatility