Linux glibc 再曝漏洞:可導致 Linux 軟體劫持

2 贊 回覆發表於2016-02-18

近日,Google和Red Hat的安全人員發現GNU C Library (glibc)中存在嚴重的安全漏洞,可導致Linux軟體被攻擊者劫持,進而在Linux平臺上執行任意程式碼,獲取密碼,監視使用者,甚至控制計算機。CVE編號為CVE-2015-7547。

glibc是GNU釋出的libc庫,即c執行庫。它是Linux系統中最底層的API,幾乎其它執行庫都會依賴於glibc。glibc應用於眾多Linux發行版本中,所以此類漏洞影響範圍十分廣泛。

漏洞概述

glibc的DNS客戶端解析器中存在基於棧的緩衝區溢位漏洞。當軟體用到getaddrinfo庫函式(處理名字到地址以及服務到埠的轉換)時,攻擊者便可藉助特製的域名、DNS伺服器或中間人攻擊利用該漏洞,控制軟體,並試圖控制整個系統。

攻擊者使用惡意的DNS域名伺服器建立類似於evildomain.com的域名,然後向目標使用者傳送帶有指向該域名的連結的郵件,一旦使用者點選該連結,客戶端或瀏覽器將會開始查詢ildomain.com,並最終得到惡意伺服器的buffer-busting響應。該域名被嵌入伺服器日誌中,一旦解析就會觸發遠端程式碼執行,SH客戶端也會因此被控制。或者,位於目標使用者網路中的中間人攻擊者可以篡改DNS響應,向惡意程式碼中動態注入負載。

根據目前的調查情況,此漏洞影響自2.9之後的所有版本,其他舊版本也可能受到影響。

技術細節

glibc通過alloca()函式在棧中為_nss_dns_gethostbyname4_r函式2048位元組的空間,用於託管DNS響應。若響應大於2048位元組,程式會從堆中重新分配一個緩衝區,並更新所有資訊(緩衝區指標,緩衝區大小和響應大小)。

在一定條件下,會出現棧緩衝區和新分配的堆記憶體的錯誤匹配,導致超過棧緩衝區大小的響應仍然儲存在棧中,進而發生緩衝區溢位。觸發該漏洞的利用向量十分普遍,並且ssh、sudo和curl等工具中。

緩解

該漏洞存在於resolv/res_send.c檔案中,當getaddrinfo()函式被呼叫時會觸發該漏洞。技術人員可以通過將TCP DNS響應的大小限制為1024位元組,並丟棄所有超過512位元組的UDPDNS資料包來緩解該問題。值得慶幸的是,許多嵌入式Linux裝置,例如家庭路由器,更傾向於使用uclibc庫,因此可以免受該漏洞的影響。

補丁獲取:sourceware

POC:github

參考來源:GoogleOnlineSecurity

相關文章