从mimikatz抓取密码学习攻防
字数 1702 2025-08-05 08:18:15

Mimikatz密码抓取攻防技术详解

1. 调试权限(Debug Privilege)机制

1.1 调试权限的作用

  • 允许调试原本无权访问的进程,包括作为本地系统运行的服务
  • 提供对敏感和关键操作系统组件的完全访问权限
  • 默认情况下为管理员组启用此权限

1.2 Mimikatz依赖调试权限

  • Mimikatz需要调试权限才能读取进程内存
  • 默认管理员权限可获取调试权限
  • 本地安全策略默认给管理员组调试权限

1.3 防御措施

  • 在组策略中将"调试程序"权限设为空
    • 路径:计算机配置 > Windows设置 > 安全设置 > 本地策略 > 用户权限分配
    • 将"调试程序"策略中的用户组全部删除
  • 效果:Mimikatz无法通过privilege::debug提升权限

2. WDigest认证机制

2.1 WDigest概述

  • 摘要身份验证协议,用于LDAP和基于Web的身份验证
  • 使用HTTP和SASL交换进行认证
  • 以明文形式将密码存储在lsass.exe进程内存中

2.2 安全风险

  • 攻击者可获取账户明文密码
  • 可用于pass-the-hash攻击和其他服务登录尝试

2.3 系统默认行为

  • Windows 2008之后版本默认禁用WDigest
  • Windows 2008之前版本若安装KB2871997补丁也无法获取明文

2.4 注册表键值

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
  • UseLogonCredential键值控制WDigest行为:
    • 0:禁用明文存储(默认)
    • 1:启用明文存储

2.5 攻击与防御

攻击方法

  1. 修改注册表启用WDigest:
    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    
  2. 强制用户重新登录(锁屏):
    Function Lock-WorkStation {
      $signature = @"
      [DllImport("user32.dll", SetLastError = true)]
      public static extern bool LockWorkStation();
      "@
      $LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
      $LockWorkStation::LockWorkStation() | Out-Null
    }
    Lock-WorkStation
    
  3. 检测用户重新登录后抓取明文

防御措施

  • 确保UseLogonCredential值为0
  • 监控注册表键值变化:
    $key=Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\" -Name "UseLogonCredential"
    $Flag=$key.UseLogonCredential
    while($Flag -eq 1) {
        Start-Sleep -Seconds 10
        $key=Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\" -Name "UseLogonCredential"
        $Flag=$key.UseLogonCredential
    }
    

3. 凭证缓存(Credential Caching)

3.1 域缓存凭证(DDC/mscache)

  • 两个版本:XP/2003为第一代,Vista/2008之后为第二代
  • 用途:域成员无法访问域控时使用本地缓存凭证认证
  • 默认缓存10条凭证

3.2 缓存位置

HKEY_LOCAL_MACHINE\SECURITY\Cache
  • 默认情况下Administrator也无法直接访问

3.3 防御措施

  • 修改缓存数量为0:
    • 组策略:计算机配置 > Windows设置 > 安全设置 > 本地策略 > 安全选项
    • 设置"交互式登录:之前登录的缓存在域控制器不可用情况下的次数"为0

4. 受保护用户组(Protected Users Group)

4.1 功能

  • Windows 2012及之后版本引入的安全组
  • 强制高权限用户只能通过Kerberos认证
  • 防止明文密码和NTLM hash泄露

4.2 实施方法

  • 将需要保护的用户添加到"Protected Users"组

5. 受限管理员模式(Restricted Admin Mode)

5.1 功能

  • 防止RDP用户的凭据存储在目标计算机内存中
  • 使用网络登录而非交互式登录进行RDP认证
  • 不需要提供密码,使用NTLM Hash或Kerberos票证认证

5.2 启用方法

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

5.3 攻击利用

  • 使用Mimikatz进行Hash传递:
    sekurlsa::pth /user:<username> /domain:<comptername or ip> /ntlm: <ntlm hash> "/run:mstsc.exe /restrictedadmin"
    

6. KB2871997补丁的安全增强

6.1 主要改进

  1. 支持"ProtectedUsers"组
  2. 支持Restricted Admin RDP模式
  3. 注销后删除LSASS中的凭据
  4. 添加两个新的SID:
    • S-1-5-113:所有本地帐户
    • S-1-5-114:所有本地Administrators组中的本地帐户
  5. LSASS中只允许wdigest存储明文密码

