今天我们来探讨一个近期在安全评估中发现的有趣问题——SeRelabelPrivilege 的滥用。这个特权在某些组策略中被授予了内置的 Users 组,并应用于多个计算机账户。对这种特权我感到非常好奇,因此决定深入研究其潜在影响和可能的滥用场景。
根据微软的文档,拥有 SeRelabelPrivilege 权限的用户可以改变文件或进程的完整性级别,从而提升或降低其安全性。
我决定进行实验来探究这个特权的实际效果。首先,我通过组策略将 SeRelabelPrivilege 分配给一个标准用户:
经过一系列测试,我发现这个特权实际上允许用户获取资源的所有权,包括那些完整性级别比用户更高的资源。
获得所有权后,用户可以赋予自己对资源的完全控制,这与滥用 SeDebugPrivilege 的效果类似。
我的目标是取得 SYSTEM 进程的所有权,授予自己完全控制权,然后在 NT AUTHORITYSYSTEM 账户下创建一个进程。
首先,我需要获取当前用户 SID 并启用特定权限:
这里需要以WRITE_OWNER访问权限打开该进程。在 SetSecurityInfo 调用中,这里必须要有“LABEL_SECURITY_INFORMATION”标志,否则就无法拥有高级别的进程。
上面我们通过一段简单的实验代码成功地获取了 SYSTEM 进程的所有权,并在 NT AUTHORITYSYSTEM 帐户下创建了一个新进程。
这里7116 是 winlogon 进程,它在系统完整性下运行,归 SYSTEM 所有:
那么这里滥用这个功能的最简单方法是执行父进程注入。
总结来说,SeRelabelPrivilege 允许用户即使在完整性级别更高的情况下也能获取资源的所有权,并赋予自己完全访问权限。这种特权的滥用结果与 Debug Privilege 十分相似,而微软为何实现这一特权仍然是一个谜。
原文始发于微信公众号(山石网科安全技术研究院):探讨Windows SeRelabelPrivilege特权滥用的危害