Я пытаюсь запустить процесс ( любой процесс) как " ненадежный ", используя 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).
Что здесь происходит?
Примечание: Запуск процесса на 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
И мое приложение запускается правильно и работает с низким уровнем целостности:
Хотя я мог бы использовать AddMandatoryAce
API или возиться с ACL в маркере безопасности сам, мне любопытно, что случилось с UNTRUSTED
Безопасным уровнем - и почему я не могу ничего запустить.
Примечание: В Windows 7, если вы пометите calc
или notepad
как /setintegritylevel low
, они не смогут запуститься (без ошибок, просто никогда не появятся), даже , хотя эта статья MSDN говорит об использовании calc в качестве теста низкого уровня целостности :