(TAOMF) La structure VAD

L'ensemble des articles tagués TAOMF ont été écrit à partir d'un ensemble de notes prises suite à la lecture du livre "The Art Of Memory Forensic" écrit par Michael Hale Ligh, Andrew Case, Jamie Levy et Aaron Walters.

Tout les crédits de ces articles leur reviennent donc de droits. Par ailleurs je vous invite vraiment à lire ce livre qui est une mine colossale d'informations.


Au cours du premier article sur cette série nous avons vu qu'avant qu'un processus soit exécuté, ce dernier se voit allouer une plage d'espace mémoire physique au sein de la RAM. Si la plupart du temps l'OS fait en sorte que l'ensemble du processus soit mappé au même endroit, il peut arriver qu'un processus soit mappé sur plusieurs ranges mémoires discontinues:

La structure VAD pour Virtual Address Descriptors va justement nous permettre de garder, sous la forme d'un arbre, l'ensemble des ranges mémoires physiques allouées, le nombre de pages présentes dans une région, les protection attribuées ainsi que des informations permettant de déterminer le type de data que la région continent.

Ci-dessous se trouve une structure VAD obtenue via l'utilisation du plugin vadtree avec l'option --rendre=dot:

Crédit image : The Art of Memory Forensic

Ici les portions de la heap sont colorés en rouge, la stack en vert, les fichiers mappés en jaune et les DLL en gris.

Chaque processus dispose dans sa structure _EPROCESS d'une variable contenant l'adresse mémoire  de la racine de la structure VAD du processus. A noter que la structure VAD est un arbre dit binaire équilibré. Chaque nœud peut avoir au maximum deux valeurs (un nœud à gauche et un nœud à droite).

Chaque nœud est composé de plusieurs flags qui indiquent les caractéristiques du segment mémoire qu'il représente. Parmi ces flags on retrouve:

  • Le flag CommitCharge qui contient le nombre de pages totales allouées sur le segment mémoire
  • Le flag Protection qui indique le type d'accès que l'on peut faire sur ce segment mémoire (si on peut le lire, y écrire, l'exécuter). Attention cependant, un nœud de la structure VAD peut tout à faire posséder un flag de Protection indiquant que le segment mémoire n'est accessible qu'en lecture et pourtant contenir des pages en écriture. Il ne faut donc pas se fier aux permissions indiqués au sein de la structure VAD.

Il existe plusieurs modules volatility permettant d'analyser la structure VAD:

  • vadinfo : indique les adresses de début et de fins des nœuds, les différents flag ainsi que les chemins absolus vers les fichiers mappés en mémoire et/ou les DLL's.
  • vadtree: affiche les nœuds VAD sous la forme d'un arbre équilibré (voir le schéma plus haut).
  • vaddump: extrait toutes les range mémoire des nœuds VAD dans des fichiers distincts: