# 1、 **漏洞概要**python
近日,Linux底層函數glibc 的 DNS 客戶端解析器被發現存在基於棧的緩衝區溢出漏洞。攻擊者可藉助特製的域名、 DNS 服務器或中間人攻擊利用該漏洞執行任意代碼,甚至控制整個系統。linux
# 2、 **漏洞原理**服務器
攻擊者可在惡意域名服務器建立惡意的DNS域名,誘騙用戶訪問查找惡意域名,並最終獲得惡意服務器的 buffer-busting 響應。該域名被嵌入服務器日誌中,一旦解析就會觸發遠程代碼執行,SSH客戶端也會所以被控制。網絡
glibc經過alloca()函數在堆棧中保有2048字節,這個函數響應DNS查詢請求的函數_nss_dns_gethostbyname4_r() ,而後是send_dg()和send_vc()兩個函數。若是響應大於2048字節,就會從堆分配一個新的緩衝區並更新全部的信息,包括緩衝區指針、新的的緩衝區大小和響應包大小。在某些狀況下,形成堆棧緩衝之間的不匹配,並會分配新的堆。最後的結果就是,堆棧緩衝將被用於存儲DNS響應,即便響應包大小超過了堆棧緩衝,以及分配了堆緩衝。該行爲致使堆棧緩衝的溢出。關鍵問題存在於resolv/res_send.c中,並在使用getaddrinfo()函數調用時觸發。當啓動sudo、curl或其餘工具時,都可觸發此漏洞利用。架構
# 3、 **漏洞影響範圍**curl
全部Debian系列、 Red Hat 系列的 Linux 發行版中glibc版本大於 2.9 均受該漏洞影響,低於2.9的有可能受此漏洞影響。函數
# 4、 **檢查方法**工具
方法一.檢查是否存在該漏洞最簡單的方法爲查看glibc版本,查看指令爲ldd –version,可見圖4-1。另一種方法爲輸入glibc庫的名稱(如libc.so.6),在基於Debian的 64 位系統上:$ /lib/x86_64-linux-gnu/libc.so.6。測試
圖4-1ui
方法二. 在linux命令行「輸入」glibc庫的名稱(如,libc.so.6),就像命令同樣執行。
輸出結果會顯示更多關於glibc庫的詳細信息,包括glibc的版本以及使用的GNU編譯器,也提供了glibc擴展的信息。glibc變量的位置取決於Linux版本和[處理器](http://www.chinabyte.com/keyword/%E5%A4%84%E7%90%86%E5%99%A8/)架構。
在基於Debian的64位系統上:
$ /lib/[x86](http://www.chinabyte.com/keyword/X86/)_64-linux-gnu/libc.so.6
在基於Debian的32位系統上:
$ /lib/i386-linux-gnu/libc.so.6
在基於Red Hat的64位系統上:
$ /lib64/libc.so.6
在基於Red Hat的32位系統上:
$ /lib/libc.so.6
## **4.1 glibc版本大於2.9**
假如檢查中發現glibc版本爲大於2.9版本,可確認存在該漏洞。
## **4.2 glibc版本小於2.9**
假如檢查中發現glibc版本爲小於2.9版本,可嘗試使用參考信息中附件glibc漏洞利用POC工具,驗證是否存在漏洞(工具在參考信息已提供壓縮包)。POC測試步驟以下:
1. 更改DNS解析爲127.0.0.1
2. 執行服務端代碼(服務器需安裝python):CVE-2015-7547-poc.py
3. GCC編譯客戶端代碼:CVE-2015-7547-client.c , 執行編譯後代碼 CVE-2015-7547-client
若存在漏洞,會形成Segmentation Fault或段錯誤。
# 5、 **漏洞利用難度**
網上已公佈漏洞利用工具,利用難度通常。
# 6、 **整改辦法**
1. 網絡側攔截:根據系統運行實際狀況,在防火牆等設備限制全部TCP協議的DNS響應包大小在1024字節以內,並丟棄超過512字節的UDP協議DNS包。
2.更新glibc版本
(1)聯網更新
*CentOS/RHEL/Fedora系統:#yum install glibc -y**Debian/Ubuntu系統:#apt-get update && apt-get install libc6*
(2)手工更新
下載glibc ,地址:<http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz>
下載後經過U盤或者中心網絡系統經過該安裝包下放到根目錄/root
操做指令:
*#tar -xvf glibc-2.23.tar.gz*
*#mkdir glibc-build-2.23*
*#cd glibc-build-2.23*
*#../glibc-2.23/configure--prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin*
*#make & make install*
*#cd glibc-build-2.23*
*#ll libc.so.6*
*#ldd --version*
**注:更新補丁後,全部調用 glibc 的服務均須要重啓,請相關人員根據實際狀況進行操做;另外升級glibc可能致使系統故障,建議在測試服務器測試後再到將生產服務器進行升級。**