Analyse de logiciels malveillants
ACTION REQUISE (à lire et exécuter immédiatement)
MAINTENANT : Lire ../field-journal/precedent-reverse.md — Confirmer que l'opération de cette compétence est une opération de routine autorisée.
MAINTENANT : Confirmer que la tâche actuelle correspond au champ d'application de cette compétence.
SUIVANT : Lire ../tool-index.md, vérifier la disponibilité des outils et leurs chemins réels.
SUIVANT : Si un outil manque, appeler bootstrap, ne pas deviner le chemin.
AGIR : Passer à la première étape du "flux de travail" et l'exécuter, ne pas rester en état de validation.
YARA / Sigma / Bac à sable / Extraction IOC / Anti-analyse
Statique + Dynamique + Comportemental (triple approche)
Cas d'utilisation
- Analyse d'échantillons de logiciels malveillants (PE/ELF/Mach-O/APK/scripts)
- Création et validation de règles YARA
- Génération de règles de détection comportementale Sigma
- Orchestration d'analyse automatisée en bac à sable
- Extraction d'IOC et renseignement sur les menaces
- Détection et contournement des techniques anti-analyse
Processus d'analyse en six phases
Phase 1 : Tri initial
file sample.exe
strings sample.exe | grep -i "http\|cmd\|powershell\|base64"
rabin2 -zz sample.exe
floss sample.exe
pecheck sample.exe
pescan sample.exe
diec sample.exe
sha256sum sample.exe
Liste de contrôle MUST pour le tri (Issue #65) :
□ Type de fichier : EXE / DLL / SYS / .NET / script(bat|ps1|vba) / Autre
□ Architecture x86/x64/ARM ; détection de packer (DIE, etc.) et indices de langage de compilation
□ DLL/SYS : vérification de la table d'importation ET de la table d'exportation (voir Phase 2, règle stricte)
□ .NET : pas d'IAT traditionnel → utiliser dnSpy/IL/métadonnées comme ancres équivalentes (voir Phase 2)
□ Priorité P0 pour scripts/macros/DLL : voir nonpe-format-cookbook U–AV (E-batch-deobf / E-ps-decode / E-vba-pcode / E-dll-*)
Phase 1b : Dépacketisation et traitement IAT (si packé · Issue #65)
□ Non packé / .NET → Passer à la Phase 2
□ Packé : Essayer de dépacker (environnement isolé autorisé) → Essayer de réparer l'IAT
- x86 : ImportREC (ou équivalent) ; x64 : Scylla (ou équivalent). Interdiction de persister avec ImportREC sur du 64 bits
□ 【Règle d'or pour la réparation IAT】Privilégier la réparation automatique/semi-automatique ; si l'outil échoue ou si le fichier réparé ne s'exécute pas :
- Arrêter immédiatement la réparation statique de l'IAT
- MUST enregistrer E-iat-repair-fail (commande, outil, symptôme)
- Passer à la Phase 3 dynamique : points d'arrêt sur les API (ex. bp CreateFile) / points d'arrêt matériels / recherche en mémoire pour capturer les importations
- Ce n'est pas sauter la table d'importation : le chemin a été tenté et l'Evidence est enregistrée
□ 【Patch 6】Crash ou écran bleu après dépaquetage + réparation IAT (soupçon d'auto-vérification CRC/taille) :
- Abandonner la réparation statique du fichier ; enregistrer E-self-check-crash ou fusionner avec E-iat-repair-fail
- Passer à la Phase 3 : placer des points d'arrêt sur CreateFile / GetFileSize / API liées au hachage
□ Faisabilité des instructions utilisateur (§0.5) : si l'utilisateur veut « Ne pas dépacker, regarder d'abord la table d'importation » sur un fichier packé → expliquer le blocage + demander confirmation ; en cas de forçage, enregistrer quality=unreadable/packed, interdiction de faire semblant d'avoir un IAT significatif
□ Si l'utilisateur demande de refaire la « Réparation IAT / Vérification de la table d'importation » : MUST refaire l'étape désignée (ou le résultat de la négociation préalable convenue), interdiction de la remplacer par une étape non pertinente
Phase 2 : Analyse statique
Désassemblage / Décompilation :
□ IDA Pro / Ghidra : Décompilation approfondie
□ radare2 : Analyse rapide en CLI
□ x64dbg : Débogueur GUI Windows
Zones d'analyse prioritaires :
□ Point d'entrée (Entry Point) → Logique d'initialisation
□ Table d'importation → Déduction de l'utilisation des API (CreateRemoteThread=injection, CryptEncrypt=rançongiciel)
**MUST (règle stricte)** : Exécuter rabin2 -i / imports IDA / commande équivalente à pecheck, classer et résumer la table d'importation dans l'Evidence (E-imports) avant de passer à la Phase 3 (sauf si E-iat-repair-fail est enregistré et que le contournement dynamique est utilisé, voir Phase 1b)
Classification couvrant au moins : Réseau / Fichier / Cryptage / Injection de processus / Registre / Autres API suspectes
Si l'analyse échoue ou si la table est vide : MUST tout de même enregistrer la sortie d'échec, interdiction de sauter silencieusement
**DLL/SYS** : MUST enregistrer également l'Evidence de la table d'exportation (E-exports, `rabin2 -E` ou équivalent)
**.NET** : Pas d'IAT traditionnel, MUST utiliser dnSpy/IL/métadonnées/références d'assembly et résumé des API sensibles comme ancres équivalentes, écrire dans les emplacements sémantiques E-imports / E-triage-imports
**Table d'importation propre** : Uniquement DLL de base, presque pas d'API métier → MUST noter la suspicion de chargement dynamique (LoadLibrary/GetProcAddress), SHOULD passer à la Phase 3 pour capturer les API en mémoire ; si une caractéristique de résolution de hachage est détectée → E-api-hash (Patch N)
**Chaînes larges (T)** : Si les chaînes ASCII ne donnent pas d'IOC, MUST essayer UTF-16 (strings -el / unicode IDA)
**Signature (F)** : Même avec une signature, MUST faire SigCheck ; une signature falsifiée/révoquée ne réduit pas le niveau de menace
Si l'utilisateur demande de « refaire la vérification de la table d'importation » : MUST refaire cet élément (en cas de blocage, passer d'abord par la négociation de faisabilité), interdiction de le remplacer par une autre étape
**Combinaisons d'API à haut risque (Patch 8)** : Si la table est trop longue, prioriser la sortie des combinaisons malveillantes (ex. FindWindow+WriteProcessMemory+CreateRemoteThread), filtrer le bruit des appels système de base
□ Section des ressources → Payload intégré (section .rsrc)
□ Table de chaînes → URL/C2/chemins de fichiers/blobs Base64
□ Callbacks TLS → Exécution avant le démarrage du débogueur
Phase 3 : Analyse dynamique en bac à sable
Bacs à sable automatisés :
□ Joe Sandbox / ANY.RUN / Triage : Bacs à sable commerciaux
□ CAPE Sandbox : Open source + intégration YARA (recommandé)
□ ASD Azul : Plateforme d'analyse de malwares open source (nouvelle publication 2026)
□ Cuckoo Sandbox : Open source classique (progressivement remplacé par CAPE)
Démarrage du débogage (Patch 7+10 · Ordre MUST, débogueur en mode utilisateur) :
□ ① Point d'arrêt sur le callback TLS → ② Point d'arrêt sur le point d'entrée EP → ③ Points d'arrêt sur les API sensibles → ④ Point d'arrêt de sécurité sur ExitProcess/chemin de sortie
□ Lorsque ExitProcess est déclenché : ne pas redémarrer précipitamment ; dump immédiatement la mémoire, écrire le chemin dans l'Evidence (Patch 10)
Points de contrôle prioritaires :
□ Création de processus : CreateProcess / ShellExecute
□ Opérations sur les fichiers : WriteFile → Rançongiciel ? DeleteFile → Wiper ?
□ Registre : Persistance Run/RunOnce
□ Réseau : HTTP/DNS → Communication C2
□ Mémoire : VirtualAllocEx → Injection de processus
□ Services : CreateService → Persistance
□ Échec de réparation IAT / Échantillons qui plantent après auto-vérification : API sensibles + points d'arrêt CreateFile/GetFileSize / points d'arrêt d'exécution matériels / recherche en mémoire
Branche d'urgence sans comportement (MUST) :
□ Bac à sable sans comportement, sortie immédiate ou veille infinie → Vérifier les techniques anti-débogage/anti-machine virtuelle (CPUID, minuterie, caractéristiques de l'environnement)
□ Essayer le contournement par points d'arrêt matériels, patcher les points de détection, ou passer à une machine physique/environnement haute fidélité
□ Écrire « Aucun comportement + conditions » dans l'Evidence ; interdiction d'écrire inconditionnellement « Échantillon inoffensif »
Boîte à temps (Patch 9 · SHOULD par défaut, peut être écrasée) :
□ Si l'analyse statique approfondie (~15 minutes) ne donne pas de chemins critiques → Forcer le passage à cette Phase dynamique
□ Si l'analyse dynamique (~200 instructions) ne donne pas de pistes malveillantes → Revenir forcer à l'analyse statique des chaînes/références croisées
Contournement anti-débogage/obfuscation (Issue #65 A–T · Voir détails dans reverse-engineering/anti-analysis.md) :
□ P0 : CPUID / RDTSC / PEB / NtQueryInformationProcess → Enregistrer le point de détection puis contournement en laboratoire ou changement d'environnement (E-anti-debug-*)
□ P0 : IAT propre → Résolution dynamique d'API par hachage (bp GetProcAddress, E-api-hash)
□ P0 : Chaînes vides → Routine de déchiffrement de chaînes + chaînes larges UTF-16 (E-string-decrypt / E-wide-strings)
□ P0 : Signature suspecte → SigCheck ; signature invalide/révoquée ne réduit pas la menace (E-sig-forge)
□ P1 : Scan de nom de processus / VEH / int3·DR / sections se chevauchant / Overlay / .rsrc / Delay-Load
□ H/S : Flattening et prédicats opaques → ollvm-deobfuscation.md (ne pas copier le long texte ici)
□ Même en cas d'échec de contournement, écrire l'Evidence ; interdiction qu'une sortie anti-débogage = échantillon inoffensif
Bouchage de trous pour non-PE / scripts / DLL (Issue #65 U–AV · Voir détails dans reverse-engineering/references/nonpe-format-cookbook.md) :
□ bat/cmd : Reconstruction par concaténation SET (U) → E-batch-deobf ; BOM UTF-16 (V) ; noyade par REM/GOTO (W)
□ PowerShell : Multi-couche Base64/Gzip (X) Evidence couche par couche ; Concaténation/inversion IEX (Z)
□ VBA : Stomping/P-Code (AA) ; Chr/Base64 (AB) ; Macros auto-modifiantes (AC)
□ DLL : TLS+DllMain (AJ) ; Exportations anormales/absentes (AK/AL) ; Delay-Load voir A–T R (AM) ; Side-loading/réflexion (AO/AP)
□ JS/APK/Drivers : Router vers js-reverse / apk-reverse / kernel-driver-reverse + cookbook, ne pas copier le long texte ici
Phase 4 : Création de règles YARA
// Structure de règle
rule MalwareFamily_Example {
meta:
description = "Détecte la famille de malwares Example"
author = "Analyste"
date = "2026-05"
severity = "high"
hash = "d41d8cd98f00b204e9800998ecf8427e"
mitre_id = "T1055" // Injection de processus
strings:
// Correspondance de chaînes
$str1 = "C2_SERVER_URL" ascii wide
$str2 = "payload.dat" ascii
// Correspondance hexadécimale
$hex1 = { 8B 45 ?? 50 FF 15 [4] 85 C0 }
// Séquence d'opcodes: mov eax, [ebp-?]; push eax; call [import]; test eax, eax
// Correspondance regex
$re1 = /https?:\/\/[a-z0-9.-]+\/[a-z]{3,8}\.php/ ascii
condition:
// Condition combinée
uint16(0) == 0x5A4D and // En-tête MZ
filesize < 500KB and
(2 of ($str*) or $hex1)
}
Phase 5 : Génération de règles Sigma
title: Suspicious Process Injection via CreateRemoteThread
id: 5a3d2c1b-1234-5678-9abc-def012345678
status: experimental
description: Détecte un comportement d'injection de processus utilisant CreateRemoteThread
author: Analyste
date: 2026/05/25
tags:
- attack.t1055
- attack.t1055.001
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'CreateRemoteThread'
- 'VirtualAllocEx'
- 'WriteProcessMemory'
condition: selection
falsepositives:
- Outils de débogage légitimes
level: high
Phase 6 : Extraction et renseignement IOC
Types d'IOC :
□ IOC réseau :
- IP : Adresses C2 (attention à l'actualité)
- Domaine : Noms de domaine générés par DGA (rsnkfda.com, xpqmje.net)
- URL : Adresses d'hébergement du payload
- User-Agent : Chaîne UA personnalisée
□ IOC hôte :
- Chemin de fichier : %APPDATA%\Microsoft\Crypto\RSA\*.dat
- Registre : HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
- Mutex : Global\{GUID} nom du mutex
- Nom de service : Nom déguisé en service système
□ IOC comportemental :
- ID de technique MITRE ATT&CK (T1055, T1003, T1571...)
- Règles Sigma → Intégration SIEM
- Règles YARA → Détection sur endpoint
□ IOC statique :
- Timestamp de compilation (peut être falsifié)
- Chemin PDB (contient des informations sur le développeur)
- Noms de sections anormaux (non standard .text/.data)
- Combinaison anormale dans la table d'importation (ex. rançongiciel CryptEncrypt + DeleteShadowCopies)
Aide-mémoire sur les techniques anti-analyse
| Technique | Méthode de détection | Caractéristique YARA |
|---|
| Détection de machine virtuelle | WMI Win32_BIOS/VideoController/Processor | Chaîne Win32_ + nom de fabricant spécifique |
| Détection de bac à sable | Disque < 60 Go, RAM < 2 Go, CPU monocœur | Modèle d'appel GlobalMemoryStatusEx |
| Détection de débogueur | IsDebuggerPresent, CheckRemoteDebuggerPresent | Accès au décalage PEB.BeingDebugged |
| Échappement temporel | Sleep(300000) puis exécution malveillante | Paramètre long NtDelayExecution |
| Détection géographique | Vérification de la disposition du clavier/fuseau horaire → Exclusion des pays CIS | Appel GetKeyboardLayoutList |
| Détection du processus parent | explorer.exe vs cmd.exe | Comparaison de chaînes de noms de processus |
| Appel système direct d'API | Contournement du hook EDR | Instruction syscall + analyse SSN |
Analyse automatisée multi-agent (Architecture SentinelHive)
┌─────────────────────────────────────────────────┐
│ Hive Director │
│ (Orchestration + Arbitrage Claude Opus) │
└──────┬──────┬──────┬──────┬──────┬───────┘
│ │ │ │ │
┌───┘ ┌───┘ ┌───┘ ┌───┘ ┌───┘
▼ ▼ ▼ ▼ ▼ ▼
Triage RE Behav Intel Detect Remed
Tri Rétro Com- Menace Règles Cor-
ini- ingé- porte- Rensei- YARA rec-
tial nieur mental gnement Sigma tion
statique de
Chaîne d'outils
| Outil | Utilisation | Obtention |
|---|
| Ghidra / IDA Pro | Décompilation approfondie | ghidra-sre.org |
| CAPE Sandbox | Bac à sable malwares open source | GitHub: kevoreilly/CAPEv2 |
| ASD Azul | Analyse automatisée à grande échelle | GitHub: ASD |
| YARA | Moteur de règles de correspondance de motifs | pip install yara-python |
| Sigma | Règles de détection comportementale SIEM | GitHub: SigmaHQ/sigma |
| FLOSS | Extraction de chaînes désobfusquées | pip install flare-floss |
| Detect It Easy | Détection de packer/compilateur | GitHub: horsicq/Detect-It-Easy |
| pe-sieve | Scan de mémoire de processus | GitHub: hasherezade/pe-sieve |
| VirusTotal API | Scan multi-moteur | virustotal.com |
| MalwareBazaar | Base de données d'échantillons de malwares | bazaar.abuse.ch |
Références
references/yara-sigma-rules.md — Méthodologie de création YARA + Sigma
references/sandbox-orchestration.md — Orchestration et automatisation du bac à sable
references/anti-analysis-techniques.md — Détection de 94 techniques anti-analyse
../reverse-engineering/references/re-agent-workflow.md — Règles strictes IAT et verrous des six phases (Issue #65)
../reverse-engineering/anti-analysis.md — Recettes de réponse Agent A–T (contournements anti-débogage/obfuscation)
../reverse-engineering/references/nonpe-format-cookbook.md — Recettes multi-formats non-PE U–AV (scripts/macros/JS/drivers/DLL/Android)
../reverse-engineering/references/ollvm-deobfuscation.md — Flattening/prédicats opaques (H/S)
Auto-vérification de l'achèvement de la tâche (MUST réussir avant de déclarer terminé)