BIND DoS漏洞分析

防护方案:BIND DoS漏洞分析

近日,互联网系统协会ISC 发布紧急补丁(CVE-2015-5477),修复隐藏在开源软件BIND中named的严重安全漏洞。远程攻击者通过发起畸形的TKEY查询,可对DNS服务器造成DoS拒绝服务。BIND是目前部署在域名服务器中应用广泛的开源软件之一,支持各种 UNIX 平台和 Windows 平台

 原文地址:http://www.panshy.com/articles/201508/security-2511.html

Content

  • BIND漏洞
  • 漏洞验证
    • 配置ISC BIND服务
    • 启动metasploit环境
  • 服务崩溃
  • 漏洞分析
    • dns_tkey_processquery函数
    • dns_message_findname函数
    • 二次调用dns_message_findname
    • 补丁对比
  • 防护方案
    • 漏洞加固
      • 升级BIND 9服务版本
      • 安装BIND 9补丁
    • 产品防护

近日,互联网系统协会ISC发布紧急补丁(CVE-2015-5477),修复隐藏在开源软件BIND中named的严重安全漏洞。远程攻击者通过发起畸形的TKEY查询,可对DNS服务器造成DoS拒绝服务。BIND是目前部署在域名服务器中应用广泛的开源软件之一,支持各种UNIX 平台和Windows 平台。

可能的影响

  • 此次漏洞影响BIND的版本较多。截止2015年8月5日,根据绿盟科技广谱平台数据统计显示,全球正在使用的BIND软件数量的大概有380万,其中美国、中国、朝鲜、德国为受影响稠密区域,中国占比30.7%。
  • 目前该PoC已经在互联网广泛流传,而BIND构建的DNS服务修补速度一般较慢
  • 攻击者可能利用这个漏洞瘫痪某个区域的DNS服务器解析,使得大面积用户无法上网
  • 攻击者通过瘫痪并伪造一个新的DNS服务器,发起DNS欺骗攻击,诱使用户访问恶意网站

image003

受影响版本

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

历史情况

近期ISC BIND漏洞较为频繁,大家需要关注相关绿盟科技漏洞库漏洞公告

  • 2015-07-10 ISC BIND ‘isselfsigned()’拒绝服务漏洞(CVE-2015-4620)
  • 2015-02-27 ISC BIND远程拒绝服务漏洞(CVE-2015-1349) = 2014-12-11 ISC BIND远程拒绝服务漏洞(CVE-2014-8500)

漏洞验证

下面的验证过程是基于ubuntu及BIND – 9.9.5 rc2

配置ISC BIND服务

首先安装BIND 9服务;BIND 9是开源项目,为了能够查看服务崩溃时的堆栈情况及能调试该漏洞,在安装该服务时启动调试模式。安装好后配置named.conf ,rndc.conf等配置文件,启动named.conf中解析地址填写ubuntu的地址如下:

zone “0.8.10.in-addr.arpa” IN { type master; file “/etc/bind/10.8.0.zone”; allow-update { none ; }; };

`

同时需要配置一个dns域名,比如 www.nsfocus.com

 

 

完成其他的配置比如10.8.0.zone,127.0.0.zone等配置信息。配置完成后启动该服务。测试是否启动成功,可以采用如下命令行,只要系统返回该域名对应的地址,即确认启动成功。

`

启动metasploit环境

在metasploit环境中配置CVE-2015-5477的模块,配置完成后,启动抓包软件,之后启动该模块,如图:

image004

服务崩溃

在所有环境准备好后,启动CVE-2015-5477模块,从运行结果来看,该模块已经正常发起了攻击,并且显示攻击成功:

image005

查看抓取的数据包情况:

image006

从抓包情况来看,metaploit模块发出了一个DNS请求数据包,使用TKEY类型的查询服务。查看服务BIND崩溃后的堆栈情况,如下图:

image007

从BIND9崩溃情况来看,崩溃的函数在dns_messgae_findname中,该函数调用断言函数isc_assertion_failed判断失败,而导致程序崩溃。

漏洞分析

从上图中可知,在metaploit的CVE-2015-5477模块发送一个畸形DNS的TKEY查询请求后,导致BIND9服务在处理畸形数据时调用dns_tkey_processquery -> dns_mssage_findname -> isc_assertion_failed 函数,进而导致程序退出。为了能弄清程序退出的具体原因,需要分析BIND9源码中的dns_tkey_processquery和dns_mssage_findname函数。

dns_tkey_processquery函数

从dns_tkey_processquery名称可知,该函数是对类型为TKEY的dns请求做解析,即对下图中结构做解析:

image008

查看BIND9源码,如下图所示:

image009

