[Pratique] – Analyse statique de Malware (Part 1 – Hash Calculation)

Dans cet article, nous allons nous exercer à faire une “analyse statique” de Malware. Principalement, nous allons apprendre à analyser un fichier afin d’extraire toutes les informations utiles qui peuvent être vérifiable sur des bases de données de la communauté pour detecter les malwares connus. Nous allons utiliser pour celà python afin d’extraire les informations utiles (noms, strings, hashes ..) mais aussi des outils d’inspection du PE Header et finalement nous allons introduire le fameux YARA, moteur qui alimente les principaux IDS et Antivirus modernes.

Prérequis Techniques

Nous allons utiliser pour ce premier article :

  • Une machine Windows ou Linux avec Python installé dessus

L’analyse statique de malware

Pour effectuer une analyse statique, nous allons examiner un échantillon de fichier suspect (executable) sans l’exécuter. La quantité d’informations qui peut être obtenu de cette façon est importante, ca peut aller du simple nom de fichier, jusqu’aux signatures YARA complexes et spécialisées. Nous allons essayer de voir les différentes étapes pour analyser statiquement un échantillon.

L’analyse statique, n’est pas une solution miraculeuse, il s’agit principalement de la première étape dans l’analyse de binaires dans le sens qu’elle permet déjà de voir les similarités avec les échantillons précédemment analysés par la communauté.

Aussi, les malwares modernes excellent dans l’art de l’obfuscation, ou le fait de cacher les informations nécessaire pour résister à l’analyse statique. Dans le prochain article nous allons introduire la notion d’analyse dynamique en Sandbox (ou machine virtuelle sécurisée) qui, elle, permet une plus grande inspection du comportement.

Calcul du Hash de l’échantillon

On nomme fonction de hachage, de l’anglais hash function (hash : pagaille, désordre, recouper et mélanger) par analogie avec la cuisine, une fonction particulière qui, à partir d’une donnée fournie en entrée, calcule une empreinte numérique servant à identifier rapidement la donnée initiale, au même titre qu’une signature pour identifier une personne. Les fonctions de hachage sont utilisées en informatique et en cryptographie notamment pour reconnaître rapidement des fichiers ou des mots de passe.

L’idée est donc de calculer le hash de notre échantillon pour pouvoir confronter cette “empreinte” aux empruntes connues des malwares.

Préparer l’environnement

Pour cet article, nous allons essayer d’analyser un fichier à priori bénin, nous allons prendre notepad.exe qui réside sur chaque machine windows et pour celà, nous allons créer un dossier de travail et copier le fichier notepad.exe (qui réside dans le répértoire windows/system32) vers notre dossier de travail. Notre code est écrit en python.

Calculer le hash de notepad.exe

Voici les étapes pour calculer le hash de notepad.exe :

D’abord on importe les librairies nécessaires et notre fichier

import sys
import hashlib
filename = "notepad.exe"


Initialiser les fonctions MD5 et SHA256 avec un incrément de calcul de 64k

BUF_SIZE = 65536
md5 = hashlib.md5()
sha256 = hashlib.sha256()


Nous lisons le fichier notepad.exe par incréments de 64k pour construire notre hash

with open(filename, "rb") as f:
while True:
data = f.read(BUF_SIZE)
if not data:
break
md5.update(data)
sha256.update(data)


A la fin nous envoyons le résultat sur la fenêtre console :

print("MD5: {0}".format(md5.hexdigest()))
print("SHA256: {0}".format(sha256.hexdigest()))

Pour mon notepad.exe sur mon windows 10, voici le résultat que j’obtiens :

MD5:  f65b883128779592cca7d01cc87937bf 
SHA256:  2f3daf08b248b0a8aa0c47ba81864be7d379a0229599cdec3b93281b57fcd280 

Explications du code

Cette section expliquera les étapes qui ont été fournies dans la section précédente :
À l’étape 1, nous importons hashlib, une bibliothèque Python standard pour le calcul de hachage. Nous spécifions également le fichier que nous allons hacher – dans ce cas, le fichier est notepad.exe.
À l’étape 2, nous instancions un objet md5 et un objet sha256 et spécifions la taille des morceaux que nous allons lire (64Kb = 65536 b).
À l’étape 3, nous utilisons la méthode .update (data). Cette méthode nous permet de calculer le hachage de manière incrémentielle, car il calcule le hachage de l’enchaînement. En d’autres termes, hash.update (a) suivi de hash.update (b) est équivalent à hash.update (a + b).
À l’étape 4, nous imprimons les hachages en chiffres hexadécimaux. et nous obtenons les deux valeurs de hash MD5 et SHA256.

Vérification VirusTOTAL

On peut vérifier notre code, en soumettant le fichier c:\windows\system32\notepad.exe au moteur www.virustotal.com. Celui ci effectuera un calcul externe des hash et nous montrera les mêmes résultats :

Analyse hash de notepad.exe par virustotal

Conclusion

Dans ce premier article, nous avons appris à utiliser python et ses modules pour calculer le hash de fichier executable. Cette étape primordiale nous permet de nous assurer déjà de l’integrité des fichiers que nous sommes en train d’analyser. Lorsqu’on analyse un fichier dont on dispose du MD5 Hash calculé par l’initateur du fichier, une comparaison des hash peut montrer une altération du fichier et être une première alerte de modification.

Dans nos prochains articles, nous allons nous attaquer à l’analyse des entête PE, ainsi qu’au moteur de rule YARA qui est fondamental dans la recherche d’indicateurs et dans la réalisation de systèmes IDS.

Mehdi.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *