Semenalidery.com

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Requestedexecutionlevel level asinvoker uiaccess false

Регистрация типа файла

Допустим нужно зарегистрировать в Windows расширение файла (например .testDoc) и ассоциировать его с приложением. После этого щелчок на файле *.testDoc должен приводить к немедленному запуску приложения.

Один из способов зарегистрировать этот тип файла вручную предусматривает использование проводника Windows:

Щелкните правой кнопкой на файле .testDoc и выберите в контекстном меню пункт Открыть с помощью. —> Выбрать программу.

В диалоговом окне Выбор программы щелкните на кнопке Обзор, найдите ЕХЕ-файл своего приложения и дважды щелкните на нем.

Если не хотите делать приложение обработчиком по умолчанию для файлов этого типа, удостоверьтесь, что в диалоговом окне «Выбор программы» флажок Использовать выбранную программу всех файлов такого типа не отмечен. В этом случае запускать приложение двойным щелчком на файле не получится, но можно открывать файл щелчком на нем правой кнопкой мыши, выбором в контекстном меню пункта Открыть с помощью. и затем нужного приложения из списка.

Щелкните на кнопке ОК.

Другой способ регистрации типа файла состоит в выполнении кода, который редактирует системный реестр:

Класс FileRegistrationHelper регистрирует расширение файла .testDoc, используя классы из пространства имен Microsoft.Win32.

Процесс регистрации должен выполняться только однажды. После того, как регистрация завершена, любой двойной щелчок на файле с расширением .testDoc приводит к запуску SingleInstanceApplication, и этот файл передается в виде аргумента командной строки. Если SingleInstanceApplication уже запущен, то вызывается метод SingleInstanceApplicationWrapper.OnStartupNextInstance() и существующее приложение загружает новый документ.

Контроль учетных записей пользователей

Регистрация файла — это задача, которая обычно выполняется программой установки. Проблема с включением ее в код приложения состоит в том, что она требует повышенных привилегий, которых может не иметь пользователь, запустивший приложение. В частности, здесь вступает в действие средство контроля учетных записей пользователей (User Account Control — UAC) в Windows Vista и Windows 7. Фактически по умолчанию этот код завершится сбоем с генерацией исключения, связанного с безопасностью.

С точки зрения UAC все приложения имеют один из трех уровней выполнения:

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

requireAdministrator

Если текущий пользователь является членом группы Administrators (Администраторы), появится диалоговое окно подтверждения UAC. Как только пользователь подтвердит, приложение получит административные привилегии. Если же пользователь не является членом группы Administrators, появится диалоговое окно, где пользователь сможет ввести имя и пароль учетной записи, обладающей административными привилегиями.

highestAvailable

Приложение получает максимальные привилегии согласно членству в группах. Например, если текущий пользователь — член группы Administrators, то приложение получает административные привилегии (как только примет подтверждение UAC). Преимущество этого уровня выполнения в том, что приложение продолжит выполнение, если административные привилегии недоступны, в отличие от requireAdministrator.

Обычно приложение выполняется с уровнем aslnvoker. Чтобы запросить административные привилегии, при запуске необходимо щелкнуть правой кнопкой мыши на ЕХЕ-файле и выбрать в контекстном меню пункт Run As Administrator (Запуск от имени администратора). Чтобы получить административные привилегии при тестировании приложения в среде Visual Studio, потребуется щелкнуть правой кнопкой мыши на ярлыке Visual Studio и выбрать в контекстном меню пункт Run As Administrator.

Если приложению требуются административные привилегии, их можно запросить с помощью уровня выполнения requireAdministrator или highestAvailable. В любом случае понадобится создать манифест — файл с блоком XML-разметки, который будет встроен в скомпилированную сборку. Чтобы добавить манифест, щелкните правой кнопкой мыши на проекте в Solution.Explorer и выберите в контекстном меню пункт Add —> New Item (Добавить) —> Новый элемент). Укажите шаблон Application Manifest File (Файл манифеста приложения) и щелкните на кнопке Add (Добавить).

Для изменения уровня выполнения просто модифицируйте атрибут уровня элемента . Допустимыми значениями являются aslnvoker, requireAdministrator и highestAvailable:

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

