【问题标题】:How integrity level of a process is determined?如何确定流程的完整性级别?
【发布时间】:2012-09-10 08:51:52
【问题描述】:

我想启动一个具有高完整性级别的进程。父进程作为系统服务 LocalSystem 帐户运行。在一台 Windows 2008 机器中,子进程为高级,而在另一台 2008 机器中,该进程为“中”级。看起来CreateProcessAsUser 在不同的机器上得到了不同的级别。

if (!WTSQueryUserToken(sessionID, &hToken)) 
{//The admin user logged in the rdp session of "sessionID".
    return;
}
BOOL fSuccess = CreateProcessAsUser(hToken, NULL, cmdLine, NULL, NULL,
TRUE,CREATE_NEW_CONSOLE,NULL, workDir, &si, &pi);

是什么导致了差异?有没有配置或者程序的方式来解决?

【问题讨论】:

  • 也许其中一台机器禁用了 UAC,因此管理员没有获得拆分令牌?或者在一种情况下,有问题的帐户是内置管理员帐户,它(默认情况下)免于获取拆分令牌?

标签: c++ windows winapi process


【解决方案1】:

不要指望用户的 ACL。当然,LocalSystem 帐户可能包含高完整性级别 ACL,但这不是获取该 IL ACL 的可靠方法。高 IL SID 是众所周知的 (SID: S-1-16-12288)。将其放入安全描述符中,并将其传递给 CreateProcess。

【讨论】:

    【解决方案2】:

    您应该能够在启动新进程之前更改检索到的令牌的完整性级别,方法是调用 SetTokenInformation 并将 TOKEN_INFORMATION_CLASS 参数设置为 TokenIntegrityLevel

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2019-04-23
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多