Linux Glibc幽灵漏洞允许黑客远程获取系统权

空桥云代维

近日,代码安全研究人员发现Linux glibc函数库存在名为GHOST(幽灵)的安全漏洞,漏洞编号为CVE-2015-0235,该漏洞可以通过调用“gethostname”和“gethostname2”函数触发。幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,通过该漏洞,攻击者可以在不了解系统的任何情况下远程获取Linux服务器的最高控制权限。glibc是Linux系统中最底层的API,几乎其它任何运行库都会依赖于glibc。glibc除了封装Linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。


什么是glibc

glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc囊括了几乎所有的UNIX通行的标准。

 

出现了什么漏洞

代码审计公司Qualys的研究人员在glibc库中的nss_hostname_digits_dots函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过 gethostbyname*函数被本地或者远程的触发。应用程序主要使用gethostbyname*函数发起DNS请求,这个函数会将主机名称转换为ip地址。更多的细节可以从下面的视频中看到。

 

漏洞危害

这个漏洞造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权。

 

我们能做什么?

给操作系统及时打补丁,Linux发行商会及时发布补丁。

 

为什么叫做GHOST?

因为他通过GetHOST函数触发。

 

受影响操作系统版本(Windows用户无影响)

  • CentOS 6 、7
  • Debian 7
  • Red Hat Enterprise Linux 6 、 7
  • Ubuntu 10.04 、12.04

等众多使用glibc库2.2-2.17版本的Linux发行版本。

 

漏洞检测方法

请自行检测:

[[test]] $ cat > GHOST.c << EOF #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.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] = ''; 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("should nothappen"); exit(EXIT_FAILURE); } EOF [test] $ gcc GHOST.c -o GHOST [test] $./GHOST vulnerable 

 

建议修改方案

特别提示:由于glibc属于Linux系统基础组件,为了避免修补对您服务器造成影响,建议您选择合适时间进行修复,同时务必在修复前通过快照操作进行备份,如果修复出现问题,可以迅速回滚快照恢复。

CentOS 5/6/7

 # yum update glibc 

Ubuntu 12/14

 # apt-get update # apt-get install libc6 

Debian 6

 # wget -O /etc/apt/sources.list.d/debian6-lts.list http://mirrors.aliyun.com/repo/debian6-lts.list# apt-get update # apt-get install libc6

Debian 7

 # apt-get update # apt-get install libc6 

Opensuse 13

 # zypper refresh # zypper update glibc* 

Aliyun Linux 5u7

 # wget -O /etc/yum.repos.d/aliyun-5.repo http://mirrors.aliyun.com/repo/aliyun-5.repo# yum update glibc

Linux Glibc 幽灵 漏洞 黑客

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部