如何绕过EDR实现DumpHash
字数 4620
更新时间 2026-05-08 05:33:53

绕过EDR实现DumpHash技术详解

概述

本文旨在详细阐述在装有端点检测与响应(EDR)系统的内网环境中,如何通过非传统手法绕过安全软件的检测与拦截,成功提取Windows系统本地用户的密码哈希(Hash)。本方法的核心是利用系统自带的白文件reg.exe,通过export参数绕过对save参数的监控,并结合自定义工具提取关键解密密钥,最终实现哈希导出。

第一章:Windows认证机制与Hash Dump的背景

1.1 凭证提取在内网渗透中的重要性

在内网渗透测试中,凭证提取是横向移动、权限提升和建立持久化访问的核心环节。在针对内网Windows主机的攻击中,凭据提取的主要目标通常是各种形式的密码哈希,特别是NTLM NT-hash,有时也包括LM-hash和Kerberos票据。

典型的攻击场景是,当攻击者通过Web服务漏洞获得远程代码执行(RCE)能力并获得初始立足点(如WebShell)时,其权限通常被限制在服务账户(例如iis apppool\defaultapppool)。为了完全控制主机并进一步在内网横向移动,获取更高权限账户(如管理员)的凭证至关重要。

1.2 Windows认证机制简述

Windows系统主要使用两种认证协议:

  • NTLM认证:主要用于工作组环境。
  • Kerberos认证:主要用于域环境。

本文所述技术主要针对工作组环境

Windows系统在进行本地认证时,并非直接比对用户输入的明文密码,而是比对密码的哈希值。这个过程类似于网站将用户密码加密为MD5后存入数据库。在早期Windows系统(Windows 8.1/Server 2012 R2之前)中,本地安全机构子系统服务进程lsass.exe会在内存中缓存用户密码的明文,这使得工具如Mimikatz可以直接抓取明文密码。在新版本系统中,微软默认禁用了此功能,但可通过修改注册表HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1并重启登录来重新启用。

第二章:Windows哈希存储来源分析

哈希的存储位置取决于Windows计算机是否加入域:

  • 工作组计算机:哈希存储在本地的SAM文件C:\Windows\System32\config\sam)中。
  • 域内计算机:域用户的哈希存储在域控制器的NTDS.DIT文件C:\Windows\NTDS\NTDS.dit)中。

下表详细对比了主要的哈希来源:

来源 存储位置 可获取内容 是否需要用户在线登录 是否包含Kerberos票据 典型场景
SAM HKLM\SAM 注册表 本地用户 NT/LM hash 本地提权、持久化
LSA Secrets HKLM\SECURITY 注册表 服务账号明文、DPAPI key、部分明文密码 服务账号复用
Cached Domain Credentials 注册表 + MSCache 结构 域用户缓存的 NT hash(限最后N次登录) 非域控工作站
LSASS进程内存 lsass.exe 内存空间 当前登录用户NT hash、明文(旧版)、Kerberos票据等 实时抓取高价值会话
NTDS.dit 域控系统目录 域内所有用户 NT hash 域渗透终极目标

本文聚焦于从SAM中提取本地用户哈希。

第三章:传统Hash Dump手法及其演变

3.1 初期手法:直接导出注册表Hive文件

在系统运行时,SAM等关键数据被加载到注册表的特定位置:

  • HKLM\SAM:包含本地账户的NT哈希值。
  • HKLM\SECURITY:包含LSA机密,如服务账户的明文密码。
  • HKLM\SYSTEM:包含解密SAM和LSA机密所需的启动密钥(Boot Key / Syskey)

传统方法是通过reg save命令导出这些注册表Hive的二进制文件:

reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
reg save HKLM\SECURITY security.hive

然后将sam.hivesystem.hive文件传回攻击者机器,使用Mimikatz提取哈希:

lsadump::sam /sam:sam.hive /system:system.hive

或使用security.hive提取LSA机密:

lsadump::secrets /system:system.hive /security:security.hive

3.2 安防升级与绕过思路

上述reg save命令因其明显的恶意特征(直接访问敏感注册表路径)很快被各类杀毒软件和EDR标记并拦截。安全软件会监控命令行参数,一旦发现save HKLM\SAM等模式就会阻断操作。

绕过思路:利用reg.exe命令的另一个参数——exportexport参数的功能是将指定的注册表项导出为.reg文本文件,其行为模式与save不同,可能不在安全软件的重点监控规则内。

第四章:新型绕过EDR的DumpHash详细步骤

4.1 第一步:利用reg export导出注册表文本文件

在已获取SYSTEM权限(或足够权限,见第五章权限测试)的命令行中,执行以下命令:

reg.exe export HKLM\SAM C:\Users\Public\sam.reg
reg.exe export HKLM\SYSTEM C:\Users\Public\system.reg
reg.exe export HKLM\Security C:\Users\Public\security.reg

这将生成三个.reg文本文件。需要注意的是,.reg文件并非Mimikatz等工具可直接识别的二进制Hive文件,它包含注册表表头并以十六进制字符串形式编码数据。

