Linuxglibc幽靈漏洞測試與修復方法

科技小能手發表於2017-11-12

Linuxglibc幽靈漏洞測試與修復方法

simeon

一、Linux glibc幽靈漏洞簡介

2015128日網際網路上爆出Linux glibc幽靈漏洞(glibc gethostbyname buffer overflowhttp://seclists.org/oss-sec/2015/q1/274),也有人將其稱之為“20150127GHOST gethostbyname() heap overflow in glibc”,在CVE上的漏洞編號是CVE-2015-0235。攻擊者可利用此漏洞實施遠端攻擊,並完全控制目標系統。

glibcGNU釋出的libc庫,即c執行庫。glibclinux系統中最底層的api,幾乎其它任何執行庫都會依賴於glibcglibc除了封裝linux作業系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。glibc 囊括了幾乎所有的 UNIX 通行的標準。

國外安全研究人員發現,glibc__nss_hostname_digits_dots()函式有緩衝區溢位漏洞。這一漏洞既可以本地利用,也可以遠端利用。研究人員對漏洞進行了測試驗證:向目標郵件伺服器傳送特別構造的郵件,從而獲得了遠端登入Linxu系統的shell指令碼。通過這種方式可以繞過32位和64位系統上的所有現存保護機制(比如SSLRPIENX)。

glibc-2.2影響的GNU C函式最早版本是在200011月釋出的。這一漏洞曾在20135月被修補(在glibc-2.17glibc-2.18版本之間)。但由於當時並沒有被認定為安全威脅,包括Debian 7Red Hat Enterprise Linux 6 & 7 CentOS 5&6& 7Ubuntu 12.04在內的多數知名Linux版本在長達一年半的時間都沒有修補幽靈漏洞,經測試以下版本均存在漏洞:

  • RHEL (Red Hat Enterprise Linux) version 5.x, 6.x, 7.x 

  • CentOS Linux 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 y anteriores 

  • SUSE Linux Enterprise 11 y anteriores 

  • Arch Linux glibc version <= 2.18-1 

360安全公司研究人員分析Linuxglibc幽靈漏洞最容易的攻擊入口是郵件伺服器,和存在SSRF(Server-side Request Forgery)漏洞的WEB介面。值得慶幸的是,此漏洞目前還沒有公開通用的攻擊程式碼,這也給了伺服器管理員們及時安裝補丁的寶貴時間。

二、Linux glibc幽靈漏洞測試方法

1. Ubuntu & Debian檢查

ldd –version

1Ubuntu受影響版本(https://launchpad.net/ubuntu/+source/eglibc):

Ubuntu 12.04 LTS: 2.15-0ubuntu10.10

Ubuntu 10.04 LTS: 2.11.1-0ubuntu7.20

2Debian gibc受影響版本(https://security-tracker.debian.org/tracker/CVE-2015-0235),Debian 7LTS: 2.13-38+deb7u7

eglibc (PTS)       squeeze   2.11.3-4   vulnerable

eglibc wheezy  2.13-38+deb7u6       vulnerable

Debian gibc已經修復版本:

squeeze (lts)    2.11.3-4+deb6u4    

wheezy (security)    2.13-38+deb7u7      

2. CentOS & RHEL檢查

centos上執行“rpm -qglibc”命令,如圖1所示,顯示glibc的版本資訊為glibc-2.5-118.el5_10.2


受影響版本:

CentOS 5:glibc-2.5-118.el5_10.2

CentOS 6: glibc-2.12-1.149.el6_6.5

CentOS 7: glibc-2.17-55.el7_0.5

RHEL 5: glibc-2.5-123.el5_11.1

RHEL 6: glibc-2.12-1.149.el6_6.5

RHEL 7: glibc-2.17-55.el7_0.5

檢視RHEL 各個版本更多有關該漏洞的資訊請訪問:

https://security-tracker.debian.org/tracker/CVE-2015-0235

3.POC驗證測試

把下面的程式碼儲存為ghost.c,或者wget http://www.antian365.com/lab/linux0day/ghost.c

/*

 * GHOSTvulnerability check

 * http://www.antian365.com/lab/linux0day/ghost.c

 * Usage: gcc ghost.c-o ghost && ./ ghost

 */

 

#include <netdb.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

 

#define CANARY “in_the_coal_mine”

 

struct {

  charbuffer[1024];

  charcanary[sizeof(CANARY)];

} temp = { “buffer”, CANARY };

 

int main(void) {

  struct hostentresbuf;

  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;

  charname[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(“not vulnerable”);

   exit(EXIT_SUCCESS);

  }

 puts(“should not happen”);

 exit(EXIT_FAILURE);

}

 

    直接編譯並執行: gcc ghost.c-o ghost && ./ghost 如果存在漏洞則會顯示“vulnerable”,如圖2所示。


也可以執行下面的命令,以檢測是否存在漏洞

方法一:

rpm -qglibc

cat/etc/issue

wget http://www.antian365.com/lab/linux0day/ghost.c

gcc ghost.c-o ghost && ./ghost

方法二直接顯示glibc的版本資訊:

wget -OGHOST-test.sh http://www.antian365.com/lab/linux0day/GHOST-test.sh.txt

bashGHOST-test.sh

顯示結果如下:

Vulnerableglibc version <= 2.17-54

Vulnerableglibc version <= 2.5-122

Vulnerableglibc version <= 2.12-1.148

Detectedglibc version 2.5 revision 118

Thissystem is vulnerable to CVE-2015-0235.<https://access.redhat.com/security/cve/CVE-2015-0235>

Pleaserefer to <https://access.redhat.com/articles/1332213> for remediationsteps

三、修復方法:

1. Ubuntu/Debian

Ubuntu/Debian上執行以下命令進行修復,修復後需要重啟。

apt-get update && apt-get -y install libc6

2.Centos

Centos上執行“yumupdate glibc”後會有一個確認,輸入“y”,大概會下載6個安裝包,安裝完成後需要重啟計算機。

 

參考資料

1.360安全播報 http://bobao.360.cn/news/detail/1166.html

2. 國家漏洞庫:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-0235

3. http://seclists.org/oss-sec/2015/q1/274

4. https://www.digitalocean.com/community/tutorials/how-to-protect-your-linux-server

-against-the-ghost-vulnerability

 本文轉自 simeon2005 51CTO部落格,原文連結:http://blog.51cto.com/simeon/1609466


相關文章