
Инструмент Proof-of-Concept для извлечения учётных данных из защищённых сессий на современных системах Windows.
# DumpGuard
[](../LICENSE)
[](https://slack.specterops.io)
[](https://github.com/specterops)

DumpGuard — это инструмент для кражи учётных данных и исследования протоколов для современных Windows-систем. Он злоупотребляет протоколом _Remote Credential Guard_ для восстановления материала учётных данных даже при включённом _Credential Guard_, а также включает путь пакета аутентификации Microsoft v1 для извлечения NTLM на основе сессий.
Текущий функционал включает:
- Ответы NTLMv1
- Ответы NTLMv2
- Сервисные билеты Kerberos
- Извлечение из пакета аутентификации Microsoft v1 для локальных сессий входа
Вы можете скачать предварительно собранные копии из раздела релизов этого репозитория.
**Отказ от ответственности:** Данный инструмент предоставляется исключительно для образовательных и легитимных целей тестирования. Автор этого репозитория не одобряет и не поддерживает никакие виды неправомерного использования и не несёт ответственности за ущерб или юридические последствия, возникшие в результате использования данного инструмента.
## Обзор использования
В следующей таблице приведены реализованные на данный момент техники.
| Техника | Команда | Требуется SYSTEM | Требуется<br>Учётная запись SPN | Может извлечь<br>Credential Guard |
| -------- | ------- | :----------------: | :---------------------: | :--------------------------: |
| Извлечение NTLMv1 через Remote Credential Guard | `ntlmv1` | `self`: :x:<br>`all`: ✅ | ✅ | ✅ |
| Извлечение NTLMv2 через Remote Credential Guard | `ntlmv2` | `self`: :x:<br>`all`: ✅ | ✅ | ✅ |
| Извлечение Kerberos TGS через Remote Credential Guard | `kerbtgs` | `self`: :x:<br>`all`: ✅ | ✅ | ✅ |
| Извлечение NTLMv1 через пакет аутентификации Microsoft v1 | `msv10` | ✅ | :x: | :x: |
DumpGuard использует модель `command` и `target`.
- `command` выбирает технику извлечения.
- `target` выбирает, работать с текущей сессией или перечислять сессии.
Поддерживаемые команды:
- `/command:ntlmv1`
- `/command:ntlmv2`
- `/command:kerbtgs`
- `/command:msv10`
Поддерживаемые цели:
- `/target:self`
- `/target:all`
Общие параметры Remote Credential Guard:
- `/domain:<DOMAIN>`
- `/username:<SAMACCOUNTNAME>`
- `/password:<PASSWORD>`
- `/spn:<SPN>`
Параметры Kerberos TGS:
- `/tgsdomain:<DOMAIN>`
- `/tgsspn:<SPN>`
Если `/spn` опущен для учётной записи компьютера, DumpGuard по умолчанию использует `HOST/<computername>`.
## Извлечение собственной сессии через Remote Credential Guard
Для извлечения материала учётных данных текущего пользователя из непривилегированного контекста DumpGuard аутентифицируется на учётной записи с включённым SPN с помощью Remote Credential Guard, а затем отправляет последующие запросы через установленный контекст безопасности.
Это работает независимо от состояния Credential Guard, но требует учётных данных для учётной записи с включённым SPN.
Требуемые привилегии: **Нет**.
NTLMv1:
```text
DumpGuard.exe /command:ntlmv1 /target:self /domain:<DOMAIN> /username:<SAMACCOUNTNAME> /password:<PASSWORD> [/spn:<SPN>]
```
NTLMv2:
```text
DumpGuard.exe /command:ntlmv2 /target:self /domain:<DOMAIN> /username:<SAMACCOUNTNAME> /password:<PASSWORD> [/spn:<SPN>]
```
Kerberos TGS:
```text
DumpGuard.exe /command:kerbtgs /target:self /domain:<DOMAIN> /username:<SAMACCOUNTNAME> /password:<PASSWORD> [/spn:<SPN>] [/tgsdomain:<DOMAIN>] /tgsspn:<service/host>
```
Если `/tgsdomain` опущен, по умолчанию используется значение `/domain` из Remote Credential Guard.
## Извлечение всех сессий через Remote Credential Guard
Для извлечения материала учётных данных всех доступных в данный момент пользователей из привилегированного контекста DumpGuard олицетворяет токены из запущенных процессов, аутентифицируется на учётной записи с включённым SPN с помощью Remote Credential Guard, а затем отправляет последующие запросы через установленный контекст безопасности.
Это работает независимо от состояния Credential Guard, но требует учётных данных для учётной записи с включённым SPN.
Требуемые привилегии: **SYSTEM** или **Administrator** (требуется **SeImpersonatePrivilege**).
NTLMv1:
```text
DumpGuard.exe /command:ntlmv1 /target:all /domain:<DOMAIN> /username:<SAMACCOUNTNAME> /password:<PASSWORD> [/spn:<SPN>]
```
NTLMv2:
```text
DumpGuard.exe /command:ntlmv2 /target:all /domain:<DOMAIN> /username:<SAMACCOUNTNAME> /password:<PASSWORD> [/spn:<SPN>]
```
Kerberos TGS:
```text
DumpGuard.exe /command:kerbtgs /target:all /domain:<DOMAIN> /username:<SAMACCOUNTNAME> /password:<PASSWORD> [/spn:<SPN>] [/tgsdomain:<DOMAIN>] /tgsspn:<service/host>
```
Если `/tgsdomain` опущен, по умолчанию используется значение `/domain` из Remote Credential Guard.
## Извлечение всех сессий через пакет аутентификации Microsoft v1
Для извлечения NTLM-ответов для текущих аутентифицированных пользователей из привилегированного контекста SYSTEM DumpGuard напрямую взаимодействует с NTLM SSP и запрашивает ответы на вызовы для каждой обнаруженной сессии входа.
Это работает только при следующих условиях:
- Credential Guard отключён на локальной системе.
- Удалённые пользователи аутентифицированы на локальной системе с удалённого хоста через Remote Credential Guard.
Требуемые привилегии: **SYSTEM** (требуется **SeTcbPrivilege**).
```text
DumpGuard.exe /command:msv10
```
Эту атаку также можно выполнить с помощью [LSA Whisperer](https://github.com/EvanMcBroom/lsa-whisperer) с помощью следующей команды:
```text
lsa-whisperer.exe msv1_0 Lm20GetChallengeResponse --luid {session id} --challenge {challenge to clients} [flags...]
```
## Дополнительная информация
Я реверс-инжинирил и воссоздал интерфейсы, предоставляемые Credential Guard (`LsaIso.exe`), и включил их в этот репозиторий для всех, кто заинтересован в дальнейшем исследовании.
По состоянию на октябрь 2025 года реализованы следующие интерфейсы:
- BCryptIum
- CloudApIum
- KerberosIum
- LsaIsoMgmtIum
- NtlmIum
- ProvIum
## Благодарности
Спасибо [SpecterOps](https://specterops.io/) за поддержку этого исследования и моим коллегам, которые помогали в его разработке.
- [Elad Shamir](https://twitter.com/elad_shamir) — за вдохновение для создания этого инструмента и исследования, а также за ценные замечания и поддержку, когда я заходил в тупик.
- [Evan McBroom](https://github.com/EvanMcBroom) — за полезные сведения о внутренностях LSA и предоставление ASN.1-кодеров для большинства структур, использованных в этом проекте.
## Связанные инструменты
- [LSA Whisperer](https://github.com/EvanMcBroom/lsa-whisperer) ([Evan McBroom](https://github.com/EvanMcBroom)) — набор инструментов для взаимодействия с пакетами аутентификации.
- [Rubeus](https://github.com/GhostPack/Rubeus) ([Will Schroeder](https://github.com/HarmJ0y), [Charlie Clark](https://x.com/exploitph)) — набор инструментов на C# для взаимодействия с Kerberos и его атак.
- [Mimikatz](https://github.com/gentilkiwi/mimikatz) ([Benjamin Delpy](https://github.com/gentilkiwi)) — небольшая утилита для работы с безопасностью Windows.
- [Kekeo](https://github.com/gentilkiwi/kekeo) ([Benjamin Delpy](https://github.com/gentilkiwi/kekeo)) — небольшой набор инструментов для работы с Microsoft Kerberos на C.
## Связанные работы
- [Oliver Lyak](https://github.com/ly4k) ([2022](https://research.ifcr.dk/pass-the-challenge-defeating-windows-defender-credential-guard-31a892eee22)) — насколько мне известно, единственное публичное исследование по извлечению учётных данных, защищённых Credential Guard.
- [James Forshaw](https://x.com/tiraniddo) ([2022](https://project-zero.issues.chromium.org/issues/42451433), [2022](https://project-zero.issues.chromium.org/issues/42451435), [2022](https://project-zero.issues.chromium.org/issues/42451397), [2022](https://project-zero.issues.chromium.org/issues/42451436)) — отчёты об уязвимостях, в которых частично описываются некоторые недокументированные интерфейсы, которые мы исследовали.