Linuxglibc幽灵漏洞测试与修复方法

simeon

一、Linux glibc幽灵漏洞简介

2015年1月28日互联网上爆出Linux glibc幽灵漏洞(glibc gethostbyname buffer overflow,http://seclists.org/oss-sec/2015/q1/274),也有人将其称之为“20150127GHOST gethostbyname() heap overflow in glibc”,在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影响的GNU C函数最早版本是在2000年11月发布的。这一漏洞曾在2013年5月被修补(在glibc-2.17和glibc-2.18版本之间)。但由于当时并没有被认定为安全威胁,包括Debian 7、Red Hat Enterprise Linux 6 & 7、 CentOS 5&6& 7和Ubuntu 12.04在内的多数知名Linux版本在长达一年半的时间都没有修补幽灵漏洞,经测试以下版本均存在漏洞:

  • RHEL (Red Hat Enterprise Linux) version 5.x, 6.x, 7.x
  • CentOS Linux 5.x, 6.x & 7.x
  • Ubuntu Linux version 10.04, 12.04 LTS
  • Debian Linux version 7.x
  • Linux Mint version 13.0
  • Fedora Linux version 19 y anteriores
  • SUSE Linux Enterprise 11 y anteriores
  • Arch Linux glibc version <= 2.18-1

据360安全公司研究人员分析Linuxglibc幽灵漏洞最容易的攻击入口是邮件服务器,和存在SSRF(Server-side Request Forgery)漏洞的WEB接口。值得庆幸的是,此漏洞目前还没有公开通用的攻击代码,这也给了服务器管理员们及时安装补丁的宝贵时间。

二、Linux glibc幽灵漏洞测试方法

1. Ubuntu & Debian检查

ldd –version

(1)Ubuntu受影响版本(https://launchpad.net/ubuntu/+source/eglibc):

Ubuntu 12.04 LTS: 2.15-0ubuntu10.10

Ubuntu 10.04 LTS: 2.11.1-0ubuntu7.20

(2)Debian gibc受影响版本(https://security-tracker.debian.org/tracker/CVE-2015-0235),Debian 7LTS: 2.13-38+deb7u7等

eglibc (PTS)       squeeze   2.11.3-4   vulnerable

eglibc wheezy  2.13-38+deb7u6       vulnerable

Debian gibc已经修复版本:

squeeze (lts)    2.11.3-4+deb6u4

wheezy (security)    2.13-38+deb7u7

2. CentOS & RHEL检查

在centos上执行“rpm -qglibc”命令,如图1所示,显示glibc的版本信息为glibc-2.5-118.el5_10.2。

受影响版本:

CentOS 5:glibc-2.5-118.el5_10.2

CentOS 6: glibc-2.12-1.149.el6_6.5

CentOS 7: glibc-2.17-55.el7_0.5

RHEL 5: glibc-2.5-123.el5_11.1

RHEL 6: glibc-2.12-1.149.el6_6.5

RHEL 7: glibc-2.17-55.el7_0.5

查看RHEL 各个版本更多有关该漏洞的信息请访问:

https://security-tracker.debian.org/tracker/CVE-2015-0235

3.POC验证测试

把下面的代码保存为ghost.c,或者wget http://www.antian365.com/lab/linux0day/ghost.c

/*

 * GHOSTvulnerability check

 * http://www.antian365.com/lab/linux0day/ghost.c

 * Usage: gcc ghost.c-o ghost && ./ ghost

 */

 

#include <netdb.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

 

#define CANARY "in_the_coal_mine"

 

struct {

  charbuffer[1024];

  charcanary[sizeof(CANARY)];

} temp = { "buffer", CANARY };

 

int main(void) {

  struct hostentresbuf;

  struct hostent*result;

  int herrno;

  int retval;

 

  /*** strlen(name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/

  size_t len =sizeof(temp.buffer) - 16*sizeof(unsigned char) - 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("not vulnerable");

   exit(EXIT_SUCCESS);

  }

 puts("should not happen");

 exit(EXIT_FAILURE);

}

 

直接编译并执行: gcc ghost.c-o ghost && ./ghost 如果存在漏洞则会显示“vulnerable”,如图2所示。

也可以执行下面的命令,以检测是否存在漏洞

方法一:

rpm -qglibc

cat/etc/issue

wget http://www.antian365.com/lab/linux0day/ghost.c

gcc ghost.c-o ghost && ./ghost

方法二直接显示glibc的版本信息:

wget -OGHOST-test.sh http://www.antian365.com/lab/linux0day/GHOST-test.sh.txt

bashGHOST-test.sh

显示结果如下:

Vulnerableglibc version <= 2.17-54

Vulnerableglibc version <= 2.5-122

Vulnerableglibc version <= 2.12-1.148

Detectedglibc version 2.5 revision 118

Thissystem is vulnerable to CVE-2015-0235.<https://access.redhat.com/security/cve/CVE-2015-0235>

Pleaserefer to <https://access.redhat.com/articles/1332213> for remediationsteps

三、修复方法:

1. Ubuntu/Debian

在Ubuntu/Debian上执行以下命令进行修复,修复后需要重启。

apt-get update && apt-get -y install libc6

2.Centos

在Centos上执行“yumupdate glibc”后会有一个确认,输入“y”,大概会下载6个安装包,安装完成后需要重启计算机。

参考资料

1.360安全播报 http://bobao.360.cn/news/detail/1166.html

2. 国家漏洞库:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-0235

3. http://seclists.org/oss-sec/2015/q1/274

4. https://www.digitalocean.com/community/tutorials/how-to-protect-your-linux-server

-against-the-ghost-vulnerability

时间: 2024-12-09 21:55:01

Linuxglibc幽灵漏洞测试与修复方法的相关文章

关于阿里云ECS Centos 5/6/7 Linux Glibc库严重安全漏洞修复方法

日前Linux GNU glibc标准库的 gethostbyname函数爆出缓冲区溢出漏洞,漏洞编号为CVE-2015-0235.黑客可以通过gethostbyname系列函数实现远程代码执行,获取服务器的控制权及Shell权限,此漏洞触发途径多,影响范围大,请大家关注和及时临时修复.关于阿里云ECS Linux Glibc库严重安全漏洞修复方法.Centos 5/6/7:连接终端,或者putty登录首先检测目前的版本输入命令: rpm -qa | grep glibc 我的显示:glibc-

Linux Bash严重漏洞修复方法

bash 是一个为GNU计划编写的Unix shell.:Bourne-Again SHell - 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again).Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并Version 7 Unix一起发布.bash则在1987年由布莱恩·福克斯创造.在1990年,Chet Ramey成为了主要的维护者. shell在linux系统所处的位置: 常见linux和UNIX

SSL 3.0 Poodle漏洞修复方法

什么是? SSL3.0 Poodle漏洞?? SSL协议由美国 NetScape公司开发的, 1996年发布了V3.0版本.SSL 3.0 已经存在 15 年之久,目前绝大多数浏览器都支持该版本.通常用户的浏览器都使用新版本的安全协议与服务器进行连接,为了保持兼容性,当浏览器安全协议连接失败的时候,就会转而尝试老版本的安全协议进行连接,其中就包括SSL 3.0. Poodle攻击的原理,就是黑客故意制造安全协议连接失败的情况,触发浏览器的降级使用 SSL 3.0,然后使用特殊的手段,从 SSL

Windows Server中的IIS漏洞以及修复方法

Windows Server中的IIS漏洞以及修复方法 我可以有把握地说,对于Windows服务器管理员来说普遍的目标是拥有适当弹性的系统.世界上有很多网络安全威胁,你最不希望发生的是在世界的另一头,或者在你的组织内部有人利用了IIS或者Windows的漏洞,而这一切都是本来可以避免的. 你可能无法触及应用层面的漏洞,但是在服务器层面你有很多事情可以做到使基于IIS的系统更加安全.通过回顾我多年的网站安全评估项目,可以指出以下最影响Windows服务器的IIS漏洞. 未处理异常(HTTP 500

关于Bash漏洞及修复方法

近期Bash漏洞让不少类Unix躺枪... 下面是相关的检测方法和修复方法(内容来源阿里云开发者论坛) ----------------------------------------------------------------------------------------------------- Bash紧急漏洞预警,请所有正在使用Linux服务器的用户注意.该漏洞直接影响基于 Unix 的系统(如 Linux.OS X 等),可导致远程攻击者在受影响的系统上执行任意代码. [已确认被

centos和ubuntu服务器Bash漏洞修复方法

日前Linux官方内置Bash中新发现一个非常严重安全漏洞,黑客可以利用该 Bash漏洞完全控制目标系统并发起攻击,为了避免您Linux服务器受影响,建议您尽快完成漏洞修补. 以下是小编为大家附上最常用的Linux内核之 centos和ubuntu服务器修复Bash漏洞终极修复方法.可以学习L002-老男孩实效教育-计算机基础及linux入门教程了解Linux. 目前已确认被成功利用的软件及系统:所有安装GNU bash 版本小于或者等于4.3的Linux操作系统. [Bash漏洞描述] 该漏洞

验证码的三个常见漏洞和修复方法

把验证码存储在Cookie中 一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确.由于Session会占用服务器资源,我曾经想过是否可以把验证码的值加密后存储在Cookie中.不过事实证明,这只是异想天开罢了. 假设验证码的值是a,通过sha1加密后得到的值为b = sha1(a),并且把b存储在Cookie中.而用户提交的验证码值为c,通过判断sha1(c)是否与b相等,可以知道输入的验证码是否正确.然而,Cooki

Python常见安全漏洞及修复方法集合!你所不会的这里都有!

命令注入有可能在使用 popen.subprocess.os.system 调用一个进程并从变量中获取参数时发生,当调用本地命令时,有人可能会将某些值设置为恶意值. 下面是个简单的脚本(链接:https://www.kevinlondon.com/2015/07/26/dangerous-python-functions.html),使用用户提供的文件名调用子进程: 攻击者会将filename的值设置为"; cat /etc/passwd | mail [email protected]或者其他

Python中的10个常见安全漏洞及修复方法

编写安全的代码很困难,当你学习一门编程语言.一个模块或框架时,你会学习其使用方法.在考虑安全性时,你需要考虑如何避免代码被滥用,Python也不例外,即使在标准库中,也存在着许多糟糕的实例.然而,许多 Python 开发人员却根本不知道这些. 以下是我总结的10个Python常见安全漏洞,排名不分先后. 1.输入注入 注入***影响广泛且很常见,注入有很多种类,它们影响所有的语言.框架和环境. SQL 注入是直接编写 SQL 查询(而非使用 ORM) 时将字符串与变量混合.我读过很多代码,其中"