Hackropole - Analyse Mémoire - Pour commencer 1/2

Hackropole - Analyse Mémoire - Pour commencer 1/2

Introduction :

URL : https://hackropole.fr/fr/challenges/forensics/fcsc2025-forensics-analyse-memoire-1/
Nom du challenge : Analyse Mémoire - Pour commencer (1/2)
Difficulté : Intro
Contexte : On analyse une capture mémoire et l’on doit identifier des informations système : le nom d’utilisateur, le nom de la machine et l’adresse IPv4.
Format du flag : FCSC{"nom d'utilisateur":"nom de la machine":"adresse IPv4"}

Déroulé / Résolution :

  1. Extraction du dump

On commence par extraire le dump contenu dans l’archive :

caelinceptus@2600:~/Hackropole/memory_analysis_intro$ tar xvf analyse-memoire.tar.xz
# -> analyse-memoire.dmp
  1. Récupérer le nom d'utilisateur (USERNAME) :

Nous utilisons Volatility 3 et le plugin windows.envars pour lister les variables d’environnement par processus. Ici j’exécute Volatility depuis une image Docker (remplacez le chemin si besoin) :

caelinceptus@2600:~/Hackropole/memory_analysis_intro_part1$ docker run --rm -v $(pwd):/mnt sk4la/volatility3:latest -f /mnt/analyse-memoire.dmp windows.envars | grep "USERNAME"

Extrait pertinent de la sortie :

656	    wininit.exe	    0x23f70b715c0	USERNAME	SYSTEM
...
824	    lsass.exe	    0x1838fe03120	USERNAME	SYSTEM
936	    svchost.exe	    0x1f14e603300	USERNAME	DESKTOP-JV996VQ$
960	    fontdrvhost.ex	0x2461b6d1a30	USERNAME	UMFD-0
968	    fontdrvhost.ex	0x22221501a30	USERNAME	UMFD-1
...
8968    soffice.exe	    0x231eb801d00	USERNAME	userfcsc-10
5408	msedge.exe	    0x15c1fa03540	USERNAME	userfcsc-10
6908	msedge.exe	    0x1849e803570	USERNAME	userfcsc-10
7240	msedge.exe	    0x22f35e037c0	USERNAME	userfcsc-10
7232	msedge.exe	    0x12f5a4037c0	USERNAME	userfcsc-10
...

On en déduit que l’utilisateur actif est userfcsc-10 (processus tels que msedge ou soffice indiquent une session utilisateur).

Remarque : windows.hashdump permets aussi d’obtenir la liste des comptes locaux et leurs hashes si nécessaire.
  1. Récupérer le nom de la machine (COMPUTER)

Toujours avec windows.envars, on filtre pour COMPUTERNAME :

caelinceptus@2600:~/Hackropole/memory_analysis_intro_part1$ docker run --rm -v $(pwd):/mnt sk4la/volatility3:latest -f /mnt/analyse-memoire.dmp windows.envars | grep "COMPUTERNAME"

En sortie :

752		winlogon.exe	0x1beb9a515c0	COMPUTERNAME	DESKTOP-JV996VQ
800		services.exe	0x1d51b603120	COMPUTERNAME	DESKTOP-JV996VQ
824		lsass.exe		0x1838fe03120	COMPUTERNAME	DESKTOP-JV996VQ
...

Le nom de la machine est donc DESKTOP-JV996VQ.

  1. Récupérer l'adresse IPv4 locale (via windows.netstat)

Le plugin windows.netstat liste les connexions réseau (TCP/UDP) retrouvées en mémoire, avec les adresses locales / distantes, ports, état, PID, processus et horodatage :

caelinceptus@2600:~/Hackropole/memory_analysis_intro_part1$ docker run --rm -v $(pwd):/mnt sk4la/volatility3:latest -f /mnt/analyse-memoire.dmp windows.netstat

Extrait de la sortie :

Offset	        Proto	LocalAddr	 LocalPort	 ForeignAddr	  ForeignPort	State	     PID	Owner	        Created

0xa50a2791e010	TCPv4	10.0.2.15	 59256	     2.22.251.7	      443	        CLOSE_WAIT	 6720	SearchApp.exe	2025-04-01 22:15:13.000000 UTC
0xa50a2a0d6ae0	TCPv4	10.0.2.15	 65055	     52.222.169.27	  443	        CLOSE_WAIT	 7232	msedge.exe	    2025-04-01 22:13:43.000000 UTC
0xa50a20b39010	TCPv4	10.0.2.15	 49701	     13.107.246.254	  443	        CLOSE_WAIT	 6720	SearchApp.exe	2025-04-01 22:11:02.000000 UTC
...
0xa50a2752fab0	TCPv4	10.0.2.15	 49683	     20.199.120.182	  443	        ESTABLISHED	 3024	svchost.exe	    2025-04-01 22:10:54.000000 UTC
0xa50a27bdd460	TCPv4	10.0.2.15	 59261	     48.209.108.37	  443	        ESTABLISHED	 2040	MsMpEng.exe	    2025-04-01 22:17:19.000000 UTC
...
0xa50a25b5e5d0	TCPv4	10.0.2.15	 139	     0.0.0.0 	      0	            LISTENING	 4	    System	        2025-04-01 22:10:45.000000 UTC
0xa50a263ff650	TCPv4	0.0.0.0	     445	     0.0.0.0	      0	            LISTENING	 4	    System	        2025-04-01 22:10:47.000000 UTC

En regardant la colonne LocalAddr et en excluant ::, 0.0.0.0 et 127.0.0.1, on obtient l’adresse locale 10.0.2.15.

  1. Construction du flag

En regroupant les éléments trouvés :

  • utilisateur : userfcsc-10
  • machine : DESKTOP-JV996VQ
  • IPv4 : 10.0.2.15

Le flag est donc :

FCSC{userfcsc-10:DESKTOP-JV996VQ:10.0.2.15}

Conclusion :

Ce challenge est une excellente introduction à l’analyse mémoire Windows. Deux plugins de Volatility 3 se révèlent particulièrement utiles :

  • windows.envars :
    Ce module énumère les variables d’environnement présentes en mémoire, regroupées par processus. Il permet notamment d’extraire des informations système telles que USERNAME (nom de l’utilisateur associé à une session ou à un processus) et COMPUTERNAME (nom de la machine). Ces variables sont souvent conservées en clair dans la mémoire des processus et constituent un moyen fiable et rapide pour identifier les comptes et l’hôte compromis.
  • windows.netstat :
    Ce module reproduit l’équivalent mémoire d’un netstat en listant les connexions TCP/UDP retrouvées dans la capture : adresse locale, port local, adresse distante, port distant, état de la connexion, PID/processus associé et horodatage de création. Cela permet de :
    • déterminer l’adresse IP locale utilisée par la machine (en filtrant les valeurs génériques telles que 0.0.0.0, :: ou 127.0.0.1),
    • reconstituer les connexions réseau actives ou récentes (écoutes, connexions établies, connexions fermées),
    • corréler un socket à un processus PID pour comprendre quels programmes communiquaient et à quel moment (timeline).

En résumé, l’analyse combinée d’environnements (variables) et d’informations réseau en mémoire offre une vision claire du contexte d’exécution : qui est connecté, sur quelle machine et quelles connexions réseau ont été établies. Pour un analyste débutant, ce challenge illustre bien comment extraire rapidement des indicateurs de compromission et reconstituer une timeline basique d’activité réseau à partir d’un dump mémoire.

Read more