Полное руководство для BloodHound Community Edition (BHCE)

  • Автор темы Автор темы ADMIN
  • Дата начала Дата начала

ADMIN

Administrator
ADMIN
Регистрация
18 Окт 1989
Сообщения
1,408
Реакции
93
Баллы
48
☑ ДЕПОЗИТ
0$
Я встречал множество заинтересованных хакеров, которые хотели научиться использовать BloodHound, но с трудом могли начать. В результате многие теряются и разочаровываются. Помимо этого, если мы проводим пентест, мы оказываем клиенту плохую услугу, не перечисляя как можно больше рисков.
0*dYQ-OsohrkhcjyU3

Счастливый хакерский пес, который гордится тем, что научился делать что-то эффективно :)
В этой статье будут рассмотрены настройка, сбор данных, их анализ и обеспечение ценности этих данных. Лес GOADv2 будет использоваться в качестве образца данных для сбора и анализа. Я уже собрал некоторые образцы данных и поместил их в репозиторий для анализа и практики.
Огромное спасибо
SpectreOps
команде за создание BloodHound и предоставление его сообществу!

Почему​

Прежде чем мы начнем, нам нужно понять , ПОЧЕМУ . Active Directory общеизвестно сложна, и во всем, что связано со сложностью, существует много места для ошибок. AD интересен тем, что в большинстве сред отсутствуют традиционные эксплойты на основе CVE — вместо этого большинство атак эскалации основаны на неправильных конфигурациях. Наша задача — перечислить как можно больше таких сценариев эскалации, определить их риск и представить рекомендации по снижению риска до минимально возможного уровня.
Если вы хотите получать оплату за выполнение этой работы, вы должны быть в состоянии эффективно представить эти риски в письменной форме!

Фон​

BloodHound был разработан SpectreOps как способ визуализации отношений между объектами в AD. Из-за масштаба и сложности большинства сетей AD ручной аудит этих отношений является кошмаром. Вместо этого оригинальный BloodHound полагался на теорию графов Neo4j для визуализации этой информации и ее передачи между объектами.
В настоящее время существует три версии BloodHound, о которых вам нужно знать:
BloodHound Legacy : оригинальный BloodHound, больше не поддерживается. Создан на базе приложения Electron, довольно сложен в настройке.
BloodHound Community Edition : выпущено в августе 2023 г., активно поддерживается. Использует Docker Compose для управления набором контейнеров, исключительно прост в развертывании. Гладкий интерфейс веб-приложения.
BloodHound Enterprise : платная версия BloodHound для управления путями атак. Основное отличие состоит в том, что эта версия используется для управления рисками и проверки.

Основы​

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

Коллектор​

Нам нужно собрать данные из среды AD, чтобы передать их в BloodHound для анализа. Есть два основных коллекционера, о которых вам нужно знать:
SharpHound : это официально поддерживаемый инструмент сбора данных для BloodHound, написанный на C#. Для сбора информации необходимо запускать с ПК под управлением Windows, подключенного к домену.
BloodHound.py : скрипт Python, управляемый сообществом, используемый для сбора данных AD. Может быть запущен с компьютера под управлением Linux, например Raspberry Pi. Отличный вариант использования дропбокса для пентестинга.
Важно понимать, что на момент написания этой статьи BloodHound-CE изначально неbloodhound.py поддерживается . Если вы решите использовать это, вы должны использовать ветку сборщика Python. Мы не можем смешивать устаревшие сборщики со сборщиками Community Edition — это приведет к сбою загрузки (и это неприятно!).bloodhound-ce bloodhound.py

Интерфейс​

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

Поглощение​

В графическом интерфейсе есть функция File Ingest. Это то, что используется для помещения данных, полученных от коллектора, для интерпретации в базу данных Neo4j. После анализа эти данные будут доступны приложению с графическим интерфейсом для анализа.

API​

Одна из самых интересных частей BloodHound-CE — это HTTP API, доступный для запроса данных. Это может помочь нам автоматизировать и быстро извлекать данные, чтобы доказать их ценность при тестировании на проникновение.

Наследие BloodHound​

