
Офензивный инструмент для извлечения и анализа GPO, который использует и обогащает данные BloodHound
# GPOHound
`GPOHound` — это инструмент для дампа и анализа объектов групповой политики (GPO), извлечённых из общей папки SYSVOL.
Он предоставляет структурированный, формализованный формат для выявления неверных конфигураций, небезопасных настроек и путей повышения привилегий в средах Active Directory.
Инструмент интегрируется с базой данных Neo4j BloodHound, используя её как LDAP-подобный источник информации об Active Directory, а также обогащая её путём добавления новых связей (рёбер) и свойств узлов на основе анализа.
## Возможности
### Дамп
- [x] Выполняет дамп GPO в структурированном формате JSON или дерева
- [x] Работает с несколькими доменами
- [x] Разрешает имена GPO по GUID GPO
- [x] Фильтрует вывод по файлам GPO, GUID GPO и доменам
- [x] Выполняет поиск по парам ключ/значение с использованием регулярных выражений
### Анализ
- [x] Группирует настройки по затронутому объекту (например, локальные группы, реестр)
- [x] Обнаруживает добавление участников в привилегированные локальные группы
- [x] Обнаруживает небезопасные настройки реестра, сохранённые учётные данные и привилегии
- [x] Поддерживает расшифровку учётных данных VNC и паролей GPP
- [x] Находит домены, контейнеры и OU, затронутые GPO
- [x] Получает GPO, применённые к конкретному пользователю, компьютеру, OU, контейнеру или домену
- [x] Обогащает данные BloodHound связями и свойствами
## Установка
### Установка с помощью pip
```
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
```
### Установка с помощью pipx
```
pipx install "git+https://github.com/cogiceo/GPOHound"
```
### Настройка APOC для Neo4j
Необходимо настроить Neo4j APOC для обогащения данных BloodHound:
- Если вы используете стандартную установку Neo4j, вы можете включить APOC, скопировав JAR-файл APOC в папку плагинов и перезапустив Neo4j:
```bash
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
```
- Если вы устанавливаете Neo4j с помощью "Docker Compose", добавьте переменную окружения `NEO4J_PLUGINS=["apoc"]`:
```yaml
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
```
> Для получения более подробной информации или альтернативных способов установки обратитесь к официальной [документации APOC](https://neo4j.com/docs/apoc/current/installation/).
### Добавление запросов BloodHound
Чтобы визуализировать связи и свойства, добавленные `GPOHound`, вы можете импортировать пользовательские запросы из файла `customqueries.json` в BloodHound. По умолчанию этот файл находится по пути `~/.config/bloodhound/customqueries.json`.
## Предварительные требования
### Дамп SYSVOL
Начните с загрузки содержимого `SYSVOL` с контроллера домена.
- Загрузка полного `SYSVOL`:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
- Загрузка только GPO:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
```
- Загрузка с исключениями:
```bash
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
```
### Дамп LDAP
Получите все необходимые данные из LDAP:
```bash
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
### BloodHound
Для обогащения данных BloodHound необходимо собрать данные BloodHound с помощью такого сборщика, как `bloodhound.py` или `SharpHound.exe`, и импортировать собранные данные в интерфейс BloodHound.
## Использование
Примеры файлов GPOHound доступны в `example.zip`. Распакуйте их с помощью `unzip example.zip`.
Инструкции по настройке значений по умолчанию и конфигурации см. в [CONFIG.md](https://github.com/cogiceo/gpohound/blob/main/CONFIG.md).
```bash
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
```
### Разбор
```bash
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
```
### Дамп
```bash
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
```
### Анализ
```bash
gpohound analysis
gpohound analysis --affected
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL'
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --list
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --dump
gpohound analysis --enrich
gpohound analysis --enrich-ce
```
## Текущий анализ и обогащение
> [!IMPORTANT]
> - Условия, такие как фильтры безопасности, WMI-фильтры и таргетинг на уровне элементов, не интерпретируются.
> - Конфликты GPO не моделируются, чтобы не пропустить корректные настройки.
### Локальные группы
- Обнаружение пользователей, назначенных в привилегированные локальные группы во время входа в систему
- Обнаружение переименованных встроенных привилегированных локальных групп.
- Обнаружение доверенных лиц, добавленных в привилегированные локальные группы с помощью "Переменных процесса предпочтений" (например, %ComputerName%, %DomainName%)
- Обнаружение потенциально опасных доверенных лиц с использованием перехвата `sAMAccountName`
- Обнаружение любых доверенных лиц, добавленных в привилегированные локальные группы:
| Группа | Ребро |
|--------------------------------|--------------|
| Administrators | `AdminTo` |
| Remote Desktop Users | `CanRDP` |
| Distributed COM Users | `ExecuteDCOM`|
| Remote Management Users | `CanPSRemote`|
| Backup Operators | `CanPrivEsc` |
| Print Operators | `CanPrivEsc` |
| Network Configuration Operators| `CanPrivEsc` |
### Реестр
| Анализ | Свойство |
|--------------------------------------------------------------------------|---------------------------|
| Группа "Все" включает "Анонимный вход" | — |
| Подпись сеанса сервера SMB не включена | `smbSigningEnabled: false`|
| Подпись сеанса сервера SMB не требуется | `smbSigningRequired: false`|
| Поддерживается аутентификация NTLMv1 | `NTLMv1Support: true` |
| Пароль по умолчанию для автоматического входа Windows | — |
| Учётные данные VNC (Generic: RealVNC, TightVNC, TigerVNC и т.д.) | `*VNC*PASS*` (различные) |
| Сохранённые пароли FileZilla | — |
| Прокси-пароль PuTTY | — |
| Сохранённые учётные данные TeamViewer | — |
| Сохранённые сеансы WinSCP | — |
| Сохранённый пароль Picasa | — |
### Привилегии
По умолчанию привилегированные доверенные лица, а также служебные учетные записи с SID, начинающимися с `S-1-5-8`, исключаются из анализа.
| Привилегия | Описание | Ребро |
| ----------------------------- | -------------------------------------------------------------- | ------------ |
| SeDebugPrivilege | Позволяет пользователю отлаживать и взаимодействовать с любым процессом | `CanPrivEsc` |
| SeBackupPrivilege | Предоставляет доступ к конфиденциальным файлам | `CanPrivEsc` |
| SeRestorePrivilege | Обходит разрешения объектов во время восстановления | `CanPrivEsc` |
| SeAssignPrimaryTokenPrivilege | Включает олицетворение токена для повышения до SYSTEM | `CanPrivEsc` |
| SeImpersonatePrivilege | Позволяет создавать процесс в контексте другого пользователя | `CanPrivEsc` |
| SeTakeOwnershipPrivilege | Позволяет пользователям забирать права собственности на системные объекты | `CanPrivEsc` |
| SeTcbPrivilege | Предоставляет возможность действовать как часть ОС | `CanPrivEsc` |
| SeCreateTokenPrivilege | Разрешает создание токенов аутентификации | `CanPrivEsc` |
| SeLoadDriverPrivilege | Разрешает загрузку/выгрузку драйверов | `CanPrivEsc` |
| SeManageVolumePrivilege | Предоставляет привилегии управления томами или дисками | `CanPrivEsc` |
| SeEnableDelegationPrivilege | Включает возможность доверия делегированию для учётных записей компьютеров и пользователей | |
# Улучшения
- [x] Улучшить журналирование
- [x] Интегрировать LDAP
- [x] Интегрировать SMB
- [ ] Разобрать оставшиеся расширения
- [ ] Веб-интерфейс
- [ ] Подсветить возможные конфликты между GPO
## Документация GPO
### SYSVOL и LDAP
- [x] [\[MS-GPAC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPAC/) Расширение конфигурации аудита
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) Расширение протокола политик централизованного доступа
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) Расширение шифрованной файловой системы
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) Структура данных брандмауэра и расширенной безопасности
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) Расширение протокола перенаправления папок
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Расширение обслуживания Internet Explorer
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) Расширение защиты сетевого доступа (NAP)
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) Расширение данных таблицы политики разрешения имён (NRPT)
- [x] [\[MS-GPOL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPOL/) Базовый протокол
- [x] [\[MS-GPPREF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPPREF/) Структура данных расширения предпочтений
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) Кодировка расширения реестра
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) Расширение протокола безопасности
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) Кодировка расширения сценариев
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) Расширение протокола установки программного обеспечения
### Только LDAP
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) Расширение развёрнутых подключений принтеров
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) Расширение протокола беспроводной/проводной сети