Windows九大权限

九大权限

权限 描述
SeImpersonatePrivilege 身份验证后模拟客户端
SeAssignPrimaryTokenPrivilege 替换一个进程级令牌
SeTcbPrivilege 以操作系统方式执行
SeBackupPrivilege 备份文件和目录
SeRestorePrivilege 还原文件和目录
SeCreateTokenPrivilege 创建令牌对象
SeLoadDriverPrivilege 加载和卸载设备驱动程序
SeTakeOwnershipPrivilege 取得文件或其他对象的所有权
SeDebugPrivilege 调试程序

九大可利用特权

SeImpersonatePrivilege

根据微软的官方文档,SeImpersonatePrivilege 特权允许一个进程在通过身份验证后模拟客户端的身份。这个特权是令牌模拟(Token Impersonation)机制中的关键组成部分,它使得拥有该特权的进程能够模拟任何它可以获取其句柄的令牌所代表的用户。然而,需要注意的是,这个特权本身并不允许创建新的令牌,它只能使用已有的令牌。利用此特权,攻击者可以获取一个高权限账户(如 “NT AUTHORITY\SYSTEM”)的令牌句柄,然后通过特定的系统函数调用,创建一个以该高权限令牌为基础的新进程,从而实现权限的提升。

在实际应用中,这种特权对于常见的 Windows 服务账户(例如 LocalService、MSSQL 和 IIS)的提权攻击尤为重要。如果攻击者能够成功入侵这些服务账户,那么拥有 SeImpersonatePrivilege 特权就意味着可以轻易地将权限提升至系统级别。

简单来说,SeImpersonatePrivilege 权限可以模拟令牌,让当前会话以其他用户(包括系统用户)的身份运行。

SeAssignPrimaryPrivilege

SeAssignPrimaryPrivilege 特权允许进程为另一个进程分配主令牌(Primary Token)。这意味着拥有该特权的进程可以将一个特定的主令牌分配给一个新的进程,或者一个处于挂起状态的进程。与 SeImpersonatePrivilege 类似,攻击者可以首先获取一个具有高权限的模拟令牌,然后通过系统函数将其转换为主令牌。之后,攻击者可以利用这个主令牌来创建一个新的高权限进程,或者将这个令牌分配给一个已存在的、处于挂起状态的进程,从而实现权限的提升。

值得注意的是,在某些特定的漏洞利用场景下,例如存在部分写漏洞(Partial Write Vulnerability)的情况下,如果攻击者能够通过漏洞修改 EPROCESS 结构中的 PrimaryTokenFrozen 标志位(将其清除),那么甚至可以直接替换当前正在运行的进程的令牌。这为攻击者提供了一种更加直接和隐蔽的提权方式。

简单来说,SeAssignPrimaryPrivilege 权限允许将一个进程的令牌替换为另一个令牌,从而改变进程的权限等级。

SeTcbPrivilege

SeTcbPrivilege 特权,全称为“作为可信计算机基础的一部分”,是 Windows 操作系统中一个非常特殊的权限。拥有此特权的进程被认为是操作系统核心信任链的一部分。这意味着该进程具有极高的权限,通常被认为等同于对整个计算机的完全控制。利用这一特权,攻击者可以通过调用特定的系统函数(如 LsaLogonUser),并在特定的条件下(例如使用 S4U 登录类型),获得任意用户的令牌。更进一步,攻击者还可以向获取到的令牌中添加特定的安全标识符(SID),例如代表 Local System 账户的 SID “S-1-5-18”,从而使该令牌具有系统级别的权限。随后利用令牌完整性级别以及setthreadtoken函数,就可以完成权限提升。

此特权之所以强大,部分原因在于它允许进程在没有其他模拟相关特权的情况下,模拟特定类型的令牌(例如为当前用户创建的、完整性级别为 “Medium” 的令牌)。

简单来说,SeTcbPrivilege 权限允许进程把自己当作操作系统的一部分, 从而获取并修改令牌,赋予自己极高的系统权限。

SeBackupPrivilege

SeBackupPrivilege 特权,顾名思义,是用于执行备份操作的。在 Windows 系统中,拥有此特权的进程可以绕过文件系统中的访问控制列表(ACL)限制,读取任何文件的内容,而无需考虑文件本身的权限设置。这意味着,即使某个文件被设置为只有特定用户或组才能访问,拥有 SeBackupPrivilege 特权的进程仍然可以读取该文件的内容。这种特权被授予以下访问权限:READ_CONTROLACCESS_SYSTEM_SECURITYFILE_GENERIC_READFILE_TRAVERSE

