Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Первым шагом в определении типа учетной записи, в которой должно быть запущено приложение, является проверка того, какие ресурсы будет использовать приложение и какие привилегированные API он вызовет. Вы можете обнаружить, что приложение или большие части приложения не требуют прав администратора. написание защищенного кода, Майкл Говард и Дэвид LeBlanc предлагает отличное описание того, как выполнять эту оценку и настоятельно рекомендуется.
Important
Большинство классических приложений должны выполняться на уровне выполнения asInvoker . Только запрашивать повышение прав, если приложению действительно требуется доступ на запись в защищенные расположения (например %ProgramFiles%), или необходимо изменить параметры на уровне системы. Запрос ненужного повышения прав увеличивает область атаки приложения и обучает пользователей отклонить запросы UAC без их чтения.
Объявление требуемого уровня выполнения с помощью манифеста UAC
Windows использует манифест приложения для определения уровня выполнения приложения. Внедрение манифеста с одним из следующих requestedExecutionLevel значений:
| Уровень | Когда использовать |
|---|---|
asInvoker |
По умолчанию. Приложение выполняется с тем же маркером, что и родительский процесс. Используется для большинства приложений. |
highestAvailable |
Приложение выполняется с самыми высокими привилегиями, доступными текущему пользователю. Используйте, если некоторые функции требуют повышения прав, но приложение по-прежнему должно запускаться для стандартных пользователей. |
requireAdministrator |
Приложению всегда требуются полные права администратора. UAC запрашивает у пользователя согласие или учетные данные перед запуском. |
<!-- Example: embed in your application manifest (.exe.manifest or linker /MANIFEST) -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
Warning
Приложение без манифеста рассматривается как asInvoker на современных Windows, но может быть подвержено эвристикам обнаружения установщика, которые вызывают непредвиденные запросы на повышение прав. Всегда внедряйте явный манифест.
Подходы к минимизации привилегий
Вы можете предоставить привилегии, необходимые приложению, с меньшим воздействием на вредоносные атаки, используя один из следующих подходов:
- Запустите под учетной записью с меньшими привилегиями. Используйте PrivilegeCheck , чтобы определить, какие привилегии включены в маркере. Если доступные привилегии недостаточно для текущей операции, вы можете отключить этот код и попросить пользователя входить в учетную запись с правами администратора.
- Разделение операций с повышенными привилегиями в вспомогательный процесс. Сохраните основное приложение в качестве asInvoker и запустите отдельный процесс с повышенными привилегиями только для конкретных операций, которым он нужен. Используйте моникер повышения привилегий COM или ShellExecute с командой
runas, чтобы активировать запрос на повышение прав UAC. - Проверка подлинности пользователя путем вызова CredUIPromptForWindowsCredentials (GUI) или CredUICmdLinePromptForCredentials (командная строка) для получения имени пользователя и пароля. Пример см. в разделе запрос пользователя для учетных данных.
- Олицетворения пользователя. Процесс, начинающийся с учетной записи с высоким уровнем привилегий, например system, может олицетворить учетную запись пользователя, вызвав олицетворенияLoggedOnUser или аналогичные функции олицетворения, что снижает уровень привилегий. Однако если вызов RevertToSelf внедряется в поток, процесс возвращается в исходные привилегии системы.
Если вы определили, что приложение должно работать под учетной записью с правами администратора и что пароль администратора должен храниться в программной системе, см. обработке паролей для методов безопасного выполнения этого действия.