什么是ZeroLogon?Netlogon远程协议(也称为MS-NRPC)是一种远程过程调用(RPC)接口,仅供连接到域的设备使用。MS-NRPC包括身份验证方法和建立Netlogon安全通道的方法。这些更新强制执行指定的Netlogon客户端行为,以在成员计算机和ActiveDirectory(AD)域控制器(DC)之间使用安全RPC和Netlogon安全通道。Zerologon漏洞,也称为CVE-2020-1472,影响MS-NRPC使用的加密身份验证方案(AES-CFB8),该方案有多种用途,但最广为人知的是能够更改计算机帐户密码,这可能会导致Windows被攻击。此漏洞的影响很大,风险评分为10.0。Microsoft已在八月补丁星期二安全更新中修复它。美国国土安全部也在上周发布了今年第四次紧急指令(EmergencyDirective),要求所有政府机构在周一午夜前修复漏洞。AES-CFB8的工作原理是在明文前面加上一个16字节的初始化向量(IV),然后将AES应用于IV和明文的前16个字节,并采用AES输出的第一个字节来加密明文的每个字节,然后将其与下一个明文字节异或。为什么这很重要?利用身份验证协议的方法是暴力破解登录尝试。对于256个密钥中的1个,将AESCFB8加密应用于全零明文会产生全零密文,从而启用登录绕过,这就是名称zerologon的来源。攻击者的避风港大多数PoC专注于利用更改计算机帐户ActiveDirectory密码的能力,并使用它们在资产上建立立足点。利用它们来攻击域控制器,因为它们通常位于DomainControllersAD组中,通常具有高于标准的权限,这可以使立足点具有更高的权限并导致域管理员权限。使用NetrServerPasswordSet2方法,可以为客户端创建一个新密码,可以使用AES-CFB8使用会话密钥对其进行加密。Netlogon明文密码由516字节组成,后四位代表密码长度。通过提供516个零,它将被解密为516个零或空密码。以这种方式更改密码只能在AD中更新。大多数漏洞利用代码通过向netlogon通道发送一个身份验证请求来工作,其中包含多个空字节,后跟一个零密文和一个用于身份验证的挑战标志,如以下代码片段所示:server_auth=nrpc.hNetrServerAuthenticate3(rpc_con,dc_handle+'\x00',target_computer+'$\x00',nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel,target_computer+'\x00',ciphertext,flags)如上所述,这种攻击每256次尝试中有1次起作用,因此至少需要256次身份验证尝试成功利用所必需的,我见过的所有利用代码都使用2000作为最大尝试,以确保0.04%的误报利用。下面的另一个代码片段显示了一个用于尝试验证目标主机的for循环:forattemptinrange(0,MAX_ATTEMPTS):rpc_con,serverChallenge=try_zero_authenticate(dc_handle,dc_ip,target_computer)ifrpc_con==None:print('=',end='',flush=True)else:breakfrpc_con:print('\n成功!DCcanbefullycompromiseddbyaZerologonattack。')plaintext=b'\x00'*8sessionKey=nrpc.ComputeSessionKeyStrongKey('',plaintext,serverChallenge,None)ppp=nrpc.ComputeNetlogonCredential(plaintext,sessionKey)clientStoredCredential=pack('
