Как обойти контроль учетных записей пользователей: способы
![]()
Потребность в том, чтобы обойти контроль учетных записей администраторов, возникает в современных версиях ОС Windows. UAC (User Account Control) призван предостерегать администратора компьютера о всех трансформациях, которые могут наблюдаться на ПК, и поэтому админу постоянно приходи тся принимать решение: «Разрешить» или «Не разрешить».
Контроль учетных записей — это безобидная функция, но хочется знать , как ее обойти в случаях интенсивной работы на компьютере. Потому что постоянно всплывающие окна с вопросами — это очень сильно раздражает и отвлекает от основной работы.
Но в то же время роль этой функции — обезопасить ваш ПК от самопроизвольной инсталляции программ, влияющих на работоспособность компьютера и вносящих трансформации прямо в систему.
Как обойти контроль учетных записей пользователя Windows
- Раскрыть меню «Пуск», потом там вам нужно будет найти «Поиск».
- В поисковой стро к е впишите: «UAC». Вам будет предложен URL: «Изменение параметров контроля учетных записей». Жмите на нее.
- Вам будет предложено окошко : «Параметры управления учетными записями пользователей».
- В открывшемся окошке слева вы найдете ползунок, переместив который можно настроить , какие уведомления об изменениях вам будут приходить. Тут же можно сместить ползунок в самый низ , и никакие оповещения вам приходить не будут.
- Выбер и те нужный уровень контроля и нажмите «Ок», чтобы преобразования вступили в силу.
Другие способы обойти контроль учетных записей пользователя
- Используя командную строку.Откройте командную строку. И для того , чтобы обойти контроль учетных записей , нужно ввести следующий код: «C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f». После ввода кода нужно будет перезагрузить компьютер, чтобы преобразования вступили в силу.
- Используя реестр. Откройте редактор реестра сочетанием кноп «Windows+R». Далее пройдите по пути: «HKEY_LOCAL_MACHINE\ SOFTWARE\ Microsoft\ Windows\ CurrentVersion\ Policies\ System» . Нужно будет отредактировать три ключа: «PromptOnSecureDes k top», «EnableLUA», «ConsentPromptBehav i orAdmin». Кликайте по ним двойным кликом, чтобы отредактировать. Чтобы обойти UAC , нужно ввести следующее значение: «0-1-0». Как сделаете э то , нужно будет перезагрузить ПК.
Заключение
В нашей статье вы ознакомились с тем , как обойти контроль учетных записей вашего компьютера. Если в этом есть острая необходимость, то этот шаг должен быть сделан осознанно. Ведь обход UAC — это хоть и небольшой, но минус в безопасности системы компьютера. Если в этом нет острой необходимости, то можно остановиться лишь на ограничении уровня контроля.
В любом случае ответственность за состояние вашего компьютера будет лежать только на вас — помните об этом.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Как запустить программу без прав администратора и обойти подсказку UAC?
При запуске многие программы требуют повышения прав, хотя на самом деле им не нужны права администратора для их нормальной работы. При запуске такой программы под учетной записью обычного пользователя (если на компьютере включен контроль учетных записей пользователей) появится приглашение UAC, и пользователю потребуется ввести пароль администратора. Чтобы обойти этот механизм, многие пользователи просто отключают UAC или предоставляют привилегии администратора пользователю на компьютере, добавляя учетную запись пользователя в локальную группу «Администраторы». Конечно, оба метода небезопасны.
Почему некоторые приложения Windows не работают под обычными пользователями и требуют прав администратора?
Приложению могут потребоваться права администратора для изменения некоторых файлов (журналов, конфигураций и т. д.) В своей папке C:\Program Files (x86)\Приложение. По умолчанию пользователи не имеют прав на редактирование (запись и изменение) этого каталога. Для нормальной работы этой программы требуются права администратора. Чтобы решить эту проблему, необходимо вручную предоставить разрешение на изменение и/или запись для пользователя (или группы пользователей) в папке приложения на уровне NTFS.
Как запустить программу, которая требует прав администратора под обычным пользователем?
Ранее мы описывали, как запустить программу с сохраненным паролем администратора, используя опцию /SAVECRED. Данное действие небезопасно.
Давайте рассмотрим более простой способ заставить любую программу работать без ввода пароля администратора и с включенным UAC.
В качестве примера возьмем редактор реестра – regedit.exe. Когда вы запускаете regedit.exe, появляется окно UAC, и если вы не подтвердите повышение прав, редактор реестра не запустится.

