Олицетворять СИСТЕМУ (или эквивалент) из учетной записи администратора - PullRequest
3 голосов
/ 07 июня 2010

Этот вопрос является продолжением и продолжением этого вопроса о проблеме с привилегиями, с которой я сейчас сталкиваюсь.



Краткое описание проблемы:
Я запускаю программу под учетной записью администратора домена, у которой нет привилегии Debug programs (SeDebugPrivilege), но она мне нужна на локальном компьютере.


Клугей Раствор:
Программа может установить себя в качестве службы на локальном компьютере и запустить службу. Указанная служба теперь работает под учетной записью SYSTEM, что позволяет нам использовать нашу привилегию SeTCBPrivilege для создания нового токена доступа, который имеет SeDebugPrivilege. Затем мы можем использовать вновь созданный токен для повторного запуска исходной программы с повышенными правами.


Мне лично не нравится это решение. Я чувствую, что у Администратора должна быть возможность получить необходимые привилегии без необходимости вносить изменения в систему, такие как установка службы (даже если это только временно).

Я надеюсь, что существует решение, которое сводит к минимуму модификации системы и предпочтительно может быть сделано на лету (то есть: не требует перезапуска). Я безуспешно пытался LogonUser как SYSTEM и пытался OpenProcessToken на известном системном процессе (например, csrss.exe) (который завершается неудачно, потому что вы не можете OpenProcess с PROCESS_QUERY_INFORMATION, чтобы получить дескриптор процесс без привилегий я пытаюсь приобрести).

Я просто нахожусь в своем уме, пытаясь найти альтернативное решение этой проблемы. Я надеялся, что есть простой способ получить привилегированный токен на хост-машине и выдать его за эту программу, но я не нашел способа.



Если кто-нибудь знает способ обойти это или даже есть предложения о том, что может работать, пожалуйста, дайте мне знать. Я очень ценю помощь, спасибо!

1 Ответ

4 голосов
/ 07 июня 2010

По проекту ни один процесс не может получить права NT AUTHORITY \ SYSTEM, если он не запущен другим процессом с правами NT AUTHORITY \ SYSTEM. Служба - обходной путь, потому что сам диспетчер управления службами запускается ядром при запуске системы.

К сожалению, операционная система предназначена для предотвращения именно того, что вы пытаетесь сделать. Если вы хотите иметь возможность впоследствии удалить свой сервис, просто предоставьте рассматриваемому пользователю SeDebugPrivilege для локального компьютера и затем удалите сервис самостоятельно.

Еще лучше: измените DACL в программе, чья память должна быть изменена, чтобы предоставить администратору доступ к ее памяти без SeDebugPrivilege. Тогда вам вообще не нужно пользоваться привилегиями.

РЕДАКТИРОВАТЬ2: И что еще лучше, просто используйте совместно используемую память. Вот для чего это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...