从mimikatz学习Windows安全之访问控制模型(一)
字数 2149 2025-08-09 13:33:47
从Mimikatz学习Windows安全之访问控制模型(一)
1. Mimikatz简介
Mimikatz是由法国安全研究员Benjamin Delpy开发的一款Windows安全工具,最初目的是为了学习C语言和实验Windows安全机制。虽然它最广为人知的功能是抓取Windows凭证,但实际上它包含了丰富的Windows安全相关技术。
2. Windows访问控制模型基础
2.1 安全主体(Security Principal)
Windows系统中的安全主体包括:
- 用户账户(User Account)
- 计算机账户(Computer Account)
- 安全组(Security Group)
每个安全主体都有一个唯一的安全标识符(SID)。
2.2 安全标识符(SID)
SID结构示例:S-1-5-21-3623811015-3361044348-30300820-1013
组成部分:
- S-1:SID版本
- 5:标识符颁发机构(5=NT Authority)
- 21-3623811015-3361044348-30300820:域标识符
- 1013:相对标识符(RID)
常见SID:
- S-1-5-18:LocalSystem账户
- S-1-5-19:LocalService账户
- S-1-5-20:NetworkService账户
2.3 访问令牌(Access Token)
访问令牌包含:
- 用户SID
- 用户所属组SID
- 特权列表(Privileges)
- 所有者SID
- 主组SID
- 默认DACL
- 令牌源
- 令牌类型(主令牌/模拟令牌)
- 模拟级别
- 统计信息
- 会话ID
3. 安全描述符(Security Descriptor)
安全描述符是Windows中保护对象的核心数据结构,包含:
3.1 组成部分
-
头部(Header)
- 版本号
- 控制标志
-
所有者SID(Owner SID)
- 对象的所有者
-
主组SID(Primary Group SID)
- 主要用于POSIX兼容性
-
自主访问控制列表(DACL)
- 定义谁可以/不可以访问该对象
-
系统访问控制列表(SACL)
- 定义哪些访问需要被审计
3.2 DACL与ACE
DACL由访问控制项(ACE)组成,ACE类型:
- 允许访问(ACCESS_ALLOWED_ACE_TYPE)
- 拒绝访问(ACCESS_DENIED_ACE_TYPE)
- 系统审计(SYSTEM_AUDIT_ACE_TYPE)
ACE结构包含:
- ACE类型
- ACE标志
- 访问掩码
- 安全主体SID
3.3 访问掩码(Access Mask)
访问掩码定义了对对象的访问权限,常见权限:
GENERIC_READGENERIC_WRITEGENERIC_EXECUTEGENERIC_ALLDELETEREAD_CONTROLWRITE_DACWRITE_OWNERSYNCHRONIZE
4. Mimikatz中的访问控制相关功能
4.1 token模块
token模块用于操作访问令牌:
token::elevate:提升令牌权限token::whoami:显示当前令牌信息token::list:列出所有令牌
4.2 privilege模块
privilege模块用于操作特权:
privilege::debug:获取调试特权privilege::name:启用/禁用特定特权
4.3 常见特权
SeDebugPrivilege:调试程序SeBackupPrivilege:备份文件和目录SeRestorePrivilege:恢复文件和目录SeTakeOwnershipPrivilege:取得对象所有权SeImpersonatePrivilege:模拟客户端SeAssignPrimaryTokenPrivilege:替换进程级令牌
5. 安全对象类型
Windows中受安全描述符保护的对象包括:
- 文件/目录
- 注册表键
- 进程/线程
- 命名管道
- 事件/互斥体/信号量
- 作业对象
- 窗口站/桌面
- 服务
- 网络共享
- 打印机
- WMI命名空间
6. 访问检查流程
当进程尝试访问受保护对象时,系统执行以下检查:
- 检查令牌中的特权是否满足
- 检查DACL中的ACE是否明确允许或拒绝
- 如果没有明确的允许或拒绝,则拒绝访问
7. 安全参考监视器(SRM)
安全参考监视器是Windows内核中负责执行访问控制的组件,确保所有对象访问都经过适当的权限检查。
8. 实际应用示例
8.1 使用Mimikatz查看进程令牌
mimikatz # token::whoami
输出示例:
* Process Token : {0;000003e7} 1 F 401999 NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Primary
-> Impersonation !
* Thread Token : {0;000f0dcc} 0 F 6050995 corp\admin S-1-5-21-3968245-32982963-1857834-500 (04g,21p) Impersonation (Impersonation)
8.2 提升令牌权限
mimikatz # privilege::debug
mimikatz # token::elevate
8.3 查看安全描述符
mimikatz # sekurlsa::logonpasswords
9. 安全防御建议
- 最小权限原则:只授予必要的权限
- 定期审计特权账户
- 监控特权提升操作
- 限制SeDebugPrivilege等危险特权的分配
- 实施适当的DACL设置
- 监控SACL中的关键事件
10. 总结
Windows访问控制模型是系统安全的核心,理解安全主体、SID、访问令牌、安全描述符和DACL等概念对于安全分析和渗透测试至关重要。Mimikatz提供了强大的工具来研究和操作这些安全组件,同时也展示了攻击者可能利用的攻击面。