Rapport DFIR : Ransomware Incident Response

Type de lab : DFIR, C Programming, Ghidra, Incident Response Objectif : identifier le mécanisme du ransomware et récupérer le flag Résultat : ✅ flag récupéré par analyse statique, sans exécution du binaire

1. Contexte et méthode

L’incident concerne un poste Windows accessible en RDP depuis le réseau VPN du lab. Le scénario indique qu’un ransomware a compromis la machine et que les fichiers du Bureau doivent être examinés.

Approche suivie : non destructive. Inventaire des fichiers, calcul d’empreintes, recherche de programmes suspects, extraction statique de chaînes et lecture hexadécimale du fichier de preuve. Aucun exécutable suspect n’a été lancé.

Élément Valeur observée
Adresse de la machine 10.8.0.100
Compte utilisé Administrator
Répertoire utilisateur C:\Users\Administrator
Répertoire de travail IR C:\IR
Échantillon suspect C:\Windows\ntdll.exe
Taille de l’échantillon 264 078 octets
Hash SHA-256 de l’échantillon 800A3F327EB12ED300D083FB8AED7624BBA20B5B81A81A9ECBEF2ACCD9F83073
Fichier de preuve C:\Users\Administrator\Desktop\proof.txt
Taille du fichier de preuve 41 octets

2. Préparation de la collecte

Le répertoire C:\IR a été créé afin de centraliser les résultats et de ne pas mélanger les fichiers d’analyse avec les artefacts originaux.

New-Item C:\IR -ItemType Directory -Force | Out-Null

Sortie : aucune sortie affichée — normal, puisque Out-Null masque le résultat de création du répertoire.

Interprétation : le répertoire de travail a été créé avec succès. L’option -Force permet également de continuer si le dossier existait déjà.

3. Inventaire du Bureau

La première collecte a porté sur le Bureau de l’utilisateur Administrator.

Get-ChildItem "$env:USERPROFILE\Desktop" -Force |
  Select-Object FullName,Length,Extension,LastWriteTime |
  Tee-Object C:\IR\desktop.txt

Sortie observée :

C:\Users\Administrator\Desktop\desktop.ini                            282 .ini      9/9/2024 6:48:02 PM
C:\Users\Administrator\Desktop\EC2 Feedback.website                   527 .website  9/1/2026 4:40:19 PM
C:\Users\Administrator\Desktop\EC2 Microsoft Windows Guide.website    554 .website  9/1/2026 4:40:19 PM
C:\Users\Administrator\Desktop\Microsoft Edge.lnk                    2308 .lnk      9/1/2026 4:40:19 PM
C:\Users\Administrator\Desktop\proof.txt                               41 .txt      9/1/2026 4:40:19 PM

Interprétation : le Bureau ne présentait pas de série de fichiers avec une extension typique de ransomware telle que .locked, .enc ou .encrypted. Le fichier inhabituel et pertinent pour le lab est proof.txt, d’une taille de 41 octets. Une taille aussi faible justifie une vérification du contenu binaire plutôt qu’une simple lecture textuelle.

4. Calcul des empreintes du Bureau

Des empreintes SHA-256 ont été calculées pour tous les fichiers présents sur le Bureau.

Get-ChildItem "$env:USERPROFILE\Desktop" -File -Force |
  ForEach-Object { Get-FileHash $_.FullName -Algorithm SHA256 } |
  Tee-Object C:\IR\hashes.txt
Fichier SHA-256
desktop.ini 4B9D687AC625690FD026ED4B236DAD1CAC90EF69E7AD256CC42766A065B50026
EC2 Feedback.website A27939E9DCAE819D98EE073700194771D53C1F53EE7BDE3425FCD4F25859CC54
EC2 Microsoft Windows Guide.website 5BCEB76F1900054920F86A5DBCB228FFA418252C59514F54881139D5EBB7E4BC
Microsoft Edge.lnk 094BFDA29E52BACD20B78A7A8C5C9AD6477628E5E5528DC52CF2CEC3DEB1BF37
proof.txt B2E1BBDC95C2C0AD8BCF7D7FC29D8F036ACC85BF3048881F6F21EC160F469D8F

ℹ️ L’affichage PowerShell fourni était tronqué horizontalement pour certaines colonnes de chemin, mais les cinq fichiers correspondent à l’inventaire du Bureau.

5. Recherche initiale de programmes suspects

Une recherche a été effectuée dans les répertoires Downloads et Desktop pour les extensions exécutables ou scriptées.