Requestedexecutionlevel level asinvoker uiaccess false

Answered by:

Question

I have an application and in the app.manifest, I see the below setting

requestedExecutionLevel level=»requireAdministrator» uiAccess=»false»/>

The same application runs fine in Windows XP without admin rights.

But in Windows 7, it is getting executed only in systems with admin rights and it seeks for admin credentials when invoked from system which does not have admin rights.

Please let me know if this is a know difference between XP and Win 7.

Hence, I tried below change

requestedExecutionLevel level=»asInvoker» uiAccess=»false»

Now, my application is getting invoked in Win 7 even without admin rights.

Why the same manifest ‘ requestedExecutionLevel level=»requireAdministrator» uiAccess=»false»/>’ requires admin access in Windows 7 and not in XP.

Answers

I’m pretty sure your application also uses adminitrative privileges on your XP system. I assume that your user on your XP system has administrative privileges.

With Windows Vista UAC was coming, and an user account with administrative privileges will not have administrative privileges by default. If an application needs this administrative privileges the user will be asked in the UAC window. This mechanism uses the requestesExecutionLevel in your application manifest.

Only as additional hint, XP does not even check the manifest for the requestedExecutionLevel.

Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

  • Marked as answer by Shankar Muthukrishnan Friday, March 21, 2014 12:06 PM
Читать еще:  Офис 365 ключи бесплатно для активации

Without administrative privileges need to be defined more precisely.

If you run a program as invoker on a Vista (and better) system you do not have write access to:

— Program files / program files x68 directory

— Windows / Windows System directory

— All registry keys that are not in the HKCU hive

— User directories of different users

— and a lot other stuff in Control Panel, .

>> Do you have additional points on why XP does not check the manifest?

This requestedExecutionLevel manifest extension was not invented when XP was released. For this reason XP does not check this extensions. The safety against hacks and other malware is therefore in Vista and above systems better since a normal running application has only a very limited access on the system, even if it is an administrative accout.

Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

Годовая
подписка
на
Хакер

Xakep #251. Укрепляем VeraCrypt

Xakep #250. Погружение в AD

Xakep #248. Checkm8

Xakep #247. Мобильная антислежка

Обламываем UAC: Так ли страшна программисту система контроля пользователей?

Содержание статьи

Уж не знаю, сколько раз в тырнетах поднималась пресловутая тема контроля за действиями пользователя (UAC): нужна ли она, насколько эффективна… Но мы рассмотрим этот вопрос еще раз, теперь с чисто прикладной, хакерской точки зрения. Плюсы и минусы системы, а также самое главное — как ее можно обойти.

Итак, что же такое UAC с точки зрения безопасности? Разработчики Windows (видимо, немало озаботившись унылыми сведениями из багтраков, регулярно пополняющимися все новыми и новыми уязвимостями в самой распространенной ОС в мире) решили, что если уж все или почти все юзеры сидят под правами администратора, то надо сделать некий программный компонент, который будет испрашивать у юзеров разрешения. Оставим в стороне холивар на тему «Нужны ли простому юзеру права администратора?», поскольку сей крайне философский вопрос спорен: с одной стороны, права админа простому пользователю, действительно, не нужны, а с другой — они нужны туевой хуче довольно повседневных программ.

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

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

И ведь надо признать, что введение UAC довольно сильно обломало начинающих и не очень кодеров, зарабатывающих себе на жизнь разработкой малвари, так что на специальных бордах заказчики теперь в первую очередь спрашивают о возможности кода работать в Vista/7 и обходить UAC. Платили и до сих пор платят за это вполне адекватные деньги.

Немного ликбеза, или как законно получить права админа

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

При выборе элемента «Запуск от имени администратора» проводник вызывает API-функцию ShellExecute с командой «runas».

Подавляющее большинство программ установки требуют административных прав, поэтому загрузчик образов, который инициирует запуск исполняемого файла, содержит код обнаружения установщиков для выявления устаревших версий. Часть алгоритмов используемой загрузчиком эвристики довольно проста: он ищет слова «setup», «install» или «update» в имени файла образа или внутренней информации о версии. Более сложные алгоритмы включают просмотр в исполняемом файле последовательностей байтов, обычно применяемых сторонними разработчиками в служебных программах — установочных оболочках.

