BloodHound 3.0 — твоя ищейка в Active Directory

Если кто не знает, BloodHound это опенсорсный инструмент, позволяющий быстро визуализировать взаимоотношения в Active...

BloodHound 3.0 — твоя ищейка в Active Directory

Если кто не знает, BloodHound это опенсорсный инструмент, позволяющий быстро визуализировать взаимоотношения в Active Directory, оценить сильные и слабые стороны. BloodHound поможет отследить взаимосвязи и получить представление об AD, идентифицировать компьютеры, на которых пользователи имеют права администратора, увидеть какие пользователи имеют право на администрирование любого компьютера в AD, а также позволяет просмотреть информацию о членстве в группах. В BlooadHound впервые на таком уровне был реализован подход “думай графиками, а не списками”.

Этот инструмент представляет интерес как для сотрудников ИБ, изучающих риски в инфраструктуре Active Directory, так и для атакующих, поскольку даёт наглядное графовое представление связей и сущностей в Active Directory. Инструмент позволяет быстро найти всех доменных администраторов; найти все хосты, на которых залогинены доменные администраторы; выстроить цепочку от компьютера атакующего до компьютера на котором есть сессия доменного администратора и много другой полезной информации. BloodHound представляет собой одностраничное Javascript веб приложение. Для сбора данных используется сценарий PowerShell PowerView.

Детально ознакомиться с этим удобным фреймворком можно в официальном репозитории на Github.

Совсем недавно вышла новая версия BloodHound.

В третьей версии добавились три новых типа атак, была улучшена
производительность графического интерфейса, добавлена поддержка Neo4j
4.0.

К сожалению, SharpHound2 и БД из BloodHound 2.x не совместимы с BloodHound 3.0. BloodHound 3.0 совместим с Neo4j 4.0, и узлы теперь перечисляются по их идентификатору безопасности, а не по имени.

Новые типы атак

В BloodHound 3.0 добавлено три новых типа атак: управление GMSA, управление OU и SIDHistory. Конфиги, связанные с этими атаками, по умолчанию доступны любому пользователю, прошедшему проверку в домене, и каждый тип атаки может использоваться с практическими инструментами.

Управление GMSA

Group Managed Service Accounts (GMSA) — это специальные учетные записи служб в Active Directory, решающие многие проблемы. Пароли для GMSA состоят из 128 символов, управляются контроллерами домена и по умолчанию автоматически меняются каждые 30 дней.

Суть GMSA заключается в том, что администраторам необходимо указать, кому разрешено читать плэинтекстовые пароли для GMSA. Предположим, что наш пользователь Dwight Hohnstein может прочитать пароль для SQL GMSA. В графическом интерфейсе BloodHound вы можете увидеть это как путь атаки с компа Dwight до компьютера SQL:

Если мы можем войти в контекст пользователя DHOHNSTEIN, то мы можем получить плеинтекстовый пароль для GMSA-SQL01, а затем в перейти и к SQL01.CONTOSO.LOCAL. На данный момент уже существует несколько инструментов для извлечения паролей GMSA, но ни один из них не работает исколючительно из памяти компьютера. Именно поэтому на C# был разработан GMSAPasswordReader, делающий именно то, что должен: чтение паролей GMSA. Вот пример использования GMSAPassword.exe с функцией execute-assembly тулкита Cobalt Strike для получения NT-хэша для GMSA-SQL01:

Теперь, с NT-хэшем пароля учетной записи GMSA, вы можете выдать себя за пользователя (используя, например, overpass-the-hash) и перейти к SQL01.CONTOSO.LOCAL.

Для дальнейшего чтения о GMSA, (см. рецензию Michael Grafnetter здесь)

Контроль OU

Иногда админы AD задают ACEs на OU (организационные подразделения) применимые к OU, или OU и его наследственные OU, но не наследственные объекты пользователя, компьютера или группы. Мы видели контроль OU через свзку групповых политик с OU, и возможность связи нежелательных GPO с OU, которыми вы управляете. С этим есть несколько проблем, наиболее критическая из которых то, что вы должны иметь возможность не дать нежелательному серверу GP корректно размещать ваши файлы групповой политики. Делать это через коммандную строку очень непросто. Контролируя OU, вы можете задать ACE на OU будет унаследован вложенными объектами!

Например, представим, что Justin Bui имеет полный доступ к Workstation Admins OU, пользовательский объект Josh Prager:

Далее следует очень простая атака: из контекста JBUI мы можем добавить новый ACE к OU администратора рабочей станции, который унаследует JPRAGER. Это возможно благодаря мощному командлету в PowerView New-ADObjectAccessControlEntry.

Как только этот новый ACE будет создан, мы можем получить доступ к пользователю JPRAGER из контекста JBUI точно так же, как мы могли это делать после обновления ACL BloodHound 1.3: сбросить его пароль или выполнить целевую атаку.

Когда вы применяете ACE к OU и устанавливаете его для наследования дочерних объектов, вы можете выбрать его применение ко всем объектам, объектам определенного класса и даже контролировать, применяется ли он к прямым дочерним элементам OU и их наследникам.

