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 |
|
|
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 :
- Date de compilation
- Fonctions importées par l'exécutable
- Fonctions exportées par l'exécutable
- Ressources utilisées (Icon, chaines de caractères, version...)
Le format PE peut se représenter par le schéma suivant :
Structure du format PE
Permet à Windows de reconnaitre le fichier comme un exécutable. Il contient notamment le magic number MZ.
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.
Contient des informations sur le binaire comme sa date de compilation ou encore sa signature.
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 :
- Renommage de fonctions
- Introduction de commentaire
- Visualisation graphique du code
- Déchiffrement et désobfuscation
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.