Linux glibc 幽灵漏洞修复方案
目 录
1 漏洞概述................................................................................................................................................3
2 影响范围................................................................................................................................................4
3 漏洞危害................................................................................................................................................4
4 验证漏洞是否存在 .................................................................................................................................4
5 解决方法................................................................................................................................................6
5.1
5.2
5.3
5.4
5.5
Redhat.......................................................................................................................................................7
Ubuntu......................................................................................................................................................7
Gnu...........................................................................................................................................................9
Debian...................................................................................................................................................... 8
Qualys Advisory.......................................................................................................................................9
6 再次验证漏洞 ......................................................................................................... 错误!未定义书签。
一、漏洞概述
Linux glibc 函数库日前曝出名为 GHOST(幽灵)的高危漏洞,漏洞编号是
CVE-2015-0235。攻击者可利用此漏洞实施远程攻击,并完全控制目标系统。各
大 Linux 发行商已经发布漏洞补丁,提醒企业网管做好服务器的安全更新。Glibc
是 GNU 发布的 libc 库,即 c 运行库。它是 Linux 系统中最底层的 API,几乎其
它任何运行库都会依赖于 glibc。glibc 除了封装 Linux 操作系统所提供的系统
服务外,它本身也提供了许多其它一些必要功能服务的实现。国外安全研究人员
发现,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 6 & 7 和 Ubuntu 12.04 在内的多数知名 Linux 版本在长达一年
半的时间都没有修补幽灵漏洞。Linux glibc 幽灵漏洞最容易的攻击入口是邮件
服务器,和存在 SSRF(Server-side Request Forgery)漏洞的 WEB 接口。值得
庆幸的是,此漏洞目前还没有公开通用的攻击代码,这也给了服务器管理员们及
时安装补丁的宝贵时间。
目前 Debian 、Red Hat Enterprise Linux、 CentOS 和 Ubuntu 等 Linux
发行商已发布了漏洞补丁,用户只需要根据各发行版的安全公告升级 glibc 就可
以修补漏洞,避免受到黑客的幽灵攻击。
二、影响范围
该漏洞影响 glibc 库版本 2.2-2.17 的 Linux 操作系统。
此类操作系统类型包括以下:
Cent 6 & 7
Debian 7
Red Hat Enterprise Linux 6 & 7
Ubuntu 10.04 & 12.04
各 Linux 发行版
三、漏洞危害
攻击者利用该漏洞可以远程获取目标操作系统的管理权限,影响范围比较广
泛,包括 CentOS、Debian、Red Hat 等主流 Linux 发行版本。Linux glibc 幽灵
漏洞最容易的攻击入口是邮件服务器,和存在 SSRF(Server-side Request
Forgery)漏洞{很多 web 应用都提供了从其他的服务器上获取数据的功能。使用
用户指定的 URL,web 应用可以获取图片,下载文件,读取文件内容等。这个功
能如果被恶意使用,可以利用存在缺陷的 web 应用作为代理攻击远程和本地的服
务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request
Forgery)。}的 WEB 接口。
此漏洞触发严重依赖应用程序调用 gethostbyname()的方式,需要满足多个
条件才能触发漏洞。目前看绝大多数的本地 SUID 程序和服务程序不受影响。目
前已知受影响的应用程序为 exim4 邮件服务程序,如果设置了对 HELO 和 EHELO
命令进行额外安全检查(非默认配置),则可以远程执行任意代码。
四、验证漏洞方法
1、编译并执行代码自行验证:
a) 编译以下测试代码
#include
#include
#include
#include
#include
#include
#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,
&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);
}
temp.buffer, sizeof(temp.buffer), &result,
b) 执行上述测试程序可以显示出 glibc 版本和主机是否存在漏洞:
返回 Vulnerable ,表示存在漏洞:
返回 Not vulnerable, 表示不存在此漏洞:
五、修复建议
此漏洞可升级操作系统解决,也可直接升级 GNU glibc 版本。
1、下载升级包:
1)升级操作系统方式:
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
Qualys Advisory: https://www.qualys.com/research/ ... T-CVE-2015-0235.txt
2)直接升级 GNU glibc 版本方式:
GNU C Library: http://www.gnu.org/software/libc/
2、进行升级:
RedHat、Fedora、CentOS 系统
yum update glibc glibc-devel glibc-common glibc-headers
Debian、Ubuntu 系统
apt-get clean && apt-get update && apt-get upgrade
3、升级后,建议重启用到 glibc 的进程,或者重启服务器。
详细说明如下(修复后验证方法,以自行编译代码验证为例):
1.1 Redhat(https://access.redhat.com/articles/1332213)
根据红帽给出的解决方案,需要升级所使用的 glibc 及 nscd 包版本,并重启
服务器或者服务。
1、下载升级包:
Red Hat Enterprise Linux Server 5: RHSA-2015:0090
Red Hat Enterprise Linux Server (v. 6): RHSA-2015:0092
Red Hat Enterprise Linux Server (v. 7): RHSA-2015:0092
Red Hat Enterprise Linux Desktop 5: RHSA-2015:0090
Red Hat Enterprise Linux Desktop 6: RHSA-2015:0092
Red Hat Enterprise Linux Desktop 7: RHSA-2015:0092
Red Hat Enterprise Linux HPC Node 6: RHSA-2015:0092
Red Hat Enterprise Linux HPC Node 7: RHSA-2015:0092
Red Hat Enterprise Linux Workstation 6: RHSA-2015:0092
Red Hat Enterprise Linux Workstation 7: RHSA-2015:0092
Red Hat Enterprise Linux Server EUS (v. 6.6): RHSA-2015:0092
Red Hat Enterprise Linux Server EUS (v. 5.9): RHSA-2015:0099
Red Hat Enterprise Linux Server EUS (v. 6.4): RHSA-2015:0099
Red Hat Enterprise Linux Server EUS (v. 6.5): RHSA-2015:0099
Red Hat Enterprise Linux ELS (v. 4): RHSA-2015:0101
2、升级补丁包:
Update the glibc and nscd packages on your system using the packages released
3、重启:
Reboot the system or restart all affected services:
4、验证是否成功:
执行编译的代码,返回 Not Vulnerable 则表示修复成功。返回 Vulnerable 则表
示修复失败。
1.2 Ubuntu(http://www.ubuntu.com/usn/usn-2485-1/ )
1、下载升级包
2、升级补丁包
选择 2.18 以上版本升级
3、重启
重启服务器
4、验证是否成功:
执行编译的代码,返回 Not Vulnerable 则表示修复成功。返回 Vulnerable 则表
示修复失败。
1.3 Debian
( https://security-tracker.debian.org/tracker/CVE-2
015-0235 )
1、下载升级包
2、升级补丁包
选择 2.18 以上版本升级