本文将从攻防角度对CVE-2020-1472进行一个简单的介绍,并对如何检测和修复ZeroLogon提出具体建议。
什么是ZeroLogon?
Netlogon远程协议(也称为MS-NRPC)是一个远程进程调用(RPC)接口,仅由连接到域的设备使用。 MS-NRPC包括身份验证方法和建立Netlogon安全通道的方法。这些更新强制指定的Netlogon客户端行为,以便在成员计算机和Active Directory (AD)域控制器(DC)之间使用带有Netlogon安全通道的安全RPC。
Zerologon漏洞也称为CVE-2020-1472,它影响MS-NRPC所使用的加密身份验证方案(AES-CFB8),该方案具有多种用途,但最广为人知的原因是更改计算机帐户密码的能力,这可能导致Windows被攻击。该漏洞影响重大,风险评分达10.0满分。微软已在8月Patch Tuesday安全更新中将之修复。美国国土安全部上周也发布今年第4次紧急指令(Emergency Directive),要求所有政府机构应在周一午夜前修复好该漏洞。
AES-CFB8的工作原理是,通过在明文前面添加一个16字节的初始化矢量(IV),然后将AES应用于IV和明文的前16个字节,并采用AES输出的第一个字节,来加密明文的每个字节,奇热然后将其与下一个纯文本字节进行异或。
为什么这很重要?利用身份验证协议的方法是强行登录尝试。对于256个密钥中的1个,对全零的纯文本应用AESCFB8加密将导致全零的密文,从而启用登录绕过,这就是名称zerologon的来源。
攻击者的天堂
大多数PoC都将重点放在利用更改计算机帐户活动目录密码并利用它们建立资产立足点的能力上。利用它们来攻击域控制器,就像它们通常在域控制器AD组中一样,其权限通常高于标准权限,这可以启用具有较高权限的立足点并导致域管理员权限。
使用NetrServerPasswordSet2方法,可以为客户端创建一个新密码,该密码可以使用AES-CFB8用会话密钥进行加密。 Netlogon纯文本密码由516个字节组成,后四个表示密码长度。通过提供516个零,它将被解密为516个零或一个空密码。以这种方式更改密码只能在AD中进行更新。
大部分漏洞利用代码的工作原理是,向netlogon通道发送带有多个空字节的身份验证请求,然后发送一个零的密码文本和用于身份验证的质询标志,如以下代码段所示:
server_auth = nrpc.hNetrServerAuthenticate3(
rpc_con, dc_handle + '\x00', target_computer + '$\x00&#