Вариант 1.
Создайте на рабочем столе текстовый файл run-as-non-admin.bat, содержащий следующий код :
cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %1″
Чтобы принудительно запустить regedit.exe без прав администратора и подавить приглашение UAC, просто перетащите файл EXE, который вы хотите запустить, на этот файл BAT на рабочем столе.

Редактор реестра запуститься без запроса UAC. Если вы откроете Диспетчер задач и перейдете на вкладку Подробности , вы увидите, что в системе существует процесс regedit.exe, запущенный с правами обычного пользователя.

Таким же образом вы можете запустить любое приложение, используя файл BAT. Просто укажите путь к исполняемому файлу.
Вариант 2.
Рассмотрим еще один способ. Вы можете добавить контекстное меню, которое позволяет запускать все приложения без повышения прав. Для этого создайте следующий файл REG и импортируйте его в реестр.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker] @="Run as user without UAC privilege elevation" [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command] @="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
После этого, чтобы запустить любое приложение без прав администратора, просто выберите пункт «Run as user without UAC privilege elevation» в контекстном меню.
Запуск программы без прав администратора и подавлением запроса UAC

24.03.2023

itpro

Windows 10, Windows 11, Windows Server 2016, Windows Server 2019

комментариев 59
Некоторые программы при запуске могут требовать повышения прав до администратора (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые NTFS разрешения пользователям на каталог программы в Program Files и ее ветки реестра). Если на компьютере включен контроль учетных записей (User Account Control), то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Оба эти способа не рекомендуется широкого использовать, т.к. вы снижаете безопасность и защиту Windows. В этой статье мы рассмотрим, как запустить программу, которая требует права администратора, от имени простого пользователя и подавить запрос повышения привилегий UAC.
Предоставить пользователю права на запуск программы
Программа может запрашивать права администратора при запуске, если:
- Программе нужно получить доступ на системный каталог или файл, на отсутствуют NTFS разрешения для непривилегированных пользователей;
- Если программа собрана со специальным флагом, которые требует повышения прав при запуске (requireAdministrator).
В первом случае для решения проблемы администратору достаточно предоставить RW или Full Control разрешения на каталог программы или необходимый системных каталог. Например, программа хранит свои файлы (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp) или каком-то системном каталоге. Для корректной работы программы пользователю нужны права записи в эти файлы. По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора.
Чтобы разрешить запуск программы под непривилегированным пользователем администратора достаточно вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись на файл/каталог на уровне файловой системы NTFS.

Чтобы найти список файлов, папок и ключей реестра, к которым обращается программа, воспользуйтесь утилитой Process Monitor (https://learn.microsoft.com/en-us/sysinternals/downloads/procmon). Включите фильтр по имени процесса программы и найдите все ресурсы, при доступе к которым появляется Access Denied. Предоставьте необходимые права на папки/файлы/ветки реестра.

Примечание. В рекомендациях Microsoft для разработчиков указано, что не рекомендуется хранить изменяющиеся данных приложения в каталоге C:\Program Files неверна. Правильнее хранить данные приложения в профиле пользователя. Но это уже вопрос о лени и некомпетентности разработчиков программ.
Запуск программы, требующей права администратора, от обычного пользователя
Ранее мы уже описывали, как можно с помощью параметра RunAsInvoker отключить запрос UAC для конкретной программы. Однако этот метод недостаточно гибкий.
Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).
Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.

Если запустить regedit.exe , то перед вами появится окно User Account Contol с запросом пароля пользователя с правами администратора на этом компьютере ( Do you want to allow this app to make changes to your device? ). Если не указать пароль и не подтвердить повышение привилегии, приложение не запустится.

Попробуем обойти запрос UAC для этой программы. Создайте на рабочем столе файл run-as-non-admin.bat со следующим текстом:
cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %1″
Теперь для принудительного запуска приложения без прав администратора и подавлением запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.

Редактор реестра должен запуститься без появления запроса UAC и без ввода пароля администратора. Откройте диспетчер процессов, добавьте столбец Elevated и убедитесь, что в Windows запушен непривилегированный процесс regedit (запущен с правами пользователя).

