Создание токена SYSTEM
От: soveren  
Дата: 07.04.08 12:20
Оценка:
Здравствуйте.

Пытаюсь реализовать запуск процесса (cmd.exe) под аккаунтом SYSTEM.
В качестве основы взят пример из известной книги Ньюбета.
Напомню, что там создается новый токен и большая часть информации берется из токена текущего процесса.
Реализацию делаю на Native API, потому что таковы требования проекта.

Алгоритм следующий

NtOpenProcessToken(текущий процесс)
RtlAllocateAndInitializeSid(.....system_sid)

NtQueryInformationToken( .... TokenSource ....)

NtAllocateLocallyUniqueId

InitializeObjectAttributes с SECURITY_QUALITY_OF_SERVICE, ImpersonationLevel = SecurityAnonymous

потом чтение следующих данных из токена
TokenGroups
TokenPrivilegies
TokenOwner
TokenDefaultDacl
TokenPrimaryGroup вообщем все необходимое для NtCreateToken

AuthenticationId = SYSTEM_LUID;
sqos.Length = sizeof sqos;
sqos.ImpersonationLevel = SecurityAnonymous;
sqos.ContextTrackingMode = SECURITY_STATIC_TRACKING;
sqos.EffectiveOnly = false;

user.User.Sid = system_sid;
user.User.Attributes = 0;

NtCreateToken(...)

Возвращает 0xC000005A — указанный код безопасности нельзя назначить в качестве владельца объекта.
В чем грабли?

Благодарю за помощь, извините за псевдокод. Оригинал такой же как у Ньюбета с вычетом namespace.
Re: Создание токена SYSTEM
От: soveren  
Дата: 07.04.08 12:53
Оценка:
Ок, токен создан, TokenOwner взят у SYSTEM процесса.
Однако при создании процесса — CreateProcessAsUser ос говорит, что клиент не обладает необходимыми правами ...
Re: Создание токена SYSTEM
От: Andrew S Россия http://alchemy-lab.com
Дата: 07.04.08 17:46
Оценка:
S>Пытаюсь реализовать запуск процесса (cmd.exe) под аккаунтом SYSTEM.
S>В качестве основы взят пример из известной книги Ньюбета.
S>Напомню, что там создается новый токен и большая часть информации берется из токена текущего процесса.
S>Реализацию делаю на Native API, потому что таковы требования проекта.

Могу только посоветовать действовать через временный сервис, который и будет пускать cmd.exe. Имхо, это самый простой и правильный вариант. Все остальное требует как минимум извращений с csrss и т.п. Частично у неббета это есть, но только частично.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Создание токена SYSTEM
От: Ivan Россия www.rsdn.ru
Дата: 07.04.08 20:52
Оценка:
Здравствуйте, soveren, Вы писали:
http://www.rsdn.ru/forum/NewMsg.aspx?mid=2906110
Автор: soveren
Дата: 07.04.08

S>Ок, токен создан, TokenOwner взят у SYSTEM процесса.
S>Однако при создании процесса — CreateProcessAsUser ос говорит, что клиент не обладает необходимыми правами ...

Использование функции NtCreateToken требует привилегии SeCreateToken, которая доступна только для очень ограниченного количества системных процессов, работающих под системным эккаунтом (lsass, csrss).
Если есть доступ к токену SYSTEM, то проще всего сделать его копию (DuplicateToken), чем создавать новый.
CreateProcessAsUser может возвращать ошибку из-за того, что у токена тип не PrimaryToken
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.