犯罪分子可利用恶意DNS服务器劫持Linux应用程序

http://p3.qhimg.com/t0146e315ef8e96d745.jpg

        

此文是对Glibc溢出漏洞的详细叙述

据了解,网络犯罪分子现在可利用恶意DNS服务器来进行中间人攻击,并劫持Linux应用程序。安全研究人员在Linux的glibc库中发现了一个缓冲区溢出漏洞,并呼吁相关人员尽快修复这一问题。

现在,黑客可以利用网络来劫持Linux软件了,而且受影响的软件数量非常多。这一切都源于glibc中的一个严重的漏洞。

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。

现在,攻击者只需要点击一个链接,或者与目标服务器建立一条连接,他们就能够在目标主机上远程执行任意代码了。除此之外,攻击者不可以够窃取用户密码,监视用户的操作行为,而且还可以尝试获取目标主机的控制权限。值得注意的是,任何使用了glibc的联网软件都将有可能受到攻击。

glibc库是绝大多数Linux发行版的一个重要组成部分,这也就意味着这个安全问题对开源社区来说,将会产生非常巨大的影响。

这个漏洞实际上是一个基于堆栈的缓冲区溢出漏洞,谷歌和红帽的安全研究人员在glibc库的DNS解析器(域名服务器的工作就是把我们使用的字符域名转换为主机的IP地址,没有DNS我们将无法在因特网上使用域名。比如说,它可以将theregister.co.uk转换为该域名所绑定的网络IP地址)中发现了这一漏洞。

恶意DNS服务器在接收到用户的查询请求之后,可以返回大量的信息,攻击者可以在其返回的信息中附带glibc的漏洞利用代码。这样一来, 攻击者就可以利用这些攻击代码来入侵Linux应用,或者直接接管目标系统。

攻击者可以创建一个恶意DNS域名服务器(例如evildomain.com)来利用上述的这个漏洞。设想一下,你会收到一封电子邮件,邮件中将带有一条指向evildomain.com的链接,然后你再点击这条链接。你的邮件客户端或者web浏览器可能会去尝试查询evildomain.com的IP地址,但最终得到的却是恶意域名服务器所返回的攻击代码。

除此之外,域名信息还可以被注入至服务器的日志文件中,当系统对域名进行解析时就会触发远程代码的执行。连接至服务器的SSH客户端也可能受到这一漏洞的影响。另外,攻击者也可以对目标网络进行中间人攻击,篡改DNS服务器的响应信息并注入恶意代码的payload。

除了我们所描述的这些攻击方法之外,还有很多方法可以利用这个漏洞(CVE-2015-7547)。从2008年5月的glibc v2.9之后,所有的glibc版本都将受到这个漏洞的影响。而且老版本的glibc也有可能存在这一漏洞。

glibc到底出了什么问题?

谷歌公司的安全研究小组在周一时报告称:“glibc会利用alloca()来在堆内存中分配2048字节的存储空间,并通过_nss_dns_gethostbyname4_r()来处理域名服务器的DNS查询响应信息。如果响应信息长度大于2048个字节,系统便会在堆内存中重新分配一个新的内存缓冲区,所有的信息(包括缓冲区指针,新缓冲区的大小,以及响应信息的长度)都会被更新。”

“在某些特殊情况下,堆栈缓冲区和新分配的堆内存中会出现数据不匹配的情况。而最终的结果就是,即使DNS服务器所返回的响应信息长度超出了堆栈缓冲区的内存空间,而且系统也重新分配了一个新的堆内存,但系统仍会使用之前的堆栈缓冲区来存储这些响应信息。这将会直接导致堆栈缓冲区发生溢出。”

谷歌公司的安全研究人员警告称,当用户在使用sudo和curl等linux工具时,攻击者就可以利用这个漏洞来进行攻击。目前,相关工作人员正在开发针对此漏洞的修复补丁,他们会在第一时间将补丁程序发布出来,所以请准备好更新你的软件吧!

漏洞缓解措施

关键问题就存在于resolv/res_send.c文件之中,而当系统调用getaddrinfo()函数时,也就触发了这一漏洞。

而且,情况还有可能变得更加糟糕:攻击者只要能够成功绕过目标操作系统的多层安全防护机制,就能够实现在目标主机上的远程代码执行。通常情况下,系统所采用的保护机制有ASLR(针对缓冲区溢出的安全保护技术)和非可执行性堆栈保护),防火墙也可以过滤掉某些可疑的DNS应答信息。

红帽公司的安全工程师Carlos O’Donell表示:“我们在进行了粗略的分析之后发现,攻击者可利用payload来伪造DNS服务器的响应信息,并将攻击payload注入至DNS服务器的缓存之中,攻击者可以通过这样的方法来入侵目标计算机。”

现在,用户可以将所有TCP和DNS的响应信息长度限制在1024个字节,并丢弃所有长度大于512字节的UDP和DNS数据包。这样就能够从一定程度上缓解针对漏洞CVE-2015-7547的攻击。

由于glibc库的广泛使用,这一漏洞将会给Linux 的用户带来相当大的麻烦。值得注意的是,大量嵌入式Linux设备不会受到这一漏洞影响,例如家庭路由器和各种小型智能设备,因为这些设备使用的是比glibc更加轻量级的uclibc库。

研究人员在一年多以前就发现了这一漏洞

有趣的是,早在去年的7月份,就有研究人员公布了有关这一漏洞的信息,但是我们尚不清楚当时是否有研究人员曾着手开发针对这一漏洞的修复补丁。根据代码中的编程错误标注,这个漏洞并没有被视为高危漏洞。

当谷歌公司的安全工程师发现了这个漏洞的时候,红帽公司的安全研究人员Florian Weimer和O’Donell就已经在着手解决这一问题了。随后,这两个公司的安全研究人员便开始合作共同修复Linux源代码中的问题。

Weimer和O’Donell都是glibc库的维护人员,鉴于这个问题的敏感程度,他们在对此漏洞进行分析和调查的过程当中必须避开其他的漏洞研究人员。

谷歌公司的研究人员Fermin Serna发布了针对此漏洞的概念验证实例,感兴趣的用户可以点击这里获取PoC代码。

在2016年2月16日,Carlos O’Donell发表了一篇关于glibc库中getaddrinfo()堆栈缓冲区溢出的文章。

相关详情:http://bobao.360.cn/learning/detail/2743.html


免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