4.2 第二步:处理.reg文件并获取二进制Hive

由于.reg文件不能直接使用,需要将其“转换”回工具可识别的格式。核心思路是:

  1. .reg文件中的目标路径(如HKLM)修改为一个临时路径(如HKCU\AABYSS)。
  2. 将修改后的.reg文件导入到本机注册表的临时位置。
  3. 使用reg save命令从本机的临时注册表路径导出标准的二进制Hive文件。

自动化脚本
可以使用PowerShell脚本(如RegReduction.ps1)自动完成上述过程。脚本关键步骤包括:

  • 读取导出的.reg文件。
  • 将所有的HKLM路径替换为HKCU\AABYSS等临时路径。
  • 使用reg import导入修改后的文件。
  • 使用reg save从临时路径导出二进制文件(SAM.hive, SYSTEM.hive, SECURITY.hive)。
  • 清理临时注册表项。

4.3 第三步:获取Boot Key(Syskey)

要使用secretsdump.py(Impacket套件工具)从导出的SAM.hiveSECURITY.hive中提取哈希,需要提供目标机器的Boot Key。该密钥存储在HKLM\SYSTEM注册表项的以下四个隐藏子键中:

  • JD
  • Skew1
  • GBG
  • Data

关键点:通过reg export导出的system.reg文件不包含这些隐藏键值,因此无法从中直接计算Boot Key。

解决方案:编写一个专门的小工具(如BootKey.exe)来直接从目标系统的注册表中读取这四个隐藏键值并计算Boot Key。该工具的核心逻辑是通过Windows API访问HKLM\SYSTEM\CurrentControlSet\Control\Lsa(或ControlSet001)下的上述子键,获取其Class信息(一串GUID字符串),拼接后转换为16进制数据。

BootKey提取程序核心代码逻辑

  1. 尝试在两个可能的路径下寻找JD键值以确定正确的ControlSet。
  2. 依次读取JDSkew1GBGData四个子键的Class数据(字符串格式的GUID)。
  3. 将四个字符串拼接。
  4. 对拼接后的字符串进行特定的顺序置换([0x8, 0x5, 0x4, 0x2, 0xb, 0x9, 0xd, 0x3, 0x0, 0x6, 0x1, 0xc, 0xe, 0xa, 0xf, 0x7]),得到16字节的Boot Key。

重要发现:执行BootKey.exe提取Boot Key的操作不需要管理员权限,且该操作行为不易被EDR检测。

4.4 第四步:最终提取哈希

在攻击者机器上,使用Impacket的secretsdump.py工具,结合导出的二进制文件和获取的Boot Key,执行最终提取:

python secretsdump.py -sam SAM.hive -security SECURITY.hive -bootkey <此处填入获得的16进制BootKey> LOCAL

成功执行后,将输出本地所有用户的用户名、RID和对应的NTLM哈希值。

第五章:实战注意事项与权限测试

5.1 关键步骤权限要求

经过实际测试,不同操作系统版本对reg.exe export命令的权限要求存在差异:

  • Windows 10 / Windows 11:导出SAM等关键注册表需要SYSTEM权限
  • Windows Server 2022及以下版本:导出操作仅需要普通管理员权限(即Administrators组成员)即可,不一定需要SYSTEM权限。

权限验证:如果执行reg.exe export后生成的.reg文件体积异常小(例如只有1KB左右),则很可能是因为权限不足,导出失败。

5.2 操作优势

  1. 绕过监控:利用reg export替代reg save,规避了安全软件对敏感参数save的监控规则。
  2. 白文件利用:全程主要使用系统自带的reg.exe,属于LOLBAS(Living Off The Land Binaries and Scripts)技术,利用带有数字签名的合法程序,隐蔽性高。
  3. 分离操作:将高风险操作(在目标机器导出文本文件、提取BootKey)与数据处理操作(在攻击者机器转换、解密)分离,降低了在目标机器上的可疑行为特征。
  4. 低权限需求:最关键的解密要素(Boot Key)可以通过一个无需管理员权限的小工具获取,降低了攻击门槛。

第六章:总结

本文详细阐述了一种通过reg.exeexport功能绕过EDR对传统哈希导出行为检测的方法。该方法通过导出注册表文本文件、本地转换、提取Boot Key、最终解密的流程,巧妙地避开了安全产品的常见检测点。该方法在多种Windows系统上经过测试,具有较高的实战价值。

核心流程回顾

  1. 在目标机使用reg export导出SAMSYSTEMSECURITY.reg文件。
  2. 在攻击机将.reg文件导入临时位置并重新用reg save生成二进制Hive文件。
  3. 在目标机运行BootKey.exe(无需高权限)获取Boot Key。
  4. 在攻击机使用secretsdump.py配合Boot Key和Hive文件,提取最终哈希。

整个攻击链展示了对操作系统机制和安防产品检测逻辑的深入理解,是绕过静态规则和简单行为监控的有效案例。防御方应关注此类滥用合法功能的攻击手法,在行为监控中加强对reg.exe等系统工具非常规参数使用的检测。

相似文章
相似文章
 全屏