Part 1 详解令牌篡改攻击


Part 1 详解令牌篡改攻击

文章插图
0x00 前言
在这一系列文章中 , 我们将讨论基于windows令牌(Token)的攻击方式 , 全面理解令牌、特权(Privilege)等知识点 , 了解令牌及特权在Windows系统安全架构中的实现机制 。
令牌篡改攻击(Token Manipulation Attack)是多个APT组织及恶意软件常用的一种技术 , 可以用来在受害者系统上获取高权限 , 或者以其他用户身份执行操作(用户仿冒) 。
【Part 1 详解令牌篡改攻击】MITRE上给出了使用该技术的相关APT组织及涉及到的工具:
Part 1 详解令牌篡改攻击

文章插图
 
令牌篡改实际上并不完全属于漏洞利用范畴 , 这里我们滥用的是Windows系统自身的功能 , 通过某些Windows API函数来修改调用进程的安全上下文 , 以便模拟另一个进程(通常是低权限进程)的安全上下文 。模拟过程可以通过目标进程的线程来完成 , 后面我们再详细讨论这一点 。Windows使用这种功能来修改调用进程所属线程的安全上下文 , 将其修改成其他用户的安全上下文 , 以执行某些操作 。
Windows系统中有各种用户 , 比如System、Network Service、Local Service以及Administrator账户(组)及普通域用户 。这些用户账户都运行在不同的安全上下文中 , 具备一定级别的访问权限 。默认情况下 , System在本地系统中具备最高权限 。在大多数情况下 , 恶意程序希望窃取运行在System安全上下文中的进程令牌 , 以获得最高权限 。
0x01 令牌
在分析这些技术前 , 我们先来了解下令牌及特权的基本知识 。
令牌(Token)或者访问令牌(Accss Token)是一个内核对象 , 用来描述进程或线程所使用的安全上下文 。
访问令牌中包含各种信息 , 比如安全标识符(SID , Security Identifier)、令牌类型(Token Type)、用户及组信息、权限、登录会话(Logon Session)等 , 系统会在用户登录时分配访问令牌 。
为了执行各种操作或者使用Windows中的各种资源 , 进程必须使用Windows句柄打开或者创建对象 , 才能访问内核对象 。内核会根据访问令牌赋予进程匹配的访问权限 。
访问令牌创建
Part 1 详解令牌篡改攻击

文章插图
 
  • 当用户登录主机时 , 系统会创建访问令牌 。
  • 检测密码是否正确 , 执行认证过程 。
  • 在安全数据库中检查用户详细信息 。
  • 检查用户是否属于内置的管理员组中 , 如果满足条件 , 则生成两个令牌:完整的管理员访问令牌及标准用户访问令牌 。
  • 如果用户不属于内置管理员组 , 则只会生成标准用户访问令牌 。
访问令牌在Windows系统的UAC(用户访问控制)功能中发挥重要作用 。
当属于内置管理员组的用户登录时 , 系统并没有向用户提供完整的管理员访问令牌 。Windows系统会为该用户创建拆分(split)令牌 。这里有两种类型的拆分令牌:“Filtered Token”(过滤令牌)及“Elevated Token”(提升令牌) 。
当用户分配的是Filtered Token时 , 基本意味着用户运行在中完整性(medium integrity)级别上 , 被剔除了管理员组权限及SID , 这意味着用户无法直接执行各种管理任务 。为了执行管理任务 , 用户必须通过UAC认证 , 或者输入正确的凭据 。
当用户通过UAC认证或输入正确凭据后 , 系统会给用户分配Elevated Token , 用户就可以执行管理任务 。Elevated Token是带有高完整性的令牌 , 其中包括管理员组的SID及权限 。
Part 1 详解令牌篡改攻击

文章插图
 
图. 执行管理任务时弹出确认窗口
Part 1 详解令牌篡改攻击

文章插图
 
图. 用户需输入凭据以执行管理任务
如果正确配置UAC , 那就能有效发挥该机制的安全功能 。
如果大家想全面理解UAC , 可以参考官方提供的这篇文章 。
令牌机理
为了进一步理解Windows中的令牌对象 , 我们来看一下令牌的内部机理(比如令牌对应的内核数据结构) 。这里我们使用WinDbg来查看内核数据结构 。


推荐阅读