TCP/IP堆栈:NAME:WRECK DNS协议漏洞
发布时间 2021-04-130x00 漏洞概述
2021年04月13日,安全人员披露了TCP/IP堆栈中DNS协议中统称为NAME:WRECK的9个安全漏洞,这些漏洞至少影响了1亿个Internet上运行的设备,攻击者可以利用这些漏洞使受影响的设备脱机或对设备进行控制。
0x01 漏洞详情
NAME:WRECK是物联网企业安全公司Forescout和以色列安全研究小组JSOF的共同发现的,这些漏洞影响的TCP/IP堆栈包括但不限于:
FreeBSD(影响版本:12.1)-BSD系列中最流行的操作系统之一。
IPnet(影响版本:VxWorks 6.6)-最初由Interpeak开发,现在由WindRiver维护,并由VxWorks实时操作系统(RTOS)使用。
NetX(影响版本:6.0.1)-ThreadX RTOS的一部分,现在是Microsoft维护的一个开源项目,名称为Azure RTOS NetX。
Nucleus NET(影响版本:4.3)-由西门子业务Mentor Graphics维护的Nucleus RTOS的一部分,用于医疗、工业、消费类、航空航天和物联网设备。
攻击者可以利用NAME:WRECK漏洞窃取敏感数据、修改或使设备脱机以对制造行业中的政府或企业服务器、医疗机构、零售商或公司造成重大安全事故。
攻击者还可以利用这些漏洞篡改住宅或商业场所的智能设备,以控制供暖和通风、禁用安全系统或篡改自动照明系统。
研究人员在分析上述TCP/IP堆栈中的DNS时,分析了该协议的消息压缩功能。DNS响应数据包中包含相同的域名或部分域名的情况并不少见,因此它使用一种压缩机制来减小DNS消息的大小,这种编码不仅应用在DNS解析器中,它还应用在多播DNS(mDNS)、DHCP客户端和IPv6路由器通告中。
Forescout在其报告中解释说,尽管某些协议并未正式支持压缩,但该功能还存在于许多应用中。值得注意的是,并非NAME:WRECK中的所有漏洞都可以被利用来获得相同的结果。其中最严重的是远程代码执行漏洞,其最高评分为9.8(满分10分),9个漏洞如下表所示,并非所有漏洞都与消息压缩有关:
CVE ID | Stack | 描述 | 受影响功能 | 潜在影响 | 评分 |
CVE-2020-7461 | FreeBSD |
-网络上的攻击者可以将恶意制作的数据发送到DHCP客户端 | Message compression | RCE | 7.7 |
CVE-2016-20009 | IPnet | -消息解压缩功能基于堆栈的溢出 | Message compression | RCE | 9.8 |
CVE-2020-15795 | Nucleus NET | -DNS域名标签解析功能无法正确验证DNS响应中的名称 -解析格式错误的响应可能导致写操作超出分配的结构的末尾 | Domain name label parsing | RCE | 8.1 |
CVE-2020-27009 | Nucleus NET | -DNS域名记录解压缩功能无法正确验证指针偏移值 -解析格式错误的响应可能导致写操作超出分配的结构的末尾 | Message compression | RCE | 8.1 |
CVE-2020-27736 | Nucleus NET | -DNS域名标签解析功能无法正确验证DNS响应中的名称 -解析格式错误的响应可能导致写操作超出分配的结构的末尾 | Domain name label parsing | 拒绝服务 | 6.5 |
CVE-2020-27737 | Nucleus NET | -DNS响应解析功能无法正确验证各种长度和记录数 -解析格式错误的响应可能会导致读取超出已分配结构的末尾 | Domain name label parsing | 拒绝服务 | 6.5 |
CVE-2020-27738 | Nucleus NET | -DNS域名记录解压缩功能无法正确验证指针偏移值 -解析格式错误的响应可能导致超出分配结构末尾的读取访问 | Message compression | 拒绝服务 | 6.5 |
CVE-2021-25677 | Nucleus NET | -DNS客户端无法正确随机化DNS事务ID(TXID)和UDP端口号 | Transaction ID | DNS缓存中毒/欺骗 | 5.3 |
* | NetX | -DNS解析器中的两个功能无法检查压缩指针是否不等于当前正在解析的相同偏移量,从而可能导致无限循环 | Message compression | 拒绝服务 | 6.5 |
利用单个漏洞可能不会造成太大影响,但如果攻击者将它们组合在一起来利用,就可能会造成严重破坏。例如,攻击者可以利用一个漏洞将任意数据写入易受攻击设备的敏感内存位置,利用另一个漏洞在数据包中注入代码,然后再利用第三个漏洞将其传递给目标。
Forescout公司的报告深入探讨了技术细节,即利用在开源TCP/IP堆栈中发现的NAME:WRECK漏洞以及AMNESIA:33中的漏洞来实现远程代码执行攻击。该公司还讨论了多个在DNS消息解析器中不断重复的执行问题,这些问题被称为anti-patterns(反模式),它们是造成NAME:WRECK漏洞的原因:
缺少TXID验证,随机TXID和源UDP端口不足;
缺乏域名字符验证;
缺少标签和名称长度验证;
缺少NULL终止验证;
缺少记录计数字段验证;
缺乏域名压缩指针和偏移量验证;
此外,Forescout还提供了两个开源工具,可以帮助确定目标网络设备是否运行特定的嵌入式TCP/IP协议栈(Project Memoria Detector)和用于检测类似于NAME:WRECK的问题(namewreck,与Joern一起使用)。
0x02 处置建议
NAME:WRECK的修复程序适用于 FreeBSD、Nucleus NET和 NetX,建议先实施以下安全建议,再及时应用设备供应商发布的安全更新。
安全建议:
使用一些缓解信息来开发检测DNS漏洞的签名;
发现并清点运行易受攻击堆栈的设备;
实施分段控制和适当的network hygiene;
监视受影响的设备供应商发布的补丁;
配置设备依赖内部DNS服务器;
监控所有网络流量中的恶意数据包。
0x03 参考链接
https://www.bleepingcomputer.com/news/security/name-wreck-dns-vulnerabilities-affect-over-100-million-devices/
https://www.freebsd.org/security/advisories/FreeBSD-SA-20:26.dhclient.asc
https://github.com/Forescout/project-memoria-detector
https://github.com/Forescout/namewreck
0x04 时间线
2021-04-13 bleepingcomputer披露漏洞
2021-04-13 VSRC发布安全通告
0x05 附录
CVSS评分标准官网:http://www.first.org/cvss/