Как обойти окно uac powershell
Перейти к содержимому

Как обойти окно uac powershell

  • автор:

How to avoid UAC prompt while running powershell script

But this prompts a UAC where i have to manual click yes. then its moves further. I want to elevate the cmdlet without giving UAC prompt and continue to go ahead. The account used to run the script has admin permission on that machine.

9,168 1 1 gold badge 42 42 silver badges 55 55 bronze badges
asked Jul 29, 2016 at 12:17
153 5 5 silver badges 17 17 bronze badges
I’m not sure this is possible without disabling UAC, which itself requires a prompt.
Jul 29, 2016 at 18:13
Does Jenkins has an option to run powershell script as «RunAS Administrator» ?
Aug 1, 2016 at 6:43

If you are asking if you can bypass the UAC prompt when UAC is enabled, the answer is of course «no.» (If it were possible, that’s exactly what all malware would do.)

Aug 3, 2016 at 18:56
@Amit You wrote an answer on 4 Aug with the text that my answer worked so pls accept it — thx
Aug 23, 2016 at 15:42

2 Answers 2

Besides disabling UAC — which obviously should be the last resort — you may achieve your goal with creating a ‘scheduled’ task which is set up to run elevated and trigger that task from Jenkins.
The difficulty here will be probably about how to pass information to and retrieve information from the task — maybe you can achieve that via some files of well-known paths.
See here for how to set up such a task and here for how to trigger it.

As I do not have any Jenkins installation right now I could not test it though — sry.

answered Jul 30, 2016 at 5:29
34.3k 6 6 gold badges 80 80 silver badges 76 76 bronze badges
Does Jenkins has an option to run powershell script as «RunAS Administrator» ?
Aug 1, 2016 at 6:42

The problem is the switich:

-verb runas 

That instructs Windows that you need your code to run as an Administrator.

Remove that, and Windows will stop prompting the user for administrator privileges.

Your next question might be:

But i want a standard user to be able to do things that require administrative privileges.

Sorry, that is not allowed on secure operating systems.

  • if I’m a standard user
  • I simply can’t just decide to be an administrator

I actually have to be granted those rights.

The 8 year old, or the corporate desktop user, can’t just become an administrator because they wrote:

start-process explorer.exe -verb runas 

They will need me, or someone from IT, to walk the 6 buildings over to type in my admin credentials — because i actually do have Administrator privileges.

Imagine Life Before UAC

Every developer complaining about UAC, who hates UAC, wants to go back to before UAC. Lets imagine that.

  • It’s 2002, you’re running Windows XP SP3
  • There’s no UAC, so you’re always a standard user

And you want to run some code as an Administrator.

You can’t do that; you’re a standard user.

The only solution is to:

  • Fast User Switch
  • and get an Administrator to login to the machine
  • have them run your script
  • they then logout
  • and you fast-user-switch back to your own account

UAC is much better; since they can just type their credentials into the UAC dialog:

enter image description here

But I Just Don’t Want A UAC Prompt

You might be saying:

I don’t care about any of that. I just don’t want the UAC prompts. I want it to work like it did in Windows XP

If you don’t want the UAC prompts, and you want it to behave like it did in Windows XP: then you absolutely can do that. You are perfectly free to turn off UAC.

  • Standard users will always be standard users, with no way to elevate
  • Administrators will always be administrative users, with no need to elevate

And that is your preference, and you can do that.

Many other users don’t want to do their day-to-day work as an Administrator. But since you’re only running your script on your computer: it’s fine.

Set UAC Level with PowerShell

I’m looking for a way to set the UAC Level with Powershell/Command prompt. I’m aware the ‘EnableLUA’ value in the registry, but this won’t set the level. It’s just true or false. Is there a way to set the UAC Level with Powershell? With level, I mean the four levels of UAC. They go from ‘Never Notify’ to ‘Always Notify». Thank you.

asked Sep 26, 2014 at 10:56
396 3 3 gold badges 8 8 silver badges 19 19 bronze badges

4 Answers 4

There are several registry values that control User Account Control:

  1. FilterAdministratorToken
  2. ConsentPromptBehaviorAdmin
  3. ConsentPromptBehaviorUser
  4. EnableInstallerDetection
  5. ValidateAdminCodeSignatures
  6. EnableLUA
  7. PromptOnSecureDesktop
  8. EnableVirtualization