6.2 防御应用

  • 将S-1-5-113和S-1-5-114添加到以下策略:
    • 拒绝从网络访问这台计算机
    • 拒绝通过远程桌面服务登录

7. 综合防御建议

  1. 限制调试权限:仅必要人员拥有此权限
  2. 保持WDigest禁用状态并监控注册表
  3. 减少或禁用凭证缓存
  4. 关键账户加入Protected Users组
  5. 启用Restricted Admin Mode
  6. 确保安装最新安全补丁
  7. 监控LSASS进程的异常访问
  8. 实施网络访问控制限制横向移动

通过以上措施的综合应用,可以有效防御Mimikatz等工具获取系统凭证的攻击行为。

Mimikatz密码抓取攻防技术详解 1. 调试权限(Debug Privilege)机制 1.1 调试权限的作用 允许调试原本无权访问的进程,包括作为本地系统运行的服务 提供对敏感和关键操作系统组件的完全访问权限 默认情况下为管理员组启用此权限 1.2 Mimikatz依赖调试权限 Mimikatz需要调试权限才能读取进程内存 默认管理员权限可获取调试权限 本地安全策略默认给管理员组调试权限 1.3 防御措施 在组策略中将"调试程序"权限设为空 路径:计算机配置 > Windows设置 > 安全设置 > 本地策略 > 用户权限分配 将"调试程序"策略中的用户组全部删除 效果:Mimikatz无法通过 privilege::debug 提升权限 2. WDigest认证机制 2.1 WDigest概述 摘要身份验证协议,用于LDAP和基于Web的身份验证 使用HTTP和SASL交换进行认证 以明文形式将密码存储在lsass.exe进程内存中 2.2 安全风险 攻击者可获取账户明文密码 可用于pass-the-hash攻击和其他服务登录尝试 2.3 系统默认行为 Windows 2008之后版本默认禁用WDigest Windows 2008之前版本若安装KB2871997补丁也无法获取明文 2.4 注册表键值 UseLogonCredential 键值控制WDigest行为: 0:禁用明文存储(默认) 1:启用明文存储 2.5 攻击与防御 攻击方法 : 修改注册表启用WDigest: 强制用户重新登录(锁屏): 检测用户重新登录后抓取明文 防御措施 : 确保 UseLogonCredential 值为0 监控注册表键值变化: 3. 凭证缓存(Credential Caching) 3.1 域缓存凭证(DDC/mscache) 两个版本:XP/2003为第一代,Vista/2008之后为第二代 用途:域成员无法访问域控时使用本地缓存凭证认证 默认缓存10条凭证 3.2 缓存位置 默认情况下Administrator也无法直接访问 3.3 防御措施 修改缓存数量为0: 组策略:计算机配置 > Windows设置 > 安全设置 > 本地策略 > 安全选项 设置"交互式登录:之前登录的缓存在域控制器不可用情况下的次数"为0 4. 受保护用户组(Protected Users Group) 4.1 功能 Windows 2012及之后版本引入的安全组 强制高权限用户只能通过Kerberos认证 防止明文密码和NTLM hash泄露 4.2 实施方法 将需要保护的用户添加到"Protected Users"组 5. 受限管理员模式(Restricted Admin Mode) 5.1 功能 防止RDP用户的凭据存储在目标计算机内存中 使用网络登录而非交互式登录进行RDP认证 不需要提供密码,使用NTLM Hash或Kerberos票证认证 5.2 启用方法 5.3 攻击利用 使用Mimikatz进行Hash传递: 6. KB2871997补丁的安全增强 6.1 主要改进 支持"ProtectedUsers"组 支持Restricted Admin RDP模式 注销后删除LSASS中的凭据 添加两个新的SID: S-1-5-113:所有本地帐户 S-1-5-114:所有本地Administrators组中的本地帐户 LSASS中只允许wdigest存储明文密码 6.2 防御应用 将S-1-5-113和S-1-5-114添加到以下策略: 拒绝从网络访问这台计算机 拒绝通过远程桌面服务登录 7. 综合防御建议 限制调试权限:仅必要人员拥有此权限 保持WDigest禁用状态并监控注册表 减少或禁用凭证缓存 关键账户加入Protected Users组 启用Restricted Admin Mode 确保安装最新安全补丁 监控LSASS进程的异常访问 实施网络访问控制限制横向移动 通过以上措施的综合应用,可以有效防御Mimikatz等工具获取系统凭证的攻击行为。