[2015年第02号]
尊敬的海峡用户:
2015年1月28日,海峡信息关注到Linux平台的又一个高危漏洞,此漏洞编号为:CVE-2015-0235,初步的CVSS2.0评分为6.8 (10分为最高)。并命名此漏洞为“Ghost”(幽灵)。
【漏洞描述】
代码审计公司Qualys 的研究人员在glibc 库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过 gethostbyname*()函数被本地或者远程的触发。应用程序主要使用gethostbyname*()函数发起DNS 请求,这个函数会将主机名称转换为ip 地址。成功利用此漏洞的黑客可能远程获取系统权限。
【发布日期】2015-1-28
【受威胁对象】
影响范围涉及glibc 2.2 至2.15 之间的多个LINUX 系统,包括
Red Hat Enterprise Linux 6 & 7,CentOS 6 & 7,Debian 7 (wheezy),Ubuntu 10.04 & 12.04 等版本。
【测试方法】
查看GNU C 库版本
执行如下命令查看Glibc版本号小于等于2.15则在受影响范围内,建议升级。
# ldd --version
演示截图如下:
查看glibc 库信息的命令
根据不同系统版本,执行以下命令查看输出信息中的Glibc版本号小于等于2.15则在受影响范围内,建议升级。
a) Red Hat 的32 位系统:
$ /lib/libc.so.6
b) Red Hat 的64 位系统:
$ /lib64/libc.so.6
c) Debian 的32 位系统:
$ /lib/i386-linux-gnu/libc.so.6
d) Debian 的64 位系统:
$ /lib/x86_64-linux-gnu/libc.so.6
编译并运行测试代码
将以下代码保存为*.c文件,使用gcc命令编译后运行,可输出版本信息以及是否有漏洞。命令:
#gcc ghost.c -o ghost
#./ghost
//代码开始:
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <gnu/libc-version.h>
#define CANARY "in_the_coal_mine"
struct
{
char buffer[1024];
char canary[sizeof(CANARY)];
} temp = { "buffer", CANARY };
int main(void)
{
struct hostent resbuf;
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;
char name[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("Bug exists.");
exit(EXIT_SUCCESS);
}
if (retval == ERANGE)
{
puts("No bug.");
exit(EXIT_SUCCESS);
}
puts("should not happen");
exit(EXIT_FAILURE);
【修复方案】
建议升级glibc 到最新的版本。
GNU官方的glibc库源码下载:
http://ftp.gnu.org/gnu/glibc/
Debian和ubuntu的RPM安装包下载:
http://pkgs.org/download/libc6
对于能连接互联网的主机,建议使用如下命令升级:
RHEL/CentOS: sudo yum update glibc
Ubuntu: sudo apt-get update ; sudo apt-get install libc6
返回顶部