The combination of these values is what controls the slider in the GUI, or vice-versa.

answered Sep 26, 2014 at 11:13
Patrick Seymour Patrick Seymour
8,592 33 33 silver badges 33 33 bronze badges

Actually there already existed a takeaway powershell script to you can make use of.

You can easily find them in How to switch UAC level

Hopefully, it can help.

Edit

The code from the mentioned Microsoft Technet site implements these cmdlets:

  • Set-UACLevel()
  • Get-UACLevel()

But they are not confirmed for this OS (12. Jan. 2017):

  • Windows Server 2012 R2
  • Windows Server 2008
  • Windows 7
New-Variable -Name Key New-Variable -Name PromptOnSecureDesktop_Name New-Variable -Name ConsentPromptBehaviorAdmin_Name Function Set-RegistryValue($key, $name, $value, $type="Dword") < If ((Test-Path -Path $key) -Eq $false) < New-Item -ItemType Directory -Path $key | Out-Null >Set-ItemProperty -Path $key -Name $name -Value $value -Type $type > Function Get-RegistryValue($key, $value) < (Get-ItemProperty $key $value).$value >$Key = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" $ConsentPromptBehaviorAdmin_Name = "ConsentPromptBehaviorAdmin" $PromptOnSecureDesktop_Name = "PromptOnSecureDesktop" Function Get-UACLevel() < $ConsentPromptBehaviorAdmin_Value = Get-RegistryValue $Key $ConsentPromptBehaviorAdmin_Name $PromptOnSecureDesktop_Value = Get-RegistryValue $Key $PromptOnSecureDesktop_Name If($ConsentPromptBehaviorAdmin_Value -Eq 0 -And $PromptOnSecureDesktop_Value -Eq 0)< "Never notIfy" >ElseIf($ConsentPromptBehaviorAdmin_Value -Eq 5 -And $PromptOnSecureDesktop_Value -Eq 0) < "NotIfy me only when apps try to make changes to my computer(do not dim my desktop)" >ElseIf($ConsentPromptBehaviorAdmin_Value -Eq 5 -And $PromptOnSecureDesktop_Value -Eq 1) < "NotIfy me only when apps try to make changes to my computer(default)" >ElseIf($ConsentPromptBehaviorAdmin_Value -Eq 2 -And $PromptOnSecureDesktop_Value -Eq 1) < "Always notIfy" >Else < "Unknown" >> Function Set-UACLevel() < Param([int]$Level= 2) New-Variable -Name PromptOnSecureDesktop_Value New-Variable -Name ConsentPromptBehaviorAdmin_Value If($Level -In 0, 1, 2, 3) < $ConsentPromptBehaviorAdmin_Value = 5 $PromptOnSecureDesktop_Value = 1 Switch ($Level) < 0 < $ConsentPromptBehaviorAdmin_Value = 0 $PromptOnSecureDesktop_Value = 0 >1 < $ConsentPromptBehaviorAdmin_Value = 5 $PromptOnSecureDesktop_Value = 0 >2 < $ConsentPromptBehaviorAdmin_Value = 5 $PromptOnSecureDesktop_Value = 1 >3 < $ConsentPromptBehaviorAdmin_Value = 2 $PromptOnSecureDesktop_Value = 1 >> Set-RegistryValue -Key $Key -Name $ConsentPromptBehaviorAdmin_Name -Value $ConsentPromptBehaviorAdmin_Value Set-RegistryValue -Key $Key -Name $PromptOnSecureDesktop_Name -Value $PromptOnSecureDesktop_Value Get-UACLevel > Else < "No supported level" >> Export-ModuleMember -Function Get-UACLevel Export-ModuleMember -Function Set-UACLevel 

Запуск программы без прав администратора и подавлением запроса UAC

date

24.03.2023

user

itpro

directory

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

comments

комментариев 59

Некоторые программы при запуске могут требовать повышения прав до администратора (значок щита у иконки), однако на самом деле для их нормальной работы права администратора не требуется (например, вы можете вручную предоставить необходимые NTFS разрешения пользователям на каталог программы в Program Files и ее ветки реестра). Если на компьютере включен контроль учетных записей (User Account Control), то при запуске такой программы из-под непривилегированного пользователя появится запрос UAC и Windows потребует от пользователя ввести пароль администратора. Чтобы обойти этот механизм многие просто отключают UAC или предоставляют пользователю права администратора на компьютере, добавляя его в группу локальных администраторов. Оба эти способа не рекомендуется широкого использовать, т.к. вы снижаете безопасность и защиту Windows. В этой статье мы рассмотрим, как запустить программу, которая требует права администратора, от имени простого пользователя и подавить запрос повышения привилегий UAC.

