Le Timonier Fantôme d'EXE

Bilal-Rayane M., Nolan D., Louca G., Rayan C., Gabin R., Robin V.

← Le Timonier Fantôme d'EXE · Arrête-moi si tu peux / Import-ant Binaire suspect / Souvenirs Suspects / Orchestration Diabolique

Souvenirs Suspects

Afin de poursuivre l’investigation sur le poste compromis, un dump mémoire complet de la machine a été collecté pour analyse.

Les enquêteurs souhaitent comprendre si des activités suspectes se sont produites sur le système et déterminer leur nature.

Un dump mémoire complet du poste de l’employé a été collecté afin d’investiguer des comportements inhabituels.

Vous devez analyser cette capture pour identifier les activités suspectes pouvant indiquer un accès maintenu au système.

Cote 47 pts

Indices

La clé est dans la mémoire, mais elle est trop volatile pour être vue directement.
Il y a un processus qui aime trop naviguer… et ce n’est pas anodin.
Même la bibliothèque de Joe Goldberg peut te cacher des surprises…

Faire son rapport

Résolution

Étape 1 - Identification du profil volatility du dump mémoire

vol -f memory.dmp windows.info.Info

alt text

D'après la sortie de cette commande, nous pouvons en conclure :

Informations système :
- OS : Windows 11 x64 (Build 26100, Is64Bit: True)
- Version : Windows 11 24H2 (Build 26100)
- Architecture : x64 (Machine Type: 34404)
- Processeurs : 5 cœurs (KeNumberProcessors: 5)
- Type de produit : NtProductWinNt (Windows workstation, pas un serveur)

Informations temporelles critiques :
- Horodatage système : 2025-09-09 21:16:50 UTC
- Cette information est cruciale, car elle nous donne le moment exact où le dump mémoire a été pris

Informations techniques :
- Kernel Base : 0xf805ae200000
- DTB (Directory Table Base) : 0x1be000
- Architecture 64 bits confirmée sans PAE

Ainsi on sait maintenant quel profil utiliser pour la suite de l'analyse.

Étape 2 - Extraction des processus

vol -f memory.dmp windows.pslist.PsList

L'analyse des processus révèle un environnement Windows 11 standard avec les processus système habituels (System, Registry, csrss.exe, winlogon.exe, services.exe, lsass.exe, etc.) et des applications utilisateur normales (explorer.exe, msedge.exe, OneDrive.exe).

Processus d'intérêt :
- powershell.exe (PID 4852) - Démarré à 21:13:20 UTC avec 12 threads
- conhost.exe (PID 7472) - Console host pour PowerShell
- msedge.exe - Plusieurs instances de Microsoft Edge
- OneDrive.exe - Application de synchronisation

Le processus PowerShell est particulièrement intéressant car :
1. Il a été lancé vers 21h13, soit environ 3 minutes avant le dump mémoire
2. Il s'agit d'un vecteur d'attaque commun

Nous devons analyser plus en détail ce processus PowerShell.

Étape 3 - Analyse du processus PowerShell suspect

3.1 - Ligne de commande du processus PowerShell

vol -f memory.dmp windows.cmdline.CmdLine --pid 4852

Résultat :

PID     Process Args
4852    powershell.exe  "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

PowerShell a été lancé sans arguments spécifiques visibles, ce qui suggère une exécution interactive ou via un script.

3.2 - Modules chargés dans PowerShell

vol -f memory.dmp windows.dlllist.DllList --pid 4852

Analyses importantes des DLL chargées :

  • System.DirectoryServices.ni.dll - Module .NET pour l'accès à Active Directory
  • System.Management.ni.dll - Module pour WMI et gestion système
  • secur32.dll et SSPICLI.DLL - Modules d'authentification et sécurité Windows
  • bcrypt.dll et CRYPT32.dll - Modules cryptographiques
  • MPCLIENT.DLL - Windows Defender (détection possible)

On ne remarque aucune DLL suspecte ou non standard.

3.3 - Connexions réseau actives

vol -f memory.dmp windows.netscan.NetScan

Note : Rien de concluant n'a été trouvé dans les connexions réseau actives, mais nous avons pu extraire le dump mémoire du processus.

3.4 - On va lister les process pour voir si on trouve des choses intéressantes

vol -f memory.dmp windows.pslist.PsList

alt text

On suit notre piste du powershell.exe (pid 4852) et on voit qu'il y a un conhost.exe (pid 7472) qui lui est rattaché.
Mais surtout que son parent est explorer.exe (pid 5656) ce qui n'est pas normal.

