Олицетворять СИСТЕМУ (или эквивалент) из учетной записи администратора

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



Краткое описание проблемы:
Я запускаю программу под учетной записью администратора домена, которая не имеет 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: И что еще лучше, просто используйте общую память в первую очередь. Вот для чего это.

Другие вопросы по тегам