
Порт Beacon Object File (BOF) утилиты DumpGuard для извлечения хэшей NTLMv1 из сессий на современных системах Windows.
Порт DumpGuard в формате Beacon Object File (BOF) для извлечения хэшей NTLMv1 из сессий на современных системах Windows.

Этот репозиторий содержит реализацию Beacon Object File (BOF) утилиты DumpGuard, портированную из оригинальной реализации на C#/.NET на чистый C для использования с Havoc и другими C2-фреймворками, поддерживающими выполнение BOF.
Это Proof of Concept (PoC) и учебное упражнение.
Этот порт BOF был создан в рамках моего личного пути к пониманию деталей протокола Remote Credential Guard, потоков аутентификации Kerberos и базовых механизмов безопасности Windows. Процесс портирования этого инструмента с C# на чистый C для выполнения BOF был в первую очередь образовательным начинанием.
Пожалуйста, имейте в виду:
Если вы обнаружите проблемы или у вас есть улучшения, вклад приветствуется. Для надежной и хорошо протестированной реализации обращайтесь к оригинальному инструменту DumpGuard.
Этот BOF основан на исследованиях и инструментарии @bytewreck из SpecterOps:
DumpGuard использует Windows Remote Credential Guard (RCG) для извлечения хэшей NTLMv1 от вошедших в систему пользователей без обращения к памяти LSASS и без необходимости прав администратора. Он работает даже при включенном Credential Guard.
TSRemoteGuardCreds.После раунда 4 у нас есть зашифрованный блоб учетных данных. Магия происходит, когда мы вызываем LsaCallAuthenticationPackage с пакетом TSSSP. LSA направляет наш запрос через RDPEAR -> TSRemoteGuard -> MSV1_0, который расшифровывает секреты и вычисляет для нас ответ NTLMv1.
Credential Guard изолирует секреты NTLM и Kerberos в защищенном пространстве VBS (LsaIso.exe), предотвращая атаки прямого доступа к памяти, такие как Mimikatz. Однако Credential Guard все равно должен использовать эти секреты для легитимной аутентификации. Это интерфейс, который эксплуатирует данная техника.
Для полного технического погружения смотрите: Catching Credential Guard Off Guard
Этот порт BOF реализует только режим "Self" из оригинального инструмента DumpGuard. Режимы "All" не реализованы в этой версии.
Дамп хэша NTLMv1 текущего пользователя процесса через протокол Remote Credential Guard.
Хотя этот BOF реализует только режим "self", вы все равно можете извлекать хэши NTLMv1 других пользователей, например, внедряясь в процесс, работающий от имени этого пользователя. Например, если у вас есть права администратора, вы можете внедрить BOF в процесс, принадлежащий другому вошедшему в систему пользователю, чтобы получить его хэш.
Эта техника требует учетные данные для учетной записи, имеющей зарегистрированное имя субъекта-службы (SPN). Один из способов достичь этого — создать учетную запись компьютера и добавить ей SPN.
Используя Impacket:
python3 addcomputer.py -computer-name 'YOURCOMPUTER$' domain.local/user:password -dc-ip <DC_IP>
Пример вывода:
[*] Successfully added machine account YOURCOMPUTER$ with password <random_password>.
Используя krbrelayx addspn.py:
python3 addspn.py -u domain.local\\YOURCOMPUTER\$ -p '<password>' -s host/yourspn.domain.local --target-type samname <DC_IP>
Используя pywerview:
python3 pywerview.py get-adobject -d domain.local -u YOURCOMPUTER\$ -p '<password>' -t <DC_IP> --sam-account-name YOURCOMPUTER\$
Ищите serviceprincipalname: host/yourspn.domain.local в выводе.
inline-execute /path/to/dumpguard.x64.o x <domain> <username> <password> <spn>
Примечание: Параметр
x— это заполнитель/фиктивный аргумент, требуемый перед доменом. Это может быть исправлено в будущих версиях (если они будут).
Пример:
inline-execute /tmp/dumpguard.x64.o x sevenkingdoms.local EVIL_COMPUTER$ MXj070PQpCkNmZiYsRbIu8YYwgDKPD2r host/EVILSPN.sevenkingdoms.local
Пример вывода:
[DG] Domain: sevenkingdoms.local
[DG] User: EVIL_COMPUTER$
[DG] SPN: host/EVILSPN.sevenkingdoms.local
[DG] checkpoint 1: init APIs
[DG] SSPI init OK
[DG] checkpoint 2: acquire creds
[DG] checkpoint 3: starting SSPI loop
[DG] Round 1
[DG] AS-REQ: LTK derived, etype=18 len=32
[DG] AS-REQ: sending to KDC...
[DG] Round 2
[DG] Round 3
[DG] NTLMv1: SEVENKINGDOMS\EVIL_COMPUTER$::GOAD-WIN2025::6D270E39AD2DE48B561895C3257D7123FE84F1438B147E2A:1122334455667788
Важно: Извлеченный хэш NTLMv1 принадлежит пользователю, запустившему процесс BOF, а не учетной записи компьютера, использованной для аутентификации (
EVIL_COMPUTER$). Учетные данные учетной записи компьютера используются только для аутентификации на KDC и установления сеанса Remote Credential Guard.
Вывод в формате NTLMv1, совместимом с hashcat:
DOMAIN\user::HOSTNAME::NTRESPONSE:CHALLENGE
make clean && make
Вывод: build/dumpguard.x64.o
Лицензия BSD 3-Clause
Оригинальный инструмент DumpGuard лицензирован по лицензии BSD 3-Clause, Copyright (c) 2025 Valdemar Carøe. Этот порт BOF сохраняет те же условия лицензии.
По вопросам, отчетам об ошибках или предложениям, пожалуйста, откройте issue на GitHub.
| Раунд | Клиент -> Сервер | Сервер -> Клиент |
|---|
| 1 | SPNEGO + TGT-REQ | TGT-REPLY (от реального KDC) |
| 2 | AP-REQ (билет службы) | AP-REP + MIC |
| 3 | PubKeyAuth (хеш привязки) | Хеш привязки сервера |
| 4 | AuthInfo (TSRemoteGuardCreds) | N/A |