Linux Glibc漏洞在线更新

1. 漏洞背景

代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过gethostbyname*()函数被本地或者远程的触发。

1)通过gethostbyname()函数或gethostbyname2()函数,将可能产生一个堆上的缓冲区溢出。经由gethostbyname_r()或gethostbyname2_r(),则会触发调用者提供的缓冲区溢出(理论上说,调用者提供的缓冲区可位于堆,栈,.data节和.bss节等。但是,我们实际操作时还没有看到这样的情况)。

2)漏洞产生时至多sizeof(char* )个字节可被覆盖(注意是char*指针的大小,即32位系统上为4个字节,64位系统为8个字节)。但是payload中只有数字( ‘0 ‘...‘ 9‘) ,点( “.”) ,和一个终止空字符(‘\0‘ ) 可用。

3)尽管有这些限制,我们依然可以执行任意的代码。

使用源代码方式升级 Glibc 是需要小心考虑的事情,因为整个系统几乎所有应用程序都依赖于原有的动态库,升级的时候,执行"make install"命令会打断旧的动态库链接,改为指向新的库文件。在这个过程中,不同的链接指向新旧不同版本的库文件,很容易导致系统崩溃,崩溃后,一般是无法重新启动的。

 

2. 影响范围

该漏洞影响glibc库版本2.2-2.17的Linux操作系统

操作系统类型包括

CentOS 6 & 7

Debian 7

Red Hat Enterprise Linux 6 & 7

Ubuntu 10.04 & 12.04

各Linux发行版

 

3. 漏洞测试

[root@SX_GH_HA_Master ~]# ./ghost 

vulnerable


[root@zh_uat_s2 ~]# ./ghost 

notvulnerable

4. 漏洞修复

更新是在glibc包中,但是这个库会被很多运行中的服务使用。在更新之后,每个服务都要重启一下。要找到所有依赖glibc的服务,请使用如下命令,它会显示所有打开的文件(lsof),然后找到引用glibc库的文件。

lsof | grep libc | awk ‘{print $1}‘ | sort | uniq

最安全的办法是重启所有上面用lsof找到的服务。也可以重启服务器。

 

建议CentOS  glibc在线更新,更新后下载离线包更新,优先升级对外开放的服务器




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。