stihl не предоставил(а) никакой дополнительной информации.
Цель пентестера — оценить, насколько защищена внутренняя сеть клиента. Чаще всего это означает работу в среде Active Directory. Чтобы найти скрытые и неожиданные связи, используют BloodHound — он строит граф связей и показывает потенциальные пути к привилегиям. Но что, если у нас не AD, а FreeIPA?
Это исследование получило третье место на Pentest Award 2025 в категории «Out of scope». Соревнование ежегодно проводится компанией Awillix.
В рамках импортозамещения заказчики постепенно отказываются от Active Directory и переходят на FreeIPA. Эта система похожа по возможностям, но работает на Linux. Для пентестера это значит, что привычный инструментарий нужно адаптировать. Поэтому, не найдя ничего похожего в открытом доступе, мы решили создать собственный аналог BloodHound для FreeIPA.
Главный вопрос при разработке такого инструмента: делать всё с нуля или доработать BloodHound? В итоге решили пойти по второму пути. Причина очевидна — во многих компаниях вместе работают домены FreeIPA и Active Directory. Гораздо удобнее анализировать их в одном общем интерфейсе, а не переключаться между разными инструментами.
И как бонус для тестирования инструмента — скрипт Для просмотра ссылки Войдиили Зарегистрируйся для наполнения тестового домена объектами и взаимосвязями.
В результате работы инструмента для каждого типа объектов будут созданы файлы JSON со следующей структурой:
Поле data содержит в себе перечисление всех объектов этого типа. У каждого объекта есть поля Properties и Edges. В Properties указаны свойства объекта в формате ключ‑значение, а в поле Edges содержатся ребра, связывающие этот объект с другими.
Поле meta описывает сам JSON-файл. В нем есть несколько служебных параметров:
В BloodHound базовый тип для всех объектов Active Directory — это Base, в BloodHoundIPA подобный тип для объектов FreeIPA — IPABase. Такое разграничение позволяет отличать объекты в запросах к базе данных Neo4j.
Для отображения пользователей в BloodHoundIPA применяются объекты типа IPAUser.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения узлов — объекты типа IPAHost.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения групп пользователей — IPAUserGroup.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения групп узлов — IPAHostGroup.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения сетевых групп — IPANetGroup.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения членства одного объекта в другом используется ребро IPAMemberOf.
Для просмотра ссылки Войдиили Зарегистрируйся
Менеджеры‑участники — это члены группы, которые могут добавлять или удалять из нее других пользователей. В графе такие связи отображаются ребром IPAMemberManager. В FreeIPA эта возможность есть только у пользователей и групп пользователей.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения команд sudo в BloodHoundIPA используются объекты типа IPASudo.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения групп команд sudo — IPASudoGroup.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения правила sudo — IPASudoRule.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения принадлежности команд и групп команд sudo к правилу sudo используется ребро IPAMemberOf. Пользователи и группы пользователей, узлы и группы узлов, на которые будет применено это правило, связаны с правилом через ребро IPASudoRuleTo.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения разрешений в BloodHoundIPA используются объекты типа IPAPermission.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения привилегий — IPAPrivilege.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения ролей применяются объекты типа IPARole.
Для просмотра ссылки Войдиили Зарегистрируйся
Пример обнаружения пользователя с привилегированной ролью User Administrator — на рисунке ниже.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения служб HBAC в BloodHoundIPA используются объекты типа IPAHBACService.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения групп служб HBAC — объекты типа IPAHBACServiceGroup.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения правила HBAC — IPAHBACRule.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения принадлежности служб и групп служб HBAC к правилу HBAC используется ребро IPAMemberOf. Пользователи и группы пользователей, узлы и группы узлов, на которые будет применено это правило HBAC, связаны с правилом через ребро IPAHBACRuleTo.
Для просмотра ссылки Войдиили Зарегистрируйся
Для отображения IPAService — IPAService.
Для просмотра ссылки Войдиили Зарегистрируйся
У каждого объекта есть своя карточка, содержащая свойства из файла JSON, а также необходимый перечень запросов к базе данных Neo4j — для моделирования векторов атак.
Для просмотра ссылки Войдиили Зарегистрируйся
Для поиска объекта предусмотрена поисковая строка, также можно самостоятельно составить запрос к базе данных Neo4j, пример использования поисковых строк показан на рисунках ниже.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Это исследование получило третье место на Pentest Award 2025 в категории «Out of scope». Соревнование ежегодно проводится компанией Awillix.
В рамках импортозамещения заказчики постепенно отказываются от Active Directory и переходят на FreeIPA. Эта система похожа по возможностям, но работает на Linux. Для пентестера это значит, что привычный инструментарий нужно адаптировать. Поэтому, не найдя ничего похожего в открытом доступе, мы решили создать собственный аналог BloodHound для FreeIPA.
Главный вопрос при разработке такого инструмента: делать всё с нуля или доработать BloodHound? В итоге решили пойти по второму пути. Причина очевидна — во многих компаниях вместе работают домены FreeIPA и Active Directory. Гораздо удобнее анализировать их в одном общем интерфейсе, а не переключаться между разными инструментами.
Разработчики BloodHoundIPA
- Коллектор: Для просмотра ссылки Войди
или Зарегистрируйся, Для просмотра ссылки Войдиили Зарегистрируйся - Графический интерфейс: Для просмотра ссылки Войди
или Зарегистрируйся, Для просмотра ссылки Войдиили Зарегистрируйся
Архитектура
Концептуально BloodHoundIPA, как и любой другой BloodHound, состоит из коллектора, который вытаскивает информацию из домена, и GUI — для отрисовки всех взаимосвязей и графовой базы данных Neo4j:- коллектор Для просмотра ссылки Войди
или Зарегистрируйся поддерживает сбор информации через HTTP API и по LDAP. Реализована поддержка Kerberos и анонимного сбора информации из LDAP; - Для просмотра ссылки Войди
или Зарегистрируйся — GUI с поддержкой объектов FreeIPA.
И как бонус для тестирования инструмента — скрипт Для просмотра ссылки Войди
Разработка BloodyIPA
Итак, для сбора данных с контроллера домена FreeIPA мы разработали инструмент BloodyIPA. Он написан на Python 3 и требует библиотек python-freeipa и ldap3. Они нужны для сбора данных по протоколам HTTP и LDAP соответственно.В результате работы инструмента для каждого типа объектов будут созданы файлы JSON со следующей структурой:
Код:
{
"data": [
{
"Properties": {
"name": "admin",
"highvalue": true,
...
},
"Edges": [
{
"source": {
"type": "freeipa_*",
"uid": "admin"
},
"target": {
"type": "IPAUserGroup",
"uid": "admins"
},
"edge": {
"type": "IPAMemberOf",
"properties": {
"isacl": false
}
}
},
...
] ,
}
],
"meta": {
"methods": 0,
"type": "freeipa",
"count": 2,
"version": 6
}
}
Поле data содержит в себе перечисление всех объектов этого типа. У каждого объекта есть поля Properties и Edges. В Properties указаны свойства объекта в формате ключ‑значение, а в поле Edges содержатся ребра, связывающие этот объект с другими.
Поле meta описывает сам JSON-файл. В нем есть несколько служебных параметров:
- methods — всегда имеет значение 0 и в BloodHound просто игнорируется;
- type — показывает, каким инструментом собраны данные;
- count — указывает их количество;
- version — хранит номер версии структуры JSON.
Разработка BloodHoundIPA
BloodHound – одностраничное веб‑приложение, написанное на JavaScript и использующее графовую базу данных Neo4j. Для поддержки домена FreeIPA я расширил возможности BloodHound.В BloodHound базовый тип для всех объектов Active Directory — это Base, в BloodHoundIPA подобный тип для объектов FreeIPA — IPABase. Такое разграничение позволяет отличать объекты в запросах к базе данных Neo4j.
Для отображения пользователей в BloodHoundIPA применяются объекты типа IPAUser.
Для просмотра ссылки Войди
Для отображения узлов — объекты типа IPAHost.
Для просмотра ссылки Войди
Для отображения групп пользователей — IPAUserGroup.
Для просмотра ссылки Войди
Для отображения групп узлов — IPAHostGroup.
Для просмотра ссылки Войди
Для отображения сетевых групп — IPANetGroup.
Для просмотра ссылки Войди
Для отображения членства одного объекта в другом используется ребро IPAMemberOf.
Для просмотра ссылки Войди
Менеджеры‑участники — это члены группы, которые могут добавлять или удалять из нее других пользователей. В графе такие связи отображаются ребром IPAMemberManager. В FreeIPA эта возможность есть только у пользователей и групп пользователей.
Для просмотра ссылки Войди
Для отображения команд sudo в BloodHoundIPA используются объекты типа IPASudo.
Для просмотра ссылки Войди
Для отображения групп команд sudo — IPASudoGroup.
Для просмотра ссылки Войди
Для отображения правила sudo — IPASudoRule.
Для просмотра ссылки Войди
Для отображения принадлежности команд и групп команд sudo к правилу sudo используется ребро IPAMemberOf. Пользователи и группы пользователей, узлы и группы узлов, на которые будет применено это правило, связаны с правилом через ребро IPASudoRuleTo.
Для просмотра ссылки Войди
Для отображения разрешений в BloodHoundIPA используются объекты типа IPAPermission.
Для просмотра ссылки Войди
Для отображения привилегий — IPAPrivilege.
Для просмотра ссылки Войди
Для отображения ролей применяются объекты типа IPARole.
Для просмотра ссылки Войди
Пример обнаружения пользователя с привилегированной ролью User Administrator — на рисунке ниже.
Для просмотра ссылки Войди
Для отображения служб HBAC в BloodHoundIPA используются объекты типа IPAHBACService.
Для просмотра ссылки Войди
Для отображения групп служб HBAC — объекты типа IPAHBACServiceGroup.
Для просмотра ссылки Войди
Для отображения правила HBAC — IPAHBACRule.
Для просмотра ссылки Войди
Для отображения принадлежности служб и групп служб HBAC к правилу HBAC используется ребро IPAMemberOf. Пользователи и группы пользователей, узлы и группы узлов, на которые будет применено это правило HBAC, связаны с правилом через ребро IPAHBACRuleTo.
Для просмотра ссылки Войди
Для отображения IPAService — IPAService.
Для просмотра ссылки Войди
У каждого объекта есть своя карточка, содержащая свойства из файла JSON, а также необходимый перечень запросов к базе данных Neo4j — для моделирования векторов атак.
Для просмотра ссылки Войди
Для поиска объекта предусмотрена поисковая строка, также можно самостоятельно составить запрос к базе данных Neo4j, пример использования поисковых строк показан на рисунках ниже.
Для просмотра ссылки Войди
