每次只要又爆發重大漏洞鬧得沸沸騰騰,我們技術部門又要出動去東補補西補補,這次發生的是被稱為 GHOST (GetHOST) 位於 glibc liberary 中的漏洞
這次是由 Qualys漏洞實驗室在 glibc 的 __nss_hostname_digits_dots() 發現的 緩衝區溢位漏洞
glibc 是被廣泛使用的 C語言函式庫,重要的是他是 Linux OS 的重要元件。
由於這又是一個可以取得 root 權限的漏洞,而且影響範圍之大,最重要的一點就是在 2013年3月以前安裝的 OS版本都還是有 GHOST 漏洞!
有被警告的 Linux OS 版本
RHEL (Red Hat Enterprise Linux) version 5.x, 6.x and 7.x
CentOS Linux version 5.x, 6.x & 7.x
Ubuntu Linux version 10.04, 12.04 LTS
Debian Linux version 7.x
Linux Mint version 13.0
Fedora Linux version 19 or older
SUSE Linux Enterprise 11 and older (also OpenSuse Linux 11 or older versions).
SUSE Linux Enterprise Software Development Kit 11 SP3
SUSE Linux Enterprise Server 11 SP3 for VMware
SUSE Linux Enterprise Server 11 SP3
SUSE Linux Enterprise Server 11 SP2 LTSS
SUSE Linux Enterprise Server 11 SP1 LTSS
SUSE Linux Enterprise Server 10 SP4 LTSS
SUSE Linux Enterprise Desktop 11 SP3
Arch Linux glibc version <= 2.18-1
檢測
在國外有一份針對 GHOST 檢測的一篇文章
How To Patch and Protect Linux Server Against the Glibc GHOST Vulnerability # CVE-2015-0235
1. 檢測版本
被告知有問題的版本有 RHEL / CentOS 2.12, Ubuntu 2.13, Debian 2.15
$ ldd --version
2. 製作 compile C程式檢測
$ vim ghosttest.c
/* ghosttest.c: GHOST vulnerability tester */ /* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */ #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] = '\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); }
編譯 ghosttest.c 你會得到一支 ghosttest 執行檔
$ gcc ghosttest.c -o ghosttest $ ./ghosttest vulnerable
執行 ghosttest 會出現 not vulnerable (已修正) / vulnerable (未修正)
※切記若是更新完版本必須重新開機
3. 列出有使用 glibc 的程式
lsof | grep libc | awk '{print $1}' | sort | uniq anvil auditd auth awk bash config crond dovecot grep httpd init log lsof master mingetty mysqld mysqld_sa pickup pptpd qmgr rsyslogd saslauthd sort sshd ssl-param sudo tlsmgr udevd uniq
好啦~~常用的都中了,更新一下吧!!
CentOS
$ yum update glibc $ reboot
Ubuntu
$ sudo apt-get update $ sudo apt-get glibc $ sudo reboot