Маркировка путей компрометации в BloodHound
При проведении пентеста Active Directory мы часто сталкиваемся с задачей наглядно показать заказчику, какие именно цепочки атаки использовались от исходной точки до администратора домена. BloodHound отлично визуализирует граф атак, но по умолчанию не даёт возможности «запомнить» конкретные ребра, которые мы использовали в своей атаке. А ведь именно эти ребра — ключевые шаги, которые мы хотим продемонстрировать в отчете: чтобы заказчик видел не просто абстрактные пути, а реальную цепочку действий, которую мы воспроизвели.
Для этого мы вводим собственное свойство is_killchain для ребер графа. Пометив им все связи в выявленном пути, мы сможем легко отфильтровать их, визуально выделить на графе и перенести в отчетную документацию. Такой подход делает отчет понятным и убедительным, а также позволяет повторно использовать размеченные пути для последующего анализа.
Самый простой способ — выполнить Cypher запрос. Найти нужный путь можно с помощью стандартного механизма кратчайшего пути или вручную указав цепочку узлов. Затем мы извлекаем все ребра этого пути и для каждого из них устанавливаем свойство is_killchain со значением true.
MATCH p=AllShortestPaths((m:Group {name:"AUTHENTICATED USERS@DOMAIN.LOCAL"})-[*]->(n:Domain {name:"DOMAIN.LOCAL"}))
WHERE ALL(x IN relationships(p) WHERE x.is_traversable = TRUE)
WITH p, relationships(p) AS rels
UNWIND rels AS rel
SET rel.is_killchain = TRUEВ этом запросе используется is_traversable = TRUE, чтобы не перечислять все проходимые ребра. Затем используем функцию UNWIND, чтобы получить из пути все связи и с помощью SET устанавливаем значения для нового свойства.
После того как мы пометили ребра пути, в BloodHound появляется возможность создавать собственные запросы, которые показывают только эти ребра.
MATCH p=(n)-[r]->(m) WHERE r.is_killchain = TRUE RETURN p
Мы можем экспортировать полученный граф в виде изображения для вставки в отчет. Вместе с описанием каждого шага (например, «пользователь A входит в группу B», «группа B имеет право на компьютер C» и т.д.) получается наглядная иллюстрация всей цепочки атаки. Это значительно упрощает общение с заказчиком: он видит не просто список уязвимостей, а конкретный сценарий, который мы воспроизвели, и понимает, какие меры нужно принять для закрытия каждого шага.
При желании мы можем расширить набор свойств — добавить, например, killchain_order для нумерации шагов или killchain_description с кратким пояснением, что делает каждый шаг. Это делает отчет еще более информативным и профессиональным.
Таким образом, простое пользовательское свойство превращает BloodHound из инструмента разведки в полноценное средство документирования и демонстрации путей атак, что особенно ценно при подготовке отчетов для клиентов.