Linux底層函數(shù)庫(kù)“glibc”再現(xiàn)重大安全漏洞
原創(chuàng)近日,Google 的安全研究團(tuán)隊(duì)披露了glibc getaddrinfo溢出漏洞。經(jīng)研究發(fā)現(xiàn),所有Debian、Red Hat以及更多其它Linux發(fā)行版,只要glibc版本大于2.9就會(huì)受到該溢出漏洞影響。攻擊者可以通過(guò)該漏洞直接批量獲取大量主機(jī)權(quán)限。
關(guān)于漏洞的詳細(xì)發(fā)現(xiàn)過(guò)程,請(qǐng)移步Google的博客 。
百科:glibc是什么?
glibc是GNU發(fā)布的libc庫(kù),即c運(yùn)行庫(kù)。glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運(yùn)行庫(kù)都會(huì)依賴于glibc。glibc除了封裝linux操作系統(tǒng)所提供的系統(tǒng)服務(wù)外,它本身也提供了許多其它一些必要功能服務(wù)的實(shí)現(xiàn)。由于 glibc 囊括了幾乎所有的 UNIX 通行的標(biāo)準(zhǔn),可以想見其內(nèi)容包羅萬(wàn)象。而就像其他的 UNIX 系統(tǒng)一樣,其內(nèi)含的檔案群分散于系統(tǒng)的樹狀目錄結(jié)構(gòu)中,像一個(gè)支架一般撐起整個(gè)操作系統(tǒng)。在GNU/Linux 系統(tǒng)中,其C函式庫(kù)發(fā)展史點(diǎn)出了GNU/Linux 演進(jìn)的幾個(gè)重要里程碑,用 glibc 作為系統(tǒng)的C函式庫(kù),是GNU/Linux演進(jìn)的一個(gè)重要里程碑。
漏洞的成因及POC使用測(cè)試
據(jù)悉,漏洞的成因在于DNS Server Response返回過(guò)量的(2048 ) 字節(jié), 導(dǎo)致接下來(lái)的response 觸發(fā)棧溢出。
目前,Google已提供了POC,據(jù)其博客中所述,該漏洞應(yīng)該是可以繞過(guò)內(nèi)存防護(hù)技術(shù),從而形成代碼執(zhí)行漏洞。
具體POC 地址如下:github.com/fjserna/CVE-2015-7547
對(duì)此,烏云白帽子路人甲在自己的本地lubuntu 上進(jìn)行了測(cè)試,libc 版本為 2.19。lubuntu系列也屬于Debian 的一個(gè)發(fā)行版,故理論上滿足漏洞條件。測(cè)試過(guò)程如下:
根據(jù)漏洞描述,我們可以做一個(gè)假的DNS Server 作為中間人,來(lái)驗(yàn)證該漏洞。
更改DNS 解析為 127.0.0.1,刷新DNS 緩存 sudo /etc/init.d/nscd restart
執(zhí)行 CVE-2015-7547-poc.py , 注意無(wú)需更改 ip_addr 。
編譯 CVE-2015-7547-client.c , 執(zhí)行CVE-2015-7547-client
若含有漏洞,會(huì)造成Segmentation Fault。
(圖片來(lái)自烏云安全中心)
由于gilbc 2.9 是在2008年發(fā)行的,所以大量Linux 系統(tǒng)都會(huì)受到該漏洞影響。若一旦繞過(guò)內(nèi)存防護(hù)技術(shù),則該漏洞可以成為一大殺器。被劫持的DNS server進(jìn)行中間人攻擊,可直接批量獲取大量主機(jī)權(quán)限。
修復(fù)方案: 打patch,詳見官方介紹
如何檢查L(zhǎng)inux上的glibc版本
方法一:
下面給出了命令行下檢查GNU C庫(kù)的簡(jiǎn)單命令。
$ ldd --version
方法二:
另一個(gè)方法是在命令行“輸入”glibc 庫(kù)的名稱(如,libc.so.6),就像命令一樣執(zhí)行。
輸出結(jié)果會(huì)顯示更多關(guān)于glibc庫(kù)的詳細(xì)信息,包括glibc的版本以及使用的GNU編譯器,也提供了glibc擴(kuò)展的信息。glibc變量的位置取決于Linux版本和處理器架構(gòu)。
在基于Debian的64位系統(tǒng)上:
$ /lib/x86_64-linux-gnu/libc.so.6
在基于Debian的32位系統(tǒng)上:
$ /lib/i386-linux-gnu/libc.so.6
在基于Red Hat的64位系統(tǒng)上:
$ /lib64/libc.so.6
在基于Red Hat的32位系統(tǒng)上:
$ /lib/libc.so.6
下圖中是輸入glibc庫(kù)后的輸出結(jié)果樣例。
寫在最后
小編建議廣大用戶盡快給操作系統(tǒng)打補(bǔ)丁,并且提醒管理員在修補(bǔ)漏洞的同時(shí),千萬(wàn)不要忘記查看服務(wù)器或網(wǎng)站是否已經(jīng)被入侵,是否存在后門文件等,盡量將損失和風(fēng)險(xiǎn)控制在可控范圍內(nèi)。
參考文獻(xiàn):
https://googleonlinesecurity.blogspot.ca/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html?m=1
https://isc.sans.edu/diary/CVE-2015-7547: Critical Vulnerability in glibc getaddrinfo/20737


