Попробуйте отредактировать любой параметр в ветке HKEY_LOCAL_MACHINE. Как вы видите доступ на редактирование реестра в этой ветке запрещен (у данного пользователя нет прав на запись в системные ветки реестра). Но вы можете добавлять и редактировать ключи в собственной ветке реестра пользователя — HKEY_CURRENT_USER.

Аналогичным образом через bat файл можно запускать и конкретное приложение, достаточно указать путь к исполняемому файлу.
run-app-as-non-admin.bat
Set ApplicationPath=»C:\Program Files\MyApp\testapp.exe»
cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %ApplicationPath%»
Также можно добавить контекстное меню, которое добавляет у всех приложений возможность запуска без повышения прав. Для этого создайте файл runasuser.reg файл, скопируйте в него следующий код, сохраните и импортируйте его в реестр двойным щелчком по reg файлу (понадобятся права администратора).
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker] @="Run as user without UAC elevation" [HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command] @="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Можно распространить этот пункт меню на компьютеры в домене через импорт ветки реестра с помощью групповых политики.
После этого для запуска любого приложения без прав админа достаточно выбрать пункт “Run as user without UAC elevation” в контекстном меню проводника Windows File Explorer.

Еще раз напомню, что использование программы в режиме RUNASINVOKER не запускает приложение с правами администратора. Параметр AsInvoker подавляет запрос UAC и указывает программе, что она должна запуститься с правами текущего пользователя и не запрашивать повышение привилегий. Если программе действительно нужны повышенные права для редактирования системных параметров или файлов, она не будет работать или повторно запросит права администратора.
Запуск программы в режиме RunAsInvoker из командной строки
Переменная окружения __COMPAT_LAYER позволяет устанавливать различные уровни совместимости для приложений (вкладка Совместимость в свойствах exe файла). С помощью этой переменной можно указать настройки совместимости, с которыми нужно запускать программу. Например, для запуска приложения в режиме совместимости с Windows 7 и разрешением 640×480, установите:
set __COMPAT_LAYER=Win7RTM 640×480

Из интересных нам опций переменной __COMPAT_LAYER можно выделить следующие параметры:
- RunAsInvoker — запуск приложения с привилегиями родительского процесса без запроса UAC;
- RunAsHighest — запуск приложения с максимальными правами, доступными пользователю (запрос UAC появляется, если у пользователя есть права администратора);
- RunAsAdmin — запустить приложение с правами администратора (запрос AUC появляется всегда).
Следующие команды включат режим RUNASINVOKER для текущего процесса и запускает указанную программу:
start «» «C:\Program Files\MyApp\testapp.exe»
Включить режим RunAsInvoker в манифесте exe файла программы
Как мы уже говорили выше, Windows показывает значок щита UAC у программ, которые требуют повышенных привилегий для запуска. Это требование разработчики задают при разработке в специальной секции программы — манифесте.
Вы можете отредактировать манифест исполняемого exe файла программы и отключить требование запускать программу в привилегированном режиме.
Для редактирования манифеста программы можно использовать бесплатную утилиту Resource Hacker. Откройте исполняемый файл программы в Resource Hacker.
В этом примере я буду править манифест утилиты Sysinternals Autologon.exe, которую можно использовать для автоматического входа в Windows без пароля.
В дереве слева перейдите в раздел Manifest и откройте манифест программы. Обратите внимание на строки:
Именно благодаря опции requireAdministrator Windows всегда запускает эту программу с правами администратора.
Измените requireAdministrator на asInvoker и сохраните изменения в exe файле.

Обратите внимание, что теперь у иконки программы пропал щит UAC и вы можете запустить ее без запроса прав администратора с привилегиями текущего пользователя.

Если исполняемый файл программы подписан цифровой подпись (сертификатом Code Signing), то после модификации exe файла, он может перестать запускаться или выдавать предупреждение.
В этом случае можно заставить программу использовать внешний файл манифеста. Создайте в каталоге с ехе файлом текстовый файл app.exe.manifest (например Autologon.exe.manifest) и скопируйте в него код манифеста из Resource Hacker. Измените requireAdministrator на asInvoker. Сохраните файл.
Чтобы Windows при запуске приложений всегда пробовала использовать внешний файл манифеста, включите специальный параметр реестра:
REG ADD «HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide» /v PreferExternalManifest /t REG_DWORD /d 1 /f
Перезагрузите Windows и убедитесь, что программа использует внешний файл манифеста, и запускается без прав администратора.
Запуск программы с сохраненным паролем администратора
Если способы запуска программы через режим RunAsInvoker не работают для вашего устаревшего приложения, можно попробовать запускать такие программы в сессии пользователя с помощью сохраненного пароля администратора. Этот способ мы целенаправленно оставили последним, т.к. это наименее безопасный способ запуска программ без предоставления прав локального администратора пользователю.
Создайте на рабочем столе новый ярлык для запуска программы. Укажите имя компьютера, имя локального администратора и полный путь к исполняемому файлу программы.
runas /user:wks-1122h2\root /savecred «C:\CorpApp\myapp.exe»

