如何 select 将 CreateRestrictedToken 中的基本令牌添加到沙盒系统级服务
How to select base token in CreateRestrictedToken to sandbox SYSTEM level services
我正在尝试在 C++ 中对 SYSTEM 级别的 Win 服务进行沙盒处理。为了创建沙盒进程,我们首先需要通过 CreateRestrictedToken 创建一个受限令牌,然后通过 CreateProcessAsUser 传递。
CreateRestrictedToken 需要输入现有流程的令牌。目前,我在删除 SID 和权限后使用当前 SYSTEM 级别进程的令牌。我阅读了以下内容https://www.tiraniddo.dev/2020/01/dont-use-system-tokens-for-sandboxing.html,发现不建议使用 SYSTEM 级别令牌作为基础令牌。
我从哪里获得基础令牌?
its not recommended to use SYSTEM level token as base token.
更确切地说,不建议将令牌与 AuthenticationId == SYSTEM_LUID
一起使用
(SYSTEM_LUID
在 winnt.h 和 ntifs.h 中定义为 { 0x3e7, 0x0 } )
要获取另一个令牌(不是 0x3e7 = 999
)AuthenticationId,您只需调用
LogonUserW(L"*", L"*", L"*", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, &hToken)
然后已经在返回的令牌上调用 CreateRestrictedToken
我正在尝试在 C++ 中对 SYSTEM 级别的 Win 服务进行沙盒处理。为了创建沙盒进程,我们首先需要通过 CreateRestrictedToken 创建一个受限令牌,然后通过 CreateProcessAsUser 传递。
CreateRestrictedToken 需要输入现有流程的令牌。目前,我在删除 SID 和权限后使用当前 SYSTEM 级别进程的令牌。我阅读了以下内容https://www.tiraniddo.dev/2020/01/dont-use-system-tokens-for-sandboxing.html,发现不建议使用 SYSTEM 级别令牌作为基础令牌。
我从哪里获得基础令牌?
its not recommended to use SYSTEM level token as base token.
更确切地说,不建议将令牌与 AuthenticationId == SYSTEM_LUID
一起使用
(SYSTEM_LUID
在 winnt.h 和 ntifs.h 中定义为 { 0x3e7, 0x0 } )
要获取另一个令牌(不是 0x3e7 = 999
)AuthenticationId,您只需调用
LogonUserW(L"*", L"*", L"*", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, &hToken)
然后已经在返回的令牌上调用 CreateRestrictedToken