绕过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.hive和system.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命令的另一个参数——export。export参数的功能是将指定的注册表项导出为.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文件不能直接使用,需要将其“转换”回工具可识别的格式。核心思路是:
- 将
.reg文件中的目标路径(如HKLM)修改为一个临时路径(如HKCU\AABYSS)。 - 将修改后的
.reg文件导入到本机注册表的临时位置。 - 使用
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.hive和SECURITY.hive中提取哈希,需要提供目标机器的Boot Key。该密钥存储在HKLM\SYSTEM注册表项的以下四个隐藏子键中:
JDSkew1GBGData
关键点:通过reg export导出的system.reg文件不包含这些隐藏键值,因此无法从中直接计算Boot Key。
解决方案:编写一个专门的小工具(如BootKey.exe)来直接从目标系统的注册表中读取这四个隐藏键值并计算Boot Key。该工具的核心逻辑是通过Windows API访问HKLM\SYSTEM\CurrentControlSet\Control\Lsa(或ControlSet001)下的上述子键,获取其Class信息(一串GUID字符串),拼接后转换为16进制数据。
BootKey提取程序核心代码逻辑:
- 尝试在两个可能的路径下寻找
JD键值以确定正确的ControlSet。 - 依次读取
JD、Skew1、GBG、Data四个子键的Class数据(字符串格式的GUID)。 - 将四个字符串拼接。
- 对拼接后的字符串进行特定的顺序置换(
[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 操作优势
- 绕过监控:利用
reg export替代reg save,规避了安全软件对敏感参数save的监控规则。 - 白文件利用:全程主要使用系统自带的
reg.exe,属于LOLBAS(Living Off The Land Binaries and Scripts)技术,利用带有数字签名的合法程序,隐蔽性高。 - 分离操作:将高风险操作(在目标机器导出文本文件、提取BootKey)与数据处理操作(在攻击者机器转换、解密)分离,降低了在目标机器上的可疑行为特征。
- 低权限需求:最关键的解密要素(Boot Key)可以通过一个无需管理员权限的小工具获取,降低了攻击门槛。
第六章:总结
本文详细阐述了一种通过reg.exe的export功能绕过EDR对传统哈希导出行为检测的方法。该方法通过导出注册表文本文件、本地转换、提取Boot Key、最终解密的流程,巧妙地避开了安全产品的常见检测点。该方法在多种Windows系统上经过测试,具有较高的实战价值。
核心流程回顾:
- 在目标机使用
reg export导出SAM、SYSTEM、SECURITY的.reg文件。 - 在攻击机将
.reg文件导入临时位置并重新用reg save生成二进制Hive文件。 - 在目标机运行
BootKey.exe(无需高权限)获取Boot Key。 - 在攻击机使用
secretsdump.py配合Boot Key和Hive文件,提取最终哈希。
整个攻击链展示了对操作系统机制和安防产品检测逻辑的深入理解,是绕过静态规则和简单行为监控的有效案例。防御方应关注此类滥用合法功能的攻击手法,在行为监控中加强对reg.exe等系统工具非常规参数使用的检测。