从dns_key_processquery函数可知,在函数内部两次调用了dns_message_findname;其中dns_message_findname函数大致意思是根据第二个参数DNS_SECTION_ADDITIONAL查找匹配的第三个参数qname,如果找到就放在第六个参数name中,并将返回结果保存到result中;第一次调用dns_message_findname时,传入的第二个参数是DNS_SECTION_ADDITIONAL,第三个参数查询的字符串,如果找到对应的字符串就放入name中,结合数据包,如图所示:

image010

dns_message_findname函数

继续看看dns_message_findname函数的实现:

image011

看看该函数,函数作用已经说过了。第一次调用时在DNS_SECTION_ADDITIONAL结构中查找和参数qname相同的字符串。

image012

图中标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:。

image013

图中标3处:在运行到图中标3处,测试name!=NULL,*name=foundname,也就是给调用dns_message_findname之前的那个name赋了值。

图中标4处:在运行到图中标4处,通过dns_message_findtype函数查找在DNS_SECTION_ADDITIONAL结构有没有对应的TKEY类型。从下图可以在DNS_SECTION_ADDITIONAL结构中的类型为TXT类型,所以这里会返回错误。

image014

从第一次调用dns_message_findname结果来看,如果queries结构和additional结构中的name字段相同,但是additional结构的type字段只要不是TKEY就会返回错误。

二次调用dns_message_findname

由于第一次调用dns_message_findname函数失败,根据dns_message_findname函数的流程会进入第二次调用dns_message_findname函数如下图所示:

image015

从代码中看出在第一次调用dns_message_findname之前name=NULL,经过上面的分析,在经过第一次调用后name已经赋了值(见图1.1中标3的位置)。那么在第二次进入dns_message_findname函数后,运行到图1.1中标1的位置中时,断言REQUIRE (name == NULL) ;name已经有值,测试的断言就会不成立导致程序退出。

补丁对比

image016

从官方给出的补丁对比来看,在第二次调用dns_message_findname之前再次将name置空,这样在第二次运行断言语句时*name=NULL,也就不会出现崩溃的现象。

漏洞检测

此漏洞的检测方式可以使云端扫描、产品检测等。如果用户使用业务中已经部署了相关的漏洞扫描系统,请将漏洞扫描系统升级到最新版本后,尽快开始对业务系统进行扫描,尤其是受此次BIND漏洞影响的业务系统平台进行一次漏洞扫描。以绿盟远程安全评估系统(NSFOCUS Remote Security Assessment System ,简称:NSFOCUS RSAS)为例,当您部署该产品后,请先对产品进行升级:

  • RSAS v6系列产品升级到系统插件版本V6.0R02F00.0118;
  • RSAS v5系列产品升级到系统版本为051367;
  • AAS系列产品升级到系统版本为051147
  • 绿盟工控漏洞扫描系统V6.0R00F02.0118 及V5051367
  • 产品升级链接: http://update.nsfocus.com/aurora/index.html

漏洞确认

如果漏洞扫描结果中出现下图的漏洞信息,即可确认当前环境中存在该漏洞,建议您尽快修复或制定防护计划,以免遭受攻击。

image017

防护方案

在了解漏洞成因之后,那么防护工作也就知道该如何做了。参考上面的信息,大家需要尽快制定并启动应对方案,包括漏洞加固、DDoS防护、应用防护,最后我们还提供了一套解决方案,以便用户可以进行整体防护体系的搭建。

漏洞加固

升级BIND 9服务版本

ISC 已经在下列版本中修复了此安全漏洞,BIND 9.9.7-P2 及BIND 9.10.2-P3。如果条件允许,建议尽快升级BIND 9的版本。官方下载地址在: http://www.isc.org/downloads/同时,各大主流Linux发行版也已经提供了相应安全补丁。

安装BIND 9补丁

如果您的业务环境暂时无法升级服务版本,那么可以考虑对现有版本安装补丁。您可以在ISC官方网站中找到本次漏洞的说明,可以获取到最新的补丁下载,请尽快安装相关补丁。官方补丁: https://kb.isc.org/article/AA-01272

产品防护

如同木桶效应一般,业务环境的加固只是依赖于漏洞加固是不够的,整体安全等级的提升以及应对未来的攻击,安全产品是必不可少的一环。在如下部署环境中,以绿盟网络入侵防护系统(Network Intrusion Prevention System,简称NIPS)为例,对业务系统部署NIPS,可以提供BIND DoS漏洞攻击防护。

image018

目前NIPS已经推出567、568、569各版本的规则升级包,请所有使用绿盟产品的用户尽快升级产品规则。绿盟科技已在软件升级公告中提供规则升级包,规则可以通过产品界面的在线升级进行。如果您的业务系统暂时还无法升级规则包,那么可以在软件升级页面中,找到对应的产品,通过下载升级包,以离线方式进行升级。

相关升级信息请访问:

  • 安全产品介绍: http://www.nsfocus.com.cn/1_solution/1_2_1.html
  • 产品升级公告: http://update.nsfocus.com/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值