Ранее мы уже коснулись исходной версии наследия BloodHound и того, почему это важно, но это очень важно понять. Старшие коллекционеры НЕ РАБОТАЮТ с Community Edition BloodHound. Любой желающий по-прежнему может использовать устаревшую версию, и она по-прежнему отлично работает, однако она не будет обновлена в отношении последних угроз. Поскольку мы доказываем ценность для клиентов, нам необходимо использовать элементы, которые могут оценить наиболее применимый для них риск.

Начиная​

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

Запустите контейнеры​

Community Edition использует Docker Compose через набор контейнеров . Это значительно упрощает запуск и управление инфраструктурой BloodHound, поскольку все находится в контейнерах внутри сети докеров.
Для начала все, что нам нужно сделать, это загрузить файл docker-compose.ymlи дать команду docker создать контейнеры. Для начала SpectreOps предоставляет простую однострочную строку:
# Рекомендуемый запуск для BHCE
curl -L https://ghst.ly/getbhce | докер составить -f - вверх
Примечание . Если вы используете Kali, есть вероятность, что в установленной dockerверсии нет этой composeкоманды. В этом случае вы получите сообщение об ошибке, подобное приведенному ниже:
1*RzepkR_YY6I0gt-IX7c8VQ.png

Ошибка с командой docker compose, не волнуйтесь — мы можем это исправить!
Чтобы исправить это, мы можем установить docker-composeпакет в репозитории Kali. Затем мы можем изменить команду для запуска контейнеров.
# Установите docker-compose для Kali
sudo apt install docker-compose -y
docker-compose -v
Curl -L https://ghst.ly/getbhce | docker-compose -f - вверх
1*wN6SqySugNK-aZ2SNXBZsw.png

Гораздо счастливее!
Чтобы сохранить docker-compose.ymlфайл для дальнейшего использования, мы можем использовать эту команду, чтобы загрузить его в наш текущий каталог. Когда файл сохраняется с этим именем, нам не нужно указывать его при запуске docker-compose.
# Загрузите файл docker-compose.yml на диск, затем запустите
wget https://ghst.ly/getbhce -O docker-compose.yml
docker-compose up
Большой! Похоже, что контейнеры были запущены с помощью docker-composeкоманды, зеленый цвет всегда хорош. Однако обратите внимание: в логах будет указан первоначальный пароль, который нам нужно использовать для входа в систему.
1*khPj2uWGDSynGiTREWVQPQ.png

Определение первоначального пароля для входа в графический интерфейс
Скопируйте этот пароль и перейдите по адресу http://localhost:8080, чтобы войти в графический интерфейс. Пользователь будет adminи первоначальный пароль из журналов.
1*QaAP7cuP5nGL-ccr076SJw.png

Первоначальный вход в систему с сгенерированным паролем.
При входе в систему вам будет предложено обновить пароль. Выберите тот, который вам запомнится.
1*7BJQjzI3aAZDlhQXjzXTog.png

Обновление пароля для учетной записи администратора
Теперь мы внутри! Но подождите, данных нет! Так как же нам на самом деле начать анализ? Ну что ж, надо сначала скачать сборщики!
1*M1yYM5xcDyhU-gRXy_5B0A.png

Были в! Но анализировать нам нечего...

Сбор данных​

У нас есть несколько способов сделать это. Для сбора этой информации мы можем использовать сборщики SharpHound.exe C#, PowerShell или Python.
Чтобы получить копию поддерживаемых сборщиков, мы можем загрузить их прямо из графического интерфейса BHCE. Нажмите на шестеренку, а затем «Загрузить коллекторы». Откроется страница, где мы сможем скачать сборщик.
1*UGEonGQj3ccEEUnXzgAOyA.png

Сборщик, доступный в графическом интерфейсе, легко доступен.
Мы всегда можем собрать последние версии сборщика , которые доступны на странице релизов SharpHound:
После распаковки мы можем запустить этот инструмент сбора данных на удаленном хосте. Выберите свой любимый способ выполнить это, будь то маяк для встроенного выполнения или интерактивный сеанс RDP.

Сборщик C#​