在攻击场景中,攻击者可以利用 SeBackupPrivilege 特权来读取系统中的敏感信息,例如从注册表中获取本地管理员账户的密码哈希。随后,攻击者可以将这些哈希值用于其他攻击手段,例如通过 “psexec” 或 “wmiexec” 等工具远程执行代码,从而进一步控制目标系统。

不过也需要注意到此权限的限制,许多公司已经禁用了本地管理员账号,且高版本 Windows 只允许 RID500 进行远程管理。

简单来说,SeBackupPrivilege 权限允许绕过文件读取限制,读取系统中的任何文件,包括敏感的密码哈希信息。

SeRestorePrivilege

SeRestorePrivilege 特权与 SeBackupPrivilege 类似,也是用于系统备份和恢复操作的。不同之处在于,SeRestorePrivilege 特权允许进程绕过文件系统的写入权限限制,对系统中的任何文件进行写入操作,甚至可以更改文件的所有者。在利用这个特权时,通常需要与特定的系统函数调用(例如带有 FILE_FLAG_BACKUP_SEMANTICS 标志的函数)结合使用,以告知操作系统内核当前进程具有 SeRestorePrivilege 特权。

攻击者可以利用 SeRestorePrivilege 特权对系统进行任意修改。一种常见的攻击手法是修改注册表中的 “Image File Execution Options” 项。通过修改这个注册表项,攻击者可以在启动特定的系统二进制文件时,执行自定义的代码,从而实现权限的提升。此外,攻击者还可以利用 SeRestorePrivilege 特权进行 DLL 劫持、覆盖关键系统文件或修改其他服务的配置,从而实现对系统的持久控制。

简单来说,SeRestorePrivilege 权限允许绕过文件写入限制,修改系统中的任何文件,包括关键的注册表项和系统文件。

SeCreateTokenPrivilege

SeCreateTokenPrivilege 特权允许进程通过系统函数调用(例如 ZwCreateToken)创建新的访问令牌(Access Token)。然而,仅拥有这个特权并不足以直接进行权限提升,因为创建的令牌默认情况下可能不具备足够的权限。要利用这个特权进行提权,攻击者通常需要结合其他技巧。

一种常见的利用方式是,攻击者首先创建一个新的模拟令牌,这个令牌与当前进程的令牌具有相似的属性,但是会额外添加一个具有高权限的安全标识符(SID),例如本地管理员组的 SID。然后,攻击者需要确保新创建的令牌满足特定的条件(例如与当前进程的用户和完整性级别匹配),这样就可以使用这个令牌来模拟执行线程,从而获得令牌所代表的权限。

简单来说,SeCreateTokenPrivilege 权限允许创建新的令牌,但通常需要结合其他技术才能实现权限提升。

SeLoadDriverPrivilege

SeLoadDriverPrivilege 特权允许进程加载和卸载设备驱动程序。由于设备驱动程序在内核模式下运行,具有极高的权限,因此这个特权对于攻击者来说非常具有吸引力。拥有 SeLoadDriverPrivilege 特权的进程可以通过系统函数调用(例如 NtLoadDriver)加载自定义的内核模式驱动程序。

在实际利用过程中,攻击者可以绕过一些安全限制,例如通过指定 HKCU (HKEY_CURRENT_USER) 而不是 HKLM (HKEY_LOCAL_MACHINE) 的注册表路径来加载驱动程序,从而规避对管理员权限的要求。

简单来说,SeLoadDriverPrivilege 权限允许加载内核模式驱动程序,为攻击者提供了在内核空间执行任意代码的机会。

SeTakeOwnershipPrivilege

SeTakeOwnershipPrivilege 特权允许进程获取系统中任何对象的所有权,而无需事先被授予相应的访问权限。这为攻击者提供了一种修改系统资源访问控制策略的途径。在攻击场景中,SeTakeOwnershipPrivilege 特权通常与 SeRestorePrivilege 特权结合使用。攻击者可以首先利用 SeTakeOwnershipPrivilege 获取目标对象(例如注册表项或文件)的所有权,然后利用 SeRestorePrivilege 修改对象的访问控制列表(DACL),从而获得对该对象的写入权限。

具体实现上,攻击者需要构建一个包含新所有者信息的访问控制列表(ACL),然后通过系统函数调用将该 ACL 应用到目标对象上。之后,攻击者就可以像利用 SeRestorePrivilege 一样,对目标对象进行任意修改。

