Skip to main content

BloodHound Community Edition (BHCE) Guide

·3191 words·15 mins·
Author
FaLLenSkiLL
Table of Contents

Эта статья является русскоязычной адаптацией оригинальной статьи, с который вы можете ознакомится перейдя по ссылке.

Pasted image 20240416035630.png

Введение
#

Я сталкивался со многими хакерами, которые хотели бы научиться использовать BloodHound, но по каким либо причинам не могут начать. В результате они теряются и разочаровываются.

В этой статье я расскажу о настройке, сборе данных, их анализе и предоставлении связей на основе этих данных. В качестве образца данных для сбора и анализа будет использован лес GOADv2. Я уже собрал несколько образцов данных и поместил их в репозиторий для анализа и практической работы.

Огромная благодарность SpecterOps за создание BloodHound и предоставление его сообществу!

Зачем это все
#

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

Если вы хотите, чтобы вам платили за эту работу, вы должны уметь эффективно представлять эти риски в письменном виде!

Background
#

BloodHound был разработан компанией SpecterOps как способ визуализации отношений между объектами в 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.py не поддерживает BloodHound-CE. Вы должны использовать ветку bloodhound-ce коллектора bloodhound.python, если решите использовать его. Не стоит смешивать устаревшие коллекторы с коллекторами Community Edition - это приведет к сбою при вводе (а это очень неприятно!).

Фронтенд
#

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

Ввод данных
#

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

API
#

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

Устаревшая версия BloodHound
#

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

Начало работы
#

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

Запуск контейнеров
#

Community Edition использует docker compose через набор контейнеров. Это значительно упрощает запуск и управление инфраструктурой для BloodHound, поскольку все контейнеры находятся в сети docker.

Нам нужно лишь загрузить файл docker-compose.yml и дать команду docker на сборку контейнеров.

wget https://raw.githubusercontent.com/SpecterOps/bloodhound/main/examples/docker-compose/docker-compose.yml -O docker-compose.yml  
docker-compose up

image_2024-04-16_02-32-34.png

Pasted image 20240416023055.png

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

image_2024-04-16_12-33-17.png

Скопируйте этот пароль и перейдите по адресу http://localhost:8080, чтобы войти в графический интерфейс. Пользователем будет admin.

Pasted image 20240416015734.png

Когда вы войдете в систему, вам будет предложено изменить пароль.

Pasted image 20240416015802.png

Причем легкий пароль вам поставить не позволят.

image_2024-04-16_12-35-06.png

Отлично, мы вошли. Но подождите, здесь нет данных! Как же нам приступить к анализу? Сначала нам нужно загрузить коллекторы.

image_2024-04-16_12-36-35.png

Сбор данных
#

У нас есть несколько способов сделать это. Мы можем использовать коллекторы SharpHound.exe C#, PowerShell или Python для сбора этой информации.

Чтобы получить копию поддерживаемых коллекторов, мы можем загрузить их прямо из графического интерфейса BHCE. Щелкните на шестеренке, а затем на “Загрузить коллекторы”. Откроется страница, на которой мы можем загрузить коллектор.

image_2024-04-16_12-37-35.png

Pasted image 20240416015830.png

После распаковки мы можем запустить этот инструмент сбора на удаленном хосте. Выберите удобный для вас способ выполнения этой операции, будь то маяк для последовательного выполнения или интерактивная RDP-сессия.

Коллектор на C#
#

Использование SharpHound.exe очень простое - мы можем просто запустить его без каких-либо дополнительных флагов, и он с радостью соберет стандартную информацию о текущем домене с текущим пользователем.

.\SharpHound.exe

Чтобы собрать всю доступную информацию, мы можем указать флаг -c All. Это позволит получить такие сведения, как информация ADCS, RDP и DCOM. Однако в больших средах сбор всей информации может привести к перегрузке машины - имейте это в виду!

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

.\SharpHound.exe -c All --zippassword 'p@ssw0rd' --outputprefix 'NORTH'

Pasted image 20240416015923.png

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

