• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Как мы разработали инструмент для анализа FreeIPA при помощи BloodHound

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,440
Розыгрыши
0
Реакции
792
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Цель пентестера — оценить, насколько защищена внутренняя сеть клиента. Чаще всего это означает работу в среде Active Directory. Чтобы найти скрытые и неожиданные связи, используют BloodHound — он строит граф связей и показывает потенциальные пути к привилегиям. Но что, если у нас не AD, а FreeIPA?

Это исследование получило третье место на 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.
Neo4j при этом нужно установить самостоятельно с официального сайта.

И как бонус для тестирования инструмента — скрипт Для просмотра ссылки Войди или Зарегистрируйся для наполнения тестового домена объектами и взаимосвязями.


Разработка 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 для дальнейшего анализа связей.


Разработка 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, пример использования поисковых строк показан на рисунках ниже.

Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся

Выводы​

BloodHoundIPA в паре с коллектором BloodyIPA позволяют получить информацию обо всех взаимосвязях в домене FreeIPA. Встроенные запросы покрывают лишь часть возможных векторов атак. Выжать из него максимум можно при использовании собственных Cypher-запросов. Помимо векторов атак, пользователь получает локальную базу с возможностью быстрого поиска по группам, пользователям и остальным объектам, возможность видеть их описание и связи друг с другом.
 
Activity
So far there's no one here
Сверху Снизу