Windows是否可以为管理员用户创建的标准用户令牌添加权限?

5
这个问题是关于为什么在Windows 8上忽略了SeCreateSymbolicLinkPrivilege的后续问题。
给定条件:
  1. 用户在管理员组中
  2. 关闭UAC不是我的选择。
  3. 无法运行提升。
问题:是否可能将SeCreateSymbolicLinkPrivilege添加到Windows为管理员用户创建的标准用户令牌中?
附录:
非提升的管理员用户:
C:\dayforce\SharpTop>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                          State
============================= ==================================== ========
SeShutdownPrivilege           Shut down the system                 Disabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled
SeUndockPrivilege             Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set       Disabled
SeTimeZonePrivilege           Change the time zone                 Disabled

C:\dayforce\SharpTop>

一般用户:

C:\Windows\system32>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                          State
============================= ==================================== ========
SeShutdownPrivilege           Shut down the system                 Disabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled
SeUndockPrivilege             Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set       Disabled
SeTimeZonePrivilege           Change the time zone                 Disabled
SeCreateSymbolicLinkPrivilege Create symbolic links                Disabled

C:\Windows\system32>

注意,普通用户拥有SeCreateSymbolicLinkPrivilege权限,因为我已在安全策略中启用了它。但管理员用户则没有此权限,因为这对其标准用户令牌没有影响!


不,没有(合理的)方法可以这样做。(当然,您可以编写一个服务,代表您创建符号链接。) - Harry Johnston
我不知道是否有任何方法可以自定义高程分割令牌方案,但您可以提升权限,然后调用 CreateRestrictedToken 来创建自定义沙盒。 - Eryk Sun
这样做将违反要求3 - _不允许以提升权限运行_。这也意味着即使是短暂的提升权限也不行。原因在于提升权限需要用户交互。 - mark
使用服务来创建受限令牌怎么样?通过服务,您可以获取控制台用户的关联管理员令牌,然后在她的会话中使用受限令牌创建一个新进程。 - Eryk Sun
那可能是一个解决方案,但这意味着部署额外的组件,即使它只需要一次性部署。虽然可行,但更复杂,因为我们现在不仅要使用简单的命令行,还要与另一个进程进行通信。尽管如此,请将其作为答案安排,我会点赞的。 - mark
在Windows中,没有已知的方法可以向现有令牌添加特权。特权可以启用、禁用和删除,但不能添加。也就是说,您可以从头开始创建一个具有所需特权的新令牌。这里有一个工具,可以用来启动一个带有SeCreateSymbolicLinkPrivilege作为其主要令牌一部分的子进程:https://github.com/cubiclesoft/createprocess-windows。不过它需要临时提升权限。这似乎是操作系统中的一个错误。如果BUILTIN\Users的每个成员都应该获得某个特权,则LSASS不应忽略管理员的权限。 - CubicleSoft
1个回答

3

(这不是对实际问题的回答,而是对我所理解的实际目标的尝试回答)

我能理解你的痛苦——我一直在寻找一种方式,允许一个非提升权限的管理员用户创建符号链接,但一直没有成功……

  • 我曾经尝试过更改进程令牌(例如“explorer”)以添加SeCreateSymbolicLinkPrivilege特权,但似乎没有办法更改现有令牌的权限集。即使你的补丁进程以SYSTEM身份运行并/或具有SeTcbPrivilege特权。

  • 我曾经尝试使用CreateRestrictedToken来创建您自己的非提升权限进程,但保留SeCreateSymbolicLinkPrivilege特权。但我读到的所有轶事都表明,生成的令牌无法足够类似于“真正”的非提升权限令牌。存在着完整性级别或与令牌相关联的提升标志等无法克服的问题。

  • 无论您将哪些用户分配给安全策略管理器中的创建符号链接用户权限,如果您的进程以非提升权限运行(来自具有管理员权限的用户),则SeCreateSymbolicLinkPrivilege特权会被删除。即使唯一添加的用户是“所有人”。

这真的让我们很困扰,似乎没有好的解决办法。但有一个可能有些hackish的解决方案……

现在来介绍hackish的解决方案——在用户登录时启动一个后台程序(提升权限),代表其他进程创建符号链接。这将需要使用某种IPC机制,例如命名管道,从客户端进程接收创建符号链接请求。虽然不太美观,也可能会比较慢,但除了以提升权限运行(或禁用UAC)或将用户从管理员组中删除之外,我看不到其他的方法。


请查看 eryksun 的评论 - 他建议的基本上是相同的 - 创建一个在常规帐户下运行的服务,代表非提升的管理员用户创建符号链接。 - mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接