Подвергаю ли я опасности систему, если запускаю процесс входа пользователя с помощью токена пользователя SYSTEM?

Мне интересно с точки зрения безопасности, насколько плохо делать то, что я опишу ниже?

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

Это ускоряет процесс, если я запускаю этот процесс с токеном пользователя локальной службы как таковой:

//Pseudo-code, error checks are omitted for brevity
//This code is run from a local-service with SYSTEM credentials

PSID gpSidMIL_High;
ConvertStringSidToSid(L"S-1-16-12288", &gpSidMIL_High);

HANDLE hToken, hToken2;

OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &hToken2);

SetTokenInformation(hToken2, TokenSessionId, &userSessionID, sizeof(userSessionID));

DWORD dwUIAccess = 1;
SetTokenInformation(hToken2, TokenUIAccess, &dwUIAccess, sizeof(dwUIAccess));

//Set "high" mandatory integrity level
TOKEN_MANDATORY_LABEL tml = {0};
tml.Label.Attributes = SE_GROUP_INTEGRITY;
tml.Label.Sid = gpSidMIL_High;

SetTokenInformation(hToken2, TokenIntegrityLevel, &tml, sizeof(TOKEN_MANDATORY_LABEL) + ::GetSidLengthRequired(1));

CreateEnvironmentBlock(&pEnvBlock, hToken2, FALSE);

ImpersonateLoggedOnUser(hToken2);
CreateProcessAsUser(hToken2,,,,,,,pEnvBlock,,);
RevertToSelf();

//Clean-up
DestroyEnvironmentBlock(pEnvBlock);
CloseHandle(hToken2);
CloseHandle(hToken);
LocalFree(gpSidMIL_High);

0

Решение

Выглядит довольно плохо. У процесса слишком много прав. Процесс рискует быть угнанным пользователем, в сеансе которого вы запускаете, что даст ему SYSTEM прав, которыми он вообще не владеет.

Надлежащая конструкция должна быть способна ничего не делать. Сообщите о событиях клавиатуры обратно в сервис. Ваш крючок не должен быть SYSTEM за это. Это, вероятно, целесообразно позвонить AdjustTokenPrivileges безвозвратно отбросить все привилегии (которые вам не нужны). Даже если ваш хук процесс был взломан, он не сможет восстановить эти привилегии.

0

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

Других решений пока нет …

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