Содержание статьи
В рамках импортозамещения заказчики постепенно отказываются от Active Directory и переходят на FreeIPA. Эта система похожа по возможностям, но работает на Linux. Для пентестера это значит, что привычный инструментарий нужно адаптировать. Поэтому, не найдя ничего похожего в открытом доступе, мы решили создать собственный аналог BloodHound для FreeIPA.
Главный вопрос при разработке такого инструмента: делать всё с нуля или доработать BloodHound? В итоге решили пойти по второму пути. Причина очевидна — во многих компаниях вместе работают домены FreeIPA и Active Directory. Гораздо удобнее анализировать их в одном общем интерфейсе, а не переключаться между разными инструментами.
Архитектура
Концептуально BloodHoundIPA, как и любой другой BloodHound, состоит из коллектора, который вытаскивает информацию из домена, и GUI — для отрисовки всех взаимосвязей и графовой базы данных Neo4j:
- коллектор BloodyIPA поддерживает сбор информации через HTTP API и по LDAP. Реализована поддержка Kerberos и анонимного сбора информации из LDAP;
- BloodHoundIPA — GUI с поддержкой объектов FreeIPA.
Neo4j при этом нужно установить самостоятельно с официального сайта.
И как бонус для тестирования инструмента — скрипт BadIPA для наполнения тестового домена объектами и взаимосвязями.
Разработка 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 содержатся ребра, связывающие этот объект с другими.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
