Enumerating Active Directory, part 2
@cherepawwkaВсем привет!
Это вторая часть статьи, посвященной перечислению Active Directory.

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

Bloodhound
Наконец, рассмотрим перечисление AD при помощи Bloodhound . Bloodhound — самый мощный инструмент для перечисления AD на сегодняшний день.
История Bloodhound
В течение значительного времени красные команды (и, к сожалению, реальные атакующие) успешно добивались успехов при атаках на доменные инфраструктуры, используя этот инструмент. Для упреждения атак и поиска уязвимых мест в домене Microsoft интегрировала собственную версию Bloodhound в решение Advanced Threat Protection.
Bloodhound позволяет злоумышленникам (а теперь и синей стороне) визуализировать среду AD в графическом формате с демонстрацией связей между узлами. Каждое соединение — это возможный вектор, который можно использовать для достижения поставленной в рамках атаки цели. Представление, основанное на графах, открывает злоумышленникам целый мир новых возможностей.
Ранее при атаках злоумышленники проводили двухэтапную атаку. На первом этапе атакующие осуществляли фишинговые атаки, чтобы получить первоначальный доступ для перечисления AD. Используемая полезная нагрузка была невероятно шумной и могла быть обнаружена и локализована синей командой до того, как злоумышленники смогли выполнить какие-либо действия, кроме эксфильтрации перечисленной информации.
Однако теперь злоумышленники могут использовать эти данные в автономном режиме для создания вектора атаки в графическом формате, точно показывающего необходимые шаги и переходы. Используя эту информацию во время второй фишинговой кампании, злоумышленники часто могли достичь своей цели за считанные минуты после взлома. Зачастую это происходит даже быстрее, чем синей команда получит первое оповещение о проводимой атаке. Преимущества представления информации в виде графиков доказало свою эффективность, поэтому на сегодняшний день множество синих команд начинают использовать такие типы инструментов, чтобы лучше понять свое состояние безопасности.
Sharphound
Вы часто можете услышать, как пользователи называют Sharphound и Bloodhound, имея в виду одно и то же. Однако это не так. Sharphound — это инструмент для перечисления, используемый Bloodhound'ом. Он используется для перечисления информации о домене, которая затем может быть визуально отображена в Bloodhound. Bloodhound — это фактический графический интерфейс, используемый для отображения графиков атак на AD. Поэтому нам сначала нужно научиться использовать Sharphound для перечисления AD, прежде чем мы сможем визуально посмотреть на результаты с помощью Bloodhound.
Есть три разных сборщика информации Sharphound:
- Sharphound.ps1 — скрипт PowerShell для запуска Sharphound. Однако последняя версия Sharphound больше не использует сценарий Powershell. Эта версия удобна для использования с RAT, поскольку сценарий можно загрузить непосредственно в память, избегая обнаружение антивирусами при сканировании только областей жёсткого диска;
- Sharphound.exe — исполняемая версия для Windows для запуска Sharphound;
- AzureHound.ps1 — сценарий PowerShell для запуска экземпляров Sharphound для Azure (Microsoft Cloud Computing Services). Bloodhound может получать данные, перечисленные из Azure, для поиска путей атаки, связанных с конфигурацией Azure Identity and Access Management.
Примечание: для достижения наилучших результатов версии Bloodhound и Sharphound должны совпадать. Обычно в Bloodhound вносятся обновления, что означает, что старые результаты Sharphound не могут быть загружены.
При использовании коллектора существует высокая вероятность того, что такие файлы будут обнаружены и помечены как вредоносное ПО, породив тем самым предупреждение синей команде. Здесь снова может помочь компьютер с Windows, не присоединенный к домену. Атакующий может использовать команду runas, чтобы внедрить учетные данные AD и указать Sharphound на контроллер домена. Поскольку атакующий полностью контролирует свою машину с ОС Windows, антивирусное ПО может быть отключено (либо внесены исключения для определенных файлов и директорий).
В рамках демонстрации я буду использовать предварительно загруженные исполняемые файлы на сервере THMJMP1:

