L’analyse statique de malwares consiste à examiner un fichier malveillant sans l’exécuter. Cette approche sans risque permet d’identifier rapidement les capacités d’un malware, ses indicateurs de compromission (IoC) et ses mécanismes de persistance. Ce chapitre couvre les outils et méthodes employés par les analystes malware professionnels.

Identification initiale

# Identifier le type de fichier
file malware.exe
file malware.bin

# Calculer les hashes (pour recherche dans VirusTotal)
md5sum malware.exe
sha256sum malware.exe

# Rechercher sur VirusTotal
curl -s "https://www.virustotal.com/api/v3/files/$(sha256sum malware.exe | cut -d' ' -f1)" \
     -H "x-apikey: VOTRE_CLE" | python3 -m json.tool | grep last_analysis_stats -A10

Analyse des strings

# Extraire les chaînes ASCII et Unicode
strings malware.exe
strings -e l malware.exe   # Unicode 16-bit little-endian

# Chercher des IoC dans les strings
strings malware.exe | grep -iE "http|\.com|\.ru|cmd|powershell|registry"
strings malware.exe | grep -iE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

# FLOSS : extraire les strings obfusquées (FLARE team)
floss malware.exe

Analyse de l’en-tête PE (Windows)

# PE Studio : outil graphique complet (Windows)
# Analyse : imports, exports, sections, ressources, timestamps

# pestool (Linux)
pip install pefile
python3 -c "
import pefile
pe = pefile.PE('malware.exe')
print('Timestamp:', pe.FILE_HEADER.TimeDateStamp)
print('Architecture:', hex(pe.FILE_HEADER.Machine))
for imp in pe.DIRECTORY_ENTRY_IMPORT:
    print('DLL:', imp.dll.decode())
    for entry in imp.imports:
        if entry.name: print('  ', entry.name.decode())
"

Sections PE suspectes

Section  Taille virtuelle vs taille brute  Indicateur
.text    Très grande                        Code packed/chiffré
.data    Entropie élevée (>7)               Données chiffrées (AES, XOR)
.rsrc    Exécutable embarqué                Dropper (installe un autre malware)
UPX0     Présence                           Packer UPX détecté

# Mesurer l'entropie par section
python3 -c "
import pefile, math
pe = pefile.PE('malware.exe')
for s in pe.sections:
    data = s.get_data()
    if len(data) == 0: continue
    freq = [data.count(bytes()) for i in range(256)]
    entropy = -sum(f/len(data)*math.log2(f/len(data)) for f in freq if f)
    print(s.Name.decode().strip(), f' → entropie: {entropy:.2f}')
"

Décompilation avec Ghidra / IDA Free

Workflow Ghidra :
1. File → New Project → Import File (malware.exe)
2. Auto-analyze (accepter les options par défaut)
3. Symbol Tree → Functions → identifier main() ou WinMain()
4. Décompiler → pseudo-code C à analyser
5. Renommer les variables et fonctions pour la lisibilité
6. Chercher les appels à : CreateProcess, WriteFile, RegSetValue, WSAConnect

Fonctions API Windows suspectes :
  CreateRemoteThread  → injection de code dans un autre processus
  VirtualAllocEx      → allouer mémoire dans un autre processus
  WriteProcessMemory  → écrire dans un autre processus (code injection)
  RegSetValueEx       → persistance dans le registre Windows
  URLDownloadToFile   → téléchargement de fichier depuis Internet
  CryptEncrypt        → chiffrement (ransomware)

Règles YARA

// Règle YARA pour détecter un ransomware XYZ
rule Ransomware_XYZ {
    meta:
        description = "Détecte le ransomware XYZ"
        author = "Analyste"
        date = "2024-01-15"
    strings:
        $s1 = "YOUR FILES HAVE BEEN ENCRYPTED" nocase
        $s2 = { 68 74 74 70 3A 2F 2F }  // "http://"
        $s3 = "bitcoin" nocase
        $api1 = "CryptEncrypt"
        $api2 = "FindFirstFileW"
    condition:
        uint16(0) == 0x5A4D and   // Magic bytes PE : MZ
        ($s1 or $s3) and $api1 and $api2
}

// Scanner avec YARA
yara -r malware_rules.yar /chemin/a/scanner/
Points clés :

  • Les strings révèlent souvent les URLs C2, chemins de fichiers et clés de registre
  • Une entropie > 7 dans une section PE indique du code chiffré ou compressé
  • Les imports DLL trahissent les capacités du malware (réseau, registre, processus)
  • Les règles YARA permettent de scanner des systèmes entiers à la recherche de malwares connus
SEE ALL Add a note
YOU
Add your Comment