从mimikatz学习Windows安全之访问控制模型(一)

本文介绍了Windows访问控制模型,包括访问令牌和安全描述符,并详细探讨了mimikatz的Token模块,如whoami、list、elevate等功能。通过分析mimikatz,阐述了令牌窃取的原理和利用方式,以及在渗透测试中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从mimikatz学习Windows安全之访问控制模型(一)

从mimikatz学习Windows安全之访问控制模型(一)0x00 前言0x01 访问控制模型简介1. 访问令牌(Access Token)2. 安全描述符(Security Descriptor)3. 权限检查的过程0x02 Mimikatz的Token模块1. token::whoami2. token::list3. token::elevate4. token::run5. token::revert0x03 令牌窃取1. 原理2. 利用0x04 参考链接

作者:Loong716@Amulab

0x00 前言

Mimikatz是法国安全研究员Benjamin Delpy开发的一款安全工具。渗透测试人员对mimikatz印象最深的肯定就是抓取Windows凭证,但作者对它的描述是“a tool I've made to learn C and make somes experiments with Windows security.”,其实它的功能不仅仅是抓取凭证,还包含了很多Windows安全相关的技术和知识

这里借用@daiker师傅的思维导图,mimikatz的模块大致可分为几个部分:

 

因此文章也会大致分为windows 访问控制模型,windows 凭据以及加解密,windows AD 安全,windows 进程以及服务,mimikatz 其他模块五个小系列。之前自己一直想分析mimikatz的相关功能,主要是出于以下原因:

  • mimikatz中有许多功能利用了Windows的一些机制和特性,以changentlm为例,其利用MS-SAMR协议修改用户的密码,我们再根据MS-SAMR或RPC进行知识延伸,肯定也有不少收获

  • mimikatz中涉及大量内存的操作,其中运用的内存Patch技术也被经常应用于一些安全机制的绕过(如绕过AMSI、Credential Guard等),于是自己想在分析过程中通过windbg学到一些调试的技巧

  • mimikatz在实战中被杀的很厉害,了解相应原理可以自己实现相应功能

  • 学习/练习C语言 :D

mimikatz中与Windows访问控制模型相关的有privilege、token、sid三个模块,其分别对应特权、访问令牌、安全标识符三个知识,本文主要分析token模块,并简要介绍Windows访问控制模型

由于mimikatz代码逻辑较为复杂,涉及大量回调,因此文中代码都是经过简化的。文章可能也会有一些技术上或者逻辑上的错误,还请师傅们指正

0x01 访问控制模型简介

Windows访问控制模型有两个基本组成部分:

  • 访问令牌(Access Token):包含有关登录用户的信息

  • 安全描述符(Security Descriptor):包含用于保护安全对象的安全信息

1. 访问令牌(Access Token)

访问令牌(Access Token)被用来描述一个进程或线程的安全上下文,用户每次登录成功后,系统会为其创建访问令牌,该用户的所有进程也将拥有此访问令牌的副本

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

 

 

 

2. 安全描述符(Security Descriptor)

安全描述符(Security Descriptor)包含与安全对象有关的安全信息,这些信息规定了哪些用户/组可以对这个对象执行哪些操作,安全描述符主要由以下部分构成:

  • 所有者的SID

  • 组SID

  • 自主访问控制列表(DACL),规定哪些用户/组可以对这个对象执行哪些操作

  • 系统访问控制列表(SACL),规定哪些用户/组的哪些操作将被记录到安全审计日志中

在windbg中查看一个安全对象的安全描述符,可以清晰的看到安全描述符的组成:

 

可以看到该安全描述符的DACL中有三条ACE,ACE的类型都是ACCESS_ALLOWED_ACE_TYPEMask是权限掩码,用来指定对应的权限。以第一条ACE为例,其表示允许SID为S-1-5-32-544的对象能够对该安全对象做0x001fffff对应的操作

3. 权限检查的过程

当某个线程尝试访问一个安全对象时,系统根据安全对象的ACE对照线程的访问令牌来判断该线程是否能够对该安全对象进行访问。通常,系统使用请求访问的线程的主访问令牌。但是,如果线程正在模拟其他用户,则系统会使用线程的模拟令牌

此时将在该安全对象的DACL中按顺序检查ACE,直到发生以下事件:

  • 某一条拒绝类型的ACE显式拒绝令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值