
Определите пути атак в 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в файле .
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 с нарушениями:
Первая запись — это учётная запись службы Tier 1 с разрешением на смену пароля учётной записи пользователя Tier 0. Связь наследуемая. К сожалению, не всегда можно увидеть, откуда унаследована связь в данных BloodHound, но вы можете проверить это вручную, просмотрев разрешения на целевом объекте AD в оснастке «Пользователи и компьютеры». Вторая запись — это группа с разрешением на редактирование GPO, которая, вероятно, привязана к OU, содержащей серверы Tier 0, поскольку это GPO Tier 0.
Вы можете просмотреть все типы связей и способы их эксплуатации здесь.
Если вы обнаружите, что объект находится на слишком высоком уровне (ближайшем к нулю), исправьте это в ImproHound, а затем проверьте наличие нарушений с этим объектом в качестве ИСТОЧНИКА. Если объект находится на слишком низком уровне (ближайшем к бесконечности), исправьте это в ImproHound и проверьте наличие нарушений с объектом в качестве ЦЕЛИ.
Удалить tiering
Все метки уровней и созданные ImproHound узлы в базе данных BloodHound будут удалены.
Важно правильно распределять объекты AD по уровням. Если вы установите DC и обычного пользователя с низкими привилегиями как объекты Tier 0, ImproHound не обнаружит, что доступ администратора-пользователя к DC является нарушением tiering. То же самое произойдёт, если вы поместите обоих в Tier 2.
Компьютеры распределяются по уровням в зависимости от критичности их компрометации.
Пользователи распределяются по уровням на основе компьютеров, на которые они могут входить, и объектов AD, над которыми они имеют контроль. Пример разрешения на контроль: пользователь с правами на редактирование GPO, привязанных к серверам Tier 1, что делает такого пользователя объектом Tier 1.
Группа принадлежит к самому низкому уровню (ближайшему к бесконечности) среди своих участников, если только в группе нет «плохих» участников, например, обычный пользователь в группе Domain Admins.
Примеры: Domain Users — это группа Tier 2, даже если ваши пользователи Tier 0 являются её участниками, поскольку именно членство в Domain Users не даёт пользователям привилегий. С другой стороны, группа Domain Admins — это группа Tier 0, поскольку членство в этой группе делает пользователей очень привилегированными. Cloneable Domain Controllers не имеет привилегий AD (насколько мне известно), но должна содержать только объекты Tier 0, т.е. DC, поэтому это группа Tier 0.
Контейнер принадлежит к самому высокому уровню (ближайшему к нулю) среди своих дочерних объектов или выше.
Пример: У вас есть все пользователи Tier 0, Tier 1 и Tier 2 в контейнере Users. Пользователь с полным доступом (Full Control) к контейнеру Users сможет скомпрометировать всех пользователей, включая пользователей Tier 0 (за исключением некоторых защищённых, но это не важно для примера), поэтому контейнер Users должен быть объектом Tier 0.
Уровень GPO определяется уровнем OU, к которым она привязана. GPO принадлежит к самому высокому уровню (ближайшему к нулю) среди OU, к которым она привязана. Используйте кнопку «Установить уровень для GPO», чтобы все GPO следовали этому принципу.
Пример: Пользователь с разрешением на редактирование GPO, привязанной к OU Tier 1, сможет управлять членством в группе «Администраторы» на всех серверах в этой OU, изменив GPO.
neo4j.confПерезапустите Neo4j
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)| 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 |