DNS Server远程代码执行漏洞分析-SIGRed(CVE-2020-1350)


DNS Server远程代码执行漏洞分析-SIGRed(CVE-2020-1350)
本文插图
简介
SIGRed(CVE-2020-1350)是Windows DNS服务器中一个可修复的严重漏洞 , 影响Windows server 2003至2019版本 , 并且可以由恶意DNS相应触发 。 由于服务在提升的特权(系统)中运行 , 如果成功利用 , 攻击者将被赋予域管理员权限 , 从而威胁整个公司基础设施 。
起因
我们的主要目标是找到一个可以让攻击者破坏Windows域环境的漏洞 , 最好是不需要经过身份验证的漏洞 。 大多数已发布的公开资料和漏洞利用都集中在微软的SMB(EternalBlue)和RDP(BlueKeep)协议实现上 , 因为这些目标都影响服务器 , 要获得域管理员权限 , 一种直接的方法是直接利用域控制器(Domain Controller) 。 因此 , 我们决定将我们的研究重点放在一个较少的攻击面上 , 它主要存在于Windows服务器和域控制器上 。 DNS客户端和DNS服务器一起为计算机和用户提供计域名解析服务 。
Windows DNS 概述
【DNS Server远程代码执行漏洞分析-SIGRed(CVE-2020-1350)】DNS主要在53端口上使用 UDP 协议来处理请求 。 DNS查询由来自客户端的单个UDP请求和来自服务器的单个UDP响应组成 。
除了将名称转换为IP地址外 , DNS还有其他用途 , 例如 , 邮件传输代理使用DNS找到发送电子邮件的最佳邮件服务器:MX记录提供了域和exchanger邮件之间的映射 , 这可以提供额外的容错和负载 , 在Wikipedia上可以找到可用的DNS记录类型及其相应用途的列表 。
但是 , 本文的目的不是要对DNS功能和历史进行长篇大论 , 因此我们建议您在此处阅读有关DNS的更多信息 。
您需要了解的内容:

  • DNS通过UDP/TCP 53端口运行 。
  • 一条DNS消息(响应/查询)在UDP中限制为512字节 , 在TCP中限制为65,535字节 。
  • DNS本质上是分层的和分散的 , 这意味着 , 当DNS服务器不知道它接收到的查询的答复时 , 该查询将被转发到它上层的DNS服务器 , 在架构的顶部 , 全世界有13个根DNS服务器 。
在Windows中 , DNS客户端和DNS服务器在两个不同的模块中实现:
  • DNS客户端 – dnsapi.dll 负责DNS解析 。
  • DNS服务器 – dns.exe负责在安装了DNS角色的Windows 服务器上响应DNS查询 。
我们的研究围绕dns.exe模块进行 。
准备环境
我们的攻击面主要有两种情况:
  • 1.DNS服务器解析传入查询的方式中的漏洞 。
  • 2.DNS服务器解析转发查询时相应的方法的漏洞 。
由于DNS查询没有复杂的结构 , 因此在第一种情况下发现解析问题的机会较小 , 因此我们决定以解析转发查询的传入响应的函数为目标 。 因此我们决定将目标定位于解析转发查询响应的函数 。
如上所述 , 转发查询是利用DNS来将不知道答复的查询转发到上层DNS服务器中 。 但是 , 大多数环境将其转发器配置为知名的DNS服务器 , 例如8.8.8.8(Google)或1.1.1.1(Cloudflare)或者至少是不受攻击者控制的服务器 。 这意味着即使我们在解析DNS响应时发现问题 , 也需要建立一个中间人来加以利用 。 显然 , 这无法达到要求 。
NS记录重用
NS代表“名称服务器” , 该记录表明哪个DNS服务器是该域的授权 , NS记录通常负责解析指定域的域名 , 一个域通常有多个NS记录 , 这些记录可以表明该域的主名称服务器和备份名称服务器 。
若要使目标Windows DNS服务器解析来自恶意DNS名称服务器的响应 , 请执行以下操作: