ZeroLogon(CVE-2020-1472)分析与狩猎

2020年9月11日,安全研究员Secura发布了公告,阐明了Microsoft在2020年8月修补的漏洞细节(CVE-2020-1472)。该漏洞也称为“Zerologon”,CVSS评分为10.0,号称3秒撸域控,危害严重。攻击者在通过NetLogon(MS-NRPC)协议与AD域控建立安全通道时,可利用该漏洞将AD域控的计算机账号密码置为空,从而控制域控服务器。本文将从“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 漏洞复现

实验环境:

域控:Winserver2012 R2(x64)
IP:10.10.10.10
hostname:DC
域:de1ay.com

攻击机:ubuntu1604(x64)
IP:10.10.10.111


运行exp脚本,成功将AD域控的机器账户DC的密码置换成空:

python3 cve-2020-1472-exploit.py  DC 10.10.10.10

此时域控服务器账户密码为空,同等于已知密码,可以导出域内所有用户凭据:

python3 secretsdump.py de1ay/DC\$@10.10.10.10 -no-pass

导出hash后,发现DC的hash为31d6cfe0d16ae931b73c59d7e0c089c0,也就是空密码,同时获得了域管administrator的hash,利用administrator的hash拿下域控:

python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24 Administrator@10.10.10.10

 

0x03 Threat Hunting Rules

假设攻击者已经潜伏在企业内网中,并且正在尝试利用“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可以这么写:
1、在SIEM中同时检测到域控系统审计日志的两个event ID:失败尝试event ID 5580和成功利用漏洞event ID 4742;
2、并且event ID 4742中帐户名为“ANONYMOUS LOGON”

此外,在8月份的补丁中,Microsoft添加了五个新的event ID,以通知易受攻击的Netlogon连接:
1、允许存在漏洞的Netlogon安全通道连接时,将生成event ID 5829
2、拒绝易受攻击的Netlogon连接时,将触发event ID 5827和5828
3、允许存在漏洞的Netlogon连接时触发的event ID 5830和5831
如果域控已经安装了补丁,还可以通过以上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:

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/

(完)