(TAOMF) Les handlers

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.


Souvent j'ai utilisé le mot handler sans vraiment expliquer ce que c'était. Un handler c'est une référence (un pointer) vers un objet (un fichier, une socket, une clé de registre) ou une structure permettant d'identifier un objet.

L'exemple le plus simple d'handler consiste à ouvrir un fichier:

handler = open("fichier.txt", "r")

L'objet retourné par la fonction est un handler qui qui identifie mon fichier "fichier.txt de manière unique. Une fois le handler reçu nous allons pouvoir l'utiliser pour effectuer plusieurs actions comme écrire une chaîne de caractères dans le fichier:

handler.write("Currently writting a strin")

Ou encore ferme le fichier:

handler.close()

Sur Windows le fonctionnement reste plus ou moins identique. Lorsque l'on ouvre un fichier, un handler identifiant de manière unique notre fichier nous est retourné et nous permet d'accéder à notre objet. De manière invisible pour l'utilisateur, une entrée est créée dans la structure _HANDLE_TABLE. Cette structure contient la liste des handlers ainsi que leurs cibles pour tous les processus.

D'ailleurs chaque processus dispose, dans sa structure _EPROCESS, d'un pointeur vers la structure _HANDLE_TABLE ce qui lui permet d'accéder, depuis le handler, à l'objet:

 

Le pluging handles de volatility permet de lister tous les handles présents dans un dump mémoire et de les trier par PID. De cette manière il est beaucoup plus aisé de détecter les handlers touchants des structures sensibles telles que des clés de registre ou encore des fichiers suspicieux.