Запустите ярлык под пользователем. При первом запуске откроется командная строка, в которой нужно будет указать пароль администратора.

Утилита RunAs при запуске с параметром /SAVECRED сохраняет имя пользователя и пароль в диспетчере паролей Windows (Credentials Manager).
При следующем запуске ярлыка утилита runas автоматически получит сохраненный пароль из Credentials Manager и использует его для запуска программы от имени указанного локального администратора (пароль не запрашивается повторно при каждом запуске).
Вы можете вывести список пользователей с сохраненными паролями в Credential Manager с помощью команды:

В Windows 11 при запуске такого ярлыка появляется ошибка:
RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe 740: The requested operation requires elevation.

Чтобы исправить ошибку, отредактируйте команду в свойствах ярлыка. Замените ее на:
C:\Windows\System32\runas /profile /user:WKS-1122H2\root /savecred «cmd.exe /C C:\CorpApp\myapp.exe»

Как мы указывали выше, использование параметра /savecred не безопасно, т.к. пользователь, в чьем профиле сохранен чужой пароль может использовать его для запуска любой программы или команды под данными привилегиями, или даже сменить пароль пользователя с правами администратора. Кроме того, сохраненные пароли из Credential Manager можно получить в открытом виде с помощью утилит типа Mimikatz, лучше
В Windows можно заблокировать возможность сохранения паролей в Credential Manager с помощью параметра групповой политики Network access: Do not allow storage of passwords and credentials for network authentication (Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options).
Преодолеть недостаток использования сохраненного пароля через runas позволяют несколько сторонних утилит. Например, AdmiLink, RunAsRob, RunAsSpc. Эти программы позволяют сохранить пароль администратора в зашифрованном виде и безопасно запустить программу с правами администратора. Эти утилиты проверяют при запуске путь и контрольную сумму исполняемого файла и не позволят запустить произвольную программу.
Предыдущая статья Следующая статья
UAC Bypass и вариации на тему детектирования. Часть 1

Сегодня мы хотим рассказать о возможных вариантах обхода контроля учётных записей пользователей (UAC) и способах их детектирования.
Если коротко, UAC (User Account Control) – механизм, поддерживаемый всеми последними версиями Windows, который призван предотвратить несанкционированные административные действия, потенциально опасные для системы. UAC Bypass является достаточно распространённой атакой среди вредоносного ПО. Из последних ярких примеров – червь Raspberry Robin, который использует утилиту fodhelper.exe. Малварь, обнаруженная Microsoft, может обходить User Account Control (UAC) в зараженных системах с помощью легитимных инструментов Windows. Поэтому мы решили не проходить UAC Bypass стороной, а подробно его изучить.
В данном цикле статей мы проведем подробный разбор большого числа рабочих способов по обходу UAC и классифицируем их в категории, которые наиболее точно отражают возможный вариант выполнения атаки. После чего рассмотрим потенциальные способы детекта UAC Bypass.
Но для начала предлагаем ознакомиться с самим механизмом работы UAC немного глубже. Если для вас UAC не нуждается в представлении, то можете сразу переходить к разделу Способы обхода UAC.
Что такое UAC

