Active Directory for Red Teams
Главная задача данной статьи – познакомить читателей с основами Active Directory, а также особенностями и нюансами, которые должен знать и учитывать каждый пен-тестер при планировании и осуществлении атак в сетях Active Directory. Итак, давайте рассмотрим службу директроий, разработанную компанией Microsoft для управления сетями в доменах Window.
ВНИМАНИЕ!!!! АВТОР ДАННОЙ СТАТЬИ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ДЕЙСТВИЯ ОТ ЕЕ ПРОЧТЕНИЯ. ВСЕ МАТЕРИАЛЫ ПРЕДОСТАВЛЕНЫ В ИСКЛЮЧИТЕЛЬНО ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ!
Оглавление:
- Домен, Контроллер Домена.
- Дерево доменов, Лес доменов.
- Групповые политики.
- Списки управления доступом.
- Пользователи и группы.
- Доверие.
- Групповые политики.
Примечание: в данной статье для демонстрации сбора информации в среде Active Directory был использован инструмент PowerView , который основан на PowerShell
Что такое Active directory?
В общих чертах, Active Directory – это служба, которая позволяет администрировать и осуществлять мониторинг некоторого числа машин и серверов, объединённых в единую сеть, с помощью центрального сервера (данная структура представляет собой домен). Данная группа машин предствляет собой составную часть более крупного сервера (Леса доменов), который и представляет собой контрольный центр сети Active Directory.
Active Directory содержит информацию об объектах, таких как компьютеры: пользователи, принтеры и т.д. Можете представить это как “книгу контактов” для Windows. Одной из наиболее важных целей такой структуры является организация аутентификации клиентов с помощью билетов протокола Kerberos.
Девайсы не использующие ОС Windows, такие как например машины на Линукс, фаерволы и т.д. также имеют возможность аутентификации внутри сети Active directory через протоколы RADUIS или LDAP. Active Directory включает в себя множество механизмов и фич, которые будут рассмотрены в рамках данной статьи.
Зачем же использовать Active Directory?
Большинство крупных компаний используют Active Directory, т.к. это позволяет контролировать и осуществлять мониторинг их пользователей с помощью единого командного центра – контроллера домена. Данное решение позволяет одному пользователю логиниться на любом компьютере сети Active Directory, получить доступ их файловым системам, а также их данным, хранящимся на сервере. Преимущество в данном случае состоит в возможности администрировать любой компьютер компании без создания дополнительного пользователя на каждой отдельной машине. Active directory – решение для удобной реализации данных задач.
Если вышеописанное оказалось не совсем понятным для вас, позвольте привести наглядный пример:
Давайте возьмём для примера Microsoft. Это транснациональная корпорация, имеющая в штате миллионы сотрудников. Давайте рассмотрим всего лишь одно подразделение Microsoft, которое включает в себя не многим более тысячи сотрудников. Подразделение может включать в себя различные департаменты, например: маркетинговых исследований, принятия решений о разработке продуктов, отдел кадров, ИТ, и т.д. А теперь представьте что в одном из департаментов необходимо обновить программное обеспечение, или кто-то из сотрудников внезапно забыл пароль, либо же кому-то из сотрудников необходим доступ к контенту, но его текущих прав для доступа недостаточно.
Это стало бы настоящей катастрофой для IT департамента, если бы машины не были объединены в одну сеть Active Directory. Таким образом, вышеописанные задачи решаются легко и не принуждённо из командного центра.
Контроллеры доменов
В самом начале я рассматривал сеть Active directory – прежде всего в качестве домена. В том контексте, что домен – это некоторое множество машин, использующих общую БД Active directory, которая администрируется несколькими серверами домена – Контроллерами Домена.
Контроллер Домена – это сервер на системе Windows, на котором установлены доменные службы Active Directory, и которому присвоены права контроллеров домена в лесу доменов. Контроллеры домена – это центральные узлы Active directory, которые контролируют все остальные объекты домена. Отметим ключевые функции контроллера домена:
- Хранит данные доменных служб Active directory
- Обрабатывает службы аутентификации и авторизации
- Копирует обновления с других контроллеров домена в лесу доменов
- Предоставляет админу доступ к управлению ресурсами домена
Сбор информации с помощью PowerView
1) Информация а текущем домене
Код с оформлением (BB-коды):
PS C:\Tools> Get-NetUser user-dc.it.starlight.local user-mssql.it.starlight.local user-adminsrv.it.starlight.local
2) Список администраторов домена
Код с оформлением (BB-коды):
Get-NetDomain # Просмотр атрибутов группы администраторов домена Get-NetGroup -GroupName "Domain Admins" -FullData # Список юзеров группы администраторов домена Get-NetGroupMember -GroupName "Domain Admins"
Хранилища информации Служб Домена Active Directory
Хранилища информаци Active directory содержат базы данных и процессы, необходимые для хранения и управления информацией директорий, такие как: пользователи, группы и служды. Некоторые содержат также данные и свойства Хранилища Информации Служб домена Active directory:
- NTDS.dit – БД, которая содержит информацию контроллера домена Active directory, в том числе хэши паролей пользователей домена.
- По умолчанию хранитcя в директории %SystemRoot%\NTDS
- Доступна только контроллеру домена
Леса доменов
Дерево доменов определяет всё, является контейнером, который содержит всю остальную информацию о сети. Без леса доменов все деревья доменов и сами домены не могут взаимодейтвовать межу собой. Однако, не стоит представлять понятие “Лес доменов” буквально, как некоторый физический объект. Говоря “Лес”, стоит представляет соединённые деревья доменов и доменамы в единую сеть.
Анатомия леса доменов
Лес доменов – это совокупность одного или нескольких деревьев домена внутри сети Active directory. Это то, что объединяет части сети в единое целое. Лес доменов состоит из элементов, которые мы разберём в отдельности несколько позднее:
1) Деревья – иерархия доменов в службе доменов Active directory
2) Домены – служат для объединения объектов и управления ими
3) Организационные подразделения – контейнеры для групп, компьютеров, пользователей,
принтеров других организационных единиц
4) Привелегии – позволяют пользователям получать доступ к ресурсам других доменов
5) Объекты – пользователи, группы, принтеры, компьютеры. точки общего доступа
6) Службы домена – DNS сервер, LLMNR, IPv6
7) Схема домена – правила создания объектов
Объекты групповой политики
Групповые политики позволяют легко управлять конфигурациями и изменениями централизованно в Active directory. Позволяют конфигурировать:
1) Настройки безопасности
2) Настройки политик на уровне регистра
3) Настройки групповых политик, таких как скрипты включения/выключения/логирования/включения и выключения логов.
4) Установка ПО
Данные объекты подвержены различным типам атак, таким как “повышение превилегий”, “бэкддоры”, “эксплуатация сеанса связи”. и т.д.
Сбор данных PowerView
1) Лист текущих объектов групповой политики
Код с оформлением (BB-коды):
Get-NetGPO Get-NetGPO -ComputerName <computer-name> Get-GPO -All (GroupPolicy module) Get-GPResultantSetOfPolicy -ReportType Html -Path C:\Users\Administrator\report.html (Provides RSoP) gpresult /R /V (GroupPolicy Results of current machine)
2) Объекты групповой политики для ограниченных групп или groups.xml для интересующих нас пользователей
Код с оформлением (BB-коды):
Get-NetGPOGroup
3) Список пользователей из локальной группы машины, которая использует объекты групповой политики
Код с оформлением (BB-коды):
Find-GPOComputerAdmin -ComputerName <computer-name>
4) Список машин, где конкретный пользователь является членом какой-либо группы
Код с оформлением (BB-коды):
Find-GPOLocation -Username student1 -Verbose
5) Список организационных подразделений домена:
Код с оформлением (BB-коды):
Get-NetOU -FullData
6) Объекты групповой политики, присвоенные организационному подразделению (Имя Объектов групповой политики можно найти в атрибуте gplink из Get-NetOU:
Код с оформлением (BB-коды):
Get-NetGPO -GPOname Get-GPO -Guid %target_guid% (GroupPolicy module)
Список управления доступами
Модель контроля доступов основана на контроле возможности процессов получать доступ к объектам и иным ресурсам Active directory с помощью следующих методов:
- Токены доступа (идентифицируют пользователя и его привелегии)
- Дескрипторы безопасности (SID владельца, дискреционные списки управления доступом: ACL (DACL) and System ACL (SACL)
- Записи контроля доступа (ACE) – отсылает к индивидуальным превилегиям пользователя, либо осуществляет аудит доступа.
Существует 2 типа списков доступа:
DACL – определяет права “доверенных” (пользователя или группы) на какой-либо объект.
SACL – ведёт логи успешных актов аудита, а также ошибок при их попытках в случаях получения доступа к объекту.
ACLs (списки контроля доступов) – ключевой элемент в архитектуре безопасности Active directory.
Сбор данных с помощью PowerView
1) Получение списка ACL, ассоциированных с определённым объектом
Код с оформлением (BB-коды):
Get-ObjectAcl -SamAccountName student1 -ResolveGUIDs
2) Получение списка ACL, относящихся к определённому префиксу используемому для поиска
Код с оформлением (BB-коды):
Get-ObjectAcl -ADSprefix 'CN=Administrator,CN=Users' -Verbose
3) Также мы можем получить лист ACL, используя модуль Active directory без определения GUIDs
Код с оформлением (BB-коды):
(Get-Acl "AD:\CN=Administrator, CN=<name>, DC=<name>, DC=<name>,DC=local").Access
4) Получения листа ACL, относящихся к определенной директории LDAP, используемой для поиска
Код с оформлением (BB-коды):
Get-ObjectAcl -ADSpath "LDAP://CN=Domain Admins,CN=Users,DC=<name>,DC=<name>,DC=local" -ResolveGUIDs -Verbose
5) Поиск интересных элементов управления доступом (ACE)
Код с оформлением (BB-коды):
Invoke-ACLScanner -ResolveGUIDs
6) Получение ACLs, ассоциированных с определенной директорией
Код с оформлением (BB-коды):
Get-PathAcl -Path "\\<computer-name>\sysvol"
Пользователи и группы
Пользователи и группы внутри Active directory полностью управляются администратором. Даже при создании контроллера домена, есть всего лишь 2 пользователя по умолчанию: Администратор и Гость. Администратор решает в полной мере какие группы и пользователей создать.
Пользователи являются также базовой единицей в структуре Active directory, без которых данная система не имела бы смысла. Есть 4 основных вида пользователей, которых вы чаще всего можете встретить внутри Active directory. Однако, это в первую очередь зависит от стратегии управления доступами в той или иной компании.
1) Администраторы домена – “большие” боссы. Только они имеют доступ к контроллеру домена.
2) Аккаунты служб (могут быть администраторами домена). Используются крайне редко для сервисного обслуживания, они необходимы Windows для таких служб как SQL, для связи между аккаунтом службы и самой службой.
3) Локальные администраторы – данные пользователи могут администрировать локальные машины в роли администратора, могут даже контролировать других обычных пользователей, но доступа к контроллеру домена они не имеют.
4) Пользователи домена – это рядовые пользователи, которые могут логиниться на машинах, к которым имеют авторизованный доступ. Могут также иметь права локального администратора в отношении машин, в зависимости от организации той или иной сети.
Группы
Группы значительно упрощают процесс распределения и управления привилегиями, путём внесения тех или иных пользователей в группы, обладающими определёнными правами. Основные 2 вида групп в Active directory:
1) Группы безопасности – используются для настройки прав большого числа пользователей.
2) Группы рассылки – используются для настройки листов рассылки e-mail. Для атакующих данные группы представляют значительно меньший интерес. Тем не менее могут быть использованы для сборы некоторого объёма информации, а также применения определённых векторов атак.
Группы безопасности по умолчанию
Существует множество стандартных групп безопасности, я постараюсь дать лишь самую важную информацию о них.
1) Контроллеры домена – все контроллеры домена внутри домена
2) Гости домена – все гостевые пользователи домена
3) Пользователи домена – все пользователи домена
4) Компьютеры домена – все рабочие машины и сервера, включенные в домен
5) Администраторы домена – администраторы назначенные для домена
6) Администраторы предприятия – администраторы назначенные для предприятия
7) Администраторы схемы – администраторы схемы Active directory
8) Администраторы DNS – группа назначенных администраторов DNS
9) DNS Update Proxy – клиенты DNS, которые вправе осуществлять динамические обновления по поручению некоторых других клиентов (например DHCP серверы)
10) Группа, авторизованная RODC для репликации паролей – члены данной группы могут реплицировать свои пароли на все (read only) контроллеры доменов в домене
11) Владельцы групповой политики – члены данной группы могут редактировать групповую политику домена
12) Группа, неавторизованная RODC для репликации паролей – члены данной не группы могут реплицировать свои пароли на все (read only) контроллеры доменов в домене
13) Защищенные пользователи – к членам данной группы применяются дополнительные меры защиты для аутентификации, для противодействия несанкционированному доступу.
14) Публикаторы сертификатов – пользователи группы, могут публиковать сертификаты в директорию
15) Контроллеры домена (только для чтения) – члены этой группы являются контроллерами домена с параметром “только для чтения”
16) Контроллеры домена предприятия (только для чтения) – Контроллеры домена предприятия с параметром (только для чтения)
17) Ключевые администраторы – члены данной группы могут совершать административные действия в отношении ключевых объектов домена
18) Ключевые администраторы предприятия – члены данной группы могут совершать административные действия в отношении ключевых объектов леса доменов
19) Клонируемые контроллеры домена – члены данной группы – контроллеры домена, которые могут быть клонированы
20) RAS и lAS серверы – серверы данной группы имеют доступ к настройкам удалённого доступа пользователей.
Доверия
- В среде Active directory “доверие” – это отношение между 2мя доменами или лесами доменов, которое предполагает возможность доступа пользователей одного домена/леса доменов к ресурсам второго домена/леса доменов.
- Доверие может иметь как автоматический характер (родительский-дочерний, принадлежность к одному лесу доменов), так и установленной (лес – внешняя сеть)
- Объекты доверия домена представляют взаимоотношения доверия внутри домена.
Одностороннее доверие
Имеет односторонний характер, т.е. пользователи доверенного домена имеют доступ к ресурсам “доверяющего” домена, но никак не наоборот.
Двустороннее доверие
Пользователи обоих доменов имеют доступ к ресурсам друг друга.
Транзитивность доверия
1) Транзитивное доверие может быть расширено для установления доверия с другими доменами.
По умолчанию все доверия внутри одного леса доменов (дерево-коренной домен. родительский-дочерний) между доменами – имеют двусторонний характер.
2) Нетранзитивное доверие – не может быть расширено в отношении других доменов леса. Может быть двусторонним или же односторонним.
Данный вид доверия стандартный (также называется “Внешнее доверие”) между 2мя доменами в разных лесах, в случае если леса не имеют между собой отношения доверия.
Сбор информации с помощью PowerView
1) Получаем полный список доверий для текущего домена
Код с оформлением (BB-коды):
Get-NetDomainTrust Get-NetDomainTrust -Domain <domain-name>
2) Собираем подробности о текущем лесу доменов
Код с оформлением (BB-коды):
Get-NetForest Get-NetForest -Forest <forest-name>
3) Список всех доменов в текущем лесу
Код с оформлением (BB-коды):
Get-NetForestDomain Get-NetForestDomain -Forest <forest-name>
4) Список глобальных каталогов для текущего леса
Код с оформлением (BB-коды):
Get-NetForestCatalog Get-NetForestCatalog -Forest <forest-name>
5) Карта доверий леса доменов
Код с оформлением (BB-коды):
Get-NetForestTrust Get-NetForestTrust -Forest <forest-name>
Разведка для пользователей с привилегиями локального админа
1) Лист машин в домене для которых текущий пользователь имеет доступ локального админа
Код с оформлением (BB-коды):
Find-LocalAdminAccess -Verbose
Данный метод – крайне “шумный”. Он запрашивает у контроллера домена список машин с помощью функции (Get-NetComputer), а затем запускает мультипоточную команду на каждой машине Invoke-CheckLocalAdminAccess. Данная задача может быть также выполнена с помощью инструментов удалённого администрирования. Например, WMI или PowerShell remoting. Данная альтератива может быть крайне полезной в случае если порты (RPC и SMB) используемые функцией Find-LocalAdminAccess – заблокированы. См. Find-WMILocalAdminAccess.ps1 Данное действие оставляет 4624 (log-on события) и 4634 (log-off) на каждом объекте в домене.
2) Поиск машин, на которых администратор домена (или конкретный пользователь/группа) имеет сессии
Код с оформлением (BB-коды):
Invoke-UserHunter Invoke-UserHunter -GroupName "RDPUsers"
Данная функция запрашивает у контроллера домена список пользователей определённой группы (по умолчанию – Администраторы домена) используя Get-NetGroupMember, получает список машин (Get-NetComputer) и список сессий + всех залогиненных пользователей (Get-NetSession/Get-NetLoggedon) на каждой машине.
3) Подтвердить доступ администратора
Код с оформлением (BB-коды):
Invoke-UserHunter -CheckAccess
4) Найти список машин, где админ домен залогинен
Код с оформлением (BB-коды):
Invoke-UserHunter -Stealth
Данная команда запрашивает у контроллера домена (текущего или заданного) список членов группы (по умолчанию – Администраторы домена) с помощью функции Get-NetGroupMember, и получает список серверов, генерируя немало трафика (контроллеры домена, файл-серверы и распределённые файл-серверы). Для меньшей генерации траффика, количества сессий и залогиненных юзеров используйте Get-NetSession/Get-NetLoggedon) на каждой машине.
Службы доменов
Службы доменов являются ключевыми функциями сетей Active Directory. Они позволяют администрировать домен, сертификаты безопасности, LDAP (облегченные протоколы сетевого доступа) и многое другое. Это и есть способ, которым контроллер домена определяет что он должен делать и какие службы он должен предоставить домену.
Службы доменов полностью соответствуют своему названию. Это службы, которые контроллер домена предоставляет всем остальным элементам домена или дерева доменов. Существует множество различных служб, которые могут быть добавлены в контроллер домена. Однако, мы остановимся на стандартных службах, которые используются при настройке сервера в качестве контроллера домена.
– LDAP – упрощённый протокол доступа к директориям. Осуществляет коммуникацию между приложениями и службами директорий.
– Службы сертификатов – позволяют контроллеру домена создавать, проверять и отзывать сертификаты публичных ключей
– DNS, LLMNR, NBT-NS – службы доменных имен для идентификации имён хостов по IP адресам.
Процесс аутентификации в домене
Наиболее интересная часть Active Directory, как впрочем и наиболее уязвимая – это протоколы аутентификации. Вот 2 основных из них:
– NTLM – стандартный протокол Windows локальной аутентификации. Использует принцип зашифрованных “вопрос – ответ”
– Kerberos – стандартная служба аутентификации для Active Directory. Использует выданные “тикеты” и “служебные тикеты” для аутентификации пользователей и предоставления им доступа к ресурсам домена.
Службы доменов Active Directory являются наиболее лёгкими точками входа для атакующих и содержат наиболее опасные и уязвимые протоколы.