Обходи Admin Protection через UIAccess
Tip
Вчіться та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вчіться та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Перегляньте повний каталог HackTricks Training для assessment tracks (ARTA/GRTA/AzRTA) і Linux Hacking Expert (LHE).
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 Discord group, telegram group, слідкуйте за @hacktricks_live на X/Twitter, або перегляньте сторінку LinkedIn і YouTube channel.
- Діліться hacking tricks, надсилаючи PRs до репозиторіїв github HackTricks і HackTricks Cloud.
Огляд
- Windows AppInfo надає
RAiLaunchAdminProcessдля запуску процесів UIAccess (призначено для accessibility). UIAccess обходить більшість UIPI-фільтрів повідомлень інтерфейсу, щоб програми доступності могли керувати UI з вищим IL. - Увімкнення UIAccess напряму вимагає
NtSetInformationToken(TokenUIAccess)з SeTcbPrivilege, тому викликачі з низькими привілеями покладаються на сервіс. Сервіс виконує три перевірки цільового бінарника перед встановленням UIAccess:- Вбудований manifest містить
uiAccess="true". - Підписаний будь-яким сертифікатом, якому довіряє Local Machine root store (без вимоги EKU/Microsoft).
- Розташований у шляху доступному лише адміністраторам на системному диску (наприклад,
C:\Windows,C:\Windows\System32,C:\Program Files, за винятком конкретних записуваних підшляхів).
- Вбудований manifest містить
RAiLaunchAdminProcessне показує жодного consent prompt для запусків UIAccess (інакше інструменти доступності не могли б взаємодіяти з prompt).
Формування токена та рівні цілісності
- Якщо перевірки пройдені, AppInfo копіює токен виклику, вмикає UIAccess і підвищує Integrity Level (IL):
- Limited admin user (користувач входить до Administrators але запускається з фільтром) ➜ High IL.
- Non-admin user ➜ IL підвищується на +16 рівнів до обмеження High (System IL ніколи не присвоюється).
- Якщо токен виклику вже має UIAccess, IL залишається незмінним.
- Трюк «Ratchet»: процес UIAccess може вимкнути UIAccess у себе, перезапуститися через
RAiLaunchAdminProcessі отримати ще одне збільшення IL на +16. Medium➜High вимагає 255 перезапусків (шумно, але працює).
Чому UIAccess дозволяє обхід Admin Protection
- UIAccess дозволяє процесу з нижчим IL відправляти віконні повідомлення вікнам з вищим IL (обхід UIPI-фільтрів). При рівних IL класичні UI-примітиви, як
SetWindowsHookEx, дозволяють інжекцію коду/завантаження DLL в будь-який процес, що володіє вікном (включаючи message-only windows, які використовуються COM). - Admin Protection запускає процес UIAccess під особою limited user, але на High IL, без індикації. Як тільки довільний код виконається всередині цього High-IL UIAccess процесу, атакуючий може інжектитися в інші High-IL процеси на робочому столі (навіть тих, що належать іншим користувачам), порушуючи передбачувану ізоляцію.
HWND-to-process handle primitive (GetProcessHandleFromHwnd / NtUserGetWindowProcessHandle)
- На Windows 10 1803+ API переміщено в Win32k (
NtUserGetWindowProcessHandle) і може відкривати handle процеса, використовуючи бажанийDesiredAccess, наданий викликачем. Шлях в ядрі використовуєObOpenObjectByPointer(..., KernelMode, ...), що обходить звичні user-mode перевірки доступу. - Передумови на практиці: цільове вікно має бути на тому ж робочому столі, і UIPI-перевірки мають пройти. Історично викликач з UIAccess міг обійти UIPI-фейл і все одно отримати kernel-mode handle (виправлено як CVE-2023-41772).
- Вплив: дескриптор вікна стає здатністю отримати потужний handle процеса (зазвичай
PROCESS_DUP_HANDLE,PROCESS_VM_READ,PROCESS_VM_WRITE,PROCESS_VM_OPERATION), який викликач зазвичай не міг би відкрити. Це дозволяє доступ між сандбоксами і може порушити межі Protected Process / PPL, якщо ціль експонує будь-яке вікно (включаючи message-only windows). - Практичний сценарій зловживання: перерахувати або знайти HWND (наприклад,
EnumWindows/FindWindowEx), визначити PID власника (GetWindowThreadProcessId), викликатиGetProcessHandleFromHwnd, а потім використовувати повернутий handle для читання/запису пам’яті або примітивів захоплення коду. - Поведінка після виправлення: UIAccess більше не дає kernel-mode відкриттів при UIPI-фейлі, і дозволені права доступу обмежені до набору прав, необхідних для legacy hooks; Windows 11 24H2 додає перевірки захисту процесу і feature-flagged безпечні шляхи. Вимкнення UIPI для всієї системи (
EnforceUIPI=0) послаблює ці захисти.
Уразливості в перевірці захищених директорій (AppInfo AiCheckSecureApplicationDirectory)
AppInfo отримує остаточний шлях через GetFinalPathNameByHandle і потім застосовує рядкові allow/deny перевірки проти захардкоджених коренів/виключень. Від кількох спрощень у валідації походять такі обходи:
- Directory named streams: виключені записувані директорії (наприклад,
C:\Windows\tracing) можна обійти за допомогою named stream на самій директорії, напр.C:\Windows\tracing:file.exe. Рядкові перевірки бачатьC:\Windows\і пропускають виключений підшлях. - Записуваний файл/директорія всередині дозволеного кореня:
CreateProcessAsUserне вимагає розширення.exe. Перезапис будь-якого записуваного файлу під дозволеним коренем виконуваним payload-ом працює, або копіювання підписаного EXE зuiAccess="true"у будь-яку записувану піддиректорію (наприклад, залишки оновлення якTasks_Migrated, коли вони присутні) дозволяє пройти перевірку secure-path. - MSIX into
C:\Program Files\WindowsApps(fixed): non-admins могли інсталювати підписані MSIX пакети, які потрапляли вWindowsApps, що не було виключено. Запаковування UIAccess бінарника в MSIX і запуск його черезRAiLaunchAdminProcessпризводив до promptless High-IL UIAccess процесу. Microsoft виправили це, виключивши цей шлях; сама обмежена можливістьuiAccessу MSIX вже вимагає admin install.
Сценарій атаки (High IL без підказки)
- Отримати/сконструювати signed UIAccess binary (manifest
uiAccess="true"). - Помістити його туди, куди AppInfo дозволяє (або зловживати помилкою в валідації шляху/записуваним артефактом як вище).
- Викликати
RAiLaunchAdminProcess, щоб запустити його безшумно з UIAccess + підвищеним IL. - З цього High-IL плацдарму таргетувати інший High-IL процес на робочому столі за допомогою window hooks/DLL injection або інших same-IL примітивів, щоб повністю скомпрометувати контекст адміністратора.
Перелік кандидатних записуваних шляхів
Запустіть helper на PowerShell, щоб виявити записувані/перезаписувані об’єкти всередині номінально secure roots з перспективи обраного токена:
$paths = "C:\\Windows","C:\\Program Files","C:\\Program Files (x86)"
Get-AccessibleFile -Win32Path $paths -Access Execute,WriteData `
-DirectoryAccess AddFile -Recurse -ProcessId <PID>
- Запускайте від імені Адміністратора для ширшої видимості; встановіть
-ProcessIdна процес з низькими привілеями, щоб відобразити доступ цього токена. - Фільтруйте вручну, щоб виключити відомі заборонені підкаталоги перед використанням кандидатів з
RAiLaunchAdminProcess.
Пов’язані
Поширення запису реєстру доступності Secure Desktop — LPE (RegPwn):
Secure Desktop Accessibility Registry Propagation LPE (RegPwn)
Посилання
Tip
Вчіться та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вчіться та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вчіться та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Перегляньте повний каталог HackTricks Training для assessment tracks (ARTA/GRTA/AzRTA) і Linux Hacking Expert (LHE).
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 Discord group, telegram group, слідкуйте за @hacktricks_live на X/Twitter, або перегляньте сторінку LinkedIn і YouTube channel.
- Діліться hacking tricks, надсилаючи PRs до репозиторіїв github HackTricks і HackTricks Cloud.