Предоставить пользователю права на запуск программы

Программа может запрашивать права администратора при запуске, если:

  • Программе нужно получить доступ на системный каталог или файл, на отсутствуют NTFS разрешения для непривилегированных пользователей;
  • Если программа собрана со специальным флагом, которые требует повышения прав при запуске (requireAdministrator).

В первом случае для решения проблемы администратору достаточно предоставить RW или Full Control разрешения на каталог программы или необходимый системных каталог. Например, программа хранит свои файлы (логи, файлы конфигурации и т.д.) в собственной папке в C:\Program Files (x86)\SomeApp) или каком-то системном каталоге. Для корректной работы программы пользователю нужны права записи в эти файлы. По умолчанию у пользователей нет прав на редактирование данного каталога, соответственно, для нормальной работы такой программы нужны права администратора.

Чтобы разрешить запуск программы под непривилегированным пользователем администратора достаточно вручную предоставить пользователю (или встроенной группе Users) права на изменение/запись на файл/каталог на уровне файловой системы NTFS.

права на запись пользователю в папку программы в ProgramFiles

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

procmon исследование доступа к файлами и ветка реестра программой при запуске

Примечание. В рекомендациях Microsoft для разработчиков указано, что не рекомендуется хранить изменяющиеся данных приложения в каталоге C:\Program Files неверна. Правильнее хранить данные приложения в профиле пользователя. Но это уже вопрос о лени и некомпетентности разработчиков программ.

Запуск программы, требующей права администратора, от обычного пользователя

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

Рассмотрим более простой способ принудительного запуска любой программы без прав администратора (и без ввода пароля админа) при включенном UAC (4,3 или 2 уровень ползунка UAC).

Для примера возьмем утилиту редактирования реестра — regedit.exe (она находится в каталоге C:\windows\). Обратите внимание на щит UAC у иконки. Данный значок означает, что для запуска этой программы будет запрошено повышение привилегий через UAC.

иконка щита UAC у exe файла в Windows 10

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

запрос пароля администратора при запуске программы в windows 10

Попробуем обойти запрос UAC для этой программы. Создайте на рабочем столе файл run-as-non-admin.bat со следующим текстом:

cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %1″

Теперь для принудительного запуска приложения без прав администратора и подавлением запроса UAC, просто перетащите нужный exe файл на этот bat файл на рабочем столе.

запуск программы в обход UAC и с подавлением запроса пароля администратора

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

regedit с правами пользовтеля (Elevated = No)

Попробуйте отредактировать любой параметр в ветке 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\"\""

добавть в file explorer windows 10 пункт запуска программы без запроса UAC

Можно распространить этот пункт меню на компьютеры в домене через импорт ветки реестра с помощью групповых политики.

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

Run as user without UAC elevation

Еще раз напомню, что использование программы в режиме 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 файле.

resource hacker включитьпараметр asinvoker в manifest exe файла

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

убрат щит защиты uac у любой программы в windows 10 с помощью манифест файла

