Fiche Technique sur l’analyse de Malware

Pour débuter l’analyse de Malware nous allons avoir besoin de plusieurs machines virtuelles :

Une machine virtuelle Kali Linux

Une machine virtuelle Windows 10 sur laquelle on va executer le script de personnalisation de flare-vm qui permet d’avoir une distribution dédié à la sécurité basée sur Windows pour l’analyse des logiciels malveillants, le traitement d’incidents ou le pentesting. Pour cela executez le script powershell install.ps1 du dépôt Github : https://github.com/fireeye/flare-vm

Dans un second temps on va utiliser l’outil pafish afin de déterminer si notre environnement windows 10 est suffisamment « crédible » pour un environnement de travail sur les malware.(Passez la RAM à plus de 2 Go, et modifiez certaine option dans votre fichier de configuration VMX de votre machine virtuelle.) Pour cela utilisez https://github.com/a0rtega/pafish pour auditer votre machine virtuelle windows 10.

Modification fichier VMX :

isolation.tools.getPtrLocation.disable = "TRUE"  
isolation.tools.setPtrLocation.disable = "TRUE"  
isolation.tools.setVersion.disable = "TRUE"  
isolation.tools.getVersion.disable = "TRUE"  
monitor_control.disable_directexec = "TRUE"  
monitor_console.restrict_backdoor = "TRUE"  
monitor_control.disable_chksimd = "TRUE"  
monitor_control.disable_ntreloc = "TRUE"  
monitor_control.disable_selfmod = "TRUE"  
monitor_control.disable_reloc = "TRUE"  
monitor_control.disable_btinout = "TRUE"  
monitor_control.disable_btmemspace = "TRUE"  
monitor_control.disable_btpriv = "TRUE"  
monitor_control.disable_btseg = "TRUE"

Lorsque votre environnement est prêt on va commencer par décrire rapidement la classification des malwares ainsi que des symptômes d’infection d’un malware.

Classification des Malwares

Virus : reproduction et injection dans d’autres programme (malware)
Vers : Petit programme autonome qui se réplique automatiquement
Spyware/Adware : ou encore keyloggers, track les actions utilisateurs souvent a des fins publicitaires
RootKit : Attaque à plus bas niveau dans le système, création de backdoor
Botnet : Réseau de machines zombies, souvent utilisé pour du DDos ou cryptomining
Ransomware : Crypte le disque dur de la victime et demande de rançon
Cryptominers : Utilisation masquée des ressources de calcul de la machine

Symptomes des Malwares (liste non exhaustive)

Déplacement autonome de la souris
Ouverture de fenêtre intempestives
Ralentissement du système
Forte utilisation des ressources du système
Changement de mot de passe
Transaction bancaire non désiré

Vecteurs d’infections (liste non exhaustive)

Plusieurs types possible :
distant : Téléchargement depuis un navigateur, détournement de click légitime, piège jointe mail piégée
locaux : Accès physique à une machine, support amovible, partages réseau
humain : phising, réseau sociaux, étude du comportement individuel

Vocabulaire Divers

APT: Advanced Persitant Threat, ils se caractérisent par leur furtivité, exfiltration de données, assez sophistiqués. Généralement développé par des groupes avec de gros moyens et de bonnes connaissances techniques.
La logique de déploiement est la suivante : Reconnaissance -> Distribution -> Action de persistance -> Collection de données -> Exfiltration

Serveur C&C : Serveur de Command and Control, il se charger de communiquer les différentes directives aux machines infectées.
Canaux de Communication : HTTP/HTTPS/FTP/IRC, ou via email et d’autres protocoles propriétaires
IOC : Indicateur de compromissions

Processus d’analyse d’un Malware : Quoi (objectif) ? Comment (forensic) ? Ou (origine, ciblé ou global) ? Quand ?

Types de Fichiers et composition :

Executable : header (information du fichier); point d’entrée (entrypoint); imports (fonctions exterieures nécessaire, comme les DLL par ex); code en lui même; données (input utilisateur par ex)

Format ELF et Format PE

ELF : Executable and linkable Format : Format de fichier pour les executables, les librairies, et les fichiers objets sous Linux principalement.
PE : Format de fichier exécutable dérivé du format COFF, format de fichier pour windows exe; dll; sys.
Le format est :
DOS Header; Permet au système de reconnaître le type de fichier (magic number)
DOS Stub; Va être executé quand windows ne reconnait pas le header
PE Header; Regroupement de la structure du fichier
FILE Header; Contient les informations sur la structure du fichier
OPTIONAL Header; Contient les informations (taille point d’entrée, adresse de base préférée)
DATA Directory; Tableau de structure, contient la position et taille importante du fichier PE
SECTION Header; Contient des informations sur des sections du fichiers PE (variables ext …)

La table d’import (IAT)

Elle indique le nom des DLL utilisées et les API.La structure nommée IMAGE_IMPORT_DESCRIPTOR est utilisée pour chaque DLL. La structure nommée IMAGE_THUNK_DATA est utilisée pour chaque API de chaque DLL. La structure nommée IMAGE_IMPORT_BY_NAME définit le nom des fonctions.
La table d’export (EAT)
Utile dans le cas ou le programme met à disposition des fonctions pour d’autres programmes. Soit par nom de fonction, soit par son numéro d’ordinal.
Le hooking IAT/EAT consiste à rediriger un appel de fonction vers un code du malware. Il affecte uniquement un seul process.