Использовать SharpHound.exe просто — мы можем просто запустить его без каких-либо дополнительных флагов, и он с радостью соберет информацию по умолчанию о текущем домене с текущим пользователем.
# Собираем информацию по умолчанию, используя текущую учетную запись
.\SharpHound.exe
Чтобы собрать всю доступную информацию, мы можем указать флаг -c All. Это предоставит такую информацию, как информация ADCS, RDP и DCOM. Однако в больших средах сбор всего подряд может легко перегрузить нашу машину — имейте это в виду!
Лично я люблю все собирать, а затем шифровать ZIP паролем, при этом присваивая файлам префикс. Хотя эти данные доступны всем пользователям домена, в чужих руках они могут оказаться конфиденциальной информацией.
# Механизм сбора личных избранных
.\SharpHound.exe -c All --zippassword 'p@ssw0rd' --outputprefix 'NORTH'
1*jFrUK-D5sualJ7mQS0MJDg.png

Запускаем сборщик, чтобы собрать все, зашифровать zip и добавить префикс.
После завершения мы увидим, что zip-файл также был создан с нашим предполагаемым префиксом. Обратите внимание на количество объектов: это число может оказаться полезным в отчете клиенту.
1*FT01vFiXkBEVt9Z3qvRjZA.png

Сбор данных для домена North.sevenkingdoms.local завершен.

Междоменная коллекция​

Чтобы собирать данные из других доменов в том же лесу, нам нужно добавить несколько дополнительных флагов. Например, нам нужно будет направить на правильный домен с помощью флага --domain. Далее мы перейдем к sevenkingdoms.localдомену, работая от имени [email protected]пользователя. Для работы эта машина должна иметь возможность разрешать домен в DNS.
# Механизм междоменного сбора (основан на доверии между доменами)
.\SharpHound.exe -c All --domain Sevenkingdoms.local --zippassword 'p@ssw0rd' --outputprefix 'SEVENKINGDOMS'

Сбор от имени другого пользователя​

Если мы находимся в лесу, но у нас нет доступа к доверенной учетной записи в отдельном домене, мы всегда можем запустить SharpHound.exeэту runas.exeкоманду.
# Запустите оболочку cmd от имени другого пользователя, затем соберите данные
runas /netonly /user:[email protected] cmd
.\SharpHound.exe -c All --domain essos.local --zippassword 'p@ssw0rd' -- выходной префикс «ESSOS»
В качестве альтернативы мы также можем указать флаги --ldapusernameи --ldappasswordдля подключения к другому домену. Это не требует, чтобы runas.exeкоманда функционировала.
# Собираем междоменную информацию с использованием аутентификации LDAP
.\SharpHound.exe -c All --domain essos.local --ldapusername khal.drogo --ldappasswordhorse --zippassword 'p@ssw0rd' --outputprefix 'ESSOS'
1*frWACaV2IykII3LQrOHFFQ.png

Сбор междоменной информации посредством аутентификации LDAP. Это получено из сеанса [email protected] для использования [email protected] для домена essos.local.

Рефлексивная загрузка SharpHound​

Сталкивались ли вы со сценарием, когда SharpHound.exe помечается как вредоносный? В некоторых сценариях мы можем обойти эти элементы управления, рефлексивно загрузив исполняемый файл C# в память, а затем выполнив точку входа ( ATT&CK ID T1620 ).
# Загрузите сборку C# в память, добавьте нужные флаги, выполните
$sh = [System.Reflection.Assembly]::Load([byte[]]([IO.FIle]::ReadAllBytes( "C:\Temp\SharpHound .Exe" )));
$cmd = "-c All --zippassword 'p@ssw0rd' --outputprefix ОТРАЖЕН"
[Sharphound.Program]::Main( $cmd .Split())
1*nrXfRPzWDe4JPkZ9MVdU2w.png

Определение типа и записи для выполнения сборщика в памяти.
Обратите внимание, что вам может потребоваться добавить переключатель --outputdirectory, чтобы гарантировать его сохранение в нужном месте.

Коллектор Python​

Далее мы можем использовать этот bloodhound.pyинструмент для сбора этой информации. Как отмечалось ранее, текущий bloodhound.pyпакет в репозиториях Kali предназначен только для Legacy BloodHound. Вам нужно будет скачать bloodhound-ce ветку с их GitHub .
# Соберите информацию с помощью сборщика Python
sudo apt install bloodhound .py
bloodhound-python -d North .sevenkingdoms .local -u hodor - p hodor -c All -op default_kali_bloodhoundpy --zip -ns 192.168 . 56.10
Поскольку нас интересуют данные для поддержки BHCE, давайте сосредоточимся на установке этой ветки и ее использовании. Мы можем клонировать эту ветку прямо из GitHub.
# Клонируйте ветку CE Bloodhound.py и выполните
git clone -b bloodhound-ce https://github.com/dirkjanm/BloodHound.py.git
Если мы не хотим уничтожать какие-либо зависимости, мы всегда можем создать контейнер, в котором все это будет выполняться. В репозитории уже присутствует Dockerfile, который мы можем использовать для его сборки.
# Создайте docker-контейнер для bloodhound.py
cd BloodHound.py
docker build -t bloodhound.

