Linux底層函式庫glibc漏洞核查整改指引

2021-09-27 04:51:28 字數 2457 閱讀 2544

近日,linux底層函式glibc 的 dns 客戶端解析器被發現存在基於棧的緩衝區溢位漏洞。***者可借助特製的網域名稱、 dns 伺服器或中間人***利用該漏洞執行任意**,甚至控制整個系統。

***者可在惡意網域名稱伺服器建立惡意的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或其他工具時,均可觸發此漏洞利用。

所有debian系列、 red hat 系列的 linux 發行版中glibc版本大於 2.9 均受該漏洞影響,低於2.9的有可能受此漏洞影響。

方法一.檢查是否存在該漏洞最簡單的方法為檢視glibc版本,檢視指令為ldd –version,可見圖4-1。另外一種方法為輸入glibc庫的名稱(如libc.so.6),在基於debian的 64 位系統上:$ /lib/x86_64-linux-gnu/libc.so.6。

圖4-1

方法二. 在linux命令列「輸入」glibc庫的名稱(如,libc.so.6),就像命令一樣執行。

輸出結果會顯示更多關於glibc庫的詳細資訊,包括glibc的版本以及使用的gnu編譯器,也提供了glibc擴充套件的資訊。glibc變數的位置取決於linux版本和處理器架構。

在基於debian的64位系統上:

$ /lib/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位系統上:

4.1 glibc版本大於2.9

假如檢查中發現glibc版本為大於2.9版本,可確認存在該漏洞。

1. 更改dns解析為127.0.0.1

2. 執行服務端**(伺服器需安裝python):cve-2015-7547-poc.py

3. gcc編譯客戶端**:cve-2015-7547-client.c , 執行編譯後** cve-2015-7547-client

4. 若存在漏洞,會造成segmentation fault或段錯誤,見圖5-1。

圖5-1

網上已公布漏洞利用工具,利用難度一般。

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)手工更新

ftp.gnu.org/gnu/glibc/g

libc-2.23.tar.gz

操作指令:

#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可能導致系統故障,建議在測試伺服器測試後再到將生產伺服器進行公升級。

發布於 10:47

Linux 下的靜態(函式)庫 動態(函式)庫

不用指定生成.o檔名 預設生成file1.o,file2.o,file3.o ar rv libname.a file1.o file2.o file3.or 將flie1.o,file2,o,file3.o插入archive,如故原先archive中已經存在某檔案,則先將該檔案刪除。v 顯示ar操...

Linux的靜態函式庫和動態函式庫

一 在linux中,有兩種函式庫,以 so字尾命名的是動態函式庫,以 a字尾命名的是靜態函式庫 二 靜態函式庫 1 靜態函式庫是多個目標檔案 o的集合 2 可以使用ar命令 archiver 來生成.a檔案 gcc c part a.c gcc c part b.c ar r libtest.a p...

Linux應用開發 靜態函式庫和動態函式庫

什麼叫庫?就是一些函式經過一定的操作生成的可執行的二進位制檔案,能夠被外部呼叫使用封裝的函式。linux應用程式所使用的主要函式庫均存放於 lib和 usr lib目錄下,其中以 so方式命名的是動態函式庫,以 a命令的是靜態函式庫,linux下進行鏈結時預設使用動態函式庫,如果想要使用靜態函式庫時...