User Account Control (UAC) – контроль учётных записей пользователей, который является одним из механизмов безопасности ОС Windows.
При отсутствии данного механизма, если пользователь запустит вредоносное программное обеспечение из-под своей сессии, то оно получит административные привилегии. В тоже время, при наличии включенного UAC в системе, пользователь по-прежнему будет обладать административными привилегиями, но его основной токен будет пользовательским. Поэтому все процессы, включая вредоносное ПО, запустятся с токеном обычного пользователя. По крайней мере в теории это выглядит так.
Единственный, по изначальной задумке разработчиков, способ получить административный токен – выполнить функцию «Запустить от имени администратора», а затем во всплывающем окне подтвердить необходимость выполнения действия или действий с административными привилегиями нажатием на кнопку «Да». Либо ввести учетные данные пользователя, обладающего административными привилегиями. При этом выполнить данную операцию пользователь может только интерактивно.
Данный механизм впервые появился в Windows Vista, как способ смягчить переход от подхода «Чтобы пользоваться ПК, нужно быть администратором» к подходу «Чтобы пользоваться ПК, можно быть обычным пользователем». До этого момента практически любому пользователю для комфортной работы в ОС Windows необходимо было обладать правами администратора. И, как следствие, зачастую это приводило к быстрой компрометации ОС, так как не соблюдалось базовое правило ИБ – принцип минимальных привилегий. Поэтому разработчики ОС Windows взяли курс на упрощение работы из-под обычного пользователя.
Настройки UAC
После выпуска ОС Windows Vista многие пользователи остались недовольны лишними действиями, которые им нужно было совершать, поэтому Microsoft решила добавить 2 дополнительные опции в настройках UAC, сильно снижающие его защиту:
1. Always notify / Всегда уведомлять
2. Notify only when apps try to change settings, use the secure desktop (Новая опция) / Уведомлять только при попытках приложений изменять настройки, использовать secure desktop
3. Notify only when apps try to change settings, don’t use the secure desktop (Новая опция) / Уведомлять только при попытках приложений изменять настройки, не использовать secure desktop
4. Never notify / Никогда не уведомлять
Опция №2 по умолчанию включена в настройках системы. Несмотря на обилие опций на практике следует рассматривать только два варианта: всегда включена, либо не работает. Более подробно о работе опций можно узнать здесь.
Также были добавлены программы и функции, которые могут повышать свои привилегии при запуске, но без открытия окна UAC Prompt. Они содержат специальное свойство auto-elevate, которое применяется только если не включена опция Always notify. Но стоит отметить, что это справедливо не для всех программ, так как существуют и те, что работают даже если UAC включён в Always notify.
Способы обхода UAC
Обход UAC или UAC Bypass – это запуск процесса с полным административным токеном без необходимости выполнять подтверждение в интерактивном окне. Зачастую обход UAC используется вредоносным ПО, так как у последнего чаще всего отсутствует интерактивный доступ к машине.
Существуют несколько основных способов для обхода UAC, которые как по отдельности, так и в комбинации формируют методы обхода. Далее рассмотрим основные из этих способов.
Исполняемые файлы со свойством Auto-Elevate
Как было сказано ранее, у некоторых программ есть свойство auto — elevate. Оно позволяет выполнить запуск с полными правами администратора без необходимости спрашивать разрешения у пользователя. Свойство указывается в файле manifest.xml и оно присутствует у достаточно большого количества стандартных программ Microsoft. Здесь есть интересный момент: иногда в процесс выполнения кода можно вмешаться и без административных прав. Например, исполняемый файл msconfig.exe имеет встроенный функционал запуска других программ, которые будут наследовать его высокие привилегии.

На картинке выше показано, что с помощью msconfig.exe можно перейти во вкладку Tools и выбрать запуск cmd.exe. Запущенный от msconfig.exe, cmd.exe будет иметь полные административные права, хотя сам msconfig.exe запускался из-под процесса с низкими правами.
Проверить наличие свойства можно с помощью утилиты sigcheck из стандартного набора SysInternals. Помимо явного запуска исполняемых файлов, также используются DLL Hijacking, подмена переменных, аргументов и другие способы, чтобы выполнить произвольный код от имени исполняемых файлов такого рода.
COM-интерфейсы со свойством Auto-Elevate
Второй способ, позволяющий повысить права до административных – COM-интерфейсы. Для каждого интерфейса в реестре содержится запись: может ли он автоматически повышать права до административных.