SIDHistory

SIDHistory включен в качестве вектора атаки в BloodHound 3.0. Как ред тимер, вы можете сначала подумать о золотых тикетах, нарушающих функциональность истории SID, но на самом деле мы рассматриваем пользователей, компьютеры и группы, у которых уже есть SID, указанный в параметре SIDHistory их объекта в AD. Эти параметры могут быть заполнены при миграции объекта из одного домена Active Directory в другой. Для сохранения прав и привилегий, которыми обладает участник, объект в новом домене будет содержать идентификаторы безопасности для любой группы, которой принадлежит участник в старом домене.

Допустим, пользовательский объект Josiah Massari был перенесен в домен CONTOSO из домена FABRIKAM. В домене FABRIKAM юзер Josiah принадлежал к группе администраторов рабочей станции, которая имеюзую права локального администратора на всех рабочих станциях в FABRIKAM. В домене CONTOSO пользовательский объект для Josiah будет содержать SID для группы администраторов рабочей станции в FABRIKAM. Теперь, всякий раз, когда Josiah проходит аутентификацию, его тикет Kerberos будет содержать SID для этой группы в части ExtraSID в PAC тикета, предоставляя ему те же права и привилегии, которыми обладает эта группа.

Итог: Josiah Massari фактически остается членом группы администраторов рабочей станции в FABRIKAM, даже если его пользовательский объект больше не принадлежит этой группе. Дополнительные сведения об этом см. в блоге Шона Меткалфа: Скрытая стойкость Active Directory # 14: SID.

В графическом интерфейсе BloodHound описанная ситуация будет выглядеть так:

Фактически, вы можете представить «HasSIDHistory» так же, как вы уже представляете свойство «MemberOf». В контексте JMASSARI вы получите права администратора на обеих рабочих станциях в домене FABRIKAM.

Предостерегаем: если доверие между доменами CONTOSO и FABRIKAM обеспечивает фильтрацию SID, эта атака не будет работать, поскольку идентификаторы SID в части ExtraSID PAC тикета kerberos JMASSARI будут игнорироваться доменом FABRIKAM. Для получения дополнительной информации о фильтрации SID см. пост в блоге Уилла Шредера «Руководство по атаке на доверия в домейне».

Улучшения производительности

Ощущаются улучшения производительности по сравнению со старыми версиями в двух основных областях: сбор данных с помощью SharpHound и импорт данных с помощью BloodHound GUI. В SharpHound вы ощутите увеличение скорости сбора LDAP примерно на 25-30%. Сбор хостов происходит немного медленнее, но с гораздо большей точностью. Количество проб при распознавания хостов значительно увеличилось по сравнению с предыдущей версией.

В импорте данных полностью перестроена логика синтаксического анализа и импорта JSON, поэтому перетаскивание файлов в графический интерфейс будет работать быстрее по сравнению с предидущими версиями.

Дополнительные удобства

Два основных изменения затронули то, как графический интерфейс обрабатывает сложные запросы, и как графический интерфейс визуализирует графики с большим количеством узлов.

Всякий раз, когда вы щелкаете по узлу в графическом интерфейсе BloodHound, вкладка информации для этого узла заполняется и начинает отображать все виды информации об этом объекте:

Некоторые из этих запросов очень легко обрабатываются базой данных, например получение даты и времени «последнего пароля» от пользовательского узла или даже получение количества компьютеров, на которых у пользователя есть делегированные права администратора группы.

Некоторые из этих запросов на самом деле довольно тяжелые, особенно когда вы начинаете работать с базами данных выше определенного размера, скажем, более 30 000 узлов. В частности, любое использование shorttestPath (), где начальным или конечным узлом может быть любой другой узел (в отличие от определенного узла) в графе, приведет к огромному нагрузке га БД.

Выполняется 3 таких запроса каждый раз, когда вы щелкали по пользовательскому узлу: права локального администратора, управление переходными объектами и контроллеры переходных объектов. Мы изменили поведение по умолчанию. Теперь вместо тех запросов, которые выполняются каждый раз, когда вы нажимаете на пользовательский узел (и тем самым нагружают БД), появилась кнопка «play», которую вы можете нажать, чтобы выполнить запрос:

Большой проблемой в графическом интерфейсе BloodHound являлась визуализация больших графиков, состоящих из сотен узлов. Это связано с тем, что фреймворк полагаетсся на библиотеки визуализации графиков с открытым исходным кодом — которые используют проц, а не GPU для визуализации.

Решение состояло в том, чтобы перехватить данные, возвращаемые из neo4j, определить, может ли такой объем данных привести к зависанию графического интерфейса в течение длительного времени, а затем предоставить пользователю возможность выбора действий:

“Cancel” отменит ваши. «Save Data» покажет диалоговое окно, в котором вы можете сохранить необработанные данные графика в формате JSON. «Draw Graph» будет продолжать пытаться визуализировать узлы в обычном режиме.