Pasted image 20240416015937.png

Междоменный сбор данных
#

Чтобы собрать данные из других доменов в том же лесу, нам нужно добавить несколько дополнительных флагов. Например, с помощью флага --domain нам нужно будет направиться в нужный домен. Далее мы переключимся на домен sevenkingdoms.local, работая от имени пользователя hodor@north.sevenkingdoms.local. Для работы эта машина должна быть способна разрешить домен в DNS.

.\SharpHound.exe -c All --domain sevenkingdoms.local --zippassword 'p@ssw0rd' --outputprefix 'SEVENKINGDOMS'

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

Если мы находимся в лесу, но у нас нет доступа к учетной записи, доверенной в отдельном домене, мы всегда можем запустить SharpHound.exe с помощью команды runas.execommand.

runas /netonly /user:khal.drogo@essos.local cmd  
.\SharpHound.exe -c All --domain essos.local --zippassword 'p@ssw0rd' --outputprefix 'ESSOS'

В качестве альтернативы можно указать флаги --ldapusername и --ldappassword для подключения к другому домену. Это не требует работы команды runas.exe.

.\SharpHound.exe -c All --domain essos.local --ldapusername khal.drogo --ldappassword horse --zippassword 'p@ssw0rd' --outputprefix 'ESSOS'

Pasted image 20240416020054.png

Reflectively Loading SharpHound
#

Сталкивались ли вы с ситуацией, когда файл SharpHound.exe отмечается средствами обнаружения как вредоносный? В некоторых сценариях мы можем обойти этот контроль, загрузив исполняемый файл C# в память, а затем выполнив точку входа (ATT&CK ID T1620).

$sh = [System.Reflection.Assembly]::Load([byte[]]([IO.FIle]::ReadAllBytes("C:\Temp\SharpHound.exe")));  
$cmd = "-c All --zippassword 'p@ssw0rd' --outputprefix REFLECTED"  
[Sharphound.Program]::Main($cmd.Split())

Pasted image 20240416020120.png

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

Python Collector
#

Далее мы можем использовать инструмент bloodhound.py для сбора и этой информации. Как отмечалось ранее, текущий пакет bloodhound.py в репозиториях Kali предназначен только для Legacy BloodHound. Вам нужно загрузить ветку bloodhound-ce с их GitHub.

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.

git clone -b bloodhound-ce https://github.com/dirkjanm/BloodHound.py.git

Если мы не хотим устанавливать зависимости, мы всегда можем создать контейнер для запуска. В репозитории уже есть Dockerfile, который мы можем использовать для сборки.

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

Pasted image 20240416020218.png

Сбор данных
#

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

Pasted image 20240416020233.png

На этом этапе мы можем нажать кнопку UPLOAD FILE(S), чтобы загрузить наши данные. Обратите внимание, что мы не можем загрузить zip-файл, но мы можем выбрать несколько JSON-файлов одновременно.

Pasted image 20240416020250.png

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

Pasted image 20240416020305.png

После двойного нажатия на кнопку загрузки мы вернемся на страницу загрузки. Мы видим, что в статусе указано, что загрузка завершена! Мы можем продолжить загрузку дополнительных данных для других доменов в лесу.

Pasted image 20240416020320.png

Ошибки Ingest
#

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

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

Pasted image 20240416020340.png

Вернувшись на страницу Explore, мы видим, что данные все еще не получены. Здесь легко расстроиться - в конце концов, мы же загрузили данные, верно?

Pasted image 20240416020354.png

Чтобы обнаружить это, нам пришлось заглянуть в журналы с помощью docker compose logs, чтобы увидеть ошибку. Здесь показано, что произошла ошибка размаршалинга (процесса преобразования сериализованных данных, часто в определенном формате, например JSON, XML или бинарном, обратно в исходный объект или загруженные данные).

Такое случилось с данными, собранными с помощью bloodhound-python из репозитория Kali.

Pasted image 20240416020400.png

