1. À propos de l'analyse de malware
L'analyse de malware est une discipline de la cybersécurité qui consiste à étudier un logiciel malveillant afin de comprendre son fonctionnement, son objectif, ses méthodes de propagation et les modifications qu'il tente d'apporter à un système informatique.
Le terme malware, contraction de malicious software, désigne différentes catégories de programmes malveillants : virus, vers, chevaux de Troie, ransomwares, spywares, rootkits, keyloggers et autres programmes conçus pour réaliser des actions non autorisées.
L'analyse d'un malware ne consiste donc pas uniquement à déterminer qu'un fichier est dangereux. L'analyste cherche également à répondre à plusieurs questions : que fait le programme ? Quels fichiers crée-t-il ? Quels processus lance-t-il ? Communique-t-il avec Internet ? Modifie-t-il le système ? Cherche-t-il à assurer sa persistance ? Quelles informations tente-t-il éventuellement de collecter ?
Objectifs de l'analyse de malware
- identifier la nature d'un fichier suspect ;
- comprendre le comportement du programme ;
- identifier les fichiers créés ou modifiés ;
- observer les processus lancés ;
- identifier d'éventuelles communications réseau ;
- rechercher les mécanismes de persistance ;
- extraire des indicateurs de compromission ;
- aider à développer des mécanismes de détection et de protection ;
- faciliter la réponse à un incident de sécurité.
Les principales formes d'analyse
On distingue principalement l'analyse statique et l'analyse dynamique. L'analyse statique étudie un fichier sans l'exécuter, tandis que l'analyse dynamique observe son comportement pendant une exécution contrôlée dans un environnement spécialement isolé.
Une analyse plus avancée peut également faire appel au désassemblage, au débogage et à la rétro-ingénierie afin d'étudier plus précisément le fonctionnement interne du programme.
2. Analyse statique d'un malware
L'analyse statique consiste à examiner un fichier suspect sans l'exécuter. Elle constitue généralement l'une des premières étapes d'une investigation, car elle permet d'obtenir de nombreuses informations tout en limitant les risques liés à l'exécution du fichier.
Informations recherchées
- nom et taille du fichier ;
- type réel du fichier ;
- empreinte cryptographique ;
- chaînes de caractères lisibles ;
- métadonnées ;
- bibliothèques utilisées ;
- fonctions importées ;
- présence éventuelle d'URL, de domaines ou d'adresses IP ;
- signes d'obfuscation ou de compression du programme.
Calculer l'empreinte SHA-256 d'un fichier
Une première opération consiste à calculer une empreinte SHA-256. Cette empreinte sert d'identifiant technique du contenu d'un fichier et peut être comparée à des indicateurs déjà connus. L'exemple Python suivant calcule le SHA-256 d'un fichier d'étude nommé echantillon.txt. Cette opération ne nécessite pas l'exécution du contenu analysé.
1 2 3 4 5 6 7 | import hashlib nom_fichier = "echantillon.txt" sha256 = hashlib.sha256() with open(nom_fichier, "rb") as fichier: while bloc := fichier.read(4096): sha256.update(bloc) print("SHA-256 :", sha256.hexdigest()) |
Sortie :
1 | SHA-256 : 7f83b1657ff1fc53b92dc18148a1d65dfa13514d |
La valeur ci-dessus est illustrative. Toute modification du contenu du fichier entraîne normalement une empreinte différente.
Rechercher des chaînes de caractères
Les chaînes de caractères présentes dans un programme peuvent parfois révéler des noms de fichiers, chemins, domaines, messages, commandes ou autres informations utiles. L'exemple suivant travaille volontairement sur un contenu fictif afin d'illustrer le principe sans manipuler de programme malveillant réel.
1 2 3 4 5 6 7 8 9 10 11 | contenu = """ programme_demo config.ini journal.log https://example.invalid/api connexion """ for ligne in contenu.splitlines(): ligne = ligne.strip() if ligne: print(ligne) |
Sortie :
1 2 3 4 5 | programme_demo config.ini journal.log https://example.invalid/api connexion |
La présence d'une URL ou d'un nom de fichier ne prouve pas à elle seule qu'un programme est malveillant. Les résultats doivent toujours être interprétés dans leur contexte et recoupés avec d'autres observations.
3. Analyse dynamique et environnement isolé
L'analyse dynamique consiste à observer le comportement d'un programme pendant son fonctionnement. Contrairement à l'analyse statique, elle implique donc une exécution et nécessite des précautions beaucoup plus importantes.
Un malware inconnu ne doit pas être exécuté directement sur l'ordinateur personnel ou professionnel de l'analyste. L'étude doit être réalisée dans un environnement isolé spécialement préparé pour l'analyse.
Principe d'une sandbox
Une sandbox est un environnement contrôlé permettant d'observer le comportement d'un programme tout en réduisant les risques pour le système principal. Une machine virtuelle dédiée peut également être utilisée dans un laboratoire correctement isolé.
Un environnement d'analyse peut notamment permettre de surveiller :
- les processus créés ;
- les fichiers créés, supprimés ou modifiés ;
- les modifications de configuration du système ;
- les mécanismes de persistance ;
- l'activité réseau ;
- les domaines contactés ;
- les bibliothèques chargées ;
- les changements intervenus avant et après l'exécution.
Exemple pédagogique de journal comportemental
Pour comprendre le principe sans exécuter un malware, nous pouvons analyser un journal fictif représentant des événements observés dans une sandbox. Le programme suivant compte les différents types d'événements enregistrés.
1 2 3 4 5 6 7 8 9 10 11 12 13 | evenements = [ "PROCESSUS", "FICHIER", "FICHIER", "RESEAU", "PROCESSUS", "RESEAU" ] resultats = {} for evenement in evenements: resultats[evenement] = resultats.get(evenement, 0) + 1 for type_evenement, nombre in resultats.items(): print(type_evenement, ":", nombre) |
Sortie :
1 2 3 | PROCESSUS : 2 FICHIER : 2 RESEAU : 2 |
Dans une véritable investigation, les événements contiendraient beaucoup plus d'informations : nom du processus, chemin du fichier, heure de l'événement, adresse distante, protocole réseau ou action réalisée.
Précautions importantes
- ne pas analyser un malware réel sur une machine de production ;
- utiliser un laboratoire réservé à l'analyse ;
- contrôler soigneusement les interfaces réseau de la machine virtuelle ;
- éviter l'accès aux dossiers personnels ou professionnels ;
- ne pas partager le presse-papiers ou les dossiers avec l'hôte lorsque cela crée un risque ;
- conserver des instantanés propres de l'environnement d'analyse ;
- ne pas utiliser de comptes ou d'identifiants réels dans le laboratoire.
4. Indicateurs de compromission et comportement du malware
L'un des objectifs essentiels d'une analyse consiste à identifier des indicateurs de compromission, souvent désignés par l'acronyme IOC pour Indicators of Compromise.
Un IOC est une information observable pouvant contribuer à identifier une activité potentiellement malveillante sur un système ou un réseau.
Exemples d'indicateurs
- empreinte SHA-256 d'un fichier malveillant connu ;
- nom ou chemin inhabituel d'un fichier ;
- domaine associé à une infrastructure malveillante ;
- adresse IP suspecte ;
- processus inhabituel ;
- clé ou valeur de configuration associée à une persistance ;
- activité réseau caractéristique ;
- comportement inhabituel observé sur une machine.
Extraire des indicateurs d'un rapport
L'exemple suivant montre comment rechercher quelques indicateurs simples dans un rapport fictif. Les adresses utilisées appartiennent volontairement à des espaces réservés à la documentation afin de ne pas pointer vers une infrastructure réelle.
1 2 3 4 5 6 7 8 9 | rapport = [ "SHA256=0123456789abcdef", "IP=192.0.2.10", "DOMAIN=malware-demo.example", "FILE=demo.bin" ] for element in rapport: type_ioc, valeur = element.split("=", 1) print("Type :", type_ioc, "- Valeur :", valeur) |
Sortie :
1 2 3 4 | Type : SHA256 - Valeur : 0123456789abcdef Type : IP - Valeur : 192.0.2.10 Type : DOMAIN - Valeur : malware-demo.example Type : FILE - Valeur : demo.bin |
Un indicateur ne doit pas être considéré isolément comme une preuve définitive d'infection. Une adresse IP, un domaine ou un nom de fichier peut changer, être partagé par plusieurs services ou produire un faux positif. L'analyse comportementale complète donc utilement les IOC.
Comprendre le comportement
Au-delà des indicateurs techniques, l'analyste cherche à comprendre les objectifs du programme. Il peut par exemple déterminer si celui-ci tente d'établir une persistance, de communiquer avec une infrastructure distante, de modifier des fichiers, de collecter des informations ou d'exécuter d'autres composants.
Cette approche comportementale permet de produire des règles de détection plus générales que la simple recherche d'une empreinte précise.
5. Outils et méthodologie d'analyse de malware
L'analyse de malware utilise différents outils selon la profondeur de l'étude et le type de fichier examiné. Aucun outil unique ne permet généralement d'obtenir toutes les informations nécessaires.
Outils d'analyse statique
- file : identification du type d'un fichier ;
- strings : extraction de chaînes de caractères ;
- PEStudio : inspection statique de fichiers exécutables Windows ;
- Detect It Easy : identification de formats, compilateurs et packers ;
- Ghidra : rétro-ingénierie et analyse de programmes ;
- hashlib : calcul d'empreintes avec Python.
Outils d'analyse dynamique
- Process Monitor : observation de certaines activités des processus et du système sous Windows ;
- Process Explorer : inspection détaillée des processus ;
- Wireshark : analyse du trafic réseau ;
- sandboxes : observation automatisée du comportement d'un échantillon dans un environnement contrôlé ;
- machines virtuelles : création d'environnements de laboratoire isolés.
Méthodologie générale
- Collecter l'échantillon en respectant les procédures de sécurité.
- Documenter son origine et son contexte.
- Calculer ses empreintes cryptographiques.
- Identifier son format et examiner ses métadonnées.
- Effectuer une première analyse statique.
- Rechercher les chaînes et autres informations pertinentes.
- Si nécessaire et dans un laboratoire approprié, effectuer une analyse dynamique.
- Observer les processus, fichiers et communications.
- Extraire les IOC pertinents.
- Documenter les comportements observés.
- Produire un rapport d'analyse.
- Utiliser les résultats pour améliorer la détection et la réponse à incident.
Exemple de classification d'observations
Lorsqu'un rapport contient de nombreuses observations, Python peut aider à les classer. Le programme suivant traite uniquement des données fictives et sépare les observations selon leur catégorie.
1 2 3 4 5 6 7 8 | observations = [ ("fichier", "creation d'un fichier temporaire"), ("reseau", "connexion vers 192.0.2.10"), ("processus", "creation d'un processus enfant"), ("fichier", "modification d'un fichier de configuration") ] for categorie, description in observations: print(f"[{categorie.upper()}] {description}") |
Sortie :
1 2 3 4 | [FICHIER] creation d'un fichier temporaire [RESEAU] connexion vers 192.0.2.10 [PROCESSUS] creation d'un processus enfant [FICHIER] modification d'un fichier de configuration |
L'automatisation permet ainsi de traiter plus facilement les journaux et rapports volumineux, mais l'interprétation finale reste une étape essentielle du travail de l'analyste.
6. À retenir
L'analyse de malware consiste à étudier un logiciel malveillant afin d'identifier ses caractéristiques, de comprendre son fonctionnement et de déterminer les actions qu'il réalise sur un système.
L'analyse statique examine le fichier sans l'exécuter. Elle permet notamment d'étudier son format, ses empreintes, ses chaînes de caractères, ses métadonnées et certains éléments de son code.
L'analyse dynamique observe le comportement du programme pendant son exécution dans un environnement isolé. Elle permet notamment d'étudier les processus, les fichiers, la persistance et l'activité réseau.
Les résultats permettent d'identifier des IOC, de comprendre les techniques utilisées par le malware et d'améliorer les mécanismes de détection, de protection et de réponse aux incidents.
L'analyse de malware doit toujours être réalisée avec des précautions importantes. Un échantillon inconnu ne doit jamais être exécuté directement sur une machine personnelle ou professionnelle. Les analyses dynamiques doivent être effectuées dans un laboratoire spécialement conçu et correctement isolé.
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/



