立即修復!Unix bug令各類Linux系統身陷風險
譯文【51CTO快譯】研究人員已經在GNU C庫(即glibc)當中發現一項高危安全漏洞,其可能導致現代Linux服務器面臨遠程代碼執行攻擊所帶來之風險。API Web服務與Rails、PHP乃至Python等高人氣Web框架也都因此受到影響。
此安全漏洞(CVE 2015-7547)為存在于glibc DNS客戶端解析器之getaddrinfo()函數中的基于堆棧緩沖區溢出問題,且目前已經得到修復。任何使用glibc 2.9以及更新版本(2.9版本于2008年5月發布)的用戶都有可能受到影響,這意味著幾乎全部glibc使用者都應當盡快安裝該補丁。紅帽企業Linux 5采用glibc 2.5,因此其不會受到該漏洞的影響; 不過紅帽企業Linux 6(使用glibc 2.12)、紅帽企業Linux 7(使用glibc 2.17)、Debian squeeze(使用glibc 2.11)、Debian wheezy(使用glibc 2.13)以及Debian jessie(使用glibc 2.19)則全部受到影響。
“必須認真對待這一問題,即盡快為glibc安裝修復補丁。該安全漏洞確實非常嚴重,”Open Crypto Audit項目主管兼安全研究員Kenneth White在自己的推文當中寫道。
該漏洞最初由Ciena的Robert Holiday及其glibc項目小組所報告,時間點為2015年7月。在此之后,紅帽公司首席軟件工程師Carlos O’Donnell與紅帽產品安全團隊成員Florian Weiner對該漏洞的影響做出評估并為其準備了相應補丁。谷歌公司研究員Fermin J. Serna與Kevin Stadmeyer亦獨立發現了報告中提及的該安全漏洞,并推出了一項針對該漏洞的概念驗證利用方案。
“我們還沒有發現任何使用這項安全漏洞的實際攻擊活動,”O’Donnell指出。
其中getaddrinfo()函數通常被用于解析IP地址,在這種情況下,攻擊者可以利用該漏洞通過接入惡意DNS服務器實現對應用程序及系統的控制權。利用這一安全漏洞進行攻擊的可行途徑多種多樣,其中包括但不限于ssh、sudo以及curl,谷歌研究人員們解釋稱。
“使用該函數的軟件可能被攻擊者通過受控域名、攻擊者控制之DNS服務器或者中間人攻擊活動所影響,”Serna與Stadmeyer在咨詢意見當中寫道。
該安全漏洞會在系統從DNS服務器處接收到長度過大的UDP或者TCP響應結果時被觸發,具體為超過2048字節——而在此之前,攻擊者還需通過另一項響應對該堆棧進行覆蓋。要觸發這項緩沖區管理漏洞,目標系統必須嘗試對攻擊者控制下的域名進行DNS搜索。第一條接收到的響應長度為2048字節,這意味著其會占滿整個緩沖區、不留任何剩余空間。由于該緩沖區無法進行復用,因此系統會建立一個新的緩沖區。但漏洞的存在導致原有緩沖區與新緩沖區同時存在,意味著整體緩沖區空間為65535.第二項響應則迫使該系統重試這項查詢。第三項響應包含有2048字節的有效響應,但除此之外攻擊載荷仍有63487字節空間可以使用。
該漏洞之所以會發生,是因為當該查詢重新開始時,其指向的其實是擁有錯誤容量的緩沖區,O’Donnell解釋道。“當然還有其它辦法觸發這個緩沖區管理漏洞,但其需要對響應計時進行深入控制,并使用輪詢超時以通過兩次攻擊者響應實現漏洞利用(而非三次),”O’Donnell表示。
紅帽公司的研究員們還得以利用該緩沖區溢出漏洞控制一項free()調用的執行,并借此控制EIP注冊表。盡管他們并沒有嘗試進一步利用該漏洞,但此次嘗試已經證明了遠程控制執行的可能性。
“包絡分析結果顯示,攻擊者可以利用受控載荷編寫出格式正確的DNS響應,從而突破DNS緩存結構并借此接入到緩存背后的設備本體,”O’Donnell在其glibc項目群發郵件中寫道。
該漏洞產生的危害水平取決于系統現有緩沖區溢出漏洞應對能力。遠程代碼執行可能“并不簡單”,因為其需要繞過ASLR,谷歌公司的Serna解釋稱。管理員與開發人員如果無法立即安裝glibc補丁,也應當馬上采取臨時性應對措施,從而防止潛在的攻擊行為。一種可行選項在于將本地DNS解析器所能接收的響應長度限制在1024字節。
對于這種長度限制需要高度關注,因為使用DNSSEC等先進功能的系統可能需要接受超出正常長度水平的UDP響應。DNSSEC需要配合EDNSO,這項客戶端功能負責通知服務器其能夠接收長度超過512字節的UDP響應。因此,阻斷高長度DNS響應有可能會破壞EDNSO功能。“DNS解析可能因此發生失敗,或者出現顯著延遲,”SAN協會的Johannes B. Ullrich提醒稱。
管理員應當確保網絡之上的全部系統都采用特定解析器,同時阻斷一切出站DNS——除非其由已知解析器所生成。通過這種方式能夠限制漏洞被利用的可能性,而且“是種不錯的處理辦法,”Ullrich指出。
與此同時,禁止雙A與AAA查詢可能也有助于緩解這種安全漏洞,而徹底禁用IPv6則無法禁用AAAA查詢或者預防漏洞問題。阻斷IPv6的本地或者中間解析器并不能預防此類漏洞狀況,因為漏洞利用載荷仍然能夠得到切實交付。“它屬于觸發該緩沖區管理漏洞的并發查詢,”O’Donnell寫道。
盡管相關補丁已經正式推出,不過這場競賽仍在進行當中,而且最終結果取決于哪方行動更快——攻擊者還是防御者。“現在捕鼠貓已經出籠,開發團隊需要快速檢測其應用程序是否處于風險當中:但這項工作非常困難,因為glibc以深層方式集成在各類應用當中,”Black Duck軟件公司的Patrick Carey表示。修復的過程同樣相當漫長,特別對于那些移動設備或者其它面向用戶的應用程序而言。
需要指出的是,glibc庫屬于GNU項目所采用的標準C庫,而且被廣泛應用于各類包含Linux內核的GNU Linux及其它系統當中。這也是最近幾個月來該庫曝出的第二個高危安全漏洞:就在去年,研究人員們發現glibc當中存在著GHOST漏洞(CVE 2015-235)。
原文標題:Patch now! Unix bug puts Linux systems at risk