介绍
访问令牌是描述进程或线程安全上下文的对象,当用户登陆时,系统会将密码与存储在安全数据库中的信息比较来验证用户密码,如果密码经过身份验证,系统会生成访问令牌。之后代表此用户执行的每个进程
都有此访问令牌的副本。
当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除, 因为访问令牌是在身份验证期间创建的
令牌中包含的内容:
用户账户的安全表示符 SID
用户所在组的 SID
- 用于标识当前登录会话的登录SID
用户或用户组持有的特权列表
- 所有者SID
- 主要组的SID
- 访问控制列表
- 访问令牌的来源
令牌是主令牌还是模拟令牌
- 限制SID的可选列表
- 目前的模拟等级
- 其他统计数据
令牌类别
主令牌
- 每个进程都有一个主令牌,用于描述和该进程管理的用户账户的安全上下文
默认情况下,**<font style="color:#DF2A3F;">当进程的线程与安全对象交互时</font>**,系统使用主令牌
访问令牌
访问令牌是关于某个用户或进程的标识,用于授权和验证其对系统资源的访问权限。访问令牌中包含了身份验证信息、所属组、权限等属性。访问令牌可以由Windows内核或进程自己创建,并且可以进行传递。通过访问令牌,用户或进程可以访问受保护的对象或资源,或者在调用API时执行请求的特定操作我们正常使用操作系统时其实一直使用的就是访问令牌
模拟令牌
模拟令牌是一种临时令牌,用于模拟另一个用户或进程的行为。模拟令牌可以通过访问令牌创建,通常是基于安全主体进行模拟,如其他用户。模拟令牌允许用户或进程针对其他对象执行操作,在操作的所有意义上看起来像是该用户或进程所执行的。模拟令牌常常用于服务器端扮演客户端身份。对于模拟令牌具有四个级别:
- Anonymous:服务器无法模拟或识别客户端。
- Identification:服务器可以获取客户端的身份和特权,但不能模拟客户端。
- Impersonation:服务器可以在本地系统上模拟客户端的安全上下文。
- Delegation:服务器可以在远程系统上模拟客户端的安全上下文。
举例
:::info 现在假设我们有一个用户 Ann 和一个 FTP 服务
:::
如果没有模拟令牌,当用户 Ann 登录到 FTP 服务器并尝试访问时,FTP 服务器讲会使用其访问令牌,而不是 Ann 的令牌
那么这存在什么问题呢?
- 如果我们想访问 Bill 文件呢?Bill 的 DACL 不允许 FTP 访问
- 所有的用户文件都是由 ftp 服务来访问,与用户无关,无法实现授权
- FTP 被破坏时,攻击者将会获取所有的访问权
那么如何解决呢?
FTP 服务具有 SeImpersonate或SeAssignPrimaryToken权限 ,这一切将会简单化,因为该特权允许 进程抓取用户的访问令牌来代表用户进行操作
解答
主令牌和模拟令牌有什么差别? 或者不一样在哪里?
- 我们平常操作使用的什么令牌?
我们平常使用电脑的操作其实都是使用访问令牌
进行的 - 其实我们正常创建的用户就是管理员用户
- 我们什么时候使用主令牌?
当我们与安全对象交互的时候