Первый раз когда видишь BloodHound с загруженными данными реального домена — это немного шокирует. Путь от рядового пользователя до Domain Admin, который вы ожидали искать дни, оказывается тремя стрелками на экране. ACL, групповые вложенности, сессии на серверах — всё это сложилось в граф и стало видимым.

Сбор данных

Сначала нужен коллектор. С Linux-машины — Python-версия:

bloodhound-python -u user -p password -d target.local -ns 10.0.0.1 -c All

На Windows — оригинальный SharpHound, который даёт более полные данные:

SharpHound.exe -c All

На выходе — JSON-файлы, упакованные в zip. Их перетаскиваем в интерфейс BloodHound.

Встроенные запросы

Вкладка Analysis — это первое место куда смотреть после импорта. Самые полезные запросы:

  • Shortest Paths to Domain Admins — кратчайшие пути захвата домена
  • Find Principals with DCSync Rights — кто может выгрузить хеши контроллера
  • Find Kerberoastable Accounts — учётки с SPN, уязвимые к Kerberoasting
  • Find AS-REP Roastable Users — учётки без преаутентификации

Cypher-запросы

Под капотом — Neo4j с языком Cypher. Когда встроенных запросов не хватает, можно писать свои. Например, все пользователи с правом владения объектами:

MATCH p=(u:User)-[:Owns]->(n) RETURN p

Или учётки с правом GenericAll на другие объекты:

MATCH p=(u:User)-[:GenericAll]->(n) RETURN p

После сбора данных

BloodHound хорошо показывает что есть, но реализация пути — руками. Kerberoasting через impacket, релей через ntlmrelayx, lateral movement через netexec. BloodHound даёт карту, инструменты impacket — транспорт.

Место в рабочем процессе

Запускаю сразу после получения первых доменных учёток. Коллекция через bloodhound-python, импорт zip, смотрю Shortest Paths. Часто оказывается что от захваченной учётки до DA всего два-три перехода через неочевидные ACL — и это находится за секунды, не часы.