探索黑客技术攻防,实战研究与安全创新

导航菜单

Linuxglibc幽灵漏洞测试

2015年1月28日,互联网上爆出Linuxglibc幽灵漏洞(glibcgethostbynamebufferoverflow),也有人将其称之为“20150127GHOSTgethostbyname()heapoverflowinglibc”,在CVE上的漏洞编号是CVE-2015-0235。攻击者可利用此漏洞实施远程攻击,并完全控制目标系统。 glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc囊括了几乎所有的UNIX通行的标准。 国外安全研究人员发现,glibc的__nss_hostname_digits_dots()函数有缓冲区溢出漏洞。这一漏洞既可以本地利用,也可以远程利用。研究人员对漏洞进行了测试验证:向目标邮件服务器发送特别构造的邮件,从而获得了远程登录Linxu系统的shell脚本。通过这种方式可以绕过32位和64位系统上的所有现存保护机制(比如SSLR、PIE和NX)。 受glibc-2.2影响的GNUC函数最早版本是在2000年11月发布的。这一漏洞曾在2013年5月被修补(在glibc-2.17和glibc-2.18版本之间)。但由于当时并没有被认定为安全威胁,包括Debian7、RedHatEnterpriseLinux6&7、CentOS5&6&7和Ubuntu12.04在内的多数知名Linux版本在长达一年半的时间都没有修补幽灵漏洞,经测试以下版本均存在漏洞: ØRHEL(RedHatEnterpriseLinux)version5.x,6.x,7.x ØCentOSLinux&7.x ØUbuntuLinuxversion10.04,12.04LTS ØDebianLinuxversion7.x ØLinuxMintversion13.0 ØFedoraLinuxversion19yanteriores ØSSEEnterprise11yanteriores ØArchLinuxglibcversion<=2.18-1 Linuxglibc幽灵漏洞最容易的攻击入口是邮件服务器,和存在SSRF(Server-sideRequestForgery)漏洞的WEB接口。值得庆幸的是,此漏洞目前还没有公开通用的攻击代码,这也给了服务器管理员们及时安装补丁的宝贵时间。 Linuxglibc幽灵漏洞测试方法 1.Ubuntu&Debian检查ldd–version (1)Ubuntu受影响版本 Ubuntu12.04LTS:2.15-0ubuntu10.10 Ubuntu10.04LTS:2.11.1-0ubunt 1.Debiangibc受影响版本 2.Debian7LTS:2.13-38+deb7u7等 eglibc(PTS)squeeze2.11.3-4vulnerable eglibcwheezy2.13-38+deb7u6 vulnerable Debiangibc已经修复版本: squeeze(lts) 2.11.3-4+deb6u4 wheezy(security) 2.7u7 2.CentOS&RHEL检查 在centos上执行“rpm-qglibc”命令,如图1所示,显示glibc的版本信息为glibc-2.5-118.el5_10.2。 A9.png 图1centosglibc版本信息 受影响版本: CentOS5:glibc-2.5-118.el5_10.2 CentOS6:glibc-2.12-1.149.el6_6.5 CentOS7:glibc-2.17-55.el7_0.5 RHEL5:glibc-2.5-123.el5_11.1 RHEL6:glibc-2.12-1.149.el6_6.5 RHEL7:glibc-2.17-55.el7_0.5 3.POC验证测试 把下面的代码保存为ghost.c。 /* *GHOSTvulnerabilitycheck *Usage:gccghost.c-oghost&&./ghost */ #include

#include#include#include#include#defineCANARY"in_thary[sizeof(CANARY)]; }temp={"buffer",CANARY}; intmain(void){ structhostentresbuf; structhostent*result; intherrno; intretval; /***strlen(name)=size_needed-sizeof(*host_addr)-sizeof(*h_addr_ptrs)-1;***/ size_tlen=sizeof(temp.buffer)-16*sizeof(unsignedchar)-2*sizeof(char*)-1; charname[sizeof(temp.buffer)]; memset(name,'0',len); name[len]='\0'; retval=gethostbyname_r(name,&resbuf,temp.buffer,sizeof(temp.buffer),&result, &herrno); if(strcmp(temp.canary,CANARY)!=0){ puts("vulnerable"); exit(EXIT_SUCCESS); } if(retval==ERANGE){ puts("notvulnerable"); exit(EXIT_SUCCESS); } puts("shouldnothappen"); exit(EXIT_FAILURE); } 直接编译并执行:gccghost.c-oghost&&./ghost,如果存在漏洞则会显示“vulnerable”, 如图2所示。 A10.png 图2poc测试是否存在漏洞 也可以执行下面的命令,以检测是否存在漏洞。 方法一: rpm-qglibc cat/etc/issue wget+网址 gccghost.c-oghost&&./ghost 方法二:直接显示glibc的版本信息。 wget-OGHOST-test.sh+网址 bashGHOST-test.sh 显示结果如下: Vulnerableglibcversion<=2.17-54 Vulnerableglibcversion<=2.5-122 Vulnerableglibcversion<=2.12-1.148 Detectedglibcversion2.5resystemisvulnerabletoCVE-2015-0235. <网址> Pleasereferto<网址>forremediationsteps 修复方法 1.Ubuntu/Debian 在Ubuntu/Debian上执行以下命令进行修复,修复后需要重启。 apt-getupdate&&apt-get-yinstentos 在Centos上执行“yumupteglibc”后会有一个确认,输入“y”,大概会下载6个安装包,安装完成后需要重启计算机。 (完)

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

相关推荐