NetLogon服务攻击技术
NetLogon 服务攻击
概念&原理
背景
CVE-2020-1472 (NetLogon) 权限提升漏洞。通过该漏洞,未经身份验证的攻击者只需要能访问域控的 135 端口即可通过 NetLogon 远程协议连接域控并重置域控机器的 Hash,从而导致攻击者可以利用域控的机器账户导出域内所有用户的 Hash(域控的机器账户默认具有 DCSync 权限),进而接管整个域。该漏洞存在的原因是 Netlogon 协议认证的加密模块存在缺陷,导致攻击者可以在没有凭据的情况下通过认证。通过认证后,调用 NetLogon 协议中 RPC 函数 NetrServerPasswordSet2
来重置域控机器账户的 Hash,从而接管全域。
Tips:由于这个漏洞的广泛存在,所以如果在域内且拥有域内用户,直接使用 zerologon 利用脚本直接可以拿下域内所有账户凭据。
原理
NetLogon 服务
NetLogon 服务为域内的身份验证提供一个安全通道,在被用于执行与域用户和机器身份验证相关的各种任务,最常见的是让用户使用 NTLM 协议登陆服务器。默认情况下,Netlogon 服务在域内所有机器后台运行,该服务的可执行文件路径为 C:\Windows\system32\lsass.exe, 如图所示:
Netlogon 认证流程
Netlogon 客户端和服务端之间通过 Microsoft Netlogon Remote Protocol(MS-NRPC)来进行通信。MS-NRPC 并没有使用与他 RPC 相同的解决方案。在进行正式通信之前,客户端和服务端之间需要进行身份认证并协商出一个 Session Key,该值用于保护双方的后续的 RPC 通信流量。
简要的 NetLogon 认证流程如图所示:
漏洞根本原因
在 Credential 的生成中使用了 AES-CFB8,但其中 固定初始化向量(IV) 在 ComputeNetLogonCredential 加密函数中使用时:
- 微软在实现 AES-CFB8 加密算法时,将 IV 硬编码为全零(
0x00000000000000000000000000000000)而不是随机生成。 - 当 Session Key 加密全零 IV 时,有 1/256 的概率 使输出的第一个字节为
0x00。 - 若第一个字节为
0x00,会导致后续加密过程产生 链式归零效应,最终输出全零凭证(Client/Server Credential = 0x0000000000000000)。
漏洞触发流程
- 攻击者伪造客户端:
向域控制器(服务端)发送认证请求,并 主动控制Client Challenge = 0x0000000000000000。 - 利用固定 IV 的缺陷:
服务端计算Server Credential时,使用全零 IV 进行 AES-CFB8 加密:- 若 Session Key 加密全零 IV 后的第一个字节为
0x00(概率 1/256),则Server Credential输出全零。
- 若 Session Key 加密全零 IV 后的第一个字节为
- 绕过凭证验证:
攻击者向服务端发送 全零的Client Credential(0x0000000000000000):- 服务端用本地计算的
Client Credential(可能因 IV 缺陷也为全零)与攻击者发送的值比较。 - 若两者均为全零,则认证通过。
- 服务端用本地计算的
- 暴力破解:
因协议未限制认证尝试次数,攻击者可 重复发送请求(平均 256 次) 直至匹配到全零凭证。
绕过签名校验
在认证通过后,后续客户端和服务端通信的流量都是通过 Session Key 进行加密的,但由于是利用的置零来绕过认证,所以攻击者并不知道 Session Key 的值,自然也就无法对后续的通信流量进行加密,而根据官方文档认证通过后,攻击者通过设置 RPC 调用的 Flags=0x212fffff 禁用通信签名,可以避免因无法加密后续流量而暴露。
漏洞影响的版本
- Windows Server 2008 R2 for x64-based Systems Service Pack 1
- Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
- Windows Server 2012
- Windows Server 2012 (Server Core installation)
- Windows Server 2012 R2
- Windows Server 2012 R2 (Server Core installation)
- Windows Server 2016
- Windows Server 2016 (Server Core installation)
- Windows Server 2019
- Windows Server 2019 (Server Core installation)
- Windows Server, version 1903 (Server Core installation)
- Windows Server, version 1909 (Server Core installation)
- Windows Server, version 2004 (Server Core installation)
攻击手法&操作
可以通过自动化脚本 zerologon-Shot 直接执行拿到目标域的所有凭据:
python3 zerologon-Shot.py DC_ip
#or
python3 zerologon-Shot.py domain/'dc_name$'@ip_addr
示例
参见:靶场-项目二

浙公网安备 33010602011771号