Introduction au API Windows

Principales Librairies Windows
Kernel32.dll : Administration de la mémoire, opérations sur des fichiers, création de process et treath
User32.dll : Tout ce qui est graphique, menu, souris
Ntdll.dll : Présent dans chaque processus, interface entre l’user et le kernel
ws2_32.dll : Traiter les sockets réseau
Wininet.dll : Fournit des API réseau de haut niveau (httpopenrequest, ftpgetfile par exemple)
Appel API Windows
Une API fonctionne comme : pgm.exe -> fichier.dll -> Ntdll.dll -> Kernel32.dll

Persistance de Malware Windows : Registre; Fichier; Service; Drivers; Méthode non conventionnelle
Techniques d’offuscations : Installation comme Service; injection et hooks(registre); injection dans une DLL (CreateRemoteThreat)

Etapes de chargement d’une DLL :
répertoire de lancement du programme
répertoire système(c:\system32)
répertoire de windows (c:\windows)
répertoire courant de l’utilisateur
répertoire dans la variable d’environnement %PATH%

Techniques d’obfuscation : Les droppers s’auto supprime, utilisation de nom de fichier légitime, évasion de signature pour les AV (hash), changement de la taille de fichier, évasion heuristique, utilisation d’une double extension, désactiver AV, utilisation d’algorithme XOR(utilisation d’une clee de chiffrement)

Approche d’analyse : statique/dynamique

Statique : Avant exécution du malware (plus compliqué sur des malwares récents, complexes et bien offusqué)
Dynamique : Après exécution du malware

Analyse Statique

Fingerprinting : Hash des fichiers du malware
Détection des packers : Recherche d’offuscation
Extraction de string : déduction d’informations sur le binaire
Analyse header PE : format de fichier pour windows exe; dll; sys
Désassemblage : du fichier binaire

Identifier le type de fichiers : Fichier PE; portable executable (windows), ELFE (Linux)
On va déterminer la signature MZ avec un éditeur hexadecimal(HxD), elle figure comme entête de tous les exécutables couramment utilisés par Windows. On peut également utiliser CFF explorer 8.(Déterminer le type de fichier)Sur kali, on peut utiliser « xxd -g 1 monfichier.exe | more » ou « file monfichier.exe »
Récupérer et identifier le hash : Généralement en md5, sha1, sha256. Il peut servir à identifier un binaire, identifier les changements de comportement. Sous Kali (md5sum monfichier.exe, sha1sum, sha256sum) Sous Windows on peut utiliser : HashMyFiles

Analyser les fichiers binaire : Sur Windows, Utilisez Virustotal, pestudio(winitor.com) et sur Kali utilisez munin (https://github.com/Neo23x0/munin, couplé à virustotal) : pip3 install -r requirements.txt
Extraire les chaines de caractères des binaires malveillants : Sur Kali, strings -a monfichier.exe > result.txt, strings est une commande Unix qui permet de sortir sur la console les caractères affichables d’un fichier ou d’un flux. Sous Windows Utilisez pestudio(winitor.com)
Détecter l’obfuscation : Packers compression de la structure (avec UPX), ou chiffrement au lieu de compresser.Sous Windows utiliser (Peid, exeinfo PE, ou DIE : Detect it easy)
Inspecter les Header PE : Trouver les différentes librairies utilisées par le malware et les fonctions importées

On peut également directement comparer plusieurs versions de malware entre elle avec Ssdeep qui un est un outil de calcul récursif et de correspondance dans le hachage.(Context Triggered Piecewise Hashing ou Fuzzy Hashing = hachage flou). Le Fuzzy hashing est une méthode pour comparer des fichiers similaires mais pas identiques. Cet outil peut être utilisé pour comparer des fichiers comme les hachages réguliers le font (tels md5sum ou sha1sum) mais il trouve des fichiers similaires avec de légères différences. Il peut être utilisé pour identifier des versions modifiées de fichiers connus, même si des données ont été insérées, modifiées ou supprimées dans les nouveaux fichiers.
On peut également utiliser Yara afin d’écrire une règle de recherche, il peut être combiné avec un système de monitoring pour recevoir des alertes.

Analyse Dynamique

Pour l’analyse dynamique on va monitorer les processus (système), sous windows on va utiliser process Monitor (https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) et le process Explorer (https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer)
Et on va également faire du monitoring réseau avec fakenet (https://sourceforge.net/projects/fakenet/) et fakenet-ng (https://github.com/fireeye/flare-fakenet-ng)
On peut également faire du monitoring du registre avec regshot (https://sourceforge.net/projects/regshot/) qui est capable de prendre des snapshoot du registre et de comparer les résultats.

Analyse de DLL

Une DLL est un module qui contient des fonctions qui peuvent être utilisées par un programme via des appels API () que ce soit pour le réseau, l’interface graphique ou autres….
Ainsi la distribution de malware via DLL permet d’appeler le code malveillant depuis n’importe ou.

Sous Windows pour executer une DLL on va utiliser :

cd c:\windows\
.\rundll32.exe .\monfichdll.dll,myfunction

Pour trouver myfunction ustilisez CFF explorer dans la section « export »
Si pas de fonction de fonction d’export, regarder du côté de « import directory »

Laisser un commentaire