Каждый COM-интерфейс имеет уникальный CLSID. На рисунке выше мы видим запись в реестре для интерфейса IFileOperation. Наличие записи Enabled со значением 1 в ключе Elevation подсказывает нам, что такой COM-интерфейс может запускаться с административными правами даже без UAC Prompt.
Комбинируя несколько COM-интерфейсов с разным функционалом, мы можем выполнять действия как администратор. Например, перемещать файлы в системные директории. Это предоставит нам возможность выполнить в дальнейшем DLL Hijacking и автоматически повысить свои привилегии.
Отметим, что не каждый процесс способен повысить свои права через COM-интерфейс: ОС выполняет проверку Command Line процесса, который вызывает этот интерфейс и повышает привилегии, только если он является доверенным. Тем не менее, данный момент достаточно легко обойти, если процесс решит изменить собственную переменную и представиться, например, explorer.exe. Для этого используется способ под названием Masquerade PEB, который олицетворяет изменение PEB (Process Environment Block) структуры, содержащий информацию о процессе.

Модификация реестра
Еще одна возможность внедрения в процесс исполнения кода auto-elevate программ заключается в модификации веток реестра, доступных для записи обычному пользователю. Некоторые из которых могут проверяться на наличие в них записей динамически подгружаемых библиотек, необходимых для импорта.
Возьмём fodhelper.exe. Исполняемый файл проверяет при запуске следующие ветки реестра:
- HKCU\Software\Classes\ms-settings\shell\open\command
- HKCR\ms-settings\shell\open\command
Как можно увидеть, HKCR\ms-settings\shell\open\command содержит ссылку на другую ветку реестра:

А она уже содержит путь до DLL, которая будет подгружена fodhelper.exe.

Так как у пользователя есть права на запись первой (HKCU) ветки реестра, то можно подделать запись, которая ведёт на другую ветку и заставить fodhelper.exe загрузить зловредную DLL.
Заметим, что в текущем примере можно увидеть, что модификация реестра является промежуточным этапом для выполнения атаки DLL Hijacking. Эту ситуацию можно и нужно детектировать с помощью событий, отражающих изменение реестра. Но существуют способы, которые не опираются ни на что кроме подмены библиотек.
Категории для детектирования UAC Bypass
После проведенного анализа большого числа рабочих методов UAC Bypass мы выделили следующие категории с точки зрения их характера атаки и последующего детектирования:
1. Подмена DLL (DLL Hijacking)
2. Использование COM интерфейсов (COM)
3. Модификация реестра (Registry)
В качестве базы для анализа методов нами был использован ресурс UACMe, который содержит информацию по 70+ методам обхода UAC. Многие из которых комбинируют несколько способов обхода, поэтому могут входить в две группы. Чтобы легче было разобраться приведем визуальную картинку в виде диаграммы по количеству методов в разных или смежных группах:

