如何在CreateRestrictedToken中选择基本令牌来沙箱SYSTEM级别的服务

How to select base token in CreateRestrictedToken to sandbox SYSTEM level services

本文关键字:SYSTEM 服务 令牌 CreateRestrictedToken 选择      更新时间:2024-04-28

我正在尝试在C++中沙箱SYSTEM级别的Win服务。为了创建沙箱进程,我们首先需要通过CreateRestrictedToken创建一个受限令牌,然后通过CreateProcessAsUser传递该令牌。

CreateRestrictedToken需要输入中现有进程的令牌。目前,我在删除SID和特权后使用当前SYSTEM级别进程的令牌。我阅读了以下内容https://www.tiraniddo.dev/2020/01/dont-use-system-tokens-for-sandboxing.html并发现不建议使用SYSTEM级别的令牌作为基本令牌。

我将从哪里获得基本令牌?

不建议使用SYSTEM级别的令牌作为基本令牌。

更确切地说,不建议将令牌与AuthenticationId == SYSTEM_LUID一起使用(SYSTEM_LUIDwinnt.hntifs.h中定义为{0x3e7,0x0}(

要使用另一个(而不是0x3e7 = 999(AuthenticationId获取令牌,您可以简单地调用

LogonUserW(L"*", L"*", L"*", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, &hToken)

则已经在返回的令牌上调用CCD_ 5