Запустить Sharphound можно с помощью следующей команды:
Sharphound.exe --CollectionMethods <Methods> --Domain za.tryhackme.com --ExcludeDCs
Используемые параметры:
- CollectionMethods — определяет, какие данные будет собирать Sharphound. Наиболее распространенные варианты — «Default» или «All». Кроме того, поскольку Sharphound кэширует информацию, после завершения первого запуска можно использовать метод сбора сеансов только для извлечения новых пользовательских сеансов, чтобы ускорить процесс;
- Domain — здесь указывается домен, который необходимо перечислить. В некоторых случаях может быть необходимо перечислить родительский или другой домен, которому доверяет ваш существующий домен;
- ExcludeDCs — этот параметр укажет коллектору не трогать контроллеры домена, что снижает вероятность того, что запуск Sharphound вызовет предупреждение.
Полный список параметров Sharphound можно посмотреть здесь. Полезно иметь это в виду, поскольку некоторые могут потребоваться в зависимости от обстоятельств.
Запустим Sharphound, используя методы сбора All и Session:
PS C:\Users\gordon.stevens\Documents\>SharpHound.exe --CollectionMethods All --Domain za.tryhackme.com --ExcludeDCs


После завершения у нас появилось 2 ZIP-файла с отметкой времени в той же папке, из которой я запускал Sharphound:

Теперь мы можем использовать Bloodhound для загрузки этих ZIP-файлов, чтобы визуализировать пути атаки.
Bloodhound
Как упоминалось ранее, Bloodhound — это графический интерфейс, который позволяет нам импортировать данные, захваченные Sharphound, и визуализировать их для поиска веторов атаки. Bloodhound использует Neo4j в качестве серверной базы данных и графической системы. Neo4j — это система управления графовой базой данных. Прежде чем мы сможем запустить Bloodhound, нам нужно загрузить Neo4j:
neo4j console start

На другой вкладке терминала запустим bloodhound --no-sandbox. Это покажет вам графический интерфейс аутентификации:


Учетные данные по умолчанию для базы данных neo4j: neo4j:neo4j. Они же используются для аутентификации в Bloodhound. Чтобы импортировать наши результаты, вам нужно будет получить ZIP-файлы с хоста Windows. Самый простой способ — использовать команду SCP на вашем AttackBox:
scp jenna.field@THMJMP1.za.tryhackme.com:C:/Users/jenna.field/Documents/20230325021242_BloodHound.zip . scp jenna.field@THMJMP1.za.tryhackme.com:C:/Users/jenna.field/Documents/20230325021334_BloodHound.zip .

Теперь перетащим ZIP-файлы в графический интерфейс Bloodhound, чтобы импортировать его в Bloodhound. Он покажет, что он извлекает файлы и инициирует импорт:

Как только все файлы JSON будут импортированы, мы можем начать использовать Bloodhound для перечисления путей атаки для этого конкретного домена.
Пути атаки
Есть несколько путей атаки, которые может показать Bloodhound. При нажатии на три полоски рядом с «Search for a node» отобразятся параметры. Самая первая вкладка показывает нам информацию о нашем текущем импорте:

Примечание: снизу есть кнопка "Refresh..". Её нужно нажать.
Сначала мы рассмотрим информацию об узле. Давайте найдем нашу учетную запись AD в Bloodhound:


Мы видим, что возвращается значительное количество информации о нашем пользователе. Каждая из категорий предоставляет следующую информацию:
- Overview — предоставляет сводную информацию, такую как количество активных сеансов, которые имеет учетная запись, и может ли она достичь важных целей;
- Node Properties — показывает информацию об учетной записи AD , такую как отображаемое имя и заголовок;
- Extra Properties — предоставляет более подробную информацию об AD , такую как отличительное имя и время создания учетной записи;
- Group Membership — показывает информацию о группах, членом которых является учетная запись;
- Local Admin Rights — предоставляет информацию о узлах, присоединенных к домену, где учетная запись имеет административные привилегии;
- Execution Rights — предоставляет информацию об особых привилегиях, таких как возможность RDP на машине;
- Outbound Control Rights — показывает информацию об объектах AD, для которых у этой учетной записи есть разрешения на изменение их атрибутов;
- Inbound Control Rights — предоставляет информацию об объектах AD , которые могут изменять атрибуты этой учетной записи.
Если нам нужна дополнительная информация в каждой из этих категорий, вы можете нажать число рядом с информационным запросом:

Например, давайте посмотрим на членство в группе, связанной с нашей учетной записью. Нажав число рядом с «First Degree Group Membership», мы увидим, что наша учетная запись является членом двух групп:

