介绍

访问令牌是描述进程或线程安全上下文的对象,当用户登陆时,系统会将密码与存储在安全数据库中的信息比较来验证用户密码,如果密码经过身份验证,系统会生成访问令牌。之后代表此用户执行的每个进程都有此访问令牌的副本。

Acces Token - 图1

当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除, 因为访问令牌是在身份验证期间创建的

令牌中包含的内容:

  • 用户账户的安全表示符 SID
  • 用户所在组的 SID
  • 用于标识当前登录会话的登录SID
  • 用户或用户组持有的特权列表
  • 所有者SID
  • 主要组的SID
  • 访问控制列表
  • 访问令牌的来源
  • 令牌是主令牌还是模拟令牌
  • 限制SID的可选列表
  • 目前的模拟等级
  • 其他统计数据

令牌类别

主令牌

  • 每个进程都有一个主令牌,用于描述和该进程管理的用户账户的安全上下文

默认情况下,**<font style="color:#DF2A3F;">当进程的线程与安全对象交互时</font>**,系统使用主令牌

访问令牌

我们正常使用操作系统时其实一直使用的就是访问令牌

访问令牌是关于某个用户或进程的标识,用于授权和验证其对系统资源的访问权限。访问令牌中包含了身份验证信息、所属组、权限等属性。访问令牌可以由Windows内核或进程自己创建,并且可以进行传递。通过访问令牌,用户或进程可以访问受保护的对象或资源,或者在调用API时执行请求的特定操作

模拟令牌

模拟令牌是一种临时令牌,用于模拟另一个用户或进程的行为。模拟令牌可以通过访问令牌创建,通常是基于安全主体进行模拟,如其他用户。模拟令牌允许用户或进程针对其他对象执行操作,在操作的所有意义上看起来像是该用户或进程所执行的。模拟令牌常常用于服务器端扮演客户端身份

对于模拟令牌具有四个级别:

  • Anonymous:服务器无法模拟或识别客户端。
  • Identification:服务器可以获取客户端的身份和特权,但不能模拟客户端。
  • Impersonation:服务器可以在本地系统上模拟客户端的安全上下文。
  • Delegation:服务器可以在远程系统上模拟客户端的安全上下文。

举例

:::info 现在假设我们有一个用户 Ann 和一个 FTP 服务

:::

如果没有模拟令牌,当用户 Ann 登录到 FTP 服务器并尝试访问时,FTP 服务器讲会使用其访问令牌,而不是 Ann 的令牌

Acces Token - 图2

那么这存在什么问题呢?

  • 如果我们想访问 Bill 文件呢?Bill 的 DACL 不允许 FTP 访问
  • 所有的用户文件都是由 ftp 服务来访问,与用户无关,无法实现授权
  • FTP 被破坏时,攻击者将会获取所有的访问权

那么如何解决呢?

FTP 服务具有 SeImpersonate或SeAssignPrimaryToken权限 ,这一切将会简单化,因为该特权允许 进程抓取用户的访问令牌来代表用户进行操作

Acces Token - 图3

解答

主令牌和模拟令牌有什么差别? 或者不一样在哪里?

  1. 我们平常操作使用的什么令牌?
    我们平常使用电脑的操作其实都是使用 访问令牌进行的
  2. 其实我们正常创建的用户就是管理员用户
  3. 我们什么时候使用主令牌?
    当我们与安全对象交互的时候