L'analyse de malwares

Analyse statique

Informations sur l'échantillon

La première étape intervenant dans l'analyse statique va consister à récupérer des informations sur le fichier suspect.
L'objectif est de connaitre le type de fichier en cours d'analyse.
Pour ce faire, nous pouvons utiliser la commande file disponible sous les systèmes Linux :


Utilisation de la commande file

Cette commande va utiliser les magic numbers. Cette en-tete spéciale située au début de tout fichier Windows permet d'indiquer son format.
Voici quelques associations Magic number/ format de fichier les plus connues :

Magic number

Format

MZ

Exécutable Windows

PK

ZIP

GIF

GIF

%PDF

PDF

Identification des chaines de caractères

Identifier les chaines de caractères présentes dans un échantillon est la deuxième étape importante du processus d'analyse statique. En effet, en observant simplement les chaines utilisées par un exécutable, nous pouvons avoir un aperçu des fonctionnalités utilisées par le malware.

Pour ce faire nous pouvons utiliser la commande strings disponible sous Linux ainsi que sous windows par le biais des Sysinternals:

mohlen@mohlen-VirtualBox:~$ strings fec60c1e5fbff580d5391bba5dfb161a 
Ph(3@  
h(3@  
Ph(3@  
h(3@  
\*.*  
\*.*  
XPhFM@  
[...] 
.db.mp3.waw.jpgjpeg.txt.rtf.pdf.rar.zipeeeeeeeeeeeeeeeeeeeeeeeeee 
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeVery bad news... 
	

Dans l'exemple ci-dessus, la sortie générée par la commande laisse présumer que l'échantillon analysé est un ransomware.
En effet, la présence d'extensions et le message "Very bad news" est typique d'un malware appartenant à cette famille.

A noter que cette commande est également très utile pour détecter les adresses de Command and Control.

Analyse du format PE

PE pour "portable executable" est le format utilisé par tout exécutable sous Windows. Ce format est une grande richesse d'informations, très utile pour l'analyse de malwares comme :

Le format PE peut se représenter par le schéma suivant :


Structure du format PE

  • En-tête MZ-DOS
  • Permet à Windows de reconnaitre le fichier comme un exécutable. Il contient notamment le magic number MZ.

  • Segment DOS
  • Exécuté lorsque le programme est lancé en MS-DOS. La plupart du temps il affiche le message This program must be run under Win32.

  • En-tête PE
  • Contient des informations sur le binaire comme sa date de compilation ou encore sa signature.

  • Table des sections
  • Déclare toutes les sections nécessaires au fonctionnement du programme. Voici les sections les plus utilisées :

    Nom

    Description

    .text

    Code exécutable du programme

    .bss

    Variables non initialisées

    .reloc

    Table des relocalisations

    .data

    Variables initialisées

    .rsc

    Ressources (images, fichier de configuration ...)

    .idata

    Imports

    Grace à la table d'imports, il est aisé de déterminer quelles fonctions sont utilisées par l'exécutable. De cette façon en constatant l'utilisation de fonction cryptographique ou l'API réseau nous pouvons rapidement avoir une idée des fonctionnalités du malware.

    Pour faciliter l'analyse de ce format, de nombreux outils existent, tels que :

    Désassemblage

    La dernière étape va consister à essayer de comprendre le code source du malware.
    Pour ce faire, l'analyste va utiliser un désassembleur qui va lui permettre de récupérer les instructions de l'exécutable en assembleur principalement.
    De nombreuses solutions existent, dont la suite gratuite IDA.
    Les désassembleurs offrent des fonctionnalités avancées permettant de faciliter la compréhension du code :

    Conclusion

    L'analyse statique est une étape indispensable dans le cadre de l'analyse de malwares.
    Elle permet d'obtenir des informations essentielles sur un échantillon très rapidement. De plus, cette approche est sans risque pour la machine d'analyse puisque la malware n'est pas exécuté.

    Cependant, cette méthode atteint rapidement ses limites en présence d'obfuscation. En effet, il devient très difficile par exemple de parvenir à étudier les chaines de caractères en présence d'encodage.
    Par ailleurs, malgré la large couverture potentielle de cette technique avec le désassemblage, la présence de code assembleur rend la plupart du temps l'analyse très complexe.
    Pour approfondir l'analyse il faudra alors exécuter le malware pour observer son comportement en procédant à de l'analyse dynamique.