SEP_TOKEN_PRIVILEGES结构中包含与令牌相关的特权的所有信息,其中Present为令牌当前可用的权限;Enabled为已启用的权限;EnabledByDefault为默认情况下已启用的权限。

TOKEN_TYPE为枚举类型,其中定义了令牌类型是否为Primary或者Impersonation(后续文章中会详细分析这方面内容)。

SECURITY_IMPERSONATION_LEVEL也是一个枚举类型,其中指定了不同常量,用来决定调用进程可以在哪种级别模拟目标进程。

常量的定义可参考微软官方文档,具体如下:

我们将使用TOKEN_TYPE及SECURITY_IMPERSONATION_LEVEL常量来模拟令牌,可根据具体情况来设置相应值,比如是使用Primary令牌来创建进程,或者是使用Impersonation令牌来模拟某个进程。

SID_AND_ATTRIBUTES结构定义了SID(安全标识符)及SID的属性。

0x02 特权

一般而言,特权(Privilege)这个词指的是上级单位根据某些条件赋予某人或者某个组织的一种特殊权利。

与之类似,在Windows系统中,管理员可以为用户分配某些特权以执行系统相关的活动。默认情况下系统会给用户分配一些特权,而管理员也可以使用“本地安全策略设置”在本地为用户分配一些特权。

特权决定哪个用户可以控制系统资源,以执行系统相关任务,如关机、调试被其他进程使用的进程内存、将驱动载入内存中、备份文件及目录等。

Windows系统中可用的特权常量可参考此处资料。

在上文中,我们提到SEP_TOKEN_PRIVILEGES结构中包含Enabled及EnabledByDefault成员,这意味着分配给用户的所有特权默认情况下不一定处于启用状态,只有某些特权在分配时被启用,如果需要其他特权来执行系统相关任务,则必须通过外部方式启用这些特权。

标准用户已启用的特权如下图所示:

如上图所示,只有SeChangeNotifyPrivilege特权处于启用状态,分配给用户的其他特权处于禁用状态。为了使用这些特权,我们首先必须执行启用操作。

在本系列文章中,我们将启用SE_DEBUG_NAME特权,该特权可以帮我们调试无法访问的进程或者运行在SYSTEM账户下的进程。

下面来观察不同用户所对应的令牌,这里我们来观察运行在标准用户及管理员用户安全上下文中的notepad进程所对应的令牌。

我们使用WinDbg来查看目标进程(这里为notepad.exe)的令牌。

标准用户的令牌状态如下:

上图中可以看到进程对应的Session ID(已登录的会话)、Impersonation Level、TokenType等,该进程的令牌类型为Primary。此外上图顶部的输出信息表明对应的线程没有处于模拟状态,使用的是Primary令牌。

从图中可知分配给该进程的特权与分配给普通用户的特权一样,因为该进程运行在标准用户的安全上下文中。

Elevation Type的值为3(Limited,受限),这表明这是一个受限令牌,其中剔除了管理员特权,禁用了管理员组。

管理员用户的令牌状态如下:

上图的令牌信息与标准用户类似,但分配的特权要比标准用户要多得多,基本上所有特权都会分配管理员用户。此外,我们可以看到这里的Elevation Type为2(Full,完整),表明这是提升(Elevated)令牌,没有被剔除某些权限及用户组。

0x03 总结

在本文中,我们讨论了访问令牌以及访问令牌的使用场景、生成时间点、TOKEN内部结构以及与令牌相关的许多知识点。这些知识点非常重要,可以帮我们理解令牌在Windows系统用户及进程的安全上下文的工作方式。理解这些内容后,在下文中我们将继续研究,使用Windows API来发起令牌篡改攻击。

原文链接:https://www.anquanke.com/post/id/192892

1.《privileges 详解令牌篡改攻击(Part 1)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《privileges 详解令牌篡改攻击(Part 1)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/346090.html