Если исполняемый файл программы подписан цифровой подпись (сертификатом 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»

ярлык для запуска от администратора с помощью опции savecred

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

сохранить пароль администратора для запуска программы

Утилита RunAs при запуске с параметром /SAVECRED сохраняет имя пользователя и пароль в диспетчере паролей Windows (Credentials Manager).

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

Вы можете вывести список пользователей с сохраненными паролями в Credential Manager с помощью команды:

сохраненные пароли администратора в credential manager

В Windows 11 при запуске такого ярлыка появляется ошибка:

RUNAS ERROR: Unable to run - C:\CorpApp\myapp.exe 740: The requested operation requires elevation.

ошибка runas 740: The requested operation requires elevation

Чтобы исправить ошибку, отредактируйте команду в свойствах ярлыка. Замените ее на:

C:\Windows\System32\runas /profile /user:WKS-1122H2\root /savecred «cmd.exe /C C:\CorpApp\myapp.exe»

ярлык для запуска программы от администратора для windows 11

Как мы указывали выше, использование параметра /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 powershell

Как отключить UAC для определенной программы в Windows 10?

date

user

directory

Windows 10, Windows 7, Windows 8

comments

В этой статье мы покажем, как выборочно отключить UAC для определенного приложения, не отключая полностью эту службу User Account Control. Рассмотрим несколько способов отключения контроля учетных записей для приложениия с помощью флага совместимости RunAsInvoker.

Система контроля учетных записей (User Account Control или UAC) запрашивает у пользователя подтверждение на выполнение любого действия, требующего прав администратора. Это довольно эффективный механизм защиты Windows от различных угроз (вирусы, трояны, черви, руткиты и т.п). Некоторый пользователей раздражает окно UAC и они полностью отключают контроль учетных записей, хотя Microsoft и специалисты в области ИБ категорически не рекомендуют делать это.

Флаг RunAsInvoker позволяет запустить приложение с маркером, унаследованным от родительского процесса. При этом отменяется обработка манифеста приложения, и обнаружение процессов установщика. Данный параметр не предоставляет права администратора, а только блокирует появление окна UAC.

Если программа требует прав администратора для запуска, т.к. меняет настройки системы или системные файлы, то при отключении UAC для нее привилегии пользователя в приложении не повышаются. Программа все равно будет запускаться с правами текущего пользователя и, если у нет полномочий на эти изменения, программа не сможет их внести. Также есть небольшое количество приложений, которые запускаются только в режиме “As administrator”, игнорирующие флаг совместимости RunAsInvoker.

В качестве примера мы отключим появление запроса User Account Control для редактора реестра (regedit.exe). Несмотря на то, что у моей учетной записи есть права администратора, при запуске утилиты все равно появляется запрос UAC на подтверждение запуска.

uac запрос при запуске приложенния

Отключение UAC для программы с помощью Application Compatibility Toolkit

Нам понадобится утилита Application Compatibility Toolkit, которая входит в состав Windows ADK. Скачать актуальную версию Windows ADK для Windows 10 можно здесь.

Запустите скачанный файл adksetup.exe и при установке (программе нужен доступ в Интернет) выберите только Application Compatibility Toolkit.

Примечание. Пакет Microsoft Application Compatibility Toolkit – бесплатный набор утилит, предназначенный для устранения проблем совместимости приложений при переходе на новые версии Windows.

установка Application Compatibility Toolkit

В системе появится две версии Application Compatibility Administrator — 32-х и 64-х битная версия. Запустите версию Application Compatibility Administrator в зависимости от разрядности приложения, для которого вы хотите подавить запрос UAC.

Application Compatibility Administrator

Запустите утилиту Compatibility Administrator (32-bit) с правами администратора (!). В разделе Custom Databases, щелкните ПКМ по элементу New Database и выберите пункт Create New-> Application Fix.

create application fix

В открывшемся окне нужно указать имя приложения (regedit), производителя (Microsoft) и путь к исполняемому файлу ( C:\Windows\regedit.exe ).

создать файл совместимости для приложения

Пропустите следующее окно мастера настройки (Compatibility Mode), нажав Next. В окне Compatibility Fixes отметьте опцию RunAsInvoker.

При желании можно убедиться, что приложение может работать без UAC, нажав на кнопку тестового запуска (Test Run).

compatibility fix - RunAsInvoker

В окне Matching Information вы можете указать какие параметры приложения нужно проверять (версию, чексумму, размер и т.д.). Я оставил включенными проверки COMPANY_NAME,PRODUCT_NAME и ORIGINAL_FILENAME, чтобы не пересоздавать файл исправления после очередного обновления Windows 10 и обновлении версии файла regedit.

Matching Information

Совет. Для защиты от подмены исполняемого файла злоумышленником желательно использовать проверку по checksum, file_version и size. Отметим, что дополнительные проверки будут несколько замедлять запуск приложения.

сохранить sdb файл

Нажмите Finish и укажите имя файла, в который нужно сохранить созданный пакет исправления совместимости, например regedit.sdb. В этом файле будут содержаться инструкции по запуску приложения с заданными опциями совместимости.

установить compatibility pack

Осталось применить пакет с исправлением совместимости к вашему приложению. Сделать это можно непосредственно из консоли Compatibility Administrator (выбрав в меню пункт Install), либо из командной строки.

sdbinst -q c:\ps\regedit.sdb

Если все сделали правильно, появится сообщение об успешном применении пакета.

Installation of regedit complete.

sdbinst

После установки пакета, соответствующая запись появится в списке установленных программ Windows (Programs and Features).

sdb файл в установленных приложениях

Попробуйте теперь запустить приложение в сессии пользователя без прав локального администратора. Теперь оно должно запуститься без появления запроса UAC.

Теперь проверьте, с какими привилегиями запущено данное приложение. Для этого в Task Manager на вкладке процессов добавьте столбец “Elevated”. Убедитесь, что процесс regedit.exe запущен от пользователя в непривилегированном режиме ( Elevated=No ).

запуск regedit.exe под обычным пользователем - elevated = no

В таком процесс редактора реестра пользователь может редактировать только собственные ветки реестра, но при попытке отредактировать/создать что-то в системной HKLM, появляется ошибка “You don’t have the requisite permissions”.

у пользователя нет прав на модификацию реестра

В дальнейшем это исправление совместимости можно распространить на компьютеры пользователей с помощью групповых политик. Тем самым можно добиться отключения проверки системы контроля учетных записей (UAC) для определенных приложений на множестве компьютеров в домене Active Directory.

Чтобы удалить исправление совместимости, выполните команду

sdbinst –u c:\ps\regedit.sdb

Включить флаг RUNASINVOKER для программы через реестр

В Windows 10/8.1/7 вы можете включить флаг совместимости RUNASINVOKER через реестр. Флаг совместимости приложения можно выставить для одного пользователя или для всех пользователей компьютера:

Например, для regedit нужно в ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers создать новый строковый параметр (REG_SZ) вида:

  • Value name: C:\windows\regedit.exe
  • Value data: RunAsInvoker

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers RunAsInvoker

Если нужно включить режим совместимости приложения для всех пользователей компьютера, этот параметр нужно создать в ветке реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers.

Bat файл для запуска приложения в режиме RunAsInvoker

Есть еще вариант для запуск приложения без прав администратора и подавлением запроса UAC (см. статью).

Просто создайте bat файл со следующим кодом:

Set ApplicationPath=»C:\windows\regedit.exe»
cmd /min /C «set __COMPAT_LAYER=RUNASINVOKER && start «» %ApplicationPath%»

bat файл с параметром RUNASINVOKER

При запуске этого bat файла под пользователем, указанное приложение запустится без появления запроса UAC.

Итак, мы рассмотрели, как отключить UAC для конкретной программы без полного отключения контроля учетных записей. Это позволит вам запускать программы Windows под обычным пользователем без появления запроса 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?

Уважаемые, подскажите, есть необходимость, запускать удаленно от имени администратора приложения(например через teamviewer). Но доменные настройки таковы, что нельзя обойти UAC, а когда открывается окно UAC — удаленно экран недоступен. Знаю что реально реализовать запуск окна для ввода пароля уже с введенными данными(логин, пароль) чтобы пользователю осталось только нажать кнопку ДА. Как можно реализовать передачу пароля в окно UAC средствами powershell или c#? ОС Windows 10.
Update
имею ввиду подобный функционал: ссылка.

  • Вопрос задан более трёх лет назад
  • 780 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 1

mindtester

# @mindtester Куратор тега C#

удивлюсь если вы получите легитимное положительное решение. UAC по сути своей и предназначен препятствовать именно такому сценарию (не только такому, но такому точно)

но на всякий случай тоже подпишусь ))