Чтобы исправить это, я бы рекомендовал использовать последние версии коллекторов для BHCE. Я также хотел бы, чтобы графический интерфейс BHCE был обновлен, чтобы отразить эти ошибки размаршалинга или, по крайней мере, предоставить индикацию того, что Ingest не был успешно выполнен.

Ввод данных через API
#

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

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

Раз уж вы зашли так далеко, мы можем приступить к изучению собранных данных! Это позволит нам найти и понять взаимосвязи между объектами в лесу и то, как их можно использовать. Для начала мы можем использовать встроенные запросы для изучения данных. Для этого нужно нажать на кнопку CYPHER, затем на значок папки, чтобы открыть запросы.

Pasted image 20240416020433.png

Щелкнув на одном из поисковых запросов, например “Все администраторы домена”, вы добавите запрос Cypher в строку поиска и поищите совпадения в базе данных. Результаты теперь будут на экране! Чтобы получить подробную информацию об объекте, мы можем щелкнуть на нем, чтобы просмотреть его свойства. Это поможет найти дополнительную информацию об учетной записи или домене.

Pasted image 20240416020452.png

Поиск векторов атаки
#

Чтобы найти конкретные пути от одного объекта к другому, мы можем использовать кнопку PATHFINDING. В данном случае мы можем запросить, как пользователь samwell.tarly может получить доступ к администраторам домена, чтобы определить, как этот пользователь может использовать этот путь.

Pasted image 20240416020505.png

Edges
#

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

Pasted image 20240416020521.png

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

Пометка объектов “Owned”
#

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

Pasted image 20240416020536.png

Чтобы просмотреть объекты, помеченные как Owned, мы можем нажать на кнопку “GROUP MANAGEMENT” в верхней части страницы. Вы заметите, что сначала страница будет пустой, и нам придется нажать несколько кнопок, чтобы получить нужную информацию.

Pasted image 20240416020554.png

Начните с нажатия второй кнопки, чтобы выбрать сущность для поиска. В большинстве случаев достаточно выбрать “Все домены Active Directory”.

Pasted image 20240416020612.png

После этого мы можем нажать на верхнее выпадающее меню и выбрать “OWNED”.

Pasted image 20240416020627.png

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

Pasted image 20240416020643.png

Запросы Cypher
#

Хотя готовые поисковые запросы помогут быстро найти интересные объекты, нередки случаи, когда нам нужно найти что-то, не охваченное этими запросами. Чтобы решить эту проблему, мы можем создавать собственные запросы, отправляемые в базу данных Neo4j. Так мы можем убедиться, что поиск работает именно так, как мы задумали, и впоследствии сохранить его в пользовательском поиске.

Лично я считаю, что в готовых запросах BHCE не хватает некоторых критически важных операций поиска, которые помогают сопоставить принадлежащие объекты с ценными целями. В BHCE и Legacy это решается по-другому, и для этого требуются специальные запросы в Cypher. Ниже приведен способ получения списка всех принадлежащих объектов в BHCE:

MATCH (n) WHERE "owned" in n.system_tags RETURN n

Его можно поместить в панель запросов Cypher, нажать кнопку поиска и увидеть все захваченные объекты. Обратите внимание, что на изображении ниже объекты User и Computer захвачены, но не имеют пути друг к другу из этого поиска.

Pasted image 20240416020714.png

Вот несколько полезных запросов, которые я использовал в прошлом и которые помогли мне найти неправильную конфигурацию:

Найти все неограниченные делегирования от не-DC

MATCH (c1:Computer)-[:MemberOf*1..]->(g:Group) WHERE g.objectid ENDS WITH '-516' WITH COLLECT(c1.name) AS domainControllers MATCH (c2 {unconstraineddelegation:true}) WHERE NOT c2.name IN domainControllers RETURN c2  

Найдите пользователей, в описании которых есть слово “pass”.

MATCH p = (d:Domain)-[r:Contains*1..]->(u:User) WHERE u.description =~ '(?i).*pass.*' RETURN p  

Список всех захваченных объектов

