幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,他可以让攻击者在不了解系统的任何情况下远程获取操作系统的控制权限。目前他的CVE编号为CVE-2015-0235。
什么是glibc
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc 囊括了几乎所有的 UNIX 通行的标准。
出现了什么漏洞
代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过 gethostbyname*()函数被本地或者远程的触发。应用程序主要使用gethostbyname*()函数发起DNS请求,这个函数会将主机名称转换为ip地址。
漏洞利用条件
3.1、存在漏洞系统中存在使用gethostbyname*() 函数的程序
3.2、程序必须能接收攻击者发送的数据,并且将数据作为gethostbyname*()的参数
3.3、攻击者发送的攻击数据(亦作:payload,载荷)必须符合特定条件,如下:
a)Payload 首字符必须为数字
b)Payload 最后字符不能为点号
c)Payload 中只能包含数字和点号
d)Payload 必须符合ipv4或者ipv6的地址格式
e)Payload 必须足够长,具体长度需要攻击者不断尝试来确定影响范围
3.4、该漏洞影响使用GNU libc库版本2.2-2.17的Linux操作系统
CentOS 6 & 7
Debian 7
Red Hat Enterprise Linux 6 & 7
Ubuntu 10.04 & 12.04
各Linux发行版
这个漏洞造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权。
漏洞证明
在我们的测试中,我们编写了一个POC,当我们发送一封精心构造的电子邮件给服务器后,我们便可以获得远程Linux服务器的shell,这绕过了目前在32位和64位系统的所有保护(如ASLR,PIE和NX)。
我们能做什么?
给操作系统及时打补丁,我们(Qualys)已与Linux发行商紧密合作,会及时发布补丁。
为什么叫做GHOST?
因为他通过GetHOST函数触发。
哪些版本和操作系统受影响?
第一个受影响的版本是GNU C库的glibc-2.2,2000年11月10号发布。我们已找出多种可以减轻漏洞的方式。我们发现他在2013年5月21号(在glibc-2.17和glibc-2.18发布之间)已经修复。不幸的是他们不认为这是个安全漏洞。从而导致许多稳定版本和长期版本暴露在外,其中包括Debian 7 (wheezy),Red Hat Enterprise,Linux 6 & 7,CentOS 6 & 7,Ubuntu 12.04等
在哪里下载EXP?
我们希望每个人能有充分的时间去打补丁。根据我们的统计数据当漏洞达到半周期的时候我们会放出EXP。半周期是指超过一半的主机已打上补丁。这个周期展示出了漏洞修复的努力程度。一个较短的周期意味着更快速的修复努力。半周期概念由Qualys的漏洞准则提出。
Qualys的客户可以使用Qualys Vulnerability Management (VM)云解决方案来扫描和检测GHOST。Qualys的客户可以可以获得相应的报告。可以可视化得追踪和展示这次漏洞修复进程。
修复方案
升级glibc库
RHEL/CentOS : sudo yum update glibc
Ubuntu : sudo apt-get update ; sudo apt-get install libc6
参考
Qualys Advisory: https://www.qualys.com/research/security-advisories/GHOST-CVE-2015-0235.txt
RedHat: https://rhn.redhat.com/errata/RHSA-2015-0090.html
Ubuntu: https://launchpad.net/ubuntu/+source/eglibc
Debian: https://security-tracker.debian.org/tracker/CVE-2015-0235
GNU C Library: http://www.gnu.org/software/libc/