Как снизить разрешения пользовательского процесса, запущенного из системного сервиса?

В моей локальной системной службе я могу запустить процесс пользовательского интерфейса, который должен запускаться с учетными данными вошедшего в систему пользователя Windows, но иногда, когда нет вошедшего в систему пользователя, он может запускаться в Winlogon или «безопасный рабочий стол».

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

//The following pseudo-code snippet is run from the local system service

HANDLE hSelfToken = NULL;
HANDLE hToken2 = NULL;

::OpenProcessToken(::GetCurrentProcess(), TOKEN_ALL_ACCESS, &hSelfToken);

//Remove most of privileges & create restricted token
::CreateRestrictedToken(hSelfToken,
DISABLE_MAX_PRIVILEGE | LUA_TOKEN,
0, NULL,
0, NULL, 0, NULL,
&hToken2);

//Set user session ID for the token where the process will run
::SetTokenInformation(hToken2, TokenSessionId, &dwSessionId, sizeof(dwSessionId));

//The 'hToken2' is later used to call CreateProcessAsUser() to start a user UI process

Это прекрасно работает, за исключением того, что несмотря на то, что нет привилегий и никакого повышения, мой процесс пользовательского интерфейса, который запускается с помощью этого метода, все еще получает слишком много «прав» системной службы. Например, он может создать файл в C:\ корневую папку или открыть HKLM ключ реестра для записи.

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

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]