Netlogon特权提升漏洞(CVE-2020-1472)原理分析与验证
漏洞简介
CVE-2020-1472是⼀个windows域控中严重的远程权限提升漏洞,是因为微软在Netlogon协议中没有正确使⽤加密算法⽽导致的漏洞。由于微软在Netlogon协议中没有正确使⽤加密算法⽽导致的漏洞,由于微软在进⾏AES加密运算过程中,使⽤了AES-CFB8模式并且错误的将IV设置为全零,这使得攻击者在明⽂(client challenge)、IV等要素可控的情况下,存在较⾼概率使得产⽣的密⽂为全零(对AES加密不了解的可以参考我上⼀篇⽂章)。
漏洞原理
Netlogon协议是微软提供的⼀套域访问认证协议,不同于⼤部分rpc服务,该协议使⽤的并不是典型的微软认证⽅式如NTLM\Kerberos,该协议的通信流程如下:
上图中攻击者可控的因素有client challenge,攻击者将它设置为全0,server challenge在每⼀轮认证过程中都会变化,secret对应于⽤户密码的hash,Encrypt的过程采⽤的是AES-CFB8,其运算过程如下:
在上图中,黄⾊部分内容即为IV,微软错误的将其设置为全0,⽽实际上为了保证AES算法的可靠性该部分内容应该随机⽣成,黄⾊部分后紧接着的蓝⾊部分为明⽂,对应于client challenge,该部分内容攻击者可控,设置为全0,AES使⽤的key是将secret、challenges进⾏运算后得到的值,也就是说,key会随着每⼀轮server challenge的变化发⽣变化,那么如果IV和client challenge为全0的话,那么整个AES运算过程变成图1-3所⽰:
如上图所⽰,在第⼀轮AES运算过程中,密⽂(⿊⾊部分)第⼀个字节为0的概率是1/256,这是因为⼀个字节有8位,全为0的概率是
1/256,那么由这运算得到的密⽂第⼀个字节0x0和IV以及后⾯全0的client challenge计算后得到的新⼀轮”明⽂”依旧为全0,同样进⾏AES运算,由于第⼆轮运算时明⽂ 密钥和第⼀轮都⼀致,那么这⼀轮所产⽣的密⽂第⼀个字节也同样时0,接下来⼏轮计算原理以此类推,所以每⼀次连接都是由1/256的概率产⽣⼀个全0的密⽂,最理想的情况即是256次就⼀定能完成碰撞。因此Client challenge设置全0后,客户端凭据(8字节)通过验证的概率就从1/2^64提⾼到了1/256。
通过上述碰撞⽅法,攻击者便完成了域⾝份认证,在接下来的攻击过程⽤类似的⽅法也bypass了对call的校验,最后通过相关调⽤完成对域控密码的修改。值得注意的是由于整个碰撞过程中session key⼀直是未知的,攻击者可以通过NetrServerAuthenticate3设置合适的flag 使得剩下的通信过程不使⽤session key进⾏加密。
⼀⾔以蔽之,Netlogon协议⾝份认证采⽤了挑战-响应机制,其中加密算法是AES-CFB8,并且IV默认全零,导致了该漏洞产⽣。⼜因为认证次数没做限制,签名功能客户端默认可选,使得漏洞顺利被利⽤。
cve漏洞库
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论