в частности из клипбоарда, в UAC вставляются строки, но у меня сильное подозрение что SendKey обломается, только Ctrl-V (Shift-Ins) с физической консоли

если сможете обойти — поделитесь ))

но гонять пароли через клипбоард — кхм. типа — «заходи кто хочешь, бери что хочешь».. если за консолью пользователь.. и не глупый, это эквивалентно внесению его сразу в группы админов

хмм.. ну тогда уж копните и в сторону:

var pfProc = new Process(); pfProc.StartInfo = new ProcessStartInfo(. ); pfProc.Start();

Ответ написан более трёх лет назад
Нравится 2 7 комментариев
walke @walke Автор вопроса

В софте под названием bomgar(аналог teamviewer) используется именно такое решение — подключающийся вводит админские логин и пароль на своей стороне, а на принимающей стороне появляется окно UAC, в котором юзеру нужно только кликнуть да. Так как это uac окно, подключающемуся оно не видно. И это точно не клипборд.
Мне показалось что это можно как-то легко организовать, но видимо это их ноу-хау.
Тут написано, почему UAC обойти нельзя..

mindtester

# @mindtester Куратор тега C#
увы, я еще не знаком с этим софтом.. попробую глянуть

mindtester

# @mindtester Куратор тега C#

кстати я обновил ответ, в связи ответом SyavaSyava

