SaferCreateLevel SAFER_LEVELID_UNTRUSTED: приложение не удалось правильно запустить (0xc0000142) - PullRequest
2 голосов
/ 22 июня 2011

Я пытаюсь запустить процесс ( любой процесс) как " ненадежный ", используя SaferCreateLevel с более безопасным уровнем SAFER_LEVELID_UNTRUSTED:

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

Используя код из статьи MDSN DropMyRights от Michael Howards ( Просмотр веб-страниц и безопасное чтение электронной почты в качестве администратора ), псевдокод:

//get a handler on a Safer level
hSaferLevel = SaferCreateLevel(SAFER_SCOPEID_USER, SAFER_LEVELID_UNTRUSTED);

//Create a security token out of the safer level handle
hSecurityToken = SaferComputeTokenFromLevel(hSaferLevel);

//Create process as user
CreateProcessAsUser(hSecurityToken, "myapp.exe");

За исключением того, что процесс не запускается:

Приложение не может запуститься правильно (0xc0000142).

enter image description here

Что здесь происходит?

Примечание: Запуск процесса на SAFER_LEVELID_NORMALUSER работает нормально:

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

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


Мое приложение способно работать как «низкий» пользователь.

Конечной целью было запустить процесс с теми же привилегиями, что и процесс MandatoryIntegrity \ Low (хотя и не помеченный как "низкий"). Итак, я проверил это.

я использовал icacls, чтобы отметить мое приложение для запуска Обязательный уровень целостности \ Низкий :

C:\Develop>icacls RTMS.exe /setintegritylevel Low
processed file: RTMS.exe
Successfully processed 1 files; Failed processing 0 files

И мое приложение запускается правильно и работает с низким уровнем целостности:

enter image description here

Хотя я мог бы использовать AddMandatoryAce API или возиться с ACL в маркере безопасности сам, мне любопытно, что случилось с UNTRUSTED Безопасным уровнем - и почему я не могу ничего запустить.

Примечание: В Windows 7, если вы пометите calc или notepad как /setintegritylevel low, они не смогут запуститься (без ошибок, просто никогда не появятся), даже , хотя эта статья MSDN говорит об использовании calc в качестве теста низкого уровня целостности :

enter image description here

1 Ответ

1 голос
/ 23 июня 2011

0xc0000142 = STATUS_DLL_INIT_FAILED

Может быть, Process Monitor даст вам некоторые подсказки?

UNTRUSTED, вероятно, слишком ограничен для большинства вещей.Вы не можете получить доступ к своему профилю, например:

  • HKEY_CURRENT_USER
  • % temp%

Вы пробовали CONSTRAINED?

Другой альтернативой является использование CreateRestrictedToken и вычисление токена, который достаточно ограничен.

Я предполагаю, что MS вроде забыл о функциях Safer * Level в NT6, и мы получилиUAC вместо.(В диалоговом окне RunAs GUI в XP была опция защиты моего компьютера, но это диалоговое окно теперь отсутствует (даже в XP оно было слишком ограничительным для большинства вещей))

...