演示 CVE-2021-36934 (HiveNightmare) 的教育实验室环境 — 通过卷影副本 ACL 配置错误导致的 Windows 本地提权(LPE)。
在受控的实验室环境中复现并分析 HiveNightmare 漏洞。
CVE-2021-36934,别称 “SeriousSAM” 或 “HiveNightmare”,是一个本地权限提升 (LPE) 漏洞,影响从 1809 版起的 Windows 10、Windows 11 初始版本,以及 Windows Server 2019 和 2022。它允许标准用户复制并访问包含敏感数据(如本地密码哈希)的受保护系统文件。核心问题在于错误配置的访问控制列表 (ACLs),向所有用户授予对敏感系统文件(尤其是 SAM、SYSTEM 和 SECURITY 配置单元)的读取权限。虽然这些文件在正常运行期间保持锁定,但其备份副本(通过卷影副本/还原点)继承了相同的错误配置权限,并且任何系统用户都可以访问和利用它们。
利用该漏洞需要两个前提条件:(1) 启用系统保护 和 (2) 存在还原点。这些元素在 Windows 10/11 机器上通常默认存在。该实现依赖于从卷影副本(还原点)中提取 SAM、SYSTEM 和 SECURITY 文件的副本。这些文件在系统运行期间通常被锁定,但通过继承与原始文件相同 ACL 的快照副本变得可访问。
通过非特权用户帐户,可以利用公开脚本实现利用,其中最著名的是用 C 编写的 hivenightmare.exe。恢复的三个文件具有互补作用。SAM 包含本地帐户密码的哈希(加密),SECURITY 存储额外的 LSA 机密(缓存凭据、服务密码,同样加密),而 SYSTEM 提供解密密钥 (BootKey)。为进行严格的本地权限提升,仅需 SAM 和 SYSTEM 即可提取 NTLM 哈希。一旦获得这些文件,诸如 secretsdump.py 或 mimikatz 之类的工具即可解密哈希并执行哈希传递 (pass-the-hash) 攻击,或通过 psexec.py 获得完全管理员访问权限。
该漏洞利用实现依赖于从卷影副本/还原点中提取 Windows 配置单元(SAM、SYSTEM、SECURITY),然后使用提取到的哈希通过 secretsdump.py 和 psexec.py 获取 SYSTEM 访问权限。
测试平台:Windows 10,版本 1903(2020 年 12 月更新)。
1. 环境:Windows 版本 我们使用的 Windows 10 版本(1903,2020 年 12 月更新)包含所研究的漏洞。
2. 敏感文件上的权限 我们观察到,SAM、SYSTEM 和 SECURITY 配置单元上的 NTFS 权限允许本地用户拥有读取访问权限,此处继承自 config 文件夹。
3. 在没有还原点的情况下以本地用户身份运行 hivenightmare 当从未配置还原点/卷影副本的本地帐户启动 hivenightmare.exe 时,该工具会失败,因为它找不到任何可利用的还原点。
4. 启用系统保护并创建还原点 为创建提取配置单元所需的条件,我们启用系统保护,然后手动创建还原点。一旦还原点存在,hivenightmare 就能够访问敏感文件的副本。
5. 提取敏感配置单元 创建还原点后,再次启动 hivenightmare.exe,并成功从卷影副本中提取 SAM、SYSTEM 和 SECURITY 文件。还有很多其他脚本(C#、Go、PowerShell 等)。无论使用何种技术,所有脚本都指向同一路径:
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy[i]\Windows\System32\config\[SENSITIVE FILE]
6. 在 Kali 上分析:使用 secretsdump.py 检索哈希 将提取的文件传输到 Kali 机器。我们使用 secretsdump.py (Impacket) 列出帐户并以明文形式检索哈希。
7. 权限提升:通过 psexec.py 重用哈希 使用提取到的哈希,我们通过 psexec.py 进行身份验证,并打开具有 SYSTEM 权限的会话,从而获得对机器的完全控制权。
微软的官方修复程序(KB5004605,2021 年 7 月)恢复了受影响文件上的适当 ACL。然而,建议采取一些补充措施。首先,手动验证 C:\Windows\System32\config 上的权限,确保只有 SYSTEM 和管理员具有完全访问权限。其次,删除应用补丁之前创建的旧卷影副本,因为它们保留了易受攻击的权限。出于操作原因(数据丢失风险、对用户的影响),分发的补丁中未包含自动删除旧还原点的功能。最后,通过系统事件日志监视对卷影副本的异常访问。
在此,我们演示如何通过手动修正 ACL 和删除之前的卷影副本 来缓解该漏洞。
1. 手动修正 ACL 此命令会中断 C:\Windows\System32\config 文件夹上的继承。
2. ACL 修正后的验证 修正之前创建的还原点仍然允许从关联的卷影副本中提取配置单元。
3. 删除卷影副本
4. 最终验证 删除旧卷影副本后,配置单元提取失败,该漏洞无法再从本地帐户利用。
CVE-2021-36934 展示了简单的 ACL 配置错误如何完全破坏 Windows 系统安全。该漏洞将一项安全功能(还原点)转变为攻击向量,使无特权且可能恶意的用户能够获得完全管理员访问权限。总之,CVE-2021-36934 突显了定期审计系统权限并监视对敏感文件(甚至是其备份副本)访问的必要性。
仅供教育用途。未经授权,请勿在系统上使用。