CTF – CyberDefenders – DumpMe

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.

1 – What is the SHA1 hash of triage.mem (memory dump)?

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

2 – What volatility profile is the most appropriate for this machine? (ex: Win10x86_14393)

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.

3 – What was the process ID of notepad.exe?

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

4 – Name the child process of wscript.exe.

Il s’agit maintenant d’utiliser la commande pstree.

5 – What was the IP address of the machine at the time the RAM dump was created?

Vu qu’on est sur un Windows 7, il faut utiliser la commande netscan.

6 – Based on the answer regarding the infected PID, can you determine the IP of the attacker?

Maintenant qu’on connais notre IP, il suffit de chercher le processus infecté avec une connexion ouverte.

7 – This box was exploited and is running meterpreter. What was the infected PID?

Je note le PID pour répondre à la question.

8 – After dumping the infected process, what is its md5 hash?

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.

9 – How many processes are associated with VCRUNTIME140.dll?

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.

You Failed Miserably GIFs - Get the best GIF on GIPHY

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

Bingo GIFs | Tenor

10 – What is the LM hash of Bob’s account?

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.

11 – What memory protection constants does the VAD node at 0xfffffa800577ba10 have?

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 :

12 – What memory protection did the VAD starting at 0x00000000033c0000 and ending at 0x00000000033dffff have?

Même méthodologie, je recherche dans ce même fichier les informations.

13 – There was a VBS script that ran on the machine. What is the name of the script? (submit without file extension)

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 » :

14 – What was written in notepad.exe at the time when the memory dump was captured?

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

Fail GIFs | Tenor

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 !

15 – An application was run at 2019-03-07 23:06:58 UTC. What is the name of the program? (Include extension)

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 :

16 – What is the short name of the file at file record 59045?

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 » :

Rien dans le fichier des commandes …
Rien dans les dll
Un hit dans le MFT
Un second hit !

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.

En jaune, ce qui correspond à notre exemple

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.