Далее мы рассмотрим запросы анализа. Это запросы, которые создатели Bloodhound написали сами для извлечения полезной информации:

В разделе «Domain Information» мы можем запустить запрос «Find all Domain Admins»:

Значки называются узлами (nodes), а линии — ребрами (edges). Давайте глубже погрузимся в то, что показывает нам Bloodhound. Существует учетная запись пользователя AD с именем пользователя T0_TINUS.GREEN, которая является членом группы Tier 0 ADMINS. Но эта группа является вложенной группой в группу DOMAIN ADMINS, что означает, что все пользователи, которые являются частью группы Tier 0 ADMINS, фактически являются администраторами домена.
Кроме того, существует дополнительная доменная учетная запись с именем пользователя ADMINISTRATOR, которая является частью группы DOMAIN ADMINS. Следовательно, в нашей поверхности атаки есть две учетные записи, которые мы, вероятно, можем попытаться скомпрометировать, если хотим получить права администратора домена. Поскольку учетная запись ADMINISTRATOR является встроенной учетной записью, мы, скорее всего, сосредоточимся на учетной записи пользователя.
Каждый объект AD, который обсуждался в предыдущих задачах, может быть узлом в Bloodhound, и у каждого будет свой значок, обозначающий тип объекта. Если мы хотим сформировать путь атаки, нам нужно посмотреть на доступные рёбра между текущим положением и привилегиями, которые у нас есть, и чего мы хотим достичь. Bloodhound имеет различные доступные ребра, доступ к которым можно получить с помощью значка фильтраци слева вверху:

Они также постоянно обновляются по мере обнаружения новых векторов атак. Мы рассмотрим возможность использования различных рёбер в будущих статьях.
Сейчас рассмотрим самый простой путь атаки, используя только стандартные и некоторые специальные рёбра. Мы запустим поиск в Bloodhound, чтобы определить путь атаки. Нажмите значок пути, чтобы разрешить поиск пути.

Наш начальный узел будет нашим именем пользователя, а наш конечный узел будет группой Tier 1 ADMINS, поскольку эта группа имеет административные привилегии над серверами:

В моём случае нет доступного пути атаки с использованием выбранных фильтров. Обратите внимание, что это также может быть связано с несоответствием Bloodhound/Sharphound, что означает, что результаты не были обработаны должным образом.
Для примера я приведу скриншот из задания:

Это показывает, что один из администраторов группы T1 нарушил многоуровневую модель, используя свои учетные данные для аутентификации на рабочей станции THMJMP1. Это также показывает, что любой пользователь, входящий в группу DOMAIN USERS, включая нашу учетную запись AD, имеет возможность подключения по RDP на этот хост.
Вектор атаки в таком случае будет следующим:
- Используем учетные данные нашего пользователя для подключение на THMJMP1 по RDP;
- Ищем вектор повышения привилегий на хосте, который предоставит нам административный доступ;
- Используя административный доступ, мы можем использовать методы дампа учетных данных и инструменты, такие как Mimikatz;
- Поскольку у администратора из группы Tier 1 ADMINS есть активный сеанс на THMJMP1, дамп учетных данных предоставит нам хэш NTLM (а возможно даже и пароль в чистом виде) учетной записи администратора.
Это простой пример. Пути атаки могут быть сложными и требовать нескольких действий для достижения конечной цели. Документация Bloodhound предоставляет отличное руководство по анализу каждого з рёбер в полученном графе с описанием векторов атак.
Bloodhound — это невероятно мощный инструмент для перечисления AD, который обеспечивает глубокое понимание структуры AD для формирования поверхности атаки.
Session Data Only
В крупных организациях структура AD меняется не так часто. Может появиться пара новых сотрудников, но общая структура OU, групп, пользователей и разрешений останется прежней. Однако есть одна вещь, которая постоянно меняется, — это активные сеансы и события входа в систему. Поскольку Sharphound создает моментальный снимок структуры AD на определенный момент времени, данные активных сеансов не всегда точны, поскольку некоторые пользователи могли уже выйти из своих сеансов или новые пользователи могли установить новые сеансы. Это важно отметить, и именно поэтому важно запускать Sharphound через регулярные промежутки времени.
Хорошим подходом является запуск Sharphound с методом сбора «All» в начале атаки, а затем выполнение Sharphound по крайней мере два раза в день с использованием метода сбора «Session». Это предоставит новые данные сеансов и гарантирует, что запуски будут выполняться быстрее, поскольку они не будут повторно перечислять всю структуру AD. Лучшее время для запуска этих сеансов — около 10:00, когда пользователи начинают работать, и около 14:00, когда они возвращаются с обеденного перерыва. Данные о старых сеансах перед загрузкой новой информации можно просто почистить опцией Clear Sessions:

