Продолжаем серию постов, связанных с расширением возможностей BloodHound. Сегодня рассмотрим способ добавления результатов атаки распыления пароля в базу BloodHound. Тема не является новой, другие варианты можно почитать здесь и здесь.

BloodHound – это популярный инструмент, который используется для сбора и анализа данных во время проведения пентеста внутренней инфраструктуры на базе Active Directory. Этот инструмент позволяет визуализировать некорректные настройки объектов Active Directory и строить цепочки атак. Основная его особенность — использование теории графов при анализе данных.

Предыдущие наши посты по теме расширения возможностей BloodHound здесь и здесь

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

Допустим, мы обнаружили пароль пользователя в атрибуте Description или в результате атаки Kerberoasting. Чтобы отразить это в BloodHound, можно выполнить следующий запрос Cypher: 

MATCH (u:User {name:”USER@WINDOMAIN.LOCAL”}) SET u.ClearTextPassword = “Qwerty123” SET u.owned = True 

После выполнения этого запроса в свойствах объекта добавится новое поле свойств ClearTextPassword с указанным паролем. В BloodHound оно будет отображаться в разделе EXTRA PROPERTIES:

Для атак распыления подходят шаблонизированные пароли. В качестве инструмента можно использовать DomainPasswordSpray. Синтаксис запуска будет следующим:

Invoke-DomainPasswordSpray -Password Qwerty123

В результате будут получены учетные записи, имеющие такой же пароль:

Если записей будет немного, их можно добавить вручную с помощью запроса Cypher, используемого выше. Но если запросов будет много, вводить их вручную неудобно и в данной ситуации можно изменить вывод в самом PowerShell-скрипте, который сразу будет создавать строку запроса Cypher.

Найти строку вывода информации в консоль (строка 550)

Write-Host -ForegroundColor Green "[*] SUCCESS! User:$User Password:$Password"

И изменить ее на следующую:

Write-Host -ForegroundColor Green "MATCH (u :User) WHERE u.name =~ '(?i)$User`@$DomainObject' SET u.ClearTextPassword = '$Password' SET u.owned = True;"

После запуска измененной версии скрипта будет получен следующий результат:

Достаточно скопировать полученные данные и вставить их в строку запросов Neo4j Brower и выполнить. Проверить, что все создалось корректно, можно с помощью запроса:

MATCH (u:User) WHERE u.ClearTextPassword = "Qwerty123" RETURN u.name,u.ClearTextPassword

Теперь можно построить новые пути компрометации. Например, до группы доменных администраторов, запрос Cypher будет выглядеть так:

MATCH p=AllShortestPaths((u:User)-[*1..]->(g: Group {name:"DOMAIN ADMINS@WINDOMAIN.LOCAL"})) WHERE u.owned = True RETURN p

Заключительным шагом станет создание связи SharePasswordWith между всеми объектами, которые имею одинаковый пароль. Запрос Cypher будет таким:

MATCH (n:User) WHERE n.ClearTextPassword = "Qwerty123"

MATCH (m:User) WHERE m.ClearTextPassword = "Qwerty123"

FOREACH (_ IN CASE WHEN n <> m THEN [1] END | MERGE (n)-[r:SharePasswordWith]->(m))

Стоит рассмотреть его более подробно. Первые два запроса создают одинаковые списки пользователей с одинаковым паролем. Третий запрос выполняет всю трудную работу: берет два списка сравнивает их, чтобы не было совпадения узлов, и создает связь SharePasswordWith.

Проверить, что все связи создались корректно, можно, выполнив следующий запрос Cypher:

MATCH p=(u1:User)-[r:SharePasswordWith]-(u2:User) return p

Повторив запрос поиска коротких путей до группы администраторов домена, получим следующую картину:

Необходимо помнить, что интерфейс BloodHound ничего не знает о новых созданных связях. Поэтому можно добавить новые связи в const fullEdgeList (31 строка) в файле AppContainer.jsx и заново скомпилировать программу.

 На этом все, до новых встреч!

Автор: Дмитрий Неверов, руководитель группы анализа защищенности внутренней инфраструктуры, "Ростелеком-Солар"

Комментарии (0)