Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Структура
Групповые политики используются повсеместно. Это удобный инструмент, позволяющий системным администраторам управлять настройками клиентских систем в домене. Сама «архитектура» групповых политик — клиент‑серверная. Чаще всего контроллер домена выступает в роли сервера, на котором создаются, настраиваются и изменяются политики, а доменные компьютеры, пользователи и иные объекты в AD — клиенты, которые эти самые политики получают и применяют.
Групповая политика называется Group Policy Object (GPO). Внутри каждой GPO есть две сущности:
- Group Policy Container — специальный объект, который имеет идентификатор GUID, обозначающий групповую политику. Находится в
CN=Policies,
;CN=System - Group Policy Template — файлы
.
иADMX .
, позволяющие с помощью GPO управлять объектами в AD.ADML
GPO применяется к Organizational Units (организационным единицам). Можно считать это некой папкой, в которой находятся пользователи, компьютеры и другие объекты.
Изначально в только что созданном домене будут две политики:
- Default Domain Policy — назначается текущему домену;
- Default Domain Controller’s Policy — назначается OU, в состав которого входит контроллер домена. По умолчанию имя этой OU —
Domain
.Controllers
А теперь зайдем в ADUC и увидим, что наравне с OU в домене существуют и контейнеры.
Контейнеры — это лишь дополнительные объекты, позволяющие организовать структуру AD. К контейнеру нельзя привязать GPO. Чтобы применить GPO к контейнеру, сначала следует добавить его в соответствующую OU и уже к ней привязывать GPO.
GPO распространяется по сети через общий сетевой ресурс SYSVOL
, который хранится на контроллере домена. Все пользователи в домене обычно имеют к нему доступ и периодически синхронизируются для обновления настроек своих объектов групповой политики. Общий ресурс SYSVOL
по умолчанию указывает на каталог C:\
на контроллере домена.
Для синхронизации нужно время. Иногда на обновление настроек может уйти до двух часов. Если нам требуется немедленная синхронизация, то на компьютере надо ввести команду
gpupdate /force
С GPO могут быть связаны какие‑либо права. Например, пользователь Admin11111
имеет право GenericAll
на политику UsersInfo
. Неправильная настройка таких прав приводит к появлению векторов эксплуатации, которые мы рассмотрим в сегодняшней статье.
Обнаружение
Обнаружить доступные GPO можно следующим образом:
ls \\<домен>\SYSVOL\<домен>\Policies\
В результате мы получим GUID всех доступных политик.
Если у нас есть доступ к Active Directory Module, то сможем получить информацию вот так:
Get-ADObject -LDAPFilter "(ObjectClass=GroupPolicyContainer)" -Properties Name, DisplayName,gPCFileSysPath | select Name, DisplayName,GPCFileSysPath | Format-List
Наконец, PowerView имеет такую же функциональность:
Get-NetGpo
Теперь желательно из GUID получить имя политики. Конечно, AD Module и PowerView умеют делать это самостоятельно, но в случае, если у нас есть только GUID, имя можно получить следующим образом:
# RSAT Get-Gpo -GUID '{205F0E03-17C3-4E9B-925E-330FAD565CA1}'# PowerView v3 Get-DomainGPO -Identity '{205F0E03-17C3-4E9B-925E-330FAD565CA1}' | select DisplayName
Мы также можем изучить политики, привязанные к определенному устройству:
# PowerView v2 Get-NetGPO -ComputerName name.domain.com
# PowerView v3 Get-DomainGPO -ComputerIdentity name.domain.com -Properties Name, DisplayName
Наконец, самое интересное. Пора изучать все ACL на найденные GPO, пытаясь найти мисконфиг. Сделать это можно с помощью разных средств. Чаще всего используются или BloodHound, или PowerView:
# PowerView v2 # Получение ACL на все политики Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name} # Найти GPO, на которые пользователь student имеет права Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ?{$_.IdentityReference -match "student"}
Пользователь vaska
имеет подозрительно высокие права на GPO с GUID {
. PowerView третьей версии (он же PowerView DEV) не отстает от своего младшего собрата, но отличается тем, что не умеет автоматически преобразовывать SID в понятное для человека имя пользователя, поэтому в конец каждого командлета добавляется огромная строка:
# PowerView v3 # Находим ACL на все политики Get-DomainGPO|Get-DomainObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value) -Force; $_} # Находим GPO, на которые у пользователя domain\user есть права Get-DomainGPO|Get-DomainObjectAcl -ResolveGUIDs | Foreach-Object {$_ | Add-Member -NotePropertyName Identity -NotePropertyValue (ConvertFrom-SID $_.SecurityIdentifier.value) -Force; $_}| Foreach-Object {if ($_.Identity -eq $("domain\user")) {$_}} # Находим GPO, на которую пользователи с RID > 1000 имеют какие-нибудь права: Get-DomainObjectAcl -LDAPFilter '(objectCategory=groupPolicyContainer)' | ? { ($_.SecurityIdentifier -match '^S-1-5-.*-[1-9]\d{3,}$') -and ($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite|WriteDacl|WriteOwner')} # Обнаружение пользователей (кроме ожидаемых, таких как Enterprise Admins, Domain Admins), которые могут изменять GPO Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | where { $_.ActiveDirectoryRights -match "GenericWrite|AllExtendedRights|WriteDacl|WriteProperty|WriteMember|GenericAll|WriteOwner" -and $_.SecurityIdentifier -match "S-1-5-21-3301805923-005976665-244893303-[\d]{4,10}" }
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»