dimanche 20 janvier 2019

Concepte de l'Imphash


I.    Introduction


Dans la sécurité de l'information , plus particulièrement dans l'analyse des logiciels malveillants , imphash ( "Imports Hash" ) est le résultat d'une somme de contrôle d'un texte créé à partir des fonctions importées (Import Address Table)  d'un exécutable windows via une partie inclus dans le PE (Portable Executable), à l'aide de l'algorithme MD5 , une idée venant des chercheurs de Mandiant en 2004.
Afin de fournir un mécanisme permettant la recherche d'autres copies ou variante d'un programme malveillants au sein d'une même famille, car les auteurs de logiciels malveillants ne modifient pas les fonctions de la bibliothèque qu'ils utilisent lors de la génération de nouvelle souche. c’est-à-dire lorsqu’ils compilent à nouveau le même programme malveillant, générant ainsi de nouveau exécutable. Dans ce cas, bien que le hachage du fichier change lié au fait qu'il est fait quelques modifications dans le code.
A contrario,s'il n'ont pas intégrer de nouveau appel d'Api au sein du  programme, l'emphash restera le même pour les différents variant ou version.
Et dela nous pouvons dire qu'ils sont fonctionnellement proche et font partie de la même famille du malware.

I.    L'algorithme de calcul de l'Imphash


Le texte à partir duquel la somme de contrôle MD5 est calculée est formé comme suit:
  1. Analyse la table d'importation (IT) ou la table des importations de fonctions exécutables PE, qui contient un enregistrement des fonctions importées par cet exécutable et ses bibliothèques respectives.
  2. Pour chaque fonction trouvée, il préfixe son nom avec le nom de la bibliothèque (DLL) où il se trouve sans son extension, mais en maintenant le point. Par exemple, si l'exécutable importe la fonction DeleteCriticalSection () à partir de la bibliothèque KERNEL32.DLL, cette importation réécrite serait KERNEL32.EnterCriticalSection .
  3. Si la fonction n'est pas importée nominativement, on essaie de la résoudre avec une base de données locale et, si cela n'est pas possible, son numéro ordinal est utilisé.
  4. Convertit le texte en minuscule, obtenu kernel32.entercriticalsection .
  5. Répétez l'intégralité de l'algorithme pour les autres fonctions importées par le binaire, en concaténant le résultat avec le précédent, séparés par des virgules.
  6. Enfin calcule le hash MD5 du texte final résultant.

II.          Exemple conceptuel

Prenons comme exemple un exécutable PE qui importe les fonctions suivantes, dans cet ordre:
  • EnterCriticalSection (), à partir de KERNEL32.DLL
  • MessageBoxA (), à partir de USER32.DLL
  • CreateWindowExA (), à partir de USER32.DLL
Quiconque souhaite calculer l'emphash de cet exécutable doit calculer le hachage MD5 de la chaîne suivante (sans prendre en compte les caractères de nouvelle ligne):

  kernel32.entercriticalsection, user32.messageboxa, user32.createwindowexa

Le résultat de l'exemple est 2e4b75f13408b52416d9c846d1189ae6. Il est donc possible de faire le même calcul pour différents fichiers afin de trouver d'autres copies de la même famille. C'est une méthode de recherche de fichiers similaires.

Nous avons implémenté, cela dans une tools avec génération de la chaîne avant l'appel de l'algorithme MD5.
qui nous permet de teste l'exemple indiqué du dessus, voici le résultat obtenu en dessous:

 



 Nous fessons pareil pour un échantillon "AntiFireWall.exe", cela nous donne son Imphash
pour ce fichier qui est "94802f07a877e9817802657426aadd80". Voir la capture en dessous:

 


Dans le cas de ce fichiers la chaîne résultante, construit à partir de l'IAT est la suivante:

kernel32.closehandle,kernel32.createfilea,kernel32.createfilemappinga,kernel32.createprocessa,
kernel32.createremotethread,kernel32.getfilesize,kernel32.getprocaddress,kernel32.loadlibrarya,
kernel32.mapviewoffile,kernel32.unmapviewoffile,kernel32.virtualallocex,kernel32.virtualprotect,
kernel32.writeprocessmemory


Nous voyons que programme n'appel que des APIs de module Kernel32.dll
Kernel32.dll
=> Apis using : 13
- CloseHandle
- CreateFileA
- CreateFileMappingA
- CreateProcessA
- CreateRemoteThread
- GetFileSize
- GetProcAddress
- LoadLibraryA
- MapViewOfFile
- UnmapViewOfFile
- VirtualAllocEx
- VirtualProtect
- WriteProcessMemory

Nous allons vérifier l'imphash que génére un tier au travers du site VirusTotal 
( https://www.virustotal.com/#/home/upload ) en poussant notre échantillon de test.
Si nous retrouvons notre Imphash et aussi connaitre plus de détaille sur le binaire au niveau de sa note.






Nous avons bien le même Imphash que celui calculer par "VirusTotal". Il est intéressant de voir que l'échantillons atteint une note 33/65 , voir la capture qui suit:


 
Il remonte qu'il est décrit assez souvent comme un "Trojan". Nous rentrerons dans l'analyse plus profondément sur ce binaire dans un prochain article sur la structure PE.

Si on regarde de plus près, sachant qu'il utilise des bases données virale et qu'il apparaît des noms identiques ou distinct entre les anti-virus.

On peut ce dire que Ad-Aware , ALYac , BitDefender , Emsisoft , F-Secure , GData , eScan utilise la même source ou base de référence étant donnée que la référence fournit est identique "Trojan.Generic.11937180"

Cela peut peut-être intéressant de creusé cela , les relation entre les Anti-virus et leurs source est leurs référence utilisé.

I.    Conclusions

L'intérêt est de pouvoir catégorisé des exécutables en fonction du type Api importé et donc utilisé dans le dit programme.

en ce basant sur l'IAT qui contient la liste des bibliothèques et des fonctions Api liées dynamiquement du binaire et présent au sein de celui-ci utiliser pendant l'exécution du processus. L'idée est donc la suivante: si deux binaires ont le même “imphash”, il y a de fortes chances qu'ils aient des objectifs similaires par le fait qu'il utilise le même jeu d'Api.

Mais attention, il faut pas oublier que le malware peut garder dynamiquement les Apis qu'il souhaites ans avoir a passer par le mécanisme de IAT.
en passant par GetModuleHandle(..) et GetProcAddress(..) ou pas des fonctions customs comme dans les shellcodes

Cette article avez en premier, pour but de vous familiarisé avec Imphash et qu'elle élément cela peut apporté dans une analyse virale et comprendre sa construction.