cd ../writeups/
$ cat analyse-cerber-lab.md

Cerber Ransomware — Analyse Statique & Dynamique en Lab

Analyse complète du ransomware Cerber sous Flare-VM et Cuckoo Sandbox — analyse statique du PE, traçage comportemental et indicateurs de compromission.

Mar 2026
analyse-malwareransomwarereverse-engineeringflare-vmcuckoo

Travail réalisé lors de mon stage chez Techso Group (Casablanca, juillet–août 2023). Mission : étudier les méthodologies d’analyse de malwares et effectuer une analyse pratique du ransomware Cerber sous Flare-VM et Cuckoo Sandbox.


Qu’est-ce que Cerber

Cerber est une famille de ransomware-as-a-service (RaaS), active principalement entre 2016 et 2017. C’est l’une des premières à avoir utilisé un moteur text-to-speech pour annoncer l’infection à la victime. Son modèle d’affiliation l’a rendu massivement distribué.

Malgré son ancienneté, c’est une cible d’apprentissage pertinente. Les techniques qu’il utilise — obfuscation d’API, chiffrement hybride, C2 via Tor — sont toujours présentes dans les familles modernes. L’objectif de ce lab n’était pas de trouver quelque chose de nouveau sur Cerber, mais de construire et pratiquer un workflow d’analyse reproductible.


Mise en place du lab

Analyse statique — Flare-VM

Flare-VM est une distribution Windows dédiée à l’analyse de malwares, maintenue par Mandiant.

  1. VM Windows 10 fraîche — isolée, adaptateur hôte uniquement, pas d’accès internet
  2. Désactiver Windows Defender et les mises à jour automatiques avant l’installation
  3. Exécuter le script d’installation Flare-VM — il tire les outils via Chocolatey
  4. Snapshot de l’état propre avant de toucher tout échantillon

Outils principaux utilisés :

OutilUsage
Detect-It-Easy (DIE)Identification packer/compilateur
PEStudioEn-tête PE, imports, chaînes, entropie
GhidraDésassemblage et décompilation
x64dbgDébogage dynamique
FLOSSExtraction de chaînes obfusquées
CFF ExplorerVisualisation structure PE

📷 [Placeholder — bureau Flare-VM]

Analyse dynamique — Cuckoo Sandbox

Cuckoo tourne sur un hôte Linux et lance des VMs Windows isolées pour exécuter les échantillons automatiquement.

Hôte Ubuntu (Cuckoo) → KVM → VM Windows 7 (agent Cuckoo)

Points clés de configuration :

  • Serveur de résultats sur une interface joignable depuis la VM invitée
  • machinery = kvm dans cuckoo.conf
  • Réseau routé via InetSim — l’échantillon reçoit des réponses mais sans connectivité réelle
  • Snapshot pris après installation de l’agent
1
cuckoo submit --timeout 120 cerber_sample.exe

Analyse statique

1. Triage initial

Premier passage avec DIE avant tout :

Type de fichier : PE32 executable (GUI) Intel 80386
Packer          : UPX (certains samples) / packer custom
Compilateur     : MSVC
Entropie        : Élevée dans la section code — payload chiffré

L’entropie élevée dans la section .text est le premier indicateur — un logiciel légitime dépasse rarement 7.0.

2. Table des imports

Après dépaquetage, la table des imports devient lisible :

ImportCapacité
CryptGenKey, CryptEncryptChiffrement de fichiers via Windows CryptoAPI
RegCreateKeyExW, RegSetValueExWPersistance registre
CreateProcessW, ShellExecuteWCréation de processus
InternetOpenW, InternetConnectWRéseau / C2
FindFirstFileW, FindNextFileWÉnumération du système de fichiers
DeleteFileWSuppression de fichiers

Crypto + registre + énumération FS = indicateurs forts de ransomware.

📷 [Placeholder — table d’imports PEStudio]

3. Extraction de chaînes avec FLOSS

strings standard rate les stack strings et les blobs encodés. FLOSS les résout :

.cerber                              ← extension ajoutée aux fichiers chiffrés
DECRYPT MY FILES                     ← base du nom des notes de rançon
hxxp://[redacté].onion/[victim_id]  ← C2 (service caché Tor)
vssadmin Delete Shadows /All /Quiet  ← suppression des clichés instantanés
bcdedit /set {default} recoveryenabled No

4. Schéma de chiffrement (Ghidra)

Cerber utilise un chiffrement hybride :

1. Au démarrage   → Génération clé AES-256 de session (CryptGenKey)
2. Par fichier    → Énumération FindFirstFile/FindNextFile
                  → Lecture du contenu
                  → Chiffrement AES-256
                  → Écriture du contenu chiffré
                  → Renommage : fichier.docx → fichier.docx.cerber
3. Clé en séquestre → Clé AES chiffrée avec la clé publique RSA-2048 de l'attaquant
                    → Envoi de la clé chiffrée au C2
4. Fichiers originaux → Supprimés

Sans la clé privée RSA du serveur C2, le déchiffrement est infaisable.

📷 [Placeholder — vue décompilateur Ghidra, boucle de chiffrement]


Analyse dynamique — Rapport Cuckoo

Système de fichiers

Créé :    %APPDATA%\{GUID_aléatoire}\cerber.exe   ← copie pour persistance
Créé :    Bureau\DECRYPT MY FILES.txt
Créé :    Bureau\DECRYPT MY FILES.html
Modifié : Tous les fichiers des répertoires utilisateur
Renommé : *.docx → *.docx.cerber

Registre

HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  "{nom_aléatoire}" = "%APPDATA%\{GUID}\cerber.exe"

Exécution à chaque connexion jusqu’au paiement de la rançon.

Réseau

Requête DNS : [sous-domaine_aléatoire].top
Trafic UDP sur le port 6893

Une des signatures de Cerber : utilisation de UDP port 6893 pour le C2, pas HTTP. Contourne les blocages HTTP simples.

Processus créés

cmd.exe /c vssadmin Delete Shadows /All /Quiet
cmd.exe /c bcdedit /set {default} recoveryenabled No
cmd.exe /c bcdedit /set {default} bootstatuspolicy ignoreallfailures

📷 [Placeholder — arbre des processus Cuckoo]


Indicateurs de Compromission

TypeValeur
Extension fichier.cerber
Notes de rançonDECRYPT MY FILES.txt, .html, .url
Clé de registreHKCU\...\Run avec nom GUID aléatoire
Protocole C2UDP port 6893
Suppression VSSvssadmin Delete Shadows /All /Quiet
Chemin persistance%APPDATA%\{GUID_aléatoire}\cerber.exe

Ce que j’en retiens

Technique :

  • Comment monter un environnement d’analyse isolé qui ne compromet pas l’hôte
  • La différence entre triage statique (rapide, sans risque) et analyse dynamique (plus complète, plus risquée)
  • Pourquoi le chiffrement hybride rend le déchiffrement infaisable sans la clé privée
  • Les limites de Cuckoo : certains samples détectent le sandbox (uptime, résolution d’écran, mouvements souris) et restent dormants

Méthodologie :

  • Toujours commencer par le statique — comprendre ce que le binaire peut faire avant de l’exécuter
  • FLOSS extrait significativement plus de chaînes que strings
  • Snapshot avant chaque exécution
  • Les captures réseau (même simulées) donnent les patterns C2 avant de toucher un vrai sample

Ressources