Преимущества
- Bloodhound предоставляет графический интерфейс для перечисления AD;
- Имеет возможность показывать пути для атаки на интересующий объект AD;
- Обеспечивает более глубокое понимание объектов AD, для получения информации о которых обычно требуется несколько ручных запросов.
Недостатки
- Требуется выполнение коллектора SharpHound, который "шумит" и часто может быть обнаружен антивирусными решениями или EDR.
Дополнительные методы перечисления AD
В этой статье мы рассмотрели несколько методов, которые можно использовать для перечисления AD. Это ни в коем случае не исчерпывающий список. Вот список методов перечисления, которые также заслуживают упоминания:
- LDAP enumeration. Любая допустимая пара учетных данных AD должна иметь возможность "привязки" (bind) к интерфейсу LDAP на контроллере домена. Это позволит атакующему писать поисковые запросы LDAP для перечисления информации об объектах домена;
- PowerView. PowerView — это часть сценария разведки проекта PowerSploit. Хотя этот проект больше не получает поддержки, такие скрипты, как PowerView, могут оказаться невероятно полезными для выполнения полуручного перечисления объектов AD в крайнем случае. Наверное, главный его минус — детектится антивирусами;
- Windows Management Instrumentation (WMI). WMI можно использовать для получения информации с хостов Windows. У него есть провайдер под названием «root\directory\ldap», который можно использовать для взаимодействия с AD. Мы можем использовать этот провайдер и WMI в PowerShell для выполнения перечисления AD.
Должнен отметить, что в этом статье внимание уделялось перечислению структуры домена Active Direcrtory в целом, а не только выявлению мисконфигураций и слабых мест. Перечисление, направленное на выявление слабых мест, таких как небезопасные общие ресурсы или нарушения многоуровневой модели, будет обсуждаться в следующих статьях.
Заключение
Перечисление AD — масштабная задача. Надлежащее перечисление AD требуется для лучшего понимания структуры домена и определения путей атаки, которые можно использовать для повышения привилегий или горизонтального перемещения.
Смягчение рисков
От перечисления AD невероятно сложно защититься. Многие из этих методов имитируют обычный сетевой трафик и поведение, что затрудняет отличие вредоносного трафика от обычного трафика (это мы прекрасно знаем по атакам в NAD). Однако есть несколько вещей, которые можно сделать, чтобы обнаружить потенциально вредоносное поведение:
- Мощные методы перечисления AD, такие как Sharphound, генерируют значительное количество событий входа в систему при перечислении информации о сеансе. Поскольку он выполняется из одной учетной записи AD, эти события входа в систему будут связаны с этой единственной учетной записью. Можно написать правила обнаружения такого типа поведения, если оно происходит из учетной записи пользователя;
- Можно написать правила обнаружения сигнатур для инструментов, которые должны быть установлены для определенных методов перечисления AD, таких как двоичные файлы SharpHound и инструменты AD-RSAT;
- Можно отслеживать использование командной строки и Powershell в организации, чтобы обнаруживать потенциальные попытки перечисления из неавторизованных источников (если только они не используются сотрудниками нашей организации для выполнения рабочих задач).
С другой стороны, блютим также может регулярно использовать методы перечисления для выявления пробелов и мисконфигураций в структуре домена. Если защищающаяся сторона сможем устранить неправильные конфигурации, то, даже если злоумышленник перечислит нашу AD, он не сможет найти векторы, которые можно использовать для повышения привилегий или горизонтального перемещения.
Следующим шагом будет повышение привилегий и горизонтальное перемещение в домене, чтобы найти и занять подходящую позицию для проведения дальнейших атак. Об этом будет рассказано в следующей статье.
Первая часть статьи доступна по ссылке ниже:
До новых встреч!