# Запустите контейнер,
docker run -v ${ PWD } :/bloodhound-data -it bloodhound
a0140a0d356a: /bloodhound-data # bloodhound-python -d North.sevenkingdoms.local -u hodor -p hodor -c All -op ce_branch_bloodhoundpy --zip -ns 192.168.56.10
1*qImFqL4kwJLvCJsDKts7_Q.png

Коллекция Bloodhound-Python по умолчанию из репозиториев Kali

Прием данных​

Теперь, когда мы смогли собирать данные, нам нужно иметь возможность их использовать. Нам нужно загрузить его в графический интерфейс, откуда он будет добавлен в базу данных Neo4j. Это можно сделать, нажав кнопку шестеренки, а затем кнопку «Администрирование».
1*V4zZd-DlGFucomNBUrN-EQ.png

Навигация для приема данных в графическом интерфейсе.
На этом этапе мы можем нажать кнопку ЗАГРУЗИТЬ ФАЙЛ(Ы), чтобы загрузить наши данные. Обратите внимание, что мы не можем загрузить zip-файл, но можем выбрать сразу несколько файлов JSON.
1*LEkPB0S2DEfF-PKcbRfMYg.png

Нажимаем кнопку ЗАГРУЗИТЬ ФАЙЛ(Ы), чтобы добавить наши данные.
Появившееся всплывающее окно позволит нам перетаскивать файлы для загрузки. Помните, что мы не можем загрузить zip-архив, но можем загрузить все файлы JSON, извлеченные из zip-архива.
1*dXnVJ_yTeRBguQwUG-I9lQ.png

Загрузка файлов JSON, извлеченных из zip-архива, созданного сборщиком.
После двойного нажатия кнопки загрузки мы вернёмся на страницу загрузки. Мы видим, что в статусе указано, что прием завершен! Мы можем продолжать загружать дополнительные данные и для других доменов в лесу.
1*bIFYa43YzYrGbrobbsf-TQ.png

После загрузки файлов и завершения загрузки.

Ошибки приема​

Одна из наиболее разочаровывающих особенностей BHCE заключается в том, что при загрузке устаревшей информации для обработки не происходит никакой обратной связи. Именно из-за этого сценария я считаю, что так много хакеров, изучающих, как использовать этот инструмент, разочаровываются и уходят.
В этом сценарии, если мы соберем информацию от сборщика Legacy Bloodhound и импортируем ее в BHCE, есть вероятность, что файлы пройдут первоначальную проверку загрузки, будут помечены как завершенные, но фактически не будут загружены.
1*k3BJVsCxtW9bAHA1kVXMCA.png

Загруженные данные отмечены как завершенные. Но подождите, где они?
Вернувшись на страницу «Обзор», мы видим, что данные по-прежнему не принимаются. Здесь легко расстроиться — ведь мы ведь загрузили данные, верно?
1*f_7bfbW8YIX6gPok25YkFQ.png

Данные не были приняты должным образом, хотя они были помечены как завершенные.
Чтобы найти это, нам нужно было зайти в журналы и docker compose logsувидеть ошибку. Это показывает, что в загруженных данных произошла ошибка демаршаллинга. Это были данные, собранные через bloodhound-pythonрепозитории Kali.
1*ta7KjCAusIXyNHUYtGn7XA.png

Демаршалинг ошибок при загрузке данных с использованием Bloodhound-Python из репозиториев Kali.
Чтобы исправить это, я бы рекомендовал использовать последние сборщики для BHCE. Мне также, безусловно, хотелось бы, чтобы графический интерфейс BHCE был обновлен, чтобы отразить эти ошибки демаршаллинга или, по крайней мере, указать, что захват не сработал успешно.

Прием через API​

Чтобы получить данные через API, мы можем прочитать документацию. Лично я этого не делаю, так как загружаю данные через GUI, однако это поддерживается.

