
Построение карты путей атак для Active Directory, ADCS, SCCM и MSSQL с использованием данных BloodHound CE + OpenGraph.
# ADPathFinder
[](https://github.com/NetSPI/AD-PathFinder/actions/workflows/test.yml)
ADPathFinder — это инструмент построения карты атак для пентестеров и red team-специалистов. Он анализирует данные SharpHound и объединяет их с плагинами OpenGraph, чтобы выявить пути атак до высокоценных целей, таких как Domain Admins и Domain Controllers, начиная от низкопривилегированных пользователей и компьютеров. MSSQLHound и ConfigManBearPig поддерживаются нативно, расширяя покрытие на AD, ADCS, SCCM и MSSQL.
> **Блог:** [Сопоставление путей атак OpenGraph в BloodHound CE](https://www.netspi.com/blog/technical-blog/network-pentesting/adpathfinder-opengraph-attack-path-mapping-in-bloodhound-ce/)
<p align="center">
<a href="https://github.com/netspi/ad-pathfinder/blob/main/docs/images/demo-slideshow.mp4">
<img src="https://assets.kitploit.com/production/public/readmes/35238/da8b4155e654c3272e19b1158bbaa3bc4632356196ea17dae76a4ad0c51aa3c0.webp" alt="Демонстрация CLI ADPathFinder: сгруппированные находки рисков и пути атак" width="850">
</a>
</p>
**Перейти к:** [Быстрый старт](#quickstart) · [Покрытие](#coverage) · [Как это работает](#how-it-works) · [Отчёты](#outputs) · [Конфигурация](#configuration) · [Участники](#contributors)
## Покрытие
| Область | Примеры |
| --- | --- |
| Основной AD | Пути повышения привилегий, делегирование, права администратора, BadSuccessor, доступные высокоценные сессии |
| Пароли | Слабые пароли, пустые пароли, повторное использование, схожесть имён пользователей, использование LM-хешей, Kerberoast и AS-REP, сочетающиеся со слабыми паролями |
| ADCS | Риски шаблонов сертификатов и ЦС в стиле ESC |
| MSSQL (данные OpenGraph MSSQLHound) | Учётные записи, связанные серверы, имперсонация, relay и пути повышения привилегий |
| SCCM (данные OpenGraph ConfigManBearPig) | Пути захвата и relay, точки распространения с поддержкой PXE и получение политик с точек управления |
| Между доменами | Доверия, общие пароли и пути повышения привилегий между доменами |
## Требования
- Python 3.9 или новее.
- BloodHound CE и Neo4j, доступные локально по умолчанию по адресу `neo4j://localhost:7687`.
- Учётные данные API BloodHound CE для операций импорта и удаления.
- ZIP-архив BloodHound CE / SharpHound для покрытия аудита AD.
- Необязательные ZIP-архивы плагинов OpenGraph от MSSQLHound и ConfigManBearPig для покрытия MSSQL и SCCM.
- Необязательный дамп хешей NTDS и potfile от hashcat для аудита паролей.
## Быстрый старт
<details open>
<summary><strong>Установка из исходников</strong></summary>
```bash
git clone https://github.com/NetSPI/AD-PathFinder.git
cd AD-PathFinder
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
```
</details>
<details>
<summary><strong>Настройка доступа к API BloodHound</strong></summary>
```bash
adpathfinder --setup-bloodhound-api
```
Эта команда сохраняет настройки API BloodHound CE, используемые для операций импорта и удаления.
</details>
<details>
<summary><strong>Импорт данных SharpHound</strong></summary>
```bash
adpathfinder --import SharpHound.zip
```
Несколько ZIP-файлов SharpHound и плагинов OpenGraph можно импортировать одной командой:
```bash
adpathfinder --import SharpHound.zip MSSQLHound.zip ConfigManBearPig.zip
```
</details>
<details>
<summary><strong>Импорт данных и полный аудит</strong></summary>
```bash
adpathfinder -i SharpHound.zip MSSQLHound.zip ConfigManBearPig.zip --ad --pwd Contoso,ContosoIT --ntds ntds.txt -p hashcat.potfile
```
Используйте только те ZIP-файлы, которые у вас есть. Значение `--pwd` — это не домен AD; это разделённый запятыми список терминов компании, бренда или организации для пометки во взломанных паролях.
</details>
<details>
<summary><strong>Запуск аудита домена</strong></summary>
```bash
adpathfinder --ad
```
</details>
<details>
<summary><strong>Запуск аудита паролей</strong></summary>
```bash
adpathfinder --ad --pwd Contoso,ContosoIT --ntds ntds.txt -p hashcat.potfile
```
Используйте `--unsafe-report` только когда отчёты должны содержать пароли в открытом виде.
</details>
<details>
<summary><strong>Запись диагностики</strong></summary>
```bash
adpathfinder --ad --pwd Contoso,ContosoIT --ntds ntds.txt -p hashcat.potfile --diagnostics
```
</details>
## Как это работает
| Этап | Что происходит |
| --- | --- |
| **Ingest** | Объединяет SharpHound и поддерживаемые ZIP-архивы OpenGraph в один граф. Данные MSSQLHound и ConfigManBearPig поддерживаются напрямую |
| **Map** | Находит кратчайшие пути от пользователей и компьютеров до высокоценных целей. Вы можете [настроить набор рёбер](https://github.com/NetSPI/AD-PathFinder/wiki/Excluded-Relationships), чтобы исключить шумные рёбра, например `HasSession` |
| **Group** | Группирует учётные записи с общим путём, чтобы повторяющиеся пути сообщались как одна находка, а не множество почти одинаковых |
| **Pair** | Сопоставляет NTDS-хеши и potfile от hashcat с данными графа, показывая, какие пути реально применимы в ходе оценки |
| **Layer** | Сообщает о самостоятельных находках, таких как отключённая подпись SMB или группы привилегированных по умолчанию, и повышает серьёзность, когда тот же хост или группа также находится на пути к высокоценным целям |
| **Render** | Формирует HTML-отчёты с SVG-графами путей, примечаниями по митигированию, шагами проверки в PowerShell и отслеживанием состояния устранения, а также текстовые, JSON и диагностические выводы |
<p align="center">
<img src="https://raw.githubusercontent.com/netspi/ad-pathfinder/HEAD/docs/images/workflow.svg" alt="Схема работы ADPathFinder" width="850">
</p>
## HTML-отчёт AD
<p align="center">
<a href="https://github.com/netspi/ad-pathfinder/blob/main/docs/images/ad-report-slideshow.mp4">
<img src="https://assets.kitploit.com/production/public/readmes/35238/039c3cda9d34b24185b439d441359ed63a5b4f03002d400a88a8fbf04717c98c.webp" alt="Обзор отчёта ADPathFinder по AD: обзор, митигирование и этапы подтверждения" width="850">
</a>
</p>
## HTML-отчёт аудита паролей
<p align="center">
<a href="https://github.com/netspi/ad-pathfinder/blob/main/docs/images/password-audit-slideshow.mp4">
<img src="https://assets.kitploit.com/production/public/readmes/35238/0d3b193537b32399c070e2f2caf32c8de6149ee267dfaa497a0c7b500f8f987d.webp" alt="Обзор отчёта ADPathFinder по аудиту паролей: взломанные категории, соответствие политикам, длины паролей и roastable-учётные записи" width="850">
</a>
</p>
## Конфигурация
ADPathFinder читает `config.ini` из рабочего каталога. Значения также можно задавать через переменные окружения `ADPF_*`.
Запустите это, чтобы настроить доступ к API BloodHound CE для импорта и удаления:
```bash
adpathfinder --setup-bloodhound-api
```
Все параметры, настройки подключения к Neo4j, права на файлы и примеры конфигурации см. в разделе [Configuration](https://github.com/NetSPI/AD-PathFinder/wiki/Configuration) в вики. Фильтрацию вывода путей атак см. в разделе [Excluded relationships](https://github.com/NetSPI/AD-PathFinder/wiki/Excluded-Relationships).
## Выводы
Отчёты записываются в каталог `report_<domain>/`, например `report_training.local/`.
| Вывод | Назначение |
| --- | --- |
| `<domain>_AD_report.html` | HTML-отчёт для клиентов со сгруппированными находками, графами путей, примечаниями по митигированию, шагами проверки и отслеживанием состояния устранения |
| `<domain>_domain_audit.txt` / `<domain>_domain_audit.json` | Текстовый и JSON выводы аудита домена для просмотра, автоматизации и последующего анализа |
| `<domain>_password_audit.html` / `<domain>_password_audit.txt` / `<domain>_password_audit.json` | Выводы аудита паролей при наличии NTDS-хешей и potfile от hashcat |
| `<domain>_*_unsafe.*` | Необязательные небезопасные отчёты, создаваемые только с флагом `--unsafe-report`; они могут содержать пароли в открытом виде |
| `diagnostics.json` | Необязательная статистика запуска и отладочные данные, создаваемые с флагом `--diagnostics` |
Относитесь к данным NTDS, potfile и сгенерированным отчётам как к чувствительным данным оценки. Флаг `--unsafe-report` записывает пароли в открытом виде в выходные файлы; используйте его только когда вам действительно нужен открытый текст в отчёте, и храните полученные файлы `_unsafe` соответствующим образом.
Примеры вывода аудита домена и аудита паролей см. в [`sample_reports/`](https://github.com/netspi/ad-pathfinder/blob/main/sample_reports).
## Участники
Проверки — это небольшие классы, которые регистрируются через декоратор, объявляют свои требования к данным и возвращают словари находок. Платформенные проверки объявляют свой источник данных, поэтому обычные аудиты AD пропускают проверки MSSQL или SCCM, когда соответствующие данные OpenGraph отсутствуют.
См. [Adding new checks](https://github.com/NetSPI/AD-PathFinder/wiki/Adding-New-Checks), [Working with OpenGraph plugins](https://github.com/netspi/ad-pathfinder/blob/main/docs/OPENGRAPH.md) и [Framework Guide](https://github.com/NetSPI/AD-PathFinder/wiki/Framework-Guide) в вики.
### Тестирование
`pip install -e ".[test]"`, затем `pytest tests/ -m "not neo4j and not integration"` запускает быстрые тесты фреймворка без Neo4j. Набор фикстур Neo4j и полный локальный процесс тестирования описаны в [`tests/README.md`](https://github.com/netspi/ad-pathfinder/blob/main/tests/README.md).
## Благодарности
ADPathFinder опирается на данные, собранные другими проектами; спасибо их авторам и команде SpecterOps:
- [BloodHound CE](https://github.com/SpecterOps/BloodHound) — данные графа Active Directory.
- [MSSQLHound](https://github.com/SpecterOps/MSSQLHound) от Chris Thompson — сбор данных MSSQL.
- [ConfigManBearPig](https://github.com/SpecterOps/ConfigManBearPig) от Chris Thompson — сбор данных SCCM.