MATCH (n) WHERE "owned" in n.system_tags RETURN n  

Найдите все пути от владения к объектам уровня 0

MATCH p = allShortestPaths((o)-[*1..]->(h)) WHERE 'owned' in o.system_tags AND 'admin_tier_0' in h.system_tags RETURN p

Если вы хотите узнать больше, в документации BloodHound есть несколько фантастических ресурсов о том, как создавать и понимать глубокие запросы Cypher: Поиск с помощью Cypher - BloodHound (bloodhoundenterprise.io)

Пользовательские запросы
#

Когда мы хотим сохранить результаты поиска для дальнейшего использования, мы можем сохранить его с помощью кнопки “Save Query”. Это приведет к появлению категории “Пользовательские поиски” в той же иконке папки для последующего использования.

Pasted image 20240416020808.png

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

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

Pasted image 20240416020838.png

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

Если нам понадобится прямой доступ к веб-консоли Neo4j, мы можем зайти в нее, перейдя по адресу http://localhost:7474. Для большинства сценариев в этом нет необходимости, если только нам не нужен прямой доступ к базе данных.

Это веб-интерфейс для базы данных Neo4j, который позволит нам выполнять необработанные запросы к шифру и просматривать данные. Зайдем, используя дефолтные учетные данные neo4j:bloodhoundcommunityedition

Pasted image 20240416020923.png

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

Pasted image 20240416020938.png

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

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

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

Pasted image 20240416020955.png

До версии 5.8.0 нам нужно было удалить том, используемый BloodHound, чтобы очистить его. Я оставил здесь эти инструкции на случай, если кому-то еще понадобится знать, как это сделать, это также описано в выпуске #107 для BHCE.

Для начала давайте перечислим тома, используемые докером:

docker volume ls

В этих данных мы видим два тома, связанных с BloodHound.

image_2024-04-16_13-33-16.png

Определение тома Neo4j, используемого BloodHound

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

Давайте удалим этот том, чтобы сбросить данные. Мы используем приведенную ниже команду, чтобы попросить docker удалить этот том.

Чтобы упростить задачу, мы можем выполнить все это одной командой.

docker volume rm $(docker volume ls -q | grep neo4j-data)

Удалить все
#

Если вы хотите удалить все и получить свежую копию всех контейнеров, томов и конфигураций, следуйте этим инструкциям. Предполагается, что файл docker-compose.yml находится в рабочей директории.

Сначала нам нужно снести контейнеры и удалить тома с помощью следующей команды:

docker-compose down -v

После этого мы можем извлечь свежую копию контейнеров с помощью команды pull.

docker-compose pull

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

Остановить контейнеры очень просто: мы можем просто попросить docker остановить их.

docker compose stop

Pasted image 20240416021156.png

Предоставление другим пользователям
#

Во многих средах мы захотим поделиться нашим экземпляром BHCE с другими, чтобы все они могли подключиться к одному экземпляру. По умолчанию BHCE открыт только для localhost. Чтобы добиться этого, нам нужно изменить файл docker-compose.yml, чтобы открыть его для других.

Изменив приведенную ниже строку в службе bloodhound, мы можем указать Docker Compose открывать графический интерфейс для интерфейсов, отличных от localhost. Это очень удобно, если мы планируем использовать один сервер для одновременного использования многими пентестерами.

Pasted image 20240416021212.png

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

Pasted image 20240416021230.png

Ускорение процесса
#

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

AD-Miner
#

Инструментарий 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

Pasted image 20240416021253.png

Это может занять много времени в зависимости от размера среды - в некоторых доменах мне приходилось ждать более 2 часов! После завершения процесса файлы будут находиться в папке render_GOAD, используя метку, указанную в ключе -cf. Мы можем найти этот HTML-файл в созданной папке.

Pasted image 20240416021306.png

Pasted image 20240416021310.png

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

AD-Miner - это фантастический инструмент для дополнительного анализа и обогащения данных BloodHound - обязательно ознакомьтесь с ним!

References
#

Tags:

#AD #Bloodhound