Просмотр данных​

Раз уж вы зашли так далеко, мы можем начать изучать собранные данные! Это позволяет нам найти и понять связи между объектами в лесу и то, как их можно использовать. Для начала мы можем использовать встроенные запросы для изучения данных. Это можно сделать, нажав кнопку «САЙФЕР», а затем значок папки, чтобы открыть поиск.
1*vNg9UI46667mUJ3wtMeWCw.png

Переход к готовым поискам, чтобы начать изучение данных.
Нажатие на один из поисковых запросов, например «Все администраторы домена», добавит запрос Cypher в строку поиска и будет искать совпадения в базе данных. Результаты теперь будут на экране!
Чтобы получить подробную информацию об объекте, мы можем щелкнуть по нему, чтобы просмотреть его свойства. Это может помочь раскрыть дополнительную информацию, которую мы могли бы использовать об учетной записи или в домене.
1*Vv_qD10QcqlMtWxoazhHnQ.png

Просмотр свойств учетной записи EDDARD.STARK, нажав на нее.

Найти путь​

Чтобы найти конкретные пути от одного объекта к другому, мы можем использовать кнопку ПОИСК ПУТИ. В этом случае мы можем запросить, как пользователь samwell.tarlyможет получить доступ, Domain Adminsчтобы определить, как этот пользователь может использовать этот путь.
1*g_IUCaQPg_3Qh3-pMxOEew.png

Поиск путей между конкретными объектами в AD. Этот сценарий показывает способность учетной записи samwell.tarly перейти в группу администраторов домена.

Края​

В этом сценарии мы видим, что samwell.tarlyу него есть разрешения GenericWrite, WriteOwnerи WriteDaclдля STARKWALLPAPERобъекта групповой политики. Если мы не знаем, как это можно реализовать, мы можем щелкнуть сам край, чтобы открыть свойства на правой панели. Здесь содержится информация о границе, в том числе о том, как злоупотреблять этим разрешением на компьютерах под управлением Windows или Linux.
1*-6r2BaCJUPzNe9UNChn_Uw.png

Определение дополнительной информации о ребре, щелкнув по нему. Сюда входит и то, как злоупотреблять этим случаем на машинах под управлением Windows или Linux.
Как это круто?? Он говорит нам, что и как мы можем использовать эти края, чтобы доказать воздействие. Эти свойства также включают в себя несколько отличных ссылок, которые всегда стоит прочитать, чтобы узнать больше о конкретном сценарии злоупотребления.

Маркировка объектов как принадлежащих​

Чтобы пометить объект как принадлежащий, мы можем щелкнуть по нему правой кнопкой мыши в графическом интерфейсе. Это поместит значок черепа на их объект, что позволит нам выполнять дополнительные запросы на основе принадлежащих объектов. Это поможет нам отслеживать, как мы можем маневрировать в окружающей среде по мере того, как мы продолжаем получать доступ.
1*nBfPkTSQnkNqUxa5KK1LWw.png

Маркировка объекта как принадлежащего. Это указывает на то, что мы знаем, что можем использовать этот объект позже.
Чтобы просмотреть объекты, помеченные как принадлежащие, мы можем нажать кнопку «УПРАВЛЕНИЕ ГРУППОЙ» вверху страницы. Сначала вы заметите, что страница пуста. Нам нужно будет нажать несколько кнопок, чтобы получить правильную информацию.
1*TuMT4nf24JRQRKz9b-syEA.png

После нажатия на УПРАВЛЕНИЕ ГРУППОЙ страница становится пустой.
Начните с нажатия второй кнопки, чтобы выбрать объект для поиска. В большинстве случаев выбора «Все домены Active Directory» будет достаточно.
1*kMrypyGszfsxj-dl7B3SGQ.png

Выбор домена для просмотра в управлении группой
После этого мы можем щелкнуть верхнее раскрывающееся меню и выбрать «ВЛАДЕНИЕ».
1*YCGFvIIuTvBy-4cDp6tGcw.png

Выберите OWNED из раскрывающегося списка, чтобы увидеть все объекты, помеченные как принадлежащие.
На этом этапе мы сможем увидеть учетную запись, которую мы пометили как принадлежащую. Это может быть полезно, чтобы помочь нам отслеживать объекты по мере получения доступа, а также использовать их при составлении отчетов клиенту.
1*9J6l58BacbgY34jT3BKUIw.png

