Le mois dernier j’ai suivi plusieurs formations sur le forensic.
Après la théorie, vient la pratique.
Ce CTF cible les compétences d’analyse mémoire via le logiciel volatility.
Il y a 16 questions, chaque champ de réponse contient un début de ladite réponse.
Il y a des indices disponibles, moyennant des points de réussite. Techniquement, il est donc possible d’avoir toutes les réponses, mais pas tous les points.
Pour les CTF, j’installe un Windows 10 avec WSL.
Je cherche aussi un datasheet de volatility : https://downloads.volatilityfoundation.org/releases/2.4/CheatSheet_v2.4.pdf
Les questions serons présentée dans l’ordre des réponses obtenues.
Facile, je lance Powershell : Get-FileHash .\Triage-Memory.mem
Vu que le sha-1 n’est pas le format par défaut, je relance la commande en spécifiant le format souhaité : Get-FileHash .\Triage-Memory.mem -Algorithm sha1
Rien de plus simple vue que c’est LA commande a exécuter a chaque lancement de volatility.
Après avoir fini l’extraction du logiciel, j’exécute en Powershell : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem imageinfo
La réponse est donc le premier : Win7SP1x64.
Maintenant qu’on sait le profile a utilisé, on liste les processus en cours via: .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 pslist
Il s’agit maintenant d’utiliser la commande pstree.
Vu qu’on est sur un Windows 7, il faut utiliser la commande netscan.
Maintenant qu’on connais notre IP, il suffit de chercher le processus infecté avec une connexion ouverte.
Je note le PID pour répondre à la question.
On utilise la commande pour « dumper » le processus 3496 via la commande : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 procdump -p 3496 --dump-dir "C:\Users\Admin\Documents\En_cours\DumpMe"
Et comme je suis un boulet, je la relance une seconde fois, en désactivant Windows Defender …
On lance la même commande qu’au début cette fois pour obtenir la somme md5 : Get-FileHash .\executable.3496.exe -Algorithm md5
Pour le plaisir, j’ai aussi soumis le fichier à VirusTotal.
Et voici la liste des derniers de la classe.
J’extrait chaque utilisation de dll vers un fichier texte via la commande dlllist.
J’obtiens un fichier comme-ceci :
Je fait maintenant une recherche rapide de « VCRUNTIME140 » : et je ne trouve qu’une occurence.
J’ai beau cherché je ne comprends pas. Par principe, et au vu de nombreux conseils, je teste la même chose, mais sous WSL : python vol.py -f /mnt/c/Users/Admin/Documents/En_cours/DumpMe/Triage-Memory.mem --profile=Win7SP1x64 dlllist | grep VCRUNTIME140
Je tente la réponse : 5
Volatility à une commande pour extraire les hash : hashsump.
Le site indique que le début est aad3 donc je copie les informations entre les « : » commençant par cette suite de caractères.
Honnêtement, je n’avais aucune idée de ce qu’est le ou la VAD.
J’ai tenté via une simple recherche Google mais aucune information pertinente.
Et puis, je me suis rappelé l’existence de Google Scholar !
Je passe donc vadinfo, qui est la commande disponible chez volatility pour chercher de la documentation sur ça : https://scholar.google.fr/scholar?hl=fr&as_sdt=0%2C5&as_vis=1&q=vadinfo&btnG=
Je ressort un article qui semble avoir l’information : https://www.sciencedirect.com/science/article/pii/S1742287607000503
Voici un extrait :
Du coup tenté la commande vadinfo sans trop savoir à quoi m’attendre : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 vadinfo | findstr '0xfffffa800577ba10'
Au moins, j’ai la bonne base, mais aucune information utile.
Je relance donc la commande, cette fois pour tout mettre au sein d’un fichier txt : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 vadinfo >>vadinfo_all.txt
Quand on ouvre ce fichier, on voit un champs « Protection » qui semble correspondre à ce que l’on cherche.
Je fait donc une recherche rapide pour obtenir ma réponse :
Même méthodologie, je recherche dans ce même fichier les informations.
Je ne trouve rien pour le vbs dans le fichier datasheet. En revanche je trouve des informations pour l’extraction de commandes.
Je lance cette extraction vers un fichier texte : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 cmdline >> cmdline.txt
Une fois l’extraction faite, je lance une recherche rapide de « vbs » :
Comme tantôt, je tente l’extraction du processus notepad.exe en me disant que si je l’ouvre, il aura peut-être en mémoire le contenu du bloc-notes.
L’exécution du fichier nouvellement créé n’apporte aucune réponse.
Je vois dans le datasheet qu’il est possible d’extraire la mémoire d’un processus, je lance donc cette extraction : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 memdump -p 3032 --dump-dir "C:\Users\Admin\Documents\En_cours\DumpMe"
J’ouvre le fichier généré (de +465 Mo) via le bloc-notes et pars à la pêche aux informations.
Après de très longues minutes à ne rien trouver, je me rappelle que dans le cadre du CTF un morceau de la réponse est fourni.
Du coup je retentes ave cette fois la recherche du mot dès la création du dump : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 memdump -p 3032 --dump-dir "C:\Users\Admin\Documents\En_cours\DumpMe" | findstr flag
Je tente cette fois avec le Linux, je me dis que si le fichier faisais plusieurs Gb, l’ouverture et la recherche rapide pourrait être impossible : strings -e l /mnt/c/Users/Admin/Documents/En_cours/DumpMe/3032.dmp | grep "flag" | more
Je trouve encore beaucoup d’occurrences, mais au moins j’ai le drapeau !
Je retente le pslist mais sans succès …
J’ai tenté l’ouverture du fichier dans FTK Imager, pour extraire le MFT et le convertir en CSV mais sans succès non plus.
Après cet échec, je me rappel que je suis sur un CTF concentré sur volatility, donc il doit bien y avoir une commande en rapport avec MFT.
Je tente l’option mftparser : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 mftparser >> mft.txt
Je fait maintenant directement la recherche avec l’horaire demandé :
Je retourne donc dans la datasheet …
Je regarde dans la partie registre, je me dit que les informations mft sont dans le registre, je trouverai peut-être aussi l’information dedans.
Je retente donc : .\volatility_2.6_win64_standalone.exe -f .\Triage-Memory.mem --profile=Win7SP1x64 shimcache >> shimcache.txt
Je retente la recherche rapide :
Là j’avoue que je bloque complétement.
Je ne comprends pas ce qu’est un short name …
J’utilise donc mon un indice :
Vu la qualité de l’indice, je me refuse à perdre des points pour m’entendre dire « utiliser votre clavier »
Avec l’Energie du désespoir j’ouvre chacun des .txt crée précédemment à la recherche du mot clef « 59045 » :
Je remarque que le fichier XLS corresponds à l’indice de réponse :
Alors ok j’ai 16/16 mais en attendant … c’est quoi un « short name » ? J’ai donc chercher un peu plus et j’ai trouvé une réponse : https://www.google.com/search?client=opera-gx&q=short+name+windows&sourceid=opera&ie=UTF-8&oe=UTF-8
Premier lien : https://en.wikipedia.org/wiki/8.3_filename#:~:text=An%208.3%20filename%20(also%20called,for%20compatibility%20with%20legacy%20programs.
Il s’agit donc d’un nom plus court, généré pour des soucis de compatibilité par Windows.
Second lien : https://superuser.com/questions/348079/how-can-i-find-the-short-path-of-a-windows-directory-file
La création de ce nom court ne semble pas automatique.