Проводя классификацию, мы постарались обобщить все методы, присутствующие в UACMe. Однако, 3 из них – являются исключениями и не попадают ни в одну из обозначенных групп. Это методы – 38 (APPINFO command line spoofing), 55 (UIPI bypass with token modification), 59 (AppInfo LRPC). Подробнее про них будет рассказано в следующей статье.
Разобрав способы обхода UAC и классифицировав методы, перейдем к процессу детектирования UAC Bypass. Для этого рассмотрим какие возможности для детектирования существуют.
Возможные варианты детектирование UAC Bypass
Источники для детектирования
Для возможного детектирования UAC Bypass в качестве источника детекта мы будем рассматривать:
- Журналы Windows и System Access Control List (SACL)
- Sysmon
- Event Tracing for Windows (ETW)
У каждого из этих источников есть особенности, выражающиеся как в плюсах, так и в минусах. Рассмотрим подробнее:
Журналы Windows и SACL
Windows (EventLog) является стандартным механизмом аудита в ОС Windows и относительно прост в настройке. Некоторые методы обхода UAC можно детектировать с его помощью почти также эффективно, как и другими источниками. Еще с помощью EventLog можно и нужно проверять события, которые поступают от Sysmon. Нам это понадобиться для детектирования использования Masquerade PEB.
System Access Control List (SACL) – это права, которые могут быть выставлены на любой объект ОС с целью фиксирования попытки обращения к защищаемому объекту. При подготовке правил детектирования на основе EventLog мы будем использовать SACL на файлы и ветки реестра. Здесь стоит уточнить важное «НО»: данный источник событий очень часто бывает ненадёжен. По двум причинам:
- Во-первых, событие 4663 (An attempt was made to access an object) можно обойти, если использовать системные вызовы (SysCalls). Например, создать файл с помощью функции NtCreateFile. Тогда в событиях будут присутствовать только события 4656 (A handle to an object was requested).
- Во-вторых, ОС Windows не применяет наследованные права автоматически, если новый файл перемещён в папку. Так как SACL – тоже права доступа, то они не будут применены автоматически. Это значит, что если мы выставим SACL на директорию С: \Windows\System32\ и на все подпапки и файлы, а после атакующий внесет туда свою DLL, то нужных нам событий мы не получим.
Sysmon
Sysmon (System Monitor) отлично работает с тем, чтобы детектировать DLL Hijacking и изменения, выполняемые в реестре. При логировании импорта DLL файлов событие с Event ID 7 предоставляет информацию о подписи этих самых DLL файлов. Таким образом, это будет основой для детектирования многих способов из группы DLL Hijacking, так как при штатной работе системы атакуемый исполняемый файл импортирует подписанные DLL.
При этом перемещение файлов – это на самом деле не только проблема SACL. Sysmon также не показывает данные действия, потому что у него отсутствует данный тип событий для логирования.
Вспомним еще тот факт, что остается трюк с Masquerade PEB: подменой собственных переменных в процессе, который мы рассматривали в разделе про COM-интерфейсы. Если процесс представится explorer.exe, то его действия будут фиксироваться так же, как действия explorer.exe, что отобразиться в логах Sysmon. Однако, у событий из EventLog нет подобного недостатка, поэтому мы будем использовать их для проверки такого рода логов.
Еще отметим, что Sysmon практически ничего не показывает в отношении вызовов COM-интерфейсов.
ETW
ETW (Event Tracing for Windows) лучше всего использовать для детектирования вызова COM-интерфейсов, так как провайдер CombaseTraceLoggingProvider фиксирует вызовы вместе с процессом, который этот вызов совершает.
У ETW есть один минус: технологию почти никто не использует в рамках детектирования на SIEM. Это делает настройку сложной и персонализированной, так как мало вендоров включают эти логи в свои продукты. Но если разработчики не увидят в этом проблемы, то ETW станет прекрасным средством, чтобы детектировать атаки, связанные с COM- интерфейсами.
Детектирование UAC Bypass для COM-объектов
Учитывая все плюсы и минусы описанных выше источников событий, мы предлагаем свой подход к детектированию обхода UAC для COM-объектов.
Эта категория была выбрана нами не случайно. В отличие от других способов UAC Bypass, COM-объекты являются одними из корневых объектов системы и применяются практически везде. В свою очередь методы UAC Bypass опирающиеся на COM-интерфейсы так же имеют общие черты указывающие на атаку. Таким образом, при логировании вызовов COM- объектов можно найти и выделить универсальную логику возможного детектирования, применимую ко всем методов из группы COM.
Итак, при запросе на использование COM-интерфейса, исполняемый файл обычно выполняет запрос к реестру, используя путь HKCR\CLSID\ для определения местоположения динамической библиотеки (DLL). Библиотека содержит информацию о COM-интерфейсе и другие вспомогательные данные. Зная этот факт, мы можем выявить COM-интерфейс, который собирается вызвать исполняемый файл через наблюдения за обращениями к реестру.

