漏洞背景
山石网科安全研究院监测发现微软官方发布了 Microsoft DNS 服务器远程执行代码漏洞更新,修复了编号为CVE--1350的漏洞,漏洞等级为严重。漏洞由CheckPoint两位研究人员发现,命名为SIGRed.
漏洞详情
漏洞位于dns.exe!SigWireRead 函数中,该文件中实现了所有其支持协议类型相应解析的代码。其中一个响应类型是专门处理SIG查询的结果,SIG是DNS资源记录的一种,详细见标准 RFC 2535 ,在处理响应包的时候使用RR_AllocateEx函数分配资源记录数据对应的内存,使用的时候默认内存大小为2个字节:
如果响应包的大小大于65535,那么这里就会造成整数溢出,导致分配一个很小的内存,同时后面代码逻辑中使用memcpy函数将可控的buffer拷贝进入刚刚分配的buffer,导致堆溢出:
触发思路是通过发送一个大于64KB的包含SIG记录的DNS响应包,就可以导致服务端堆溢出。
DNS TCP类型响应报文最大只支持64KB,即使包大小为65535也不能触发溢出,因为报文长度包含了头部和原始查询的数据,并不足以导致整数溢出,这里研究人员发现使用DNS指针压缩的特性,可以使得最后计算包的大小的时候出现溢出,从而触发漏洞。
影响版本
Windows Server for 32-bit Systems Service Pack 2
Windows Server for 32-bit Systems Service Pack 2 (Server Core installation)
Windows Server for x64-based Systems Service Pack 2
Windows Server for x64-based Systems Service Pack 2 (Server Core installation)
Windows Server R2 for x64-based Systems Service Pack 1
Windows Server R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server
Windows Server (Server Core installation)
Windows Server R2
Windows Server R2 (Server Core installation)
Windows Server
Windows Server (Server Core installation)
Windows Server
Windows Server (Server Core installation)
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
Windows Server, version (Server Core installation)
解决方案
微软已经针对此漏洞发布了安全更新,用户可以通过手动更新来解决此安全问题。此外还可以通过修改注册表限制入栈的DNS包大小来达到防护的目的。
具体修改的注册表键值对如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters
DWORD = TcpReceivePacketSize
Value = 0xFF00
注意修改后必须重启DNS服务才能生效
参考信息
//resolving-your-way-into-domain-admin-exploiting-a-17-year-old-bug-in-windows-dns-servers/
https://portal./en-us/security-guidance/advisory/CVE--1350
/zh-cn/help/4569509/windows-dns-server-remote-code-execution-vulnerability
长按添加关注,为您保驾护航!