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

时间:2022-07-28
本文章向大家介绍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”漏洞原理、漏洞复现、威胁狩猎三个维度对“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”这样一个全新的威胁,我们已经清楚了攻击者相应技战术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:

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