
Определите пути атак в BloodHound, нарушающие вашу иерархию AD
Определите пути атак в BloodHound, нарушающие вашу многоуровневую структуру AD
ImproHound — это автономный dotnet исполняемый файл для Windows x64 с графическим интерфейсом. Для использования ImproHound необходимо запустить SharpHound для сбора необходимых данных из AD. Затем загрузите эти данные в вашу установку BloodHound. ImproHound подключается к базе данных Neo4j, используемой BloodHound. В ImproHound вы распределяете объекты AD по уровням через структуру подразделений (OU), а ImproHound выявляет связи в AD, которые позволяют объектам AD скомпрометировать объекты более высокого (ближе к нулевому) уровня. Нарушения tiering сохраняются в CSV-файл.
Демонстрационное видео ImproHound
Презентация ImproHound на DEF CON Adversary Village
1. Настройте базу данных BloodHound
Соберите данные BloodHound с помощью SharpHound в вашем AD
Примечание: это вызовет шум в вашем антивирусе, SIEM и т.д.
Пример: Запустите SharpHound.exe из командной строки, соберите все (да, GPOLocalGroup не включена в All):
SharpHound.exe --CollectionMethods All,GPOLocalGroup
Совет 1: Используйте параметр
Domainдля сбора данных из других доменов леса.
Совет 2: Для получения ещё большего объёма данных используйте Метод сбора сессий в цикле
Загрузите данные BloodHound в графический интерфейс BloodHound
В BloodHound есть ошибка, из-за которой файл JSON домена иногда пропускается при загрузке ZIP-архива с данными BloodHound. Проверьте статистику БД в BloodHound после загрузки данных и убедитесь, что объекты домена существуют.
2. Установите плагин Neo4j APOC (обеспечивает необходимые нам мощные операции с графами)
Скачайте APOC версии, соответствующей вашей версии Neo4j (файл apoc-x.x.x.x-all.jar).
Найдите версию APOC, соответствующую вашей версии Neo4j, в матрице совместимости версий.
Постарайтесь вспомнить, куда вы установили Neo4j, и поместите JAR-файл APOC по следующему пути: $NEO4J_HOME/plugins/
/var/lib/neo4j/Отредактируйте neo4j.conf в вашем любимом текстовом редакторе, чтобы разрешить неограниченный доступ APOC, заменив строку:
#dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.*
на
dbms.security.procedures.unrestricted=apoc.*
/etc/neo4j/neo4j.conf$NEO4J_HOME/conf/neo4j.confЕсли вы хотите запускать ImproHound на одном хосте, а BloodHound на другом, вам нужно разрешить удалённые подключения к базе данных Neo4j на хосте BloodHound. Для этого удалите # из строки
#dbms.default_listen_address=0.0.0.0в файлеneo4j.conf.
Перезапустите Neo4j
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)3. Скачайте и запустите последнюю версию ImproHound.exe в Windows (x64)
Убедитесь, что вы можете войти в БД BloodHound с теми же учётными данными, которые используете в графическом интерфейсе BloodHound.

Введите учётные данные базы данных и установите соединение. Это те же учётные данные, которые вы используете в графическом интерфейсе BloodHound.

ImproHound создаёт метку 'TierX' на узлах в базе данных BloodHound. Если вы уже использовали ImproHound с этой базой данных BloodHound, вам будет предложено продолжить с уже созданной tiering-структурой или начать заново.

ImproHound предлагает вам возможность установить «Стандартную tiering-структуру», которая поместит Domain Admins в Tier 0, Domain Users в Tier 2 и т.д., или поместить все объекты в Tier 2.

Это страница, на которой вы будете распределять объекты AD по уровням. Окно отображает структуру OU. Каждый объект AD имеет значение уровня, которое можно увеличивать и уменьшать с помощью стрелок.
Установить уровень дочерним объектам
Если вы выберете домен или контейнер AD, вы можете нажать «Установить уровень дочерним объектам», чтобы установить всем дочерним объектам (рекурсивно) уровень выбранного домена/контейнера.
Установить уровень участникам
Если вы выберете группу, вы можете нажать «Установить уровень участникам», чтобы установить всем участникам (рекурсивно) уровень выбранной группы.
Установить уровень для GPO
Если вы нажмёте «Установить уровень для GPO», каждой GPO будет присвоен уровень, соответствующий уровню OU с самым высоким уровнем (ближайшим к нулю), к которой привязана эта GPO. GPO, не привязанные к OU, не изменят свой уровень.
Получить нарушения tiering
Найти все связи в базе данных BloodHound, где объект AD имеет контроль над объектом AD более высокого уровня (ближе к нулю).
Создаются два CSV-файла:
adobjects-[timestamp].csv: Все объекты AD и их уровни.
tiering-violations-[timestamp].csv: Нарушения tiering.
Пример записей в CSV с нарушениями:
| SourceTier | SourceType | SourceName | SourceDistinguishedname | Relation | IsInherited | TargetTier | TargetType | TargetName | TargetDistinguishedname |
|---|---|---|---|---|---|---|---|---|---|
| Tier1 | User | [email protected] | CN=svc-monitor,CN=Users,DC=hot,DC=local | ForceChangePassword | True | Tier0 | User | [email protected] | CN=T0_JBK,CN=Users,DC=hot,DC=local |
| Tier2 | Group | [email protected] | CN=Wrk-Admins,CN=Groups,DC=hot,DC=local | GenericWrite | Tier0 | GPO | [email protected] | CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local |