Заметим, что атакующий не сможет исключить обращение к легитимной DLL, которая содержит нужный COM-интерфейс. Например, с помощью предварительной загрузки DLL в собственную память. В таком случае не будет автоматического повышения привилегий с помощью DllHost.exe (суррогатного хост-процесса для COM-объектов).
При обычной работе системы с возможностью auto-elevate COM-интерфейсы вызываются либо легитимными приложениями, либо при выдаче разрешения со стороны пользователя (UAC Prompt). Информацию о вызове легитимного приложения можно проверить с помощью информации из события 4688 (A new process has been created), в котором будут отражены данные об его месторасположении. А вот при участии пользователя не все так просто, но выход тем не менее есть. Мы можем детектировать наличие вызова окна UAC Promt, так как при атаке оно не вызывается. В этом нам может помочь consent.exe: он отвечает за вызов UAC Prompt, и при его отрисовке он импортирует C:\Windows\System32\credui.dll, который содержит в себе функции для конфигурации и вызова Credential UI.
![]()
Импорт происходит только в случае вызова UAC Prompt, что может косвенно подтвердить нам, имел ли пользователь возможность выдать разрешения или нет.
Правило детектирования
Выше мы описали маркеры, на основании которых теперь мы составим правило для возможного детектирования всех методов из группы COM. В данный момент используется ограниченный список COM-интерфейсов для обхода UAC. Именно поэтому только они будут фигурировать в правиле:
- ColorDataProxy: D2E7041B-2927-42fb-8E9F-7CE93B6DC937
- CMSTPLUA: 3E5FC7F9-9A51-4367-9063-A120244FBEC7
- FwCplLua: 752438CB-E941-433F-BCB4-8B7D2329F0C8
- FileOperation: 3AD05575-8857-4850-9277-11B85BDB8E09
- ShellSecurityEditor: 4D111E08-CBF7-4f12-A926-2C7920AF52FC
- EditionUpgradeManager: 17CCA47D-DAE5-4E4A-AC42-CC54E28F334A
- IEAAddonInstaller: BDB57FF2-79B9-4205-9447-F5FE85F37312
- SecurityCenter: E9495B87-D950-4AB5-87A5-FF6D70BF3E90
Также в правиле мы будем опираться на два факта:
- Запрос CLSID интерфейса любым приложением
- Отсутствие импорта credui.dll с последующим запуском dllhost.exe с повышенными привилегиями
Таким образом мы можем выяснить, какой исполняемый файл использовал COM-интерфейс для повышения привилегий и при этом не вызвал UAC Prompt. При атаке правило должно сработать при наличии:
- События запроса к ключу реестра и события запуска dllhost.exe с повышенными привилегиями
- (Опционально) События импорта credui.dll выполняются только при условии согласия пользователя на повышение привилегий и служат маркером легитимных действий
(Process_Name!="C:\\Windows\\System32\\* " (Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\" OR Object_Name="\\REGISTRY\\MACHINE\\SOFTWARE\\Classes\\CLSID\\")) OR (EventCode=4565 Process_Name="C:\\Windows\\System32\\consent.exe" Object_Name=C:\\Windows\\System32\\credui.dll) OR (EventCode=4688 New_Process_Name="C:\\Windows\\System32\\dllhost.exe" Token_Elevation_Type="%%1937")
Детектирование изменений системной переменной WINDIR
Большое число методов для обхода UAC вносят изменения в системную переменную %windir%, поэтому логично держать ситуацию на контроле. Изменения можно выполнить с помощью модификации ветки реестра HCU\Environment\: например, переименовать HCU\Environment\, создать собственную ветку HCU\Environment\ с поддельным ключом windir, а потом вернуть все в исходное состояние. Такое поведение должно вызывать подозрение, не только при UAC Bypass, но и в целом, так как оно не характерно при обычной работе ОС.
Изменения системной переменной на практике можно отследить с помощью событий Sysmon 13 (RegistryEvent: Value Set) и 14 (RegistryEvent: Key and Value Rename), а также Security 4663, при настроенном SACL.
Анализ атрибутов безопасности
В одном из постов в твиттере James Forshaw подсветил характерные для auto-elevate процессов атрибуты:
Tiraniddo: Not seen these before. Token security attributes which indicate if a process has be UAC auto elevated (LUA://HdAutoAp) and whether it’s descended from an auto elevated app (LUA://DecHdAutoAp). Might be useful for detecting the results of UAC bypasses in the wild.The second attribute is automatically inherited to children. So it’d show up if a someone injects a dll into an auto elevate process then immediately spawns a new process.

Первый атрибут появляется у процессов, которые автоматически повышают права, а второй наследуется дочерними процессами с такими же правами. Это может быть полезно для того, чтобы не составлять список всех возможных дочерних процессов для каждого auto-elevate исполняемого файла.
Машинное обучение
Еще одним помощником в обнаружении может стать поведенческий анализ, механизмы которого используются в специализированных платформах для выявления аномальных активностей.
Основная проблема UAC Bypass заключается в борьбе с ложными срабатываниями, появляющимися при легитимной работе auto-elevate исполняемых файлов. Использование машинного обучения удобно для того, чтобы показать полную картину того, насколько часто процессы, требующие повышенных привилегий, запускались в системе. И, следовательно, при наличии отклонения формировать соответствующее оповещение.
В этой статье мы рассмотрели примеры UAC Bypass, привели категории методов и выявили возможные способы обхода UAC и его детектирования. В следующем материале мы попробуем сделать более углубленный разбор нескольких, выбранных нами методов обхода UAC и предложить свой возможный вариант их детектирования.
Если у вас появились вопросы по статье, пишите нам в комментариях!