Олицетворять СИСТЕМУ (или эквивалент) из учетной записи администратора
Этот вопрос является продолжением и продолжением этого вопроса о проблеме привилегий, с которой я сейчас сталкиваюсь.
Краткое описание проблемы:
Я запускаю программу под учетной записью администратора домена, которая не имеет Debug programs (SeDebugPrivilege)
привилегия, но мне это нужно на локальной машине.
Клугей Решение:
Программа может установить себя в качестве службы на локальном компьютере и запустить службу. Указанный сервис теперь работает под SYSTEM
учетная запись, которая позволяет нам использовать наш SeTCBPrivilege
привилегия для создания нового токена доступа, который имеет SeDebugPrivilege
, Затем мы можем использовать вновь созданный токен для повторного запуска исходной программы с повышенными правами.
Мне лично не нравится это решение. Я чувствую, что у Администратора должна быть возможность получить необходимые привилегии без необходимости вносить изменения в систему, такие как установка службы (даже если это только временно).
Я надеюсь, что есть решение, которое сводит к минимуму модификации системы и может быть предпочтительно сделано на лету (то есть: не требует перезапуска). Я безуспешно пытался LogonUser
как SYSTEM
и пытался OpenProcessToken
в известном системном процессе (например, csrss.exe) (который завершается ошибкой, потому что вы не можете OpenProcess
с PROCESS_QUERY_INFORMATION
чтобы получить управление процессом без привилегий, которые я пытаюсь получить).
Я просто нахожусь в конце, пытаясь придумать альтернативное решение этой проблемы. Я надеялся, что есть простой способ получить привилегированный токен на хост-компьютере и выдать себя за него для этой программы, но я не нашел способа.
Если кто-нибудь знает способ обойти это, или даже есть предложения о том, что может сработать, пожалуйста, дайте мне знать. Я очень ценю помощь, спасибо!
1 ответ
По замыслу, ни один процесс не может получить права NT AUTHORITY\SYSTEM, если он не запущен другим процессом с правами NT AUTHORITY\SYSTEM. Служба - обходной путь, потому что сам диспетчер управления службами запускается ядром при запуске системы.
К сожалению, операционная система предназначена для предотвращения именно того, что вы пытаетесь сделать. Если вы хотите иметь возможность впоследствии удалить свою службу, просто предоставьте пользователю SeDebugPrivilege, о котором идет речь, для локальной машины, а затем удалите службу самостоятельно.
А еще лучше, чтобы программа, чья память должна быть изменена, изменила DACL, чтобы предоставить администратору доступ к ее памяти без SeDebugPrivilege. Тогда вам не нужно принимать привилегии вообще.
РЕДАКТИРОВАТЬ 2: И что еще лучше, просто используйте общую память в первую очередь. Вот для чего это.