Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ImproHound — Определите пути атак в BloodHound, нарушающие вашу иерархию AD | Kitploit
Инструменты/GitHubGitHub/improsec/improhound
Повышение привилегийАнализ уязвимостейСбор информацииТестирование на Проникновение
GitHubimprosec/improhound

ImproHound

Определите пути атак в BloodHound, нарушающие вашу иерархию AD

Репозиторий
328363 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

GitHub release (latest SemVer) GitHub all releases

ImproHound

Определите пути атак в BloodHound, нарушающие вашу многоуровневую структуру AD

ImproHound — это автономный dotnet исполняемый файл для Windows x64 с графическим интерфейсом. Для использования ImproHound необходимо запустить SharpHound для сбора необходимых данных из AD. Затем загрузите эти данные в вашу установку BloodHound. ImproHound подключается к базе данных Neo4j, используемой BloodHound. В ImproHound вы распределяете объекты AD по уровням через структуру подразделений (OU), а ImproHound выявляет связи в AD, которые позволяют объектам AD скомпрометировать объекты более высокого (ближе к нулевому) уровня. Нарушения tiering сохраняются в CSV-файл.

Статья в блоге об ImproHound

Демонстрационное видео ImproHound

Презентация ImproHound на DEF CON Adversary Village

Содержание
  • Установка
  • Использование
  • Рекомендации по распределению объектов AD по уровням
  • Последние протестированные версии зависимостей

Установка

1. Настройте базу данных BloodHound

  1. Установите BloodHound

  2. Соберите данные BloodHound с помощью SharpHound в вашем AD

    Примечание: это вызовет шум в вашем антивирусе, SIEM и т.д.

    Пример: Запустите SharpHound.exe из командной строки, соберите все (да, GPOLocalGroup не включена в All):

    root@kitploit:~
    SharpHound.exe --CollectionMethods All,GPOLocalGroup
    

    Совет 1: Используйте параметр Domain для сбора данных из других доменов леса.

    Совет 2: Для получения ещё большего объёма данных используйте Метод сбора сессий в цикле

  3. Загрузите данные BloodHound в графический интерфейс BloodHound

    В BloodHound есть ошибка, из-за которой файл JSON домена иногда пропускается при загрузке ZIP-архива с данными BloodHound. Проверьте статистику БД в BloodHound после загрузки данных и убедитесь, что объекты домена существуют.

2. Установите плагин Neo4j APOC (обеспечивает необходимые нам мощные операции с графами)

  1. Скачайте APOC версии, соответствующей вашей версии Neo4j (файл apoc-x.x.x.x-all.jar).

    Найдите версию APOC, соответствующую вашей версии Neo4j, в матрице совместимости версий.

  2. Постарайтесь вспомнить, куда вы установили Neo4j, и поместите JAR-файл APOC по следующему пути: $NEO4J_HOME/plugins/

    • $NEO4J_HOME в Linux: /var/lib/neo4j/
    • $NEO4J_HOME в Windows: Проверьте службу Neo4j. Она покажет расположение.
  3. Отредактируйте neo4j.conf в вашем любимом текстовом редакторе, чтобы разрешить неограниченный доступ APOC, заменив строку: #dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.* на dbms.security.procedures.unrestricted=apoc.*

    • neo4j.conf в Linux: /etc/neo4j/neo4j.conf
    • neo4j.conf в Windows: $NEO4J_HOME/conf/neo4j.conf

    Если вы хотите запускать ImproHound на одном хосте, а BloodHound на другом, вам нужно разрешить удалённые подключения к базе данных Neo4j на хосте BloodHound. Для этого удалите # из строки #dbms.default_listen_address=0.0.0.0 в файле .

3. Скачайте и запустите последнюю версию ImproHound.exe в Windows (x64)

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

Использование

Подключение к базе данных

alt text

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

Продолжить или начать заново

alt text

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

Стандартная tiering-структура или все в Tier 2

alt text

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

Структура подразделений (OU)

alt text

Это страница, на которой вы будете распределять объекты 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 по уровням

Важно правильно распределять объекты AD по уровням. Если вы установите DC и обычного пользователя с низкими привилегиями как объекты Tier 0, ImproHound не обнаружит, что доступ администратора-пользователя к DC является нарушением tiering. То же самое произойдёт, если вы поместите обоих в Tier 2.

Компьютер

Компьютеры распределяются по уровням в зависимости от критичности их компрометации.

  • Tier 0 – Контроллеры домена и другие системы, классифицированные как критические. Такие системы, как SCCM, ADFS, PKI и серверы виртуализации (VMware, Hyper V и т.д.)
  • Tier 1 – Остальная серверная инфраструктура
  • 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.

Контейнер (включая OU и домен)

Контейнер принадлежит к самому высокому уровню (ближайшему к нулю) среди своих дочерних объектов или выше.

Пример: У вас есть все пользователи Tier 0, Tier 1 и Tier 2 в контейнере Users. Пользователь с полным доступом (Full Control) к контейнеру Users сможет скомпрометировать всех пользователей, включая пользователей Tier 0 (за исключением некоторых защищённых, но это не важно для примера), поэтому контейнер Users должен быть объектом Tier 0.

GPO

Уровень GPO определяется уровнем OU, к которым она привязана. GPO принадлежит к самому высокому уровню (ближайшему к нулю) среди OU, к которым она привязана. Используйте кнопку «Установить уровень для GPO», чтобы все GPO следовали этому принципу.

Пример: Пользователь с разрешением на редактирование GPO, привязанной к OU Tier 1, сможет управлять членством в группе «Администраторы» на всех серверах в этой OU, изменив GPO.

Последние протестированные версии зависимостей

  • BloodHound 4.2.0
  • Neo4j 4.4.10
  • APOC 4.4.0.8
  • Java/OpenJDK 11.0.16.1 LTS

TODO

  • Отфильтровать GetChanges / GetChangesAll, если присутствует только одно из них.
  • Добавить больше объектов Tier 0 по умолчанию: RODC (включая krbtgt_xxxxxx), MSOL_, AdminSDHolder и т.д.
Скачать инструмент
neo4j.conf
  • Перезапустите Neo4j

    • Linux: systemctl restart neo4j
    • Windows (cmd): net stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)
  • SourceTierSourceTypeSourceNameSourceDistinguishednameRelationIsInheritedTargetTierTargetTypeTargetNameTargetDistinguishedname
    Tier1User[email protected]CN=svc-monitor,CN=Users,DC=hot,DC=localForceChangePasswordTrueTier0User[email protected]CN=T0_JBK,CN=Users,DC=hot,DC=local
    Tier2Group[email protected]CN=Wrk-Admins,CN=Groups,DC=hot,DC=localGenericWriteTier0GPO[email protected]CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local