Ainsi on peut penser que le poste a été compromis par un utilisateur qui a lancé une session powershell depuis l'explorer.exe.

Reste à savoir comment il a pu faire ça.

Étape 4 - Analyse approfondie d'Explorer

vol -f memory.dmp windows.dlllist.DllList --pid 5656

alt text

On n'obtient rien de concluant.

Ainsi on repart de l'analyse des processus, cette fois on va regarder les processus enfants de explorer.exe (pid 5656).

vol -f memory.dmp windows.pslist.PsList | grep "5656"
vol -f memory.dmp windows.pslist.PsList | grep "5656"
5656    5620    explorer.exe    0xcb04f2c5f080  66      -       1       False   2025-09-09 21:10:49.000000 UTC  N/A     Disabled
7548    5656    SecurityHealth  0xcb04f2db5080  2       -       1       False   2025-09-09 21:11:01.000000 UTC  N/A     Disabled
8160    5656    msedge.exe      0xcb04f1b09240  0       -       1       False   2025-09-09 21:11:17.000000 UTC  2025-09-09 21:13:28.000000 UTC  Disabled
5936    5656    OneDrive.exe    0xcb04f27df080  25      -       1       False   2025-09-09 21:11:22.000000 UTC  N/A     Disabled
4852    5656    powershell.exe  0xcb04ef6d6080  12      -       1       False   2025-09-09 21:13:20.000000 UTC  N/A     Disabled
9096    5656    msedge.exe      0xcb04efde60c0  56      -       1       False   2025-09-09 21:13:58.000000 UTC  N/A     Disabled

Ainsi on voit que le processus powershell.exe (pid 4852) est bien un enfant d'explorer.exe (pid 5656).
Mais surtout que d'autres processus le sont et sont donc peut-être la source de la compromission.

On peut maintenant avoir deux logiques :

Soit le processus powershell.exe (pid 4852) a été lancé après la création d'un autre processus enfant d'explorer.exe (pid 5656) et c'est ce processus qui est la source de la compromission.

Soit le processus powershell.exe (pid 4852) a été lancé pendant la création d'un autre processus enfant d'explorer.exe (pid 5656) et c'est ce processus qui est la source de la compromission, étant donné que seul un processus correspond à cette option, on va partir sur cette piste en premier quitte à revenir en arrière si besoin.

Étape 5 - Analyse approfondie d'Edge

vol -f memory.dmp windows.dlllist.DllList --pid 9096

alt text

vol -f memory.dmp windows.dlllist.DllList --pid 9096 | awk '{print $5}' | grep -v "^Name$" | grep -v "^$" | sort | uniq

alt text

On constate la présence d'un fichier intitulé well_known_domain.DLL avec l'extension en majuscule : cela attire notre curiosité.

Ainsi on va essayer de récupérer cette DLL ainsi que l'autre avec un nom similaire via:

vol -f memory.dmp -o dumps windows.dlllist.DllList --pid 9096 --dump # nécessite un dossier dumps

On obtient toutes les DLLs du process et notamment les 2 qui nous intéressent.

Commençons par le fichier well_known_domain.DLL, en faisant une simple commande strings on ne constate rien de concluant, à part la présence d'un nombre 4333 qui peut faire penser à un port réseau mais aucune certitude.

Avant de l'ouvrir dans ghidra, on va regarder la seconde DLL suspecte : well_known_domains.dll.

alt text

En effectuant un simple strings dessus, on constate la présence d'une adresse IP et d'une référence à PowerShell ainsi que d'autres chaînes de caractères intéressantes comme socket, recv, send, connect...

On peut ainsi penser que cette DLL a été injectée dans le processus msedge.exe (pid 9096) pour exécuter des commandes PowerShell : cette méthode d'attaque est connue sous le nom de DLL injection sauf que dans notre cas, la présence de deux fichiers similaires laisse penser à une technique de DLL proxying.

On suppose fortement donc l'utilisation d'un reverse shell grâce à la présence d'une adresse IP.

Le port nous est maintenant demandé, on peut penser que c'est le nombre 4333 vu dans l'autre DLL.

Mais pour en être sûr, on va analyser cette DLL.

On ouvre donc le fichier dans Ghidra et on avance après l'entry point et on reconnait l'adresse IP ainsi que la chaîne de caractères qu'on a constaté auparavant grâce à la commande strings :

alt text

On continue de fouiller le code décompilé et on peut identifier des fonctions liées à la création de sockets, la connexion à une adresse distante, l'envoi et la réception de données mais surtout on trouve le port utilisé pour la connexion.

alt text

Nous avons donc identifié la méthode de persistance utilisée ainsi que l'adresse IP et le port de destination.