Просмотр всех объектов, помеченных как принадлежащие в рамках управления группой.

Шифрованные запросы​

Хотя предварительно созданные поисковые запросы помогут быстро увидеть интересные элементы, во многих случаях нам нужно будет найти что-то, что не охвачено этими поисками. Чтобы решить эту проблему, мы можем создавать собственные запросы, отправляемые в базу данных Neo4j. Таким образом мы можем проверить, что поиск работает так, как мы хотим, а затем сохранить его в пользовательском поиске.
Лично я считаю, что в предварительно созданных запросах BHCE отсутствуют некоторые важные поисковые запросы, помогающие сопоставлять принадлежащие объекты и ценные цели. В BHCE и Legacy это обрабатывается по-разному, и для этого требуются специальные запросы в Cypher. Способ перечисления всех принадлежащих объектов в BHCE приведен ниже:
СОВПАДЕНИЕ (n) ГДЕ «принадлежит» в n.system_tags ВОЗВРАТ n
Его можно поместить на панель запросов Cypher, нажать «Поиск» и просмотреть все принадлежащие объекты. Обратите внимание, что на изображении ниже объекты «Пользователь» и «Компьютер» принадлежат друг другу, но не имеют пути друг к другу в результате этого поиска.
1*9r03CNGDO3EUn7jRFnDVfQ.png

Перечисление всех принадлежащих объектов с помощью специального шифровального запроса
Вот несколько полезных запросов, которые я использовал в прошлом и которые помогли мне найти неправильные конфигурации:
# Найти все неограниченное делегирование из контроллеров домена, не являющихся контроллерами домена.
MATCH ( c1 :Computer)-[:MemberOf* 1 ..]->(g:Group) WHERE g.objectid ЗАКАНЧИВАЕТСЯ на '-516' With COLLECT (c1.name) AS DomainControllers MATCH (c2 { unconstraineddelegation : true }) WHERE NOT c2.name В доменных контроллерах RETURN c2

# Найти пользователей с «pass» в описании
MATCH p = (d:Domain)-[r:Contains* 1 ..]->(u :User) WHERE u.description =~ '(?i).*pass.*' RETURN p

# Перечислить все принадлежащие объекты
MATCH (n) WHERE "owned" в n.system_tags RETURN n

# Найти все пути от владения до уровня 0 объекты (Предупреждение, могут быть тяжелыми)
MATCH p = allShortestPaths ((o)-[* 1 ..]->(h)) WHERE 'owned' в o.system_tags И 'admin_tier_0' в h.system_tags RETURN p
Если вы хотите узнать больше, в документации BloodHound есть несколько замечательных ресурсов о том, как создавать и понимать подробные запросы Cypher:

Пользовательский поиск​

Если нас устраивает то, как работает поиск, и мы хотим сохранить его для дальнейшего использования, мы можем сохранить его с помощью кнопки «Сохранить запрос». Это заполнит категорию «Пользовательский поиск» внутри того же значка папки для дальнейшего использования.
1*iOTgbZRsQTRIXJoZwZKZLA.png

Сохранение пользовательского поиска, чтобы продолжить его позже.
Однако на данный момент, похоже, не существует способа загрузки пользовательских запросов с диска, аналогичного BloodHound Legacy. Эта проблема несколько раз рассматривалась в BloodHound Slack, предлагая вместо этого использовать API.
1*zpSUxfvPKFjxLSJf6cCQ5A.png

Рад знать, что я не единственный с такой проблемой
Тем не менее, мы можем использовать документацию API, чтобы попытаться выяснить, что нам нужно делать. Приятно отметить, что есть несколько разных вещей, которые мы можем использовать для чтения и размещения в системе новых, сохраненных пользователем запросов.
1*gHr6ERqMK_aQKwJ6f9cGOQ.png

Что касается их фактической загрузки, мы можем использовать команду curlниже, чтобы создать ее, загруженную в графический интерфейс. Обратите внимание, что вам понадобится ваш JWT.
curl -X 'POST ' \
'http : //localhost:8080/api/v2/saved-queries' \
-H 'accept : application/json' \
-H 'Content -Type: application/json' \
-H ' Авторизация : Носитель {{токен}}' \
-d '{ "имя" : "Новый запрос через API" , "запрос" : "ЦИФРОВОЙ КОД ЗДЕСЬ" }'
Это здорово — загрузить один или два запроса, но было бы ужасно делать это для сотен из них. Поэтому вместо этого давайте воспользуемся нашими навыками написания сценариев на Python. Пожалуй, напишу об этом в следующем посте в блоге 😁