Get-ChildItem C:\Users\Administrator\Downloads,C:\Users\Administrator\Desktop `
  -Recurse -File -Force -ErrorAction SilentlyContinue |
  Where-Object { $_.Extension -match '\.(exe|dll|ps1|bat|cmd|vbs|js)$' } |
  Select-Object FullName,Length,LastWriteTime |
  Out-File C:\IR\suspects.txt

Sortie : le fichier C:\IR\suspects.txt ne contenait pas de résultat exploitable. La commande a toutefois été saisie une première fois avec des caractères corrompus dans certains noms de propriétés, probablement à cause du collage dans la console. Cette erreur n’a pas affecté les fichiers originaux et a été contournée par des commandes plus simples.

Interprétation : l’absence d’échantillon dans Desktop et Downloads indique que le programme suspect devait être recherché plus largement dans le système de fichiers.

6. Recherche élargie des artefacts

La recherche a été étendue à la racine C:\, en ciblant les extensions susceptibles d’être associées au binaire, au code source, aux symboles ou aux fichiers chiffrés.

Get-ChildItem C:\ -Recurse -File -Force -ErrorAction SilentlyContinue |
  Where-Object { $_.Extension -in '.exe','.dll','.pdb','.c','.h','.txt','.locked','.enc','.encrypted','.ransom' } |
  Select-Object FullName,Length,Extension,LastWriteTime |
  Out-File C:\IR\all_candidates.txt

Résultat pertinent : la sortie contenait principalement des composants Windows et Amazon EC2 (par exemple C:\Boot\memtest.exe, les composants de C:\Program Files\Amazon et de nombreux fichiers de C:\Windows). L’artefact intéressant découvert ensuite est :

C:\Windows\ntdll.exe

Interprétation : le nom est anormal. Sur Windows, ntdll est normalement associé à la bibliothèque système ntdll.dll ; un fichier ntdll.exe placé directement dans C:\Windows constitue donc un indicateur de compromission dans le contexte de ce lab. Il ne fallait pas le lancer.

7. Identification et empreinte de l’échantillon

Get-FileHash C:\Windows\ntdll.exe -Algorithm SHA256
Algorithm  Hash
---------  ----
SHA256     800A3F327EB12ED300D083FB8AED7624BBA20B5B81A81A9ECBEF2ACCD9F83073
Path       C:\Windows\ntdll.exe

Métadonnées obtenues :

Get-Item C:\Windows\ntdll.exe |
  Select-Object FullName,Length,CreationTime,LastWriteTime
Propriété Valeur
Chemin C:\Windows\ntdll.exe
Taille 264 078 octets
Date de création 9/9/2024 18:59:53
Date de modification 9/9/2024 19:00:03

Interprétation : le fichier est un exécutable de 264 078 octets, créé et modifié à quelques secondes d’intervalle. Cette chronologie est compatible avec le dépôt ou la génération d’un échantillon de test. L’empreinte SHA-256 a été conservée pour l’identification et la traçabilité.

8. Analyse statique des chaînes

La commande Unix strings n’était pas disponible dans PowerShell :

strings : The term 'strings' is not recognized as the name of a cmdlet, function, script file, or operable program.

Une méthode native PowerShell/.NET a donc été utilisée. Elle lit les octets du fichier, les convertit en ASCII et conserve les séquences imprimables d’au moins cinq caractères.

$b = [IO.File]::ReadAllBytes('C:\Windows\ntdll.exe')
$s = [Text.Encoding]::ASCII.GetString($b)
[regex]::Matches($s,'[ -~]{5,}') |
  ForEach-Object Value |
  Set-Content C:\IR\ntdll_strings.txt
Get-Content C:\IR\ntdll_strings.txt

Chaînes significatives observées :

This program cannot be run in DOS mode.
.text
.data
.rdata
.pdata
.xdata
.bss
.idata
.reloc
\\Desktop
Encrypt
GenerateKey
xtxtmode.c

D’autres chaînes génériques liées à l’environnement C et Windows étaient également présentes, notamment _findfirst64, des symboles de type WriteFile, des noms de drapeaux de structures et des symboles MinGW. Elles ne sont pas toutes spécifiques au ransomware.

Interprétation : les sections .text, .data, .rdata, .idata et .reloc indiquent un exécutable PE Windows. Les chaînes Encrypt et GenerateKey sont directement cohérentes avec les objectifs du lab : le programme contient une routine de chiffrement et une routine de génération de clé. La chaîne \\Desktop montre que le programme cible le Bureau. Le fichier présente donc les caractéristiques de l’échantillon ransomware attendu.

9. Lecture hexadécimale du fichier de preuve

Une lecture textuelle simple de proof.txt n’a rien affiché. Le fichier devait donc être consulté au niveau des octets.

Format-Hex -Path C:\Users\Administrator\Desktop\proof.txt

Sortie observée :

Path: C:\Users\Administrator\Desktop\proof.txt

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   66 6C 61 67 5F 35 35 32 61 32 38 36 39 5F 34 34  flag_552a2869_44
00000010   66 32 5F 34 36 39 30 5F 39 63 30 33 5F 64 32 65  f2_4690_9c03_d2e
00000020   39 63 66 37 31 39 39 65 38                       9cf7199e8

Conversion ASCII :

Octets hexadécimaux Caractères ASCII
66 6C 61 67 5F 35 35 32 61 32 38 36 39 5F 34 34 flag_552a2869_44
66 32 5F 34 36 39 30 5F 39 63 30 33 5F 64 32 65 f2_4690_9c03_d2e
39 63 66 37 31 39 39 65 38 9cf7199e8

En concaténant les trois lignes, on obtient :

flag_552a2869_44f2_4690_9c03_d2e9cf7199e8

10. Conclusion et réponse du lab

L’analyse a suivi une progression de réponse à incident : inventaire du Bureau, conservation des empreintes, recherche élargie, identification d’un exécutable anormal, analyse statique de ses chaînes puis examen hexadécimal du fichier de preuve.

Le binaire C:\Windows\ntdll.exe est l’artefact ransomware probable, notamment en raison de son emplacement inhabituel et des chaînes Encrypt, GenerateKey et \\Desktop.

Le flag a été validé par conversion directe des octets de proof.txt en ASCII. Aucun lancement du binaire ni modification des fichiers de preuve n’a été nécessaire.

Flag final :

flag_552a2869_44f2_4690_9c03_d2e9cf7199e8

Annexe — commandes principales regroupées

New-Item C:\IR -ItemType Directory -Force | Out-Null

Get-ChildItem "$env:USERPROFILE\Desktop" -Force |
  Select-Object FullName,Length,Extension,LastWriteTime |
  Tee-Object C:\IR\desktop.txt

Get-ChildItem "$env:USERPROFILE\Desktop" -File -Force |
  ForEach-Object { Get-FileHash $_.FullName -Algorithm SHA256 } |
  Tee-Object C:\IR\hashes.txt

Get-ChildItem C:\Windows\ntdll.exe |
  Select-Object FullName,Length,CreationTime,LastWriteTime

Get-FileHash C:\Windows\ntdll.exe -Algorithm SHA256

$b = [IO.File]::ReadAllBytes('C:\Windows\ntdll.exe')
$s = [Text.Encoding]::ASCII.GetString($b)
[regex]::Matches($s,'[ -~]{5,}') |
  ForEach-Object Value |
  Set-Content C:\IR\ntdll_strings.txt
Get-Content C:\IR\ntdll_strings.txt |
  Select-String -Pattern 'Encrypt|GenerateKey|Desktop|flag|key|decrypt|xor|DFIR|CTF' -CaseSensitive:$false

Format-Hex -Path C:\Users\Administrator\Desktop\proof.txt

Leçons retenues

  • Une taille de fichier anormalement petite (41 octets pour proof.txt) est un signal à vérifier au niveau binaire plutôt qu’en lecture texte simple — le contenu peut sembler vide alors qu’il contient des données exploitables.
  • Un nom de fichier imitant un composant système légitime (ntdll.exe au lieu de ntdll.dll), placé dans un répertoire système (C:\Windows), est un indicateur de compromission classique à rechercher.
  • En l’absence de l’outil Unix strings, une regex PowerShell ([regex]::Matches($s,'[ -~]{5,}')) sur les octets ASCII du fichier permet d’obtenir un résultat équivalent sans dépendance externe.
  • L’analyse statique (sections PE, chaînes de caractères) peut suffire à confirmer le comportement d’un ransomware sans jamais l’exécuter, limitant le risque pour l’environnement d’analyse.

Références

  • Format de fichier PE (Portable Executable) — sections .text, .data, .rdata, .idata, .reloc
  • Format-Hex — cmdlet PowerShell pour l’inspection binaire