简单来说,SeTakeOwnershipPrivilege 权限允许获取对象的所有权,从而可以修改对象的访问控制策略,为后续的攻击操作铺平道路。

SeDebugPrivilege

SeDebugPrivilege 特权允许进程调试其他进程,包括读取和写入目标进程的内存。这个特权在过去被恶意软件作者和漏洞利用开发者广泛使用,因此许多相关的提权技术已经被现代的安全防护方案所熟知。

尽管如此,攻击者仍然可以通过一些高级的内存注入技术,绕过大多数的反病毒软件和主机入侵防御系统(AV/HIPS)。具体的注入技术细节不在本文档的讨论范围之内。

简单来说,SeDebugPrivilege 权限允许调试其他进程,为攻击者提供了操纵目标进程内存的机会,但相关的攻击技术容易被安全软件检测到。

易混淆权限的辨析

SeImpersonatePrivilege 与 SeAssignPrimaryPrivilege

这两个权限都与令牌操作有关,但作用对象和使用场景有所不同。

SeImpersonatePrivilege 允许进程模拟(Impersonate)另一个用户的安全上下文。这里的“模拟”指的是,拥有该特权的进程可以临时借用另一个用户的身份来执行操作,就像戴上了另一个用户的“面具”。这个“面具”就是目标用户的访问令牌。关键在于,SeImpersonatePrivilege 只能使用已存在的令牌,它不能创建新的令牌。这种模拟通常用于客户端/服务器架构中,服务器进程需要代表客户端执行操作的场景。

SeAssignPrimaryPrivilege 则允许进程为一个进程分配主令牌(Primary Token)。主令牌是一个进程启动时就被赋予的令牌,它决定了进程的安全上下文。与模拟不同,分配主令牌是永久性的改变了进程的身份。拥有 SeAssignPrimaryPrivilege 的进程可以将一个主令牌分配给一个新的进程(在进程创建时),或者分配给一个处于挂起状态的进程。但是,通常情况下,不能为一个正在运行的进程更换主令牌(除非通过特殊手段绕过限制)。

总的来说,SeImpersonatePrivilege 是“借用”身份,而 SeAssignPrimaryPrivilege 是“赋予”身份。前者是临时的、可逆的,后者通常是永久的、不可逆的。

SeBackupPrivilege 与 SeRestorePrivilege

这两个权限都与绕过文件系统的访问控制有关,但一个用于读取,一个用于写入。

SeBackupPrivilege 允许进程绕过文件和目录的权限检查,读取系统中的任何文件和目录。这就像拥有了一把“万能钥匙”,可以打开任何文件和目录的“锁”。这个特权主要用于备份操作,备份程序需要能够读取所有文件,无论这些文件的所有者和权限设置如何。需要注意的是,SeBackupPrivilege 只允许读取,不允许写入。

SeRestorePrivilege 则与 SeBackupPrivilege 相反,它允许进程绕过文件和目录的权限检查,写入系统中的任何文件和目录,甚至可以更改文件的所有者。这就像拥有了一支“魔法笔”,可以随意修改系统中的任何文件。这个特权主要用于还原操作,还原程序需要能够将备份的文件恢复到原来的位置,并设置正确的权限。

可以这样理解:SeBackupPrivilege 是“只读万能钥匙”,而 SeRestorePrivilege 是“读写魔法笔”。

SeTcbPrivilege 与 SeDebugPrivilege

这两个权限都赋予了进程极高的权限,但它们的作用机制和应用场景有很大区别。

SeTcbPrivilege(作为可信计算机基础的一部分)是 Windows 中最强大的特权之一。拥有此特权的进程被视为操作系统核心的一部分,具有近乎无限的权限。它可以执行许多特权操作,包括创建和修改令牌、加载驱动程序等。SeTcbPrivilege 的滥用通常与 LsaLogonUser 等 API 结合,允许攻击者获取并操纵具有极高权限的令牌。

SeDebugPrivilege 则允许进程调试其他进程。调试意味着可以读取和写入目标进程的内存,甚至可以控制目标进程的执行流程。这个特权通常用于软件开发和调试,但在攻击场景中,它也可以被用来进行代码注入、内存修改等恶意操作。

可以这样理解:SeTcbPrivilege 是“操作系统级别的权限”,而 SeDebugPrivilege 是“进程级别的权限”。前者更加底层和强大,后者则更加专注于进程间的交互和控制。
需要额外提到的是,SeDebugPrivilege由于其强大的特性,一旦被检测到,通常会被安全软件标记。