просто у меня нет макета с жесткими политиками UAC, а корячить свой комп точно не охота

рассуждая по логике SyavaSyava, вероятно подразумевается, что в runas.exe передать логин и пароль в командной строке

но тогда в Process тоже можно задать логин/пасс (! имеется в виду — выполнить от имени админа)

другой вопрос — то ли это, что вам надо?

walke @walke Автор вопроса

mindtester, runas не позволяет обойти UAC. Вообще нет ни одного способа обойти UAC включая psexec(если только это не эксплоит).
И, runas не позволяет передать пароль. Psexec передает пароль, но в случае включенного uac это не работает.

mindtester

# @mindtester Куратор тега C#

а в случае bomgar, все может быть до обидного просто..

тот же тим, когда во время инсталяции, или позднее, его настраивают, что бы принимать вызовы в автопилоте — поднимает службу, у которой уже достаточно прав. ну и настройка эта, может быть выполнена только с соответствующими правами. так что вряд ли есть магический разрыв в причинно следственной цепи

Windows UAC не перестаёт удивлять, или Как обнаружить инсайдера

image

Всем привет! Уверен, что вы наслышаны о недочетах технологии Windows UAC, однако относительно недавно появились подробности любопытной уязвимости, эксплуатация которой дает возможность непривилегированному пользователю максимально повысить привилегии. В Jet CSIRT мы не оставили этот случай без внимания, ведь для любой команды мониторинга и реагирования на инциденты ИБ уязвимости класса Privilege Escalation представляют особый интерес. Под катом — описание уязвимости, способы детекта и защиты.

Детали уязвимости

Исследователь Eduardo Braun Prado из команды Zero Day Initiative обнаружил уязвимость локального повышения привилегий в компоненте Windows Certificate Dialog, которая возникает из-за некорректной обработки пользовательских привилегий. Уязвимость позволяет повысить привилегии пользователя до максимально возможных SYSTEM и обойти все защитные механизмы ОС Windows. Это происходит при эксплуатации механизма Windows UAC, когда пользователь взаимодействует с компонентом Безопасного рабочего стола (Secure Desktop), открыв диалог запуска файла от имени Администратора.

image

В чем суть уязвимости? Сертификат исполняемого файла содержит необязательное численное поле «Идентификатор политики» в формате Microsoft-specific object identifier (OID).

image

Заголовочный файл Wintrust.h определяет это поле как SPC_SP_AGENCY_INFO_OBJID. Хотя его назначение слабо документировано, скорее всего, оно анализируется при открытии окна с деталями сертификата. При представлении данного поля в корректном формате поле Issued by («Кем выдано») будет отображено в виде гиперссылки со значением, взятым из атрибута SpcSpAgencyInfo.

image

При клике по ссылке c полем Issued by откроется браузер Internet Explorer с правами SYSTEM. Родительским процессом для него будет выступать процесс consent.exe. Он также выполняется с максимальными привилегиями, и именно в его контексте запускается диалог UAC. Соответственно, далее появляется возможность запуска произвольного файла (cmd.exe, powershell.exe) из меню браузера с унаследованными правами SYSTEM.

image

В качестве PoC для демонстрации эксплуатации уязвимости (видео приведено ниже) исследователь предложил использовать утилиту HTML Help ActiveX Control, сертификат которой обладает описанными выше особенностями.

При этом существует возможность подписать любой исполняемый файл подобным образом, например, с помощью powershell командлета Set-AuthenticodeSignature. Предварительно потребуется создать самоподписанный сертификат корневого удостоверяющего центра и конечный сертификат средствами утилиты makecert из набора Windows SDK. Инструкция приведена по ссылке.

Уязвимость получила идентификатор CVE-2019-1388 и CVSS 7.8. Ей оказались подвержены все версии ОС от Windows 7 до Windows Server 2019. После установки патча поле Issued by в деталях сертификата перестает отображаться как гиперссылка.

