幽靈漏洞(GHOST)影響大量Linux系統(tǒng)及其發(fā)行版
安全研究人員近日曝出一個名為幽靈(GHOST)的嚴(yán)重安全漏洞,這個漏洞可以允許攻擊者遠(yuǎn)程獲取操作系統(tǒng)的最高控制權(quán)限,影響市面上大量Linux操作系統(tǒng)及其發(fā)行版。該漏洞CVE編號為CVE-2015-0235。
什么是glibc
glibc是GNU發(fā)布的libc庫,即c運行庫。glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運行庫都會依賴于glibc。glibc除了封裝linux操作系統(tǒng)所提供的系統(tǒng)服務(wù)外,它本身也提供了許多其它一些必要功能服務(wù)的實現(xiàn)。glibc囊括了幾乎所有的UNIX通行的標(biāo)準(zhǔn)。
漏洞概述
代碼審計公司Qualys的研究人員在glibc庫中的__nss_hostname_digits_dots()函數(shù)中發(fā)現(xiàn)了一個緩沖區(qū)溢出的漏洞,這個bug可以經(jīng)過gethostbyname*()函數(shù)被本地或者遠(yuǎn)程的觸發(fā)。
應(yīng)用程序主要使用gethostbyname*()函數(shù)發(fā)起DNS請求,這個函數(shù)會將主機名稱轉(zhuǎn)換為ip地址。
更多漏洞細(xì)節(jié):詳見視頻
影響范圍
該漏洞影響glibc庫版本2.2-2.17的Linux操作系統(tǒng)
操作系統(tǒng)類型包括
CentOS 6 & 7 Debian 7 Red Hat Enterprise Linux 6 & 7 Ubuntu 10.04 & 12.04 各Linux發(fā)行版
漏洞測試
1、編譯以下測試代碼
- #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("vulnerable");
- exit(EXIT_SUCCESS);
- }
- if (retval == ERANGE) {
- puts("not vulnerable");
- exit(EXIT_SUCCESS);
- }
- puts("should not happen");
- exit(EXIT_FAILURE);
- }
2、上述測試程序可以顯示出glibc版本和主機是否存在漏洞
gcc gistfile1.c -o CVE-2015-0235 ./CVE-2015-0235