Чтобы определить, нуждается ли целевой исполняемый файл в правах администратора, загрузчик образов также вызывает библиотеку совместимости приложений (appcompat). Библиотека обращается к базе данных совместимости приложений, чтобы определить, связаны ли с исполняемым файлом флаги совместимости RequireAdministrator или RunAsInvoker.

Самый общий способ запросить для исполняемого файла административные права — добавить в его файл манифеста приложения тег requestedElevationLevel. Манифесты — это XML-файлы, содержащие дополнительные сведения об образе. Они были введены в Windows XP как способ определения зависимостей для параллельно используемых библиотек DLL и сборок Microsoft .NET Framework.

Наличие в манифесте элемента trustInfo (он показан ниже во фрагменте дампа Firewallsettings.exe) означает, что исполняемый файл был написан для Windows Vista и содержит элемент requestedElevationLevel.

Атрибут level этого элемента может иметь одно из трех значений: asInvoker, highestAvailable и requireAdministrator.

Читать еще:  Интерактивная схема офиса

Исполняемые файлы, не требующие административных прав, (например Notepad.exe), имеют значение атрибута asInvoker. В некоторых исполняемых файлах заложено допущение, что администраторы всегда хотят получить максимальные права. Поэтому в них используется значение highestAvailable. Пользователю, запускающему исполняемый файл с этим значением, предлагается повысить права, только если он работает в режиме AAM или рассматривается как администратор согласно определенным ранее правилам, и в связи с этим должен повысить права для обращения к своим административным привилегиям.

Примерами приложений, для которых используется значение highestAvailable, могут служить программы Regedit.exe, Mmc.exe и Eventvwr.exe. Наконец, значение requireAdministrator всегда инициирует запрос повышения и используется всеми исполняемыми файлами, которым не удастся выполнить свои действия без административных прав.

В приложениях со специальными возможностями атрибуту uiAccess задается значение «true» для управления окном ввода в процессах с повышенными правами. Кроме того, для обеспечения этих возможностей они должны быть подписаны и находиться в одном из нескольких безопасных размещений, включая %SystemRoot% и %ProgramFiles%.

Значения, задаваемые исполняемым файлом, можно легко определить, просмотрев его манифест с помощью служебной программы Sigcheck от Sysinternals. Например: sigcheck –m . При запуске образа, который запрашивает административные права, службе сведений о приложении (известна также как AIS, находится в %SystemRoot%System32 Appinfo.dll), работающей в процессе Service Host (%SystemRoot% System32Svchost.exe), предписывается запустить программу Consent. exe (%SystemRoot%System32Consent.exe). Программа Consent создает снимок экрана, применяет к нему эффект затемнения, переключается на рабочий стол, доступный только системной учетной записи, устанавливает затемненный снимок в качестве фона и открывает диалоговое окно повышения прав, содержащее сведения об исполняемом файле. Вывод на отдельном рабочем столе предотвращает изменение этого диалогового окна любой вредоносной программой, работающей под учетной записью пользователя.

Лезем в обход UAC

Итак, теперь о том, для чего мы все здесь, собственно, собрались. Можно ли обойти UAC? Да, можно. Первое решение, так сказать, лобовое. И основано оно на том удивительном факте (или просчете разработчиков Windows?), что при изменении политики UAC системе глубоко фиолетово, как и кто именно это делает, человек при помощи указателя мыши или же все делается программным способом. То есть фактически система не различает, кто именно передвигает заветную стрелочку.

Этим мы и воспользуемся — что нам стоит программно отключить UAC? Ничего! Но пойдем мы нетрадиционным способом — забудем о существующих в языках высокого уровня вроде С++ или C# методах типа SendKeys, а возьмем на вооружение простой VBS-скрипт.

Set WshShell = WScript.CreateObject(«WScript.Shell»)
WshShell.SendKeys(«^«)
WScript.Sleep(500)
WshShell.SendKeys(«change uac»)
WScript.Sleep(2000)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
WScript.Sleep(2000)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
WshShell.SendKeys(««)
‘// Тут есть одна заковыка — чтобы выбранные изменения
‘// вступили в силу, систему нужно перезагрузить
‘// WshShell.Run «shutdown /r /f»