Массовая эксплуатация этой уязвимости маловероятна ввиду трудности автоматизации. Ведь для реализации атаки на ее основе пользователю потребуется выполнить немало действий — от открытия окна с сертификатом исполняемого файла до запуска командной строки через интерфейс Internet Explorer. Поэтому наиболее вероятный сценарий атаки может быть связан с действиями внутреннего нарушителя.

Как обнаружить

Для обнаружения эксплуатации уязвимости на платформах Windows x64 мы в Jet CSIRT используем в SIEM-системе правило корреляции, отслеживающее цепочку событий (на контролируемом узле предварительно необходимо включить аудит запуска процессов посредством соответствующей групповой политики либо использовать утилиту Sysmon от Sysinternals):

  1. Детектирование запуска процесса constent.exe с правами SYSTEM (код события 4688).
  2. Детектирование запуска процесса C:\Program Files\iexplore.exe с правами SYSTEM, где в качестве родительского процесса выступает consent.exe.
  3. Детектирование запуска процесса C:\Program Files (x86)\iexplore.exe с правами SYSTEM, где в качестве родительского процесса выступает C:\Program Files\iexplore.exe.

image
Детектирование запуска командного интерпретатора (cmd.exe, powershell.exe) с правами SYSTEM, где в качестве родительского процесса выступает C:\Program Files (x86)\iexplore.exe. image

  • ID процесса C:\Program Files (x86)\iexplore.exe из п.3 и ID C:\Program Files (x86)\iexplore.exe в качестве родительского процесса из предыдущего пункта совпадают.
  • Приведем пример описанного корреляционного правила на стороне FortiSIEM.

    Детализация условия запуска consent.exe

    Детализация условия запуска IEx64

    Детализация условия запуска IEx86

    Детализация условия запуска cmd.exe, powershell.exe

    Исходный код корреляционного правила FortiSIEM

     UAC Privilege Escalation through Secure Desktop Повышение привилегий через UAC Secure Desktop CVE-2019-1388 1  eventType = "Win-Security-4688" AND procName CONTAIN "consent.exe" AND user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 user,procName  eventType = "Win-Security-4688" AND procName REGEXP (".*Files\\\\Internet.*\\\\iexplore\\.exe$") AND parentProcName CONTAIN "consent.exe" OR user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 procId,user,parentProcName,procName  eventId = 4688 AND procName REGEXP (".*\\(x86\\)\\\\.*\\\\iexplore\\.exe$") AND parentProcName REGEXP (".*Files\\\\Internet.*\\\\iexplore\\.exe$") AND user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 procName,parentProcName,procId,user  eventType = "Win-Security-4688" AND ( procName CONTAIN "cmd.exe" OR procName CONTAIN "powershell.exe" ) AND parentProcName REGEXP (".*\\(x86\\)\\\\.*\\\\iexplore\\.exe$") AND user IN ("СИСТЕМА","SYSTEM") COUNT(*) >= 1 user,parentProcName,procName,parentProcId  IE_x86_Execution.procId = Cmd_Execution.parentProcId  procName=Cmd_Execution.procName,parentProcName=Cmd_Execution.parentProcName,user=Cmd_Execution.user  phRecvTime,eventType,reptDevName,reptDevIpAddr,destIpAddr,destName,user,parentProcId,parentProcName,procId,procName,rawEventMsg    

    Исследователь Florian Roth выложил Sigma-правило для обнаружения попытки эксплуатации данной уязвимости. Однако из-за ограничений языка с помощью правила можно выявлять только событие запуска Internet Explorer с правами SYSTEM и родительским процессом consent.exe без последующего детектирования запуска командных интерпретаторов. Отследить цепочку нужных событий при соблюдении описанных выше условий (1-5) средствами Sigma не представляется возможным, из-за чего мы вынуждены были разработать собственное правило.

    Как защититься

    1. Установить патч Microsoft от 12 ноября для соответствующей версии ОС.

    2. Если патч для устранения данной уязвимости установить нельзя, стоит воспользоваться:

    • правилами AppLocker, запрещающими запуск командных интерпретаторов cmd.exe и powershell.exe для учетных записей, входящих в группу «Пользователи» (необходимо учесть утилиты и техники, позволяющие обойти AppLocker, перечисленные в LOLBINS);
    • средствами host-based IPS в составе систем класса EPP, EDR (нужно настроить правила доступа, запрещающие процессу iexplore.exe обращение к cmd.exe, powershell.exe).
    • JET CSIRT
    • повышение привилегий
    • обход UAC

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *