BIND9 Dos CVE-2015-5477漏洞分析

BIND9 Dos CVE-2015-5477分析

1. 背景

隐藏在开源软件BIND中named的严重安全漏洞,远程攻击者通过发起畸形的TKEY查询,可对DNS服务器造成DoS拒绝服务( REQUIRE断言失败和守护程序退出)。BIND是目前部署在域名服务器中应用广泛的开源软件之一,支持各种 UNIX 平台和 Windows 平台。

2. 受影响版本

ISC BIND 9.1.0 ->9.8.x,9.9.0 -> 9.9.7-P1,9.10.0 -> 9.10.2-P2

3. 分析

分析BIND9源码中的dns_tkey_processquery和dns_mssage_findname函数。
dns_tkey_processquery函数从dns_tkey_processquery名称可知,该函数是对类型为TKEY的dns请求做解析,即对下图中结构做解析:
在这里插入图片描述
查看BIND9源码,如下图所示:
在这里插入图片描述
从dns_key_processquery函数可知,在函数内部两次调用了dns_message_findname;其中dns_message_findname函数大致意思是根据第二个参数DNS_SECTION_ADDITIONAL查找匹配的第三个参数qname,如果找到就放在第六个参数name中,并将返回结果保存到result中;第一次调用dns_message_findname时,传入的第二个参数是DNS_SECTION_ADDITIONAL,第三个参数查询的字符串,如果找到对应的字符串就放入name中,结合数据包,如图所示:
在这里插入图片描述
继续看看dns_message_findname函数的实现:
在这里插入图片描述
看看该函数,函数作用已经说过了。第一次调用时在DNS_SECTION_ADDITIONAL结构中查找和参数qname相同的字符串。
在这里插入图片描述
图中标1处:在dns_message_findname函数中先是判断name是否为空,图中标1的位置在第一次调用dns_message_findname之前,name=null,如上图,但是在调用dns_message_findname函数里面,此时的name已经变成了调用之前name的地址,也就是说,参数中的name是调用之前name的地址,所以在dns_message_findname函数内部标1的位置满足条件即name!=NULL,*name==NULL,所以此时在标1处不会出现断言错误。
图中标2处:在运行到图中标2处,函数findname 根据传入的参数在DNS_SECTION_ADDITIONAL结构中查找qname对应的字符串,刚好有该字符串,所以这里返回了成功,也就是ISC_SUCCESSED。
在这里插入图片描述
图中标3处:在运行到图中标3处,测试name!=NULL,name=foundname,也就是给调用dns_message_findname之前的那个name赋了值。
图中标4处:在运行到图中标4处,通过dns_message_findtype函数查找在DNS_SECTION_ADDITIONAL结构有没有对应的TKEY类型。从下图可以在DNS_SECTION_ADDITIONAL结构中的类型为TXT类型,所以这里会返回错误。
在这里插入图片描述
从第一次调用dns_message_findname结果来看,如果queries结构和additional结构中的name字段相同,但是additional结构的type字段只要不是TKEY就会返回错误。
二次调用dns_message_findname
由于第一次调用dns_message_findname函数失败,根据dns_message_findname函数的流程会进入第二次调用dns_message_findname函数如下图所示:
在这里插入图片描述
从代码中看出在第一次调用dns_message_findname之前name=NULL,经过上面的分析,在经过第一次调用后name已经赋了值(见图1.1中标3的位置)。那么在第二次进入dns_message_findname函数后,运行到图1.1中标1的位置中时,断言REQUIRE (name == NULL) ;name已经有值,测试的断言就会不成立导致程序退出。
补丁对比
在这里插入图片描述
从官方给出的补丁对比来看,在第二次调用dns_message_findname之前再次将name置空,这样在第二次运行断言语句时name=NULL,也就不会出现崩溃的现象。

4. 复现

确定靶机
在这里插入图片描述
启动metasploit环境,在metasploit环境中配置CVE-2015-5477的模块,配置完成后,启动抓包软件:
在这里插入图片描述
在所有环境准备好后,启动CVE-2015-5477模块,从运行结果来看,该模块已经正常发起了攻击,并且显示攻击成功:
在这里插入图片描述
查看抓取的数据包情况:
在这里插入图片描述
从抓包情况来看,metaploit模块发出了一个DNS请求数据包,使用TKEY类型的查询服务。

5. 检测

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值