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. 漏洞測試

複製下面代碼,文件保存爲ghost.c

 

#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("notvulnerable");
    exit(EXIT_SUCCESS);
  }
  puts("should nothappen");
  exit(EXIT_FAILURE);
}

生成可執行文件

gcc -o ghost ghost.c

 

 

[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在線更新,優先升級對外開放的服務器

 

CentOS  5.4 與 6.3 網絡源  spacer.gif

 

5. RPM效驗及來源

公司系統環境主要是Centos 5.4  Centos 6.3,

RPMrpm包來至於 http://centos.ustc.edu.cn/centos

Centos 5.4  RPM地址:

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/glibc-2.5-123.el5_11.1.i686.rpm  

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/glibc-2.5-123.el5_11.1.x86_64.rpm   

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/glibc-common-2.5-123.el5_11.1.x86_64.rpm  

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/glibc-devel-2.5-123.el5_11.1.i386.rpm   

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/glibc-devel-2.5-123.el5_11.1.x86_64.rpm 

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/glibc-headers-2.5-123.el5_11.1.x86_64.rpm 

http://centos.ustc.edu.cn/centos/5/updates/x86_64/RPMS/nscd-2.5-123.el5_11.1.x86_64.rpm 

 

 

RPM-GPG-KEY-CentOS-5 地址:

http://centos.ustc.edu.cn/centos/5/os/x86_64/RPM-GPG-KEY-CentOS-5

 

RPM包效驗地址:

http://centos.ustc.edu.cn/centos/5/updates/x86_64/repodata/primary.xml.gz 

 

RPM包效驗結果:

RPM效驗命令sha1sum  filename

1544cd586e3ea438965655e1206dc561cf97b89c  glibc-2.5-123.el5_11.1.i686.rpm

903af817355afe728b4b4e13e89ef9e896d690ea  glibc-2.5-123.el5_11.1.x86_64.rpm

3c08d80ab9cc1b6e78ca1cc18d30f672af4331ab  glibc-common-2.5-123.el5_11.1.x86_64.rpm

c4a7fb23ac797b42a5f5ac37ed0e0124eafd7148  glibc-devel-2.5-123.el5_11.1.i386.rpm

881ae969d80d13e774e399dc29108a1d9d8ea7a9  glibc-devel-2.5-123.el5_11.1.x86_64.rpm

963094727f64ab20f9160f2f01429a5f35f12b1a  glibc-headers-2.5-123.el5_11.1.x86_64.rpm

62ca97bab165ee1274ec8c8cfdb937d7002f626f  nscd-2.5-123.el5_11.1.x86_64.rpm

 

RPMrpm包來至於 http://centos.ustc.edu.cn/centos

Centos 6.3  RPM地址:

http://centos.ustc.edu.cn/centos/6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.x86_64.rpm

http://centos.ustc.edu.cn/centos/6/updates/x86_64/Packages/glibc-common-2.12-1.149.el6_6.5.x86_64.rpm

http://centos.ustc.edu.cn/centos/6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm

http://centos.ustc.edu.cn/centos/6/updates/x86_64/Packages/glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm

 

RPM-GPG-KEY-CentOS-6 地址:

http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-6

 

RPM包效驗地址:

http://centos.ustc.edu.cn/centos/6/updates/x86_64/repodata/ed26499d2521d874041a3a530613ade08ee2cc9a825860de667d7eb22773c415-primary.xml.gz

RPM包效驗結果:

RPM效驗命令sha256sum  filename

51df53cceee0f4a7c1cbbc4cea8aecb1910eb1232592e330b6fe467eb2d7b5b5  glibc-2.12-1.149.el6_6.5.x86_64.rpm

65285684336366a98c5ac3c33982c0ccd0d5291563faea655b5fc6f47e8cfa63  glibc-common-2.12-1.149.el6_6.5.x86_64.rpm

b6feecfbc9fbb10259c61ab60d7414d5a70c0cdef553fb2a4f14b7468e664160  glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm

803fa33d7f62d944b019a644d1f3b0ec9f9e8aa67fde4c905cd7000939a1f872  glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章