Да-да, всего-то и нужно, что воспользоваться благами Windows Script Host (WSH), где, кстати, сокрыто от глаз огромное разнообразие возможностей для управления системой, о которых частенько забывают. Но об этом речь пойдет в другой раз.

Второе решение обхода UAC — тоже программное, но не лобовое, а основанное на уязвимости самой системы.

Переполнение буфера

Казалось бы, какая связь между переполнением буфера и UAC? Оказывается, таящиеся в Windows баги позволяют обойти ограничения UAC и повысить свои права. Сегодня я покажу на конкретном примере, как при помощи тривиального переполнения буфера можно обойти UAC и добиться администраторских прав.

Есть такая WinAPI — RtlQueryRegistryValues (msdn.microsoft.com), она используется для того, чтобы запрашивать множественные значения из реестра одним своим вызовом, что делается с использованием специальной таблицы RTL_QUERY_REGISTRY_TABLE, которая передается в качестве __in__out параметра.

Самое интересное (и постыдное для разработчиков Microsoft) в этой API то, что существует определенный ключ реестра, который можно изменить при помощи ограниченных пользовательских прав: HKCU EUDC[Language]SystemDefaultEUDCFont. Если сменить тип этого ключа на REG_BINARY, то вызов RtlQueryRegistryValues приведет к переполнению буфера.

Когда ядерная API-функция Win32k.sys!NtGdiEnableEudc запрашивает ключ реестра HKCUEUDC[Language]SystemDefaultEUDCFont, она честно предполагает, что этот ключ реестра имеет тип REG_SZ, так что в буфер передается структура UNICODE_STRING, у которой первое поле является типом ULONG (где представлена длина строки). Но так как мы можем изменить тип этого параметра на REG_BINARY, то систему это ставит в глубокий тупик и она неправильно интерпретирует длину передаваемого буфера, что приводит к переполнению стека.

Ключевой момент эксплойта

UINT codepage = GetACP();
TCHAR tmpstr[256];
_stprintf_s(tmpstr, TEXT(«EUDC%d»), codepage);
HKEY hKey;
RegCreateKeyEx(HKEY_CURRENT_USER, tmpstr, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE | DELETE, NULL, &hKey, NULL);
RegDeleteValue(hKey, TEXT(«SystemDefaultEUDCFont»));
RegSetValueEx(hKey, TEXT(«SystemDefaultEUDCFont»), 0,
REG_BINARY, RegBuf, ExpSize);
__try
<
EnableEUDC(TRUE);
>
__except(1)
<
>
RegDeleteValue(hKey, TEXT(«SystemDefaultEUDCFont»));
RegCloseKey(hKey);

Заключение

Обойти UAC можно. Не скажу, что это легко, ведь разработчики Windows VIsta/W7 постарались на славу, надо отдать им должное. Но все же лазейки остаются. Можно найти одну-две кроличьих дыры, которые способны свести на нет старания команды Windows. Успех в этом случае приходит к тем, кто может работать с отладчиками и дебаггерами типа IDA Pro или WinDBG.

Удачи тебе в твоих стараниях и да пребудет с тобой сила!

Нужны источники бесперебойного питания?

Настройка прав администратора UAC в ваших программах

Как-то на хабре я наткнулся на статью, в которой был описан способ использования прав через UAC. Как мне кажется, описанный способ в той статье слишком сложен. Visual Studio позволяет все сделать гораздо легче. Давайте начнем с того, для чего же необходим UAC? UAC (User Account Control) – технология контроля учетных записей, появившаяся впервые в Windows Vista и встроена на данный момент в Windows 7. UAC запрещает программам выполнять действия, требующие права администратора. При выполнении программой таких действий, работа программы приостанавливается и пользователю выдается окно с запросом на защищенном рабочем столе – для того, чтобы невозможно было нажать программно кнопку ОК. К примеру, если вашей программе потребуется записать ключ реестра в раздел HKEY_LOCAL_MACHINE, то ей потребуются права администратора. Вы конечно же можете отключить UAC на своем компьютере, но другие пользователи не смогут пользоваться вашей программой, поэтому это не решение проблемы.

Читать еще:  Офис 2020 сборка