Веб-консоль Neo4j​

Если нам понадобится прямой доступ к веб-консоли Neo4j, мы можем сделать это, перейдя по адресу http://localhost:7474 . В большинстве сценариев в этом нет необходимости, если только нам не нужен прямой доступ к базе данных. Это веб-интерфейс для базы данных Neo4j, который позволит нам выполнять необработанные шифрованные запросы и просматривать данные. Войдите в это приложение, используя neo4j:bloodhoundcommunityeditionучетные данные по умолчанию в docker-compose.ymlфайле.
1*QalBjCBwre287m6IiivO_g.png

Подключение к веб-браузеру Neo4j.
Мы можем поместить необработанные запросы в приглашение и просмотреть результаты, а также все свойства каждого возвращаемого объекта.
1*wJjI1l-AtVv5-mSO_4_hjw.png

Просмотр свойств возвращаемых объектов в веб-консоли Neo4j.
Это может помочь нам создавать и отлаживать пользовательские запросы для BHCE. Опять же, в большинстве сценариев доступ к веб-консоли Neo4j, как правило, не нужен, но при необходимости полезно иметь резервную копию!

Пример данных BHCE​

Мне было трудно найти примеры данных для BHCE в Интернете. Кажется, существует значительный объем выборочных данных для устаревшей версии BloodHound, но для BHCE их сложнее найти. Чтобы решить эту проблему, я создал репозиторий образцов данных из диапазона GOADv2.
Эти данные можно скачать из репозитория ниже:

Очистка данных​

В большинстве консалтинговых сред нам необходимо обязательно очистить данные BloodHound, чтобы данные были разделены между клиентами. В самой последней версии BloodHound 5.8.0 это теперь можно сделать полностью с помощью графического интерфейса.
1*J-rrh2hjO6-mRJ9utVaS5w.png

Возможность очистки данных непосредственно из графического интерфейса теперь существует начиная с версии 5.8.0.
До версии 5.8.0 нам нужно было удалить том, используемый BloodHound, чтобы очистить это. Я оставил эти инструкции здесь на случай, если кому-то еще понадобится знать, как это сделать, это также задокументировано в выпуске № 107 для BHCE .
Начнем с перечисления томов, используемых Docker:
# Выводим список томов docker
docker Volume ls
Среди этих данных мы видим два тома, связанных с BloodHound.
1*6-PsCugzOf5qwMgIuwuv6Q.png

Определение тома Neo4j, используемого BloodHound
Чтобы удалить эти данные и получить новый экземпляр данных BloodHound, нам необходимо удалить этот том. Обратите внимание, что bloodhound_postgres-dataтом используется для входа в графический интерфейс и веб-приложение. Обычно мы не хотим это удалять, если только вы не хотите, чтобы все было сброшено.
Давайте удалим этот том, чтобы сбросить данные. Мы воспользуемся командой ниже, чтобы попросить докера удалить этот том.
Чтобы упростить задачу, мы можем выполнить все это в одной строке.
том докера rm $(том докера ls -q | grep neo4j-data)

Обстрелять все​

Если вы хотите уничтожить все и получить новую копию всех контейнеров, томов и конфигураций, следуйте этим инструкциям. Предполагается, что у вас есть docker-compose.ymlфайл в рабочем каталоге.
Нам нужно сначала разобрать контейнеры и удалить тома с помощью команды ниже:
# Удалить контейнеры и тома
docker-compose down -v
После этого мы можем получить новую копию контейнеров с помощью команды pull.
# Получите последнюю и лучшую версию контейнеров
docker-compose pull
Дальше мы можем запускать контейнеры как обычно, и у нас должна быть самая последняя версия контейнеров! Обратите внимание, что вам нужно будет снова установить первоначальный пароль, поскольку мы удалили предыдущие тома.
# Запустите их обратно!
докер-составить

Остановка контейнеров​

Остановить контейнеры очень просто: мы можем просто попросить докера остановить их. Это остановит контейнеры от обслуживания приложения.
# Остановить работающие контейнеры
docker compose stop
1*1IXXMwFgA9Gzksiw9tX3mQ.png

Остановка контейнеров, ничего особенного.

Выставление напоказ другим​

Во многих консалтинговых средах мы хотим предоставить доступ к нашему экземпляру BHCE другим, чтобы все они могли подключиться к одному экземпляру. По умолчанию BHCE доступен только локальному хосту. Для этого нам нужно изменить файл, docker-compose.ymlчтобы сделать его доступным для других.
Изменив строку ниже в bloodhoundслужбе, мы можем указать Docker Compose предоставлять графический интерфейс для интерфейсов, отличных от localhost. Это здорово, если мы планируем использовать один сервер для одновременного использования многими пентестерами.
1*uoXdeqkQx02Q58289orFxA.png

Если мы хотим сделать это доступным для всех интерфейсов, измените BLOODHOUND_HOSTнастройку на 0.0.0.0. Обратите внимание, что это откроет доступ к Интернету, если у вас есть доступ к этому серверу из Интернета! Вместо этого обычно лучше привязать его только к интерфейсу VPN, например к интерфейсу WireGuard, чтобы ограничить воздействие.
1*qUpL4KNOV_pxuMPK2TXZEA.png

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

Ускорение​

Если вы меня знаете, то знаете, что я живу для того, чтобы ускорять процессы и делать вещи лучше. Так как же нам использовать это, чтобы ускорить работу?

AD Мины​

Набор инструментов AD-Miner использует данные Neo4j для поиска многих известных рисков и путей эскалации, а затем представляет эти результаты в HTML-файле с общей оценкой.
Мы можем запустить это, сначала установив AD-Minerинструмент, а pipxзатем предоставив информацию для подключения к базе данных Neo4j — эти учетные данные хранятся в файле docker-compose.yml. По умолчанию они есть neo4j:bloodhoundcommunityedition. Обратите внимание: это пароль к базе данных Neo4j, а не к графическому интерфейсу BHCE!
# Установить через pipx
pipx install 'git+https://github.com/Mazars-Tech/AD_Miner.git'

# Создать отчет AD-Miner, используя учетные данные BHCE по умолчанию
AD-miner -u neo4j -p bloodhoundcommunityedition -cf GOAD
1*zO1LYAHQZhxQAIdWzQ16Yw.png

Запуск инструмента сбора и анализа AD-miner для создания HTML-файла.
Это может занять много времени в зависимости от размера среды — в некоторых доменах мне приходилось ждать более 2 часов! Как только это будет завершено, файлы окажутся в папке, названной render_GOADв соответствии с меткой, указанной в -cfпереключателе. Мы можем найти этот HTML-файл в созданной папке.
1*3afWGuZyjpeuyx_9VVVVpA.png

Поиск HTML-файла для анализа AD-Miner
1*Ymsg-x55shDDqL8hgxp1fg.png

Анализ GOAD на основе данных Neo4j
Как это круто? Теперь у нас есть интерактивная панель мониторинга, которая обращает наше внимание на наиболее критические ошибки конфигурации. Мы можем использовать всю эту информацию, чтобы помочь клиентам и окружающей среде снизить риски и риски.
AD-Miner — это фантастический инструмент, помогающий обеспечить дополнительный анализ и обогащение данных BloodHound — обязательно проверьте его!

Загрузка сохраненных запросов​

Поскольку мы знаем, что существует множество запросов, которые мы хотим изучить, которых нет в предварительно созданных запросах, мы можем загрузить их через API. Опять же, возможно, я напишу об этом позже в качестве следующего поста 😁

Выводы​

Хотя это было довольно подробно, надеюсь, это было полезно! Я видел слишком много аналитиков, которые либо разочаровывались, не зная, как использовать этот удивительный инструмент, либо не использовали его потенциал. Используйте его, изучайте и любите.
Это, конечно, было бы невозможно без усилий разработчиков и технического совершенства со стороны
SpectreOps
команда! Огромное спасибо команде AD-Miner из Mazars за их инструмент. Без набора для анализа GOAD это было бы намного сложнее , спасибо Mayfly за эту работу!
 
Независимый арбитраж: В случае возникновения споров или несоответствия товара описанию, сервис выступает в качестве арбитра, принимая объективное решение на основе заранее оговоренных условий.
Назад
Сверху