Usage de base de volatility
J’ai eu la chance de participer récemment au CTF inter-IUT organisé par l’ENSIBS avec mon équipe u want sum flag ? C’est la première fois que l’on participait à un CTF tous ensemble et ça a été une réussite. Premièrement car on a remarqué que l’on travaillait naturellement en équipe, chacun se complétant et deuxièment car on a vraiment appris énormément de choses différentes.
0x01 Récupérer la liste des processus
Volatility est un software qui permet d’analyser un dump mémoire d’une machine et vous d’ores et déjà le télécharger à l’adresse suivante http://www.volatilityfoundation.org/releases. Une fois télécharger placez volatility.exe dans le même répertoire que votre dump mémoire et ouvrez un terminal.
La première chose à faire et de déterminer l’OS qui a subit le dump et sa version. Pour cela on utilise la commande suivante. Elle permet d’obtenir des informations sur le ficher en question
volatility.exe -f le_fichier imageinfo
Cela ne laisse pas de doute c’est un Windows 7 ou un Server 2008. Contenue du contexte de ce CTF là j’ai choisis de prendre le seven SP1.
Une fois le profile obtenu on va dresser la liste des process.
volatility.exe -f le_fichier --profie=Win7SP1x64 pslist
J’espère qu’un des process vous sautes au yeux sinon va falloir aller consulter. PID correspond au Process ID, c’est un identifiant unique pour chaque processus sur Windows (existe également sous UNIX), le PPID est le PID du processus qui a enfanté notre processus. Ici respectivement 2564 et 2112 (cmd.exe)
Bon je l’ai pas tout de suite vu mais le flag n’est pas entier, volatility l’a tronqué. Il existe deux méthodes pour récupérer le full name. Soit la bourrine on fait un ctrl + f avec ThisIsTheFlag dans HxD
Soit on utilise dlllist en spécifiant le PID.
volatility.exe -f le_fichier –profie=Win7SP1x64 –pid 2564 dlllist
Dlllist liste les DLL chargés par le processus. Grosso merdo les DLL (Dynamic Link Library) sont des bibliothèques logicielles contenant des fonctions pour les développeurs. Elle seront chargées en mémoire au runtime.
On se moque ici des DLL mais cette commande permet d’afficher le full name du processus et donc du premier flag !
0x02 Récupérer une clé de registre
Pour ce challenge on devait récupérer la valeur de la clé de registre se situant dans HKEY_CURRENT_USER/Software/7-Zip. La ruche HKEY_CURRENT_USER se situe dans le fichier ntuser.dat de l’utilisateur. Ce fichier se trouve à la racine du profile utilisateur.
En faite ce que l’on appel Ruche ou Hive est un fichier sur le disque contenant des informations de configuration pour les systèmes windows. On retrouve chacune de ces ruches dans la base de registre Windows (regedit).
[Liste des emplacements des ruches pour HKEY_LOCAL_MACHINE]
KEY_LOCAL_MACHINE\default => c:\windows\system32\config\default
KEY_LOCAL_MACHINE\SAM (Security Account Manager) => c:\windows\system32\config\sam
KEY_LOCAL_MACHINE\Security => c:\windows\system32\config\security
KEY_LOCAL_MACHINE\Software (informations logiciels) => c:\windows\system32\config\software
KEY_LOCAL_MACHINE\System (informations sytèmes, configuration, services etc) => c:\windows\system32\config\system
Voici dont l’emplacement de la ruche HKEY_CURRENT_USER pour notre utilisateur cible. Bon ici cela nous est pas très utile mais cela permet de mieux cerner ce que l’on cherche et de le situer sur la machine. La commande sur volatility qui permet d’afficher une clé de registre:
volatility.exe -f le_fichier --profie=Win7SP1x64 printkey -K "path/to/key"
Voila le flag. On remarque bien qu’il se situe dans le fichier ntuser.dat étant donné que l’on utilise la ruche HKEY_CURRENT_USER.
0x03 Récupérer le password d’un user
Cette épreuve consistait à récupérer le password de l’utilisateur ctfuser. Il faut savoir que sur Windows les password locaux sont stockés dans %SystemRoot%\system32\Config\SAM. SAM est celui qui ne boit pas l’abréviation de Security Account Manager. Les fichiers sont stocké sous cette forme:
Username:RID:LMHash:NTLM_HASH:::
Le RID (Relatif ID) est la dernière partie du SID (Security Identifier). Chaque entité effectuant des actions sur la machine se voit attribué un SID. Le password que l’on cherche est celui hashé en NTLM_HASH. La commande pour récupérer les hash de password sous volatility:
volatility.exe -f le_fichier --profie=Win7SP1x64 hashdump -y SYSTEM_OFFSET -s SAM_OFFSET
Il est donc nécessaire de récupérer l’adresse virtuelle de la ruche KEY_LOCAL_MACHINE\SAM et KEY_LOCAL_MACHINE\System. Pour cela comme précédement on utilise la commande hivelist
Le password (hashé) de l’administrateur est 31d6cfe0d16ae931b73c59d7e0c089c0 tout comme celui du guess, cela correspond à pas de password ;). Si vous regarder bien chaque LMHASH est le même alors que deux NTLM_HASH sont différents. Cela s’explique par le fait que l’algorithme LMHASH est devenu bidon, sa sécurité jugée trop basse. Ainsi par défaut le hash sera aad3b435b51404eeaad3b435b51404ee qui correspond à pas de password.
Sinon le hash qui nous intéresse est celui ci : 320a78179516c385e35a93ffa0b1c4ac. Pour obtenir le password il existe plusieurs solutions comme le brute force avec John The Ripper par exemple ou alors on consulte des base de données de crack en ligne comme crack station.
0x04 Liens utiles
Comme vous le voyez Volatility est un softwaire très puissant qui permet de faire une analyse à froid très poussée.
- https://github.com/volatilityfoundation/volatility/wiki/Command-Reference
- https://digital-forensics.sans.org/media/memory-forensics-cheat-sheet.pdf
- https://downloads.volatilityfoundation.org/releases/2.4/CheatSheet_v2.4.pdf
Autre outils pratiques
Compréhension des registres Windows