Обход защиты администратора Windows: эксплуатация UI Access для повышения привилегий
Исследование Джеймса Форшоу раскрывает критические уязвимости в реализации UI Access, позволяющие обходить защиту администратора Windows. Узнайте о технических деталях и мерах защиты.
Обход защиты администратора Windows: эксплуатация UI Access для повышения привилегий
Автор: [Журналист по кибербезопасности]
Основные выводы
Исследователь в области безопасности Джеймс Форшоу раскрыл технические детали пяти критических уязвимостей в реализации UI Access от Microsoft, которые позволяли злоумышленникам обходить защиту администратора Windows. Все девять обходных путей, выявленных в ходе исследования Форшоу, включая пять, подробно описанных в этом анализе, на данный момент исправлены Microsoft.
Уязвимости связаны с функцией UI Access, изначально внедренной в Windows Vista для поддержки вспомогательных технологий, таких как программы чтения с экрана. Злоупотребляя этой функцией, атакующие могли добиться произвольного выполнения кода в процессе с высоким уровнем целостности UI Access, нарушая границу безопасности защиты администратора без взаимодействия с пользователем.
Технические основы: UI Access и UIPI
Эволюция безопасности взаимодействия с окнами
До выхода Windows Vista любой процесс, работающий на рабочем столе пользователя, мог управлять любым окном, созданным другим процессом, включая привилегированные, с помощью оконных сообщений. Это поведение эксплуатировалось в так называемых Shatter-атаках, когда пользователь с ограниченными правами мог манипулировать привилегированными элементами интерфейса для повышения привилегий. Microsoft устранила эту проблему, удалив элементы интерфейса из привилегированного кода.
С появлением User Account Control (UAC) в Windows Vista процессы стали запускаться с разными уровнями привилегий на одном рабочем столе. Чтобы предотвратить манипуляции с окнами между процессами с разными привилегиями, Microsoft внедрила User Interface Privilege Isolation (UIPI), использующую Mandatory Integrity Control (MIC) для ограничения взаимодействия процессов. UIPI блокирует отправку оконных сообщений или использование хуков процессами с более низким уровнем целостности для взаимодействия с окнами, созданными процессами с более высоким уровнем целостности.
Примеры:
- Процесс ограниченного пользователя (Medium integrity) не может отправлять сообщения процессу администратора (High integrity).
- UIPI также блокирует другие функции взаимодействия с интерфейсом, такие как оконные хуки, при использовании между разными уровнями целостности.
Проблема доступности
Ограничения UIPI создали серьезную проблему для вспомогательных технологий, таких как программы чтения с экрана. Эти приложения, работающие от имени ограниченных пользователей, больше не могли взаимодействовать с процессами администратора — они не могли считывать содержимое окон или выполнять действия, такие как нажатие кнопок. Для решения этой проблемы Microsoft ввела флаг UI Access.
При установке на токен доступа процесса во время инициализации флаг UI Access предоставляет специальные разрешения для обхода многих ограничений UIPI. Включение этого флага требует привилегии SE_TCB_NAME, которая доступна только системным службам. В результате создание процесса с UI Access предполагает взаимодействие с системной службой — обычно службой UAC — через вызов RPC RAiLaunchAdminProcess.
Процесс создания процесса с UI Access
Для предотвращения злоупотреблений служба UAC проводит строгие проверки исполняемого файла перед включением флага UI Access:
- Требование манифеста: Исполняемый файл должен содержать встроенный манифест с атрибутом
uiAccess, установленным вtrue. - Подпись кода: Файл должен быть подписан сертификатом подписи кода, доверенным хранилищем корневых сертификатов локального компьютера.
- Безопасное расположение: Исполняемый файл должен находиться в защищенном от записи месте на системном диске, например:
- Каталог
Program Files - Каталог
Windows(за исключением известных доступных для записи мест) - Каталог
System32(за исключением известных доступных для записи мест)
- Каталог
Если эти критерии соблюдены, служба UAC:
- Создает копию токена доступа вызывающего процесса.
- Включает флаг UI Access.
- Повышает уровень целостности в зависимости от вызывающего процесса:
- Ограниченный пользователь UAC-администратора: устанавливает уровень целостности High.
- Администратор: устанавливает уровень целостности High (обычно это не требует изменений).
- Обычный пользователь: устанавливает уровень целостности равным уровню вызывающего процесса + 16, но не выше High.
Важное замечание: Флаг UI Access позволяет обходить только ограниченный набор операций, таких как отправка оконных сообщений процессам с более высоким уровнем целостности. Он не разрешает использование оконных хуков, которые могли бы привести к внедрению кода.
Эксплуатация UI Access в защите администратора
Основная уязвимость
Защита администратора — более новая функция Windows, предназначенная для создания безопасной границы для UAC путем отделения ограниченного пользователя от теневого администратора. Однако Форшоу обнаружил, что процессы с UI Access могут нарушать эту границу:
- Когда ограниченный пользователь создает процесс с UI Access через
RAiLaunchAdminProcess, процесс запускается с токеном вызывающего процесса (ограниченного пользователя), но с включенным флагом UI Access и уровнем целостности High. - Процесс с высоким уровнем целостности может скомпрометировать любой другой процесс с высоким уровнем целостности на том же рабочем столе, даже если он запущен от имени другого пользователя.
- Поскольку процесс с UI Access работает от имени ограниченного пользователя, отсутствует разделение профилей — ключевое улучшение в защите администратора.
- Повышение до высокого уровня целостности происходит незаметно, позволяя злоумышленникам нарушать границу безопасности без уведомления пользователя.
Достижение произвольного выполнения кода в процессе с UI Access
Форшоу выявил несколько методов достижения произвольного выполнения кода в процессе с высоким уровнем целостности и UI Access. Хотя Microsoft ранее указывала, что эти проблемы не являются приоритетными для исправления, некоторые из них уже устранены. Методы делятся на три основные категории:
1. Обход проверки безопасного каталога приложения
Метод AiCheckSecureApplicationDirectory службы UAC проверяет, находится ли исполняемый файл в безопасном расположении. Форшоу обнаружил несколько способов обойти эту проверку:
-
Потоки NTFS (NTFS Named Streams): В 2017 году Форшоу сообщил об обходном пути, при котором злоумышленник мог записать поток NTFS в каталог, доступный для записи ограниченному пользователю. Например, каталог
C:\Windows\tracingдоступен для записи, но исключен из безопасной проверки. Записав поток (например,C:\Windows\tracing:file.exe), файл считался безопасным, так как путь находился вC:\Windows. Эта проблема была устранена в более поздних версиях Windows. -
Доступные для записи файлы/каталоги в безопасных расположениях: Злоумышленники могли перезаписать существующий доступный для записи файл в безопасном расположении вредоносным исполняемым файлом. API
CreateProcessAsUser, используемый службой UAC, не требует определенного расширения файла, что позволяло запускать любой файл. Альтернативно злоумышленники могли скопировать исполняемый файл в доступный для записи каталог внутри безопасного расположения. -
Злоупотребление установщиком MSIX: В недавнем исследовании Форшоу обнаружил, что установщик Windows может размещать файлы MSIX в каталоге
C:\Program Files\WindowsApps, который не исключается из безопасной проверки. Windows 11 по умолчанию позволяет устанавливать подписанные файлы MSIX без прав администратора. Упаковав исполняемый файл с UI Access в установщик MSIX и подписав его произвольным сертификатом, злоумышленники могли разместить файл в безопасном расположении. Эта проблема была исправлена путем исключения каталогаWindowsApps.
2. Другие исторические методы обхода
Форшоу также упомянул другие исторические методы достижения произвольного выполнения кода в процессе с UI Access, включая:
- Подмена DLL (DLL Planting): Перехват легитимных исполняемых файлов в безопасных расположениях путем подмены вредоносных DLL.
- Злоупотребление COM: Эксплуатация компонентов COM, использующих окна только для сообщений, для компрометации процессов без отображения интерфейса.
Анализ влияния
Описанные в этом исследовании уязвимости представляют значительный риск для систем Windows с включенной защитой администратора:
- Повышение привилегий: Злоумышленники могли повысить привилегии с ограниченного пользователя до уровня High integrity, эффективно обходя границу безопасности защиты администратора.
- Скрытая эксплуатация: Повышение до высокого уровня целостности происходит без взаимодействия с пользователем, что затрудняет обнаружение.
- Произвольное выполнение кода: После достижения произвольного выполнения кода в процессе с высоким уровнем целостности и UI Access злоумышленники могут скомпрометировать любой другой процесс с высоким уровнем целостности на том же рабочем столе.
- Отсутствие разделения профилей: Отсутствие разделения профилей подрывает одно из ключевых улучшений безопасности в защите администратора.
Рекомендации
Специалисты по безопасности и системные администраторы должны предпринять следующие шаги для снижения рисков, связанных с этими уязвимостями:
- Установите исправления: Убедитесь, что все системы Windows обновлены последними исправлениями безопасности от Microsoft для устранения исправленных обходных путей.
- Мониторинг процессов с UI Access: Внедрите мониторинг необычного создания процессов с UI Access, особенно работающих с высоким уровнем целостности.
- Ограничьте доступ к безопасным расположениям: Ограничьте права на запись в каталоги, такие как
Program Files,WindowsиSystem32, только для администраторов. - Аудит сертификатов подписи кода: Проверьте и ограничьте сертификаты подписи кода, доверенные хранилищем корневых сертификатов локального компьютера, чтобы предотвратить злоупотребления.
- Отключите ненужные функции доступности: Отключите UI Access для приложений, которые в нем не нуждаются, чтобы сократить поверхность атаки.
Заключение
Исследование Джеймса Форшоу подчеркивает постоянные вызовы в обеспечении безопасности механизмов повышения привилегий Windows. Хотя UI Access был разработан для поддержки доступности, его реализация создала значительные риски безопасности, которые могли быть использованы для обхода защиты администратора. Microsoft устранила уязвимости, описанные в этом анализе, но исследование подчеркивает важность тщательного тестирования безопасности и проактивного мониторинга для защиты от подобных угроз в будущем.
Для получения дополнительных технических деталей ознакомьтесь с оригинальной публикацией Форшоу на Project Zero.