从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 组成部分

  1. 头部(Header)

    • 版本号
    • 控制标志
  2. 所有者SID(Owner SID)

    • 对象的所有者
  3. 主组SID(Primary Group SID)

    • 主要用于POSIX兼容性
  4. 自主访问控制列表(DACL)

    • 定义谁可以/不可以访问该对象
  5. 系统访问控制列表(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_READ
  • GENERIC_WRITE
  • GENERIC_EXECUTE
  • GENERIC_ALL
  • DELETE
  • READ_CONTROL
  • WRITE_DAC
  • WRITE_OWNER
  • SYNCHRONIZE

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. 访问检查流程

当进程尝试访问受保护对象时,系统执行以下检查:

  1. 检查令牌中的特权是否满足
  2. 检查DACL中的ACE是否明确允许或拒绝
  3. 如果没有明确的允许或拒绝,则拒绝访问

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. 安全防御建议

  1. 最小权限原则:只授予必要的权限
  2. 定期审计特权账户
  3. 监控特权提升操作
  4. 限制SeDebugPrivilege等危险特权的分配
  5. 实施适当的DACL设置
  6. 监控SACL中的关键事件

10. 总结

Windows访问控制模型是系统安全的核心,理解安全主体、SID、访问令牌、安全描述符和DACL等概念对于安全分析和渗透测试至关重要。Mimikatz提供了强大的工具来研究和操作这些安全组件,同时也展示了攻击者可能利用的攻击面。

从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_READ GENERIC_WRITE GENERIC_EXECUTE GENERIC_ALL DELETE READ_CONTROL WRITE_DAC WRITE_OWNER SYNCHRONIZE 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查看进程令牌 输出示例: 8.2 提升令牌权限 8.3 查看安全描述符 9. 安全防御建议 最小权限原则:只授予必要的权限 定期审计特权账户 监控特权提升操作 限制SeDebugPrivilege等危险特权的分配 实施适当的DACL设置 监控SACL中的关键事件 10. 总结 Windows访问控制模型是系统安全的核心,理解安全主体、SID、访问令牌、安全描述符和DACL等概念对于安全分析和渗透测试至关重要。Mimikatz提供了强大的工具来研究和操作这些安全组件,同时也展示了攻击者可能利用的攻击面。