Один из способов – запустить программу с правами администратора. Для этого потребуется встроить в вашу программу так называемый manifest. Файл манифеста встраивается в программу и операционная система будет видеть, что при запуске требует файл.

В Visual Studio создайте проект и откройте меню Project->Add new item. Выберите файл, как показано на скриншоте:

После создания вы получите примерно такой файл, со следующим содержанием:

Отредактировав файл, я вынес строку requestedexecutionlevel level=»requireAdministrator» uiAccess=»false» вне комментариев. Эта строка и будет требовать запуска программы с правами администратора.
Следующим шагом – будет установка в настройках проекта какой же манифест должен быть использован при компиляции. В свойствах проекта установите настройки, как показано на скриншоте:

Для более полного понимая того, как настраивать файл манифеста, разберем его настройки.
В данный момент нас интересует все, что находится между элементами requestedPrivileges. Для настройки прав требуется описать элемент requestedExecutionLevel с атрибутами level и uiAccess.

Атрибут level может иметь 3 возможных позиции:
1) asInvoker – приложение запускается с правами процесса-родителя. Это значит, что если запустить программу из приложения, которое уже запущено с правами администратора, то запущенная программа будет иметь те же права. Этот режим рекомендуется Microsoft в большинстве случаев. Т.е. это те программы, которые не требуют прав администратора;
2) highestAvailable – приложение запускается с более высокими правами, чем имеет текущий пользователь. С такими правами запускаются Regedit.exe, Mmc.exe и Eventvwr.exe;
3) requireAdministrator – требуются для приложений, которые не могут работать без прав администратора.

При запуске своих программ, поэкспериментируйте с различными настройками и определитесь что лучше использовать. Это значит, что если вам достаточно asInvoker, не пишите requireAdministrator.

Атрибут uiAccess отвечает за управлением окном ввода в процессах с повышенными правами для реализации специальных возможностей. Кроме того, требуется, чтобы программы была подписана и запускалась из папок Program Files и windowssystem32. Чаще всего, в этом нет необходимости.

Подведем итоги

Чтобы запускать программу с правами администратора требуется: создать файл манифеста, описать его и в свойствах проекта, где описывается манифест, выбрать этот файл. Программа может сама проверить запущена ли она с правами администратора:

How to force a C# based WinForms applications to run with administrator rights on any environment?

The UAC management in Windows is pretty troublesome for different reasons. The most simple and usual one, is the fact that some applications will need to execute system level tasks, like stopping or starting services of Windows or even services created by you. If the user runs the application with administrator rights, everything will work properly, however we know how the users are ! We know they forget (we do as well) to run applications with the necessary privileges, so you can’t expect the same always. Instead, you may want to search for a secure solution that guarantees the execution of your application with the mentioned rights.

In this article, we’ll explain you briefly how to request administrator rights at the beginning of the execution of a C# based WinForms application.

1. Verify that your app has an application manifest

As first step, you need to verify if your application does have the manifest in the root directory:

If it doesn’t exist, you will have to create it as described in the following description.

If you don’t have any, create it with the default information

In case that you don’t have the mentioned manifest registered in your application, then proceed to create it. Open your project in Visual Studio and do right click on your project, click on Add and New Item:

In the new dialog, select from the Visual C# Items, the Application Manifest File:

This will create a file with a similar content in the root directory of your application namely app.manifest :

Once you know you have this file in your application, you can proceed with the last step.

2. Request Administrator Rights

In order to start the application with administrator rights, you will need to change the value of the requestedExecutionLevel child node inside the trustInfo element. The requestedExecutionLevel node identifies the security level at which the application requests to be executed. This element has no children and has the following 2 attributes:

Level Required. Indicates the security level the application is requesting. Possible values are:

asInvoker , requesting no additional permissions. This level requires no additional trust prompts.

highestAvailable , requesting the highest permissions available to the parent process.

requireAdministrator , requesting full administrator permissions.

ClickOnce applications will only install with a value of asInvoker . Installing with any other value will fail.

Optional. Indicates whether the application requires access to protected user interface elements. Values are either true or false , and the default is false. Only signed applications should have a value of true.

In a default manifest you will find it with the next value:

However, you need to change it to the next one in order to require administrator rights:

Ссылка на основную публикацию
Adblock
detector