
AD Miner — это инструмент аудита Active Directory, который использует запросы Cypher для обработки данных из графовой базы данных #Bloodhound с целью выявления уязвимостей безопасности.
Возможности веб-отчётов:
Рейтинг уязвимостей Active Directory на основе риска, а также комплексные пути смягчения.
Строка поиска и элементы управления, тщательно настроенные для выявления наиболее рискованных неправильных конфигураций.
Вы также можете наблюдать показатели с течением времени, чтобы оценить эффективность смягчения.
AD Miner изначально создан компанией Forvis Mazars и поддерживается командой по аудиту и консультированию в области кибербезопасности Grant Thornton.
Для запуска AD Miner сначала необходима база данных neo4j, содержащая объекты Active Directory:
[!CAUTION] Мы настоятельно рекомендуем использовать BloodHound Automation, поскольку он устанавливает плагин Graph Data Science для Neo4j, который :
- значительно улучшает время вычислений и общую производительность.
- позволяет использовать Smartest Path вместо встроенного Neo4j shortestPath() (т.е. пути, которые легче эксплуатировать, а не с наименьшим количеством переходов между узлами).
Для настройки среды BloodHound (включая GUI и базу данных Neo4j) настоятельно рекомендуется использовать BloodHound Automation из-за его бесшовной интеграции с плагином Graph Data Science. Хотя можно использовать стандартную установку BloodHound CE, имейте в виду, что вы упустите преимущества GDS (например, более умный поиск путей, улучшенная скорость выполнения и т.д.).
По умолчанию BloodHound создаёт базу neo4j, доступную на порту 7687.
Самый простой способ — выполнить следующую команду с помощью pipx:
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner также доступен в некоторых дистрибутивах Linux:
pacman -S ad-minernix-env -iA nixos.ad-minerДоступен образ Docker для сборки. Соберите образ следующей командой:
docker build -t ad-miner .
Чтобы запустить это в Windows с данными BloodHound Community Edition, используйте команды ниже:
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Чтобы запустить это в Linux с данными BloodHound Community Edition, используйте команды ниже:
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Обратите внимание, что монтирование тома с помощью -v критически важно для получения выходных данных. Подразумевается, что сервер BHCE запущен на хосте Docker с настройками по умолчанию.
Запустите инструмент:
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
Пример:
AD-miner -cf My_Report -u neo4j -p mypassword
Кэш-файлы создаются после завершения каждого запроса к Neo4j. Эта функция позволяет приостановить или остановить AD Miner в любой момент процесса без потери ранее вычисленных результатов. Чтобы использовать кэш, используйте параметр -c. Кэш-файлы хранятся в папке cache_neo4j в вашем текущем репозитории. Для использования кэша имя отчёта должно совпадать с префиксом имени кэш-файла:
AD-miner -c -cf My_Report -u neo4j -p mypassword
Для лучшей обработки больших наборов данных можно включить многопоточность, а также использовать кластер баз данных neo4j, как показано в следующем примере (где server1 обрабатывает 32 потока, а server2 — 16):
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
Если политика смены паролей известна, вы можете указать её с помощью параметра -r, чтобы убедиться, что проверки смены паролей соответствуют настройкам вашей среды (по умолчанию 90 дней). Например, если политика паролей установлена на 180 дней, используйте следующее:
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] Пароль по умолчанию для базы данных neo4j Bloodhound CE —
bloodhoundcommunityeditionилиneo5j, если вы используете BloodHound Automation
Параметры:
-h, --help показать это справочное сообщение и выйти
-b BOLT, --bolt BOLT Подключение Neo4j bolt (по умолчанию: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Имя пользователя Neo4j (по умолчанию: neo4j)
-p PASSWORD, --password PASSWORD
Пароль Neo4j (по умолчанию: bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
Дата извлечения (например, 20220131). По умолчанию: последняя дата входа в систему
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
Политика смены пароля в днях. По умолчанию: 90
-c, --cache Использовать локальный файл для данных neo4j
-l LEVEL, --level LEVEL
Рекурсивный уровень для запросов путей
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
Используемый кэш-файл (в случае нескольких файлов кэша разных компаний)
--gpo_low Выполнить более быстрый, но неполный запрос для GPO (быстрее обычного запроса)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
Количество чанков для параллельных запросов к Neo4j. По умолчанию: 20 * количество ЦП
-co NB_CORES, --nb_cores NB_CORES
Количество ядер для параллельных запросов к Neo4j. По умолчанию: количество ЦП
--rdp Включить ребро CanRDP в графах
--evolution EVOLUTION
Эволюция с течением времени: расположение файлов данных JSON. например '../../tests/'
--cluster CLUSTER Узлы кластера для выполнения параллельных запросов к Neo4j. например host1:port1:nCore1,host2:port2:nCore2,...
На страницах графиков вы можете щелкнуть правой кнопкой мыши по узлам графика, чтобы сгруппировать их или открыть кластер.
Если у вас есть несколько отчётов AD-Miner за разные периоды, вы можете легко отслеживать эволюцию с помощью аргумента --evolution: каждый отчёт AD-Miner генерирует файл данных JSON вместе с файлом index.html. Вам просто нужно собрать эти различные JSON-файлы в одну папку и указать путь к этой папке после аргумента --evolution.
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
На главной странице появляется вкладка «Эволюция с течением времени», предоставляющая графики эволюции для каждой категории (Разрешения, Пароли, Kerberos и Разное).
Детальная эволюция для каждой проверки также доступна и может быть получена через кнопку «Показать эволюцию» для каждой категории. Доступна логарифмическая шкала для лучшего выделения тонких изменений с течением времени.
AD Miner может вычислять пути на основе их фактической эксплуатируемости. Действительно, иногда кратчайший путь трудно использовать (здесь из-за ExecuteDCOM перед HasSession).
В то время как существует более длинный, но более простой путь (здесь с MemberOf и AdminTo вместо ExecuteDCOM).
AD Miner автоматически переключается в режим самых умных путей, когда в вашей базе данных neo4j установлен плагин Graph Data Science (https://neo4j.com/docs/graph-data-science/current/). Самый простой способ установить этот плагин — определить переменную среды в вашем docker neo4j: NEO4J_PLUGINS=["graph-data-science"] (по умолчанию он установлен вместе с BloodHound Automation).
В настоящее время 10 проверок используют полное покрытие графа и оптимизируют самые умные пути для анализа.
Ниже приведён список проверок, которые уже реализованы в AD Miner:
Узнайте, как внести свой вклад, здесь.
| Категория | Описание | Категория | Описание |
|---|
| Kerberos | Учётные записи, уязвимые для AS-REP Roasting | Разное | Компьютеры с устаревшей ОС | |
| Kerberos | Kerberoastable учётные записи | Разное | Неактивные учётные записи | |
| Kerberos | Ограниченное делегирование Kerberos | Разное | Функциональный уровень домена | |
| Kerberos | Kerberos RBCD против компьютеров | Разное | Компьютеры-призраки | |
| Kerberos | Неограниченные делегирования Kerberos | Разное | Группы без участников | |
| Kerberos | Старый пароль KRBTGT | Разное | Подразделения без участников | |
| Kerberos | Теневые учётные данные на привилегированных учётных записях | Разное | Теневые учётные данные на контроллерах домена | |
| Kerberos | Теневые учётные данные на обычных учётных записях | Разное | Неожиданный PrimaryGroupID | |
| Пароли | Доступ к паролям LAPS | Разное | Пользователи FGPP | |
| Пароли | Компьютеры без LAPS | Разрешения | Аномалии ACL | |
| Пароли | Объекты могут читать пароли GMSA администраторов | Разрешения | Узкие места путей атак | |
| Пароли | Обход требований к паролю | Разрешения | Компьютеры, являющиеся администраторами других компьютеров | |
| Пароли | Пользователи с паролями в открытом виде | Разрешения | Междоменные пути к администраторам домена | |
| Пароли | Пользователи со старыми паролями | Разрешения | Гостевые учётные записи | |
| Пароли | Пользователи без срока истечения пароля | Разрешения | Недостаточный доступ к привилегиям DCSync | |
| Разрешения | Неадекватные настройки AdminCount | Разрешения | Недостаточные привилегии для изменения GPO | |
| Разрешения | Недостаточное число администраторов домена | Разрешения | Учётные записи компьютеров с недостаточными привилегиями | |
| Разрешения | Учётные записи компьютеров с недостаточными привилегиями | Разрешения | Нетиер-0 локальные привилегии администратора на ADCS | |
| Разрешения | Объекты с историей SID | Разрешения | Пути к DNS-администраторам | |
| Разрешения | Пути к администраторам домена | Разрешения | Пути к группам операторов | |
| Разрешения | Пути к организационным единицам (OU) | Разрешения | Пути к серверам | |
| Разрешения | Пути к контейнеру AdminSDHolder | Разрешения | Группа «Pre-Windows 2000 Compatible Access» | |
| Разрешения | Привилегированная учётная запись вне группы Protected Users | Разрешения | RDP-доступ (компьютеры) | |
| Разрешения | RDP-доступ (пользователи) | Разрешения | Нарушение tier-0 (сессии) | |
| Разрешения | Пользователи с мощными междоменными привилегиями | Разрешения | Пользователи с локальными привилегиями администратора |
| Категория | Описание | Категория | Описание |
|---|
| Entra ID Разное | Неактивные учётные записи Azure | Entra ID MS Graph | Прямые контроллеры MS Graph | |
| Entra ID Пароли | Привилегии сброса пароля Entra ID | Entra ID MS Graph | Учётные записи Entra ID, не синхронизированные с локальной средой | |
| Entra ID Пароли | Несогласованное последнее изменение пароля | Entra ID MS Graph | Синхронизированные учётные записи с отключенной двойной учётной записью | |
| Entra ID Разрешения | Доступ к привилегированным ролям Entra ID | Entra ID Разрешения | Привилегированные учётные записи как в локальной среде, так и в Azure | |
| Entra ID Разрешения | Кросс-путь локальная среда/Entra ID к tier-0 | Entra ID Разрешения | Пользователи, возможно связанные с AADConnect | |
| Entra ID Разрешения | Пользователи Entra ID с путём к высокоценным целям |