SigRed漏洞的高危害性在于其是可蠕虫的,也就是可以自传播的,无需用户交互就能传播到易受攻击的设备上,允许未经身份验证的远程攻击者获得针对目标服务器的域管理员特权,并完全控制组织的IT基础架构。
漏洞运行机制
攻击者可以通过将恶意DNS查询发送到Windows DNS服务器并实现任意代码执行来利用SigRed漏洞,从而使黑客能够拦截和操纵用户的电子邮件和网络流量,使服务不可用,收获用户的电子邮件。
当DNS服务器无法解析给定域名(例如www.google.com)的IP地址时,查询会被转发到权威DNS服务器(NS),也就是转发查询。
为了利用这个查询逻辑,SigRed首先需要配置一个域的(“ deadbeef.fun”)NS资源记录,用来指向恶意名称服务器(“ns1.41414141.club”),然后查询目标DNS服务器的域,以便从名称服务器获得与域或其子域相关的所有后续查询的解析响应。
这些设置完成后,攻击者只要发送一个大小超过64KB的SIG记录,就能导致在分配的小缓冲区上引发大约64KB的受控堆缓冲区溢出,触发恶意 DNS 查询,然后在分析转发查询的传入响应的函数中触发整数溢出漏洞(“dns.exe!sigwirelead“)。
换句话说,该漏洞针对的是负责为资源记录分配内存的函数,一旦生成大于65535的字节数,就会导致整数溢出,分配变小。不过,一条DNS消息的UDP限制为512字节(如果服务器支持扩展机制,则限制为4096字节),而TCP 限制为65535字节,因此,仅带有长签名的SIG响应不足以触发此漏洞。但攻击者可以巧妙地利用DNS响应中的DNS名称压缩功能,从而利用上述操作将缓冲区大小增加,进而依旧达到缓冲区溢出的目的。
此外,SigRed还能在特定的一些情况下通过浏览器远程触发,例如基于Internet Explorer和非Chromium的Microsoft Edge浏览器,攻击者可以利用Windows DNS服务器对连接重用和查询管道功能的支持,在访问其控制下的网站时,将HTTP请求负载内的DNS查询“偷偷转发”到目标DNS服务器。甚至,还可以实现write What where功能,进一步利用漏洞泄漏内存地址,从而让对手劫持执行流并使其执行意外的指令。
令人惊讶的是,DNS客户端(“dnsapi.dll)不易受同一个bug的影响,这使得研究人员怀疑“微软为DNS服务器和DNS客户端设置了两个完全不同的代码基,并且没有在它们之间同步漏洞补丁。”
缓解措施
Windows DNS服务器作为核心网络组件,一旦DNS服务器泄露是非常严重的安全问题,而在大多数情况下,它使攻击者离破坏整个组织仅一寸之遥,企业势必要引起重视。虽然微软表示目前还没有证据表明该漏洞已经被利用,但建议用户立即安装安全补丁:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1350
此外,用户也可以DNS消息的最大长度(通过TCP)设置为“ 0xFF00”,以消除缓冲区溢出的可能。