Внутренняя разведка Active Directory через Cobalt Strike
Введение
С ростом автоматизированных вычислительных систем и с увеличением атак на данные системы резко возник вопрос мониторинга за операционными системами на базе которых и работает любая информационная система в компании. В данных операционных системах устанавливаются/подключаются новые классы средств защиты. Мониторинг за информационными системами углубляется, а аналитика атомарных событий усложняется.
В рамках внутренней разведки атакующие часто используют инструмент PowerShell для сбора информации о домене, что порождает больший интерес к контролю за данным инструментом со стороны подразделений мониторинга событий информационной безопасности.
Чтобы отойти от концепции использования PowerShell и .NET, оставаться более незаметными и минимизировать время на разведку контроллера-домена эксперты из Red Team Outflank создали скрипт для Cobalt Strike - Recon-AD, написанный на языках на C/C++ на основе ADSI и reflective DLL.
Ну что же, приступим к более детальному изучению данного решения.
Данная статья представлена исключительно в образовательных целях. Red Team сообщество "GISCYBERTEAM" не несёт ответственности за любые последствия ее использования третьими лицами.
Установка
Перед установкой нам понадобится наличие развернутого сервера Cobalt Strike, в нашем примере мы используем Cobalt Strike версии 4.9.
Для установки скрипта нам необходимо выполнить следующие действия:
- Перейти по следующей ссылке https://github.com/outflanknl/Recon-AD/ и скачать архив с компонентами Recon-AD.
- Распаковать папку “Outflank-Recon-AD” из скачанного архива и поместить ее в удобное для вас место на компьютере с которого будете запускать Cobalt Strike Client.
- Загрузить скрипт “Recon-AD.cna” из разархивированной папки “Outflank-Recon-AD” в интерфейс Cobalt Strike Client (Cobalt Strike Script Manager).
После данных этапов мы можем приступать к использованию инструмента Recon-AD.
Описание функционала и применение
Данный инструмент состоит из главного скрипта и семи DLL-файлов (названия аналогичны командам в Cobalt Strike):
- Recon-AD-Domain - используется для перечисления информации о домене (доменное имя, GUID, название сайта, политика паролей, список домен-контроллеров).
- Recon-AD-Users - используется для получения объектов “Пользователи” Active Directory с атрибутами по заданному запросу.
- Recon-AD-Groups - используется для получения объектов “Группы” Active Directory.
- Recon-AD-Computers - используется для получения объектов “Компьютеры” Active Directory с атрибутами по заданному запросу.
- Recon-AD-SPNs - используется для вывода перечня учетных записей Active Directory, участников службы (SPN) и отображения полезных атрибутов.
- Recon-AD-AllLocalGroups - используется для получения списка локальных групп на хосте и членов данных групп.
- Recon-AD-LocalGroups - используется для получения информации по определенной локальной группе (группа “Администраторы” по умолчанию).
Изучив основные компоненты данного инструментария можем приступить к демонстрации практического применения, для этого мы будем использовать тестовый стенд. Данный стенд состоит из нескольких виртуальных хостов подключенных к контроллеру домена.
С имитируем получение первоначального доступа на хост “GISPENTEST2” и произведем там внутреннюю разведку с применением “Recon-AD” в составе Cobalt Strike.
Получение информации о домене
Для получения информации о домене, в который мы получили доступ выполним следующую команду через интерактивную сессию хоста в Cobalt Strike.
Recon-AD-Domain
В результате мы получаем информацию о нашем тестовом домене
Получение информации о пользователях домена
Для вывода информации о всех пользователях домена выполним следующую команду.
Recon-AD-Users all
Данная команда выведет полный список пользователей Active Directory со всеми атрибутами.
Для фильтрации запроса мы можем использовать следующие варианты команд.
Recon-AD-Users <User-Name> Recon-AD-Users *admin* # имя УЗ содержит текст "admin"
Пример вывода одной из них указан ниже.
[03/14 13:05:59] beacon> Recon-AD-Users *Hack* [03/14 13:05:59] [+] Let's enumerate user *Hack* [03/14 13:05:59] [*] Tasked beacon to spawn Recon-AD-Users [03/14 13:05:59] [+] host called home, sent: 128064 bytes [03/14 13:06:00] [+] received output: -------------------------------------------------------------------- [+] objectClass: top person organizationalPerson user [+] cn: Gorilla GH. Hacker [+] sn: Gorilla [+] c: RU [+] l: Saint-Petersburg [+] description: Chief of pentesters [+] telephoneNumber: 89999999998 [+] givenName: Hacker [+] initials: GH [+] distinguishedName: CN=Gorilla GH. Hacker,CN=Users,DC=gtnp,DC=local [+] instanceType: 4 [+] whenCreated: 3/14/2024 4:02:02 PM [+] whenChanged: 3/14/2024 4:04:26 PM [+] displayName: Gorilla GH. Hacker [+] uSNCreated: high: 0 low: 80069 [+] uSNChanged: high: 0 low: 80090 [+] co: Russia [+] name: Gorilla GH. Hacker [+] objectGUID: {ADA81D30-8616-43D5-B3DC-BE4B569F9293} [+] userAccountControl: 66048 [+] badPwdCount: 0 [+] codePage: 0 [+] countryCode: 643 [+] badPasswordTime: No value set. [+] lastLogoff: No value set. [+] lastLogon: No value set. [+] pwdLastSet: 3/14/2024 9:02:03 AM [+] primaryGroupID: 513 [+] objectSid: S-1-5-21-3395708365-1461986185-1509986597-1166 [+] accountExpires: Never Expires. [+] logonCount: 0 [+] sAMAccountName: GorillaHacker [+] sAMAccountType: 805306368 [+] userPrincipalName: [email protected] [+] objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=gtnp,DC=local [+] dSCorePropagationData: 3/14/2024 4:02:03 PM 1/1/1601 [+] mail: [email protected] [+] ADsPath: LDAP://CN=Gorilla GH. Hacker,CN=Users,DC=gtnp,DC=local [+] Password expire settings: password never expires [+] Account options: account enabled
Получение информации о группах домена
Для вывода информации о всех группах домена выполним следующую команду.
Recon-AD-Groups all
Данная команда выведет полный список групп Active Directory со всеми атрибутами.
Для фильтрации запроса мы можем использовать следующие варианты команд.
Recon-AD-Groups <Group-Name> Recon-AD-Groups *admin* # имя группы содержит текст "admin"
Получение информации о компьютерах домена
Для вывода информации о всех компьютерах домена выполним следующую команду.
Recon-AD-Computers
Для фильтрации запроса мы можем использовать следующие варианты команд.
Recon-AD-Computers <Computer-Name> Recon-AD-Computers *serv* # имя хоста содержит текст "serv"
Получение информации об участников службы SPN
Для вывода данной информации выполним следующую команду.
Recon-AD-SPNs
Данная команда выведет полный список участников службы SPN.
Получение информации о локальных группах
Для вывода данной информации выполним следующую команду.
Recon-AD-AllLocalGroups <Computer-Name>
На выходе мы получаем полный список локальных групп на хосте и их участников.
Получение информации о заданной локальной группе
Для вывода данной информации выполним следующую команду.
Recon-AD-LocalGroups <Computer-Name> <Group-Name>
В рамках данного запроса мы запросили информацию по группе “Users”.
Заключение
В данной статье мы рассмотрели инструмент “Recon-AD”: его особенности, установку, функционал и практическое применение. Его применение позволит сократить время на получение необходимой информации для проведения следующих этапов тестирования (атак) скомпрометированной инфраструктуры, а также оставаться более незамеченным для средств защиты в корпоративном сегменте.