Отменяет ли вызов ImpersonateSelf () все настройки токена безопасности, сделанные в одном потоке? - PullRequest
3 голосов
/ 19 июля 2011

Я не получаю ImpersonateSelf().Предположим, мой код запущен в каком-то хост-процессе.Этот хост-процесс создал новый поток и настроил безопасность потока так, чтобы поток имел минимальные привилегии, и теперь этот новый поток выполняет мой код.

Мой код вызывает

ImpersonateSelf( SecurityImpersonation );

Как это повлияетиметь?Будут ли сброшены все настройки привилегий, сделанные для этого потока?

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Да.Он дублирует маркер процесса и назначает его как маркер олицетворения текущего потока.Привилегии от старого токена не имеют значения, потому что поток больше не использует этот токен.Если вы хотите объединить привилегии, используйте GetTokenInformation , чтобы получить старые привилегии, продублировать и присвоить токен олицетворения самостоятельно.

2 голосов
/ 19 июля 2011

Я думаю, статья это вторая ссылка, возвращаемая поиском в Google для ImpersonateSelf, весьма полезная:

Прежде чем вызывать AdjustTokenPrivileges, вы должны получить токен безопасности, который станетцель манипуляции [...] неправильно изменять маркер процесса, хотя Windows® API это позволяет.

...

Благодаря архитектуре безопасности Windows NT® потоки обычно работают без маркера безопасности, [...] что нужно сделать по порядкуЧтобы избежать путаницы с состоянием процесса, необходимо поместить копию потока безопасности процесса в поток, операцию, которая называется олицетворением.

...

После этого шага поток исполняет роль олицетворения, и вы можете завершить операцию, вызвав API, предназначенный для изменения привилегий токена - AdjustTokenPrivileges.

Таким образом, его цель состоит в том, чтобы позволить токену быть измененным (например, для включения привилегий) без влияния на «глобальный» токен процесса.

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

...