Устанавливаем

СУБД Neo4j

Neo4j — графовая СУБД с открытым исходным кодом, реализованная на Java.

Системные требования https://neo4j.com/docs/operations-manual/current/installation/requirements/

Скачиваем дистрибутив https://neo4j.com/download/other-releases/#releasesЯ взял последний Community релиз для Windows 64-bit:

Распаковываем содержимое архива в ту же папку, куда извлекли исходники BloodHound:

Варианты установки описаны здесь https://neo4j.com/docs/operations-manual/current/installation/windows/

Теперь, когда все исходные файлы подготовлены, приступаем к
установке. Для этого открываем cmd с повышением привилегий и запускаем
сценарий установки neo4j.bat из директории bin:

Сценарий запускаем с ключом install-service, чтобы установить СУБД как Windows службу:

:\BloodHound\neo4j-community-3.3.4\bin>neo4j.bat install-service

Запускаем службу Neo4j:

c:\BloodHound\neo4j-community-3.3.4\bin>neo4j.bat start

Проверяем работу сервиса. Открываем в браузере
URL http://localhost:7474/browser/. Должна открыться страница с запросом на подключение к БД

Для создания новой БД необходимо остановить сервис Neo4j:

net stop neo4j

Из папки BloodHound-master копируем образец базы данных (папка BloodHoundExampleDB.graphdb) в папку neo4j-community-3.3.4\data\databases:

Изменяем конфигурационный файл neo4j.conf, нацеливая СУБД на созданную базу:В моём случае он лежит здесь C:\BloodHound\neo4j-community-3.3.4\conf

В разделе # The name of the database to mount изменяем строку

#dbms.active_database=graph.db на созданную базу dbms.active_database=BloodHoundExampleDB.graphdb и снимаем комментарий.

В разделе # Enable this to be able to upgrade a store from an older version. снимаем комментарий с параметра dbms.allow_upgrade=true

Сохраняем файл, запускаем Neo4j:

net start neo4j

Открываем в браузере url http://localhost:7474/browser/ и подключаемся к СУБД со следующими параметрами:Host: bolt://localhost:7687Username: neo4jPassword: neo4jСистема предложит изменить пароль. Меняем его на свой.

Запускаем BloodHound.exe из релиза https://github.com/BloodHoundAD/BloodHound/releases.

В графическом интерфейсе указываем:Database URL: bolt://localhost:7687DB Username: neo4jDB Password: тот, который установили

Система отобразит данные, которые были загружены в БД для примера:

Для работы BloodHound требуется три набора данных из Active Directory:1. Кто и где залогинен2. Кто имеет административные права и где3. Какие пользователи и группы в какие группы входят. Для сбора этих данных в большинстве случаев не требуется какой-либо привилегированный доступ или выполнение кода на удалённых системах. Сбор данных может быть  проводится с помощью PowerShell сценария PowerView, либо с помощью утилиты SharpHound.exe, которая находится в папке Ingestors. Я рассмотрю вариант сбора данных с помощью SharpHound.exe.

В моём примере SharpHound.exe находится в папке C:\BloodHound\BloodHound-master\Ingestors:

Собранные данные сохраняются в CSV файлы в эту же папку.Документация по работе с утилитой здесь: https://github.com/BloodHoundAD/SharpHound

Для работы требуется .Net 3.5. Запускаться должна из контекста доменного пользователя.При запуске без параметров выполняется сбор членов групп AD, доверительных отношений, локальных администраторов и текущих сессий. Результат работы выводится в CMD:

Запускаем BloodHound.exe и подключаемся к базе данных.

Данные, которые были загружены для примера можно удалить, нажав кнопку Clear Database:

Затем загружаем полученные CSV файлы в чистую базу данных. Для этого в меню инструментов справа нажимаем кнопку Upload Data:

На этом загрузка данных завершена и можно приступать к анализу полученной информации.

BloodHound имеет 13 встроенных запросов:Find all Domain AdminsFind Shortest Paths to Domain AdminsFind logged in adminsFind Top 10 Users with Most SessionsFind Top 10 Computers with Most SessionsFind Top 10 Users with Most Local Admin RightsFind Top 10 Computers with Most AdminsUsers with Foreign Domain Group MembershipGroups with Foreign Domain Group MembershipMap Domain Trusts

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

BloodHound 3.0 — мощнейший инструмент для аудита AD стал еще мощнее с новыми векторами атаки и общими улучшениями. BloodHound – это мощнейший фреймворк, позволяющий изучать и эксплутировать AD, незаменимый для уважающего себя редтимера.

Перевод с албанского. Оригинал здесь.

Я покажу и расскажу вам то о чём не пишет журнал “Хакер” и не рассказывают или просто не знают другие каналы. На канале @cybersecs ты найдешь подборку лучших статей и видеоматериалов на тему кибербезопасности. Все, от аудита Wi-Fi до вскрытия автомобилей (если вы потеряли ключи). А также культура, креатив и горячие новости с авторскими коментариями.

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.