安全動態(tài)

英特爾CPU曝重大設(shè)計缺陷:Linux、Windows需修改內(nèi)核

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2018-01-05    瀏覽次數(shù):
 

信息來源:安全牛

程序員們匆忙上馬,徹底檢查開源Linux內(nèi)核虛擬內(nèi)存系統(tǒng)。同時,微軟有望在下一個周二更新日為Windows操作系統(tǒng)做出必要的修改:針對11月和12月推出的 Windows Insider Fast-ring 測試版。

基本上,Linux和Windows的這次更新都將對英特爾產(chǎn)品的性能產(chǎn)生影響。影響有多大尚有待衡量,但粗略估計會在5%-30%之間——依具體任務(wù)和處理器模型而定。更新一些有PCID之類功能的英特爾芯片可以減小性能損失。各用戶的情況不一而足。

因?yàn)槿毕莩鲎杂⑻貭杧86-64硬件,且似乎微代碼更新無法解決該問題,所以類似的操作系統(tǒng)(如蘋果的64位macOS)也需要更新。要么在操作系統(tǒng)級軟件修復(fù)該問題,要么新買一塊不帶該設(shè)計缺陷的處理器,自己選吧!

該漏洞的細(xì)節(jié)目前尚未披露,大概會在微軟下周二的更新日適時推出吧。實(shí)際上,Linux內(nèi)核的補(bǔ)丁已經(jīng)推出,只是源代碼中抹去了注釋以防漏洞細(xì)節(jié)太過明顯。

不過,我們還是可以從中探得幾分究竟。

影響

據(jù)了解,該漏洞出現(xiàn)在過去10年中生產(chǎn)的現(xiàn)代英特爾處理器中,可令普通用戶程序——從數(shù)據(jù)庫應(yīng)用到瀏覽器JavaScript腳本,在一定程度上獲悉受保護(hù)內(nèi)核內(nèi)存區(qū)域的布局或內(nèi)容。

內(nèi)核頁表隔離(KPTI)技術(shù)將用戶進(jìn)程與內(nèi)核內(nèi)存完全隔開可以解決該問題。事實(shí)上,Linux內(nèi)核團(tuán)隊曾一度考慮用中斷間接跳轉(zhuǎn)強(qiáng)制完全解除內(nèi)核映射(FUCKWIT),這么極端的辦法都認(rèn)真考慮過,可想而知這個漏洞給開發(fā)人員造成了多大的麻煩。

正在運(yùn)行的程序無論什么時候想干點(diǎn)兒什么有用的事,比如寫個文件或者打開個網(wǎng)絡(luò)連接啥的,都得暫時將處理器控制權(quán)交給內(nèi)核去執(zhí)行這些工作。為使用戶態(tài)和內(nèi)核態(tài)之間的切換快速高效,即便程序本身看不到內(nèi)核,內(nèi)核還是會出現(xiàn)在所有進(jìn)程的虛擬內(nèi)存地址空間里。需要內(nèi)核的時候,程序就執(zhí)行一個系統(tǒng)調(diào)用,處理器切換到內(nèi)核模式。而在用戶態(tài)下,內(nèi)核的代碼和數(shù)據(jù)對用戶不可見,但存在于進(jìn)程的頁表里。

可以把內(nèi)核比作天上的神仙,端坐云頭俯瞰大地。凡人看不到神仙,但是可以向神仙許愿。

KPTI補(bǔ)丁將內(nèi)核放到一個完全隔離的地址空間,讓它不僅僅對進(jìn)程不可見,甚至根本不在進(jìn)程里了。其實(shí)本沒必要做到這一步,但很明顯,英特爾的芯片里確實(shí)出現(xiàn)了可令內(nèi)核訪問防護(hù)機(jī)制被繞過的漏洞。

這一隔離方式的缺點(diǎn)就在于時間開銷太高昂了。每次系統(tǒng)調(diào)用都要在兩個隔離的地址空間來回倒騰,還有超級費(fèi)時的硬件中斷,想想都讓人生無可戀。這些切換不會即時發(fā)生,還會導(dǎo)致處理器廢棄緩存的數(shù)據(jù)而去內(nèi)存中重新加載信息。所有這些都會增加內(nèi)核的開銷,拖慢計算機(jī)的速度。

黑客會怎么濫用這個安全漏洞呢?

至少,這個漏洞可以被惡意軟件用來更加容易地利用其他安全漏洞。

最壞情況的話,就是被程序和已登錄用戶利用來讀取內(nèi)核內(nèi)存里的內(nèi)容了。總之,情況很不妙。內(nèi)核內(nèi)存空間之所以對用戶進(jìn)程不可見,是因?yàn)樗锌赡芎懈鞣N各樣的秘密,比如口令、登錄密鑰、緩存的磁盤文件等等。不難想象,一旦瀏覽器里運(yùn)行的JavaScript腳本,或者共享公共云服務(wù)器上的惡意軟件能夠嗅探內(nèi)核中受保護(hù)的數(shù)據(jù),那會是怎樣一個恐怖的場景。

尤其是,該漏洞可被濫用來擊潰KASLR(內(nèi)核地址空間布局隨機(jī)化)——操作系統(tǒng)在虛擬內(nèi)存的隨機(jī)位置部署內(nèi)核組件的一種防御機(jī)制。該機(jī)制可挫敗濫用內(nèi)核中其他漏洞的企圖:通常是漏洞利用代碼,尤其是面向返回編程的漏洞利用代碼——依賴對內(nèi)存中已知位置的計算機(jī)指令的重用。

如果內(nèi)核代碼在內(nèi)存中的位置被隨機(jī)化了,漏洞利用代碼就找不到所需的內(nèi)部組件,也就不能完全破壞系統(tǒng)了。該處理器設(shè)計缺陷有可能被用來找出內(nèi)核在內(nèi)存中存放其數(shù)據(jù)和代碼的位置,因此,必須趕緊打上軟件補(bǔ)丁。

然而,英特爾芯片中的漏洞有可能造成比上述緩解措施被繞過更糟糕的后果。圣誕節(jié)時,AMD給Linux內(nèi)核郵件列表發(fā)了封電子郵件,稱AMD處理器不受該漏洞影響。然而,該郵件中的措辭實(shí)際上透露了該漏洞利用上的一些細(xì)節(jié):

AMD處理器不受內(nèi)核代碼數(shù)據(jù)讀取攻擊的影響。AMD微架構(gòu)不允許內(nèi)存引用,包括猜測性的引用,也就是可導(dǎo)致頁面出錯的低權(quán)限模式下對高權(quán)限數(shù)據(jù)的訪問。

此處的關(guān)鍵詞是“猜測性”。英特爾之類現(xiàn)代處理器會進(jìn)行猜測性代碼執(zhí)行——CPU盡最大努力猜測下一個要執(zhí)行的代碼是哪段并取來執(zhí)行,以使其內(nèi)部管道布滿一系列應(yīng)執(zhí)行的指令,提升CPU指令執(zhí)行的效率。

從上面AMD軟件工程師湯姆·蘭達(dá)基所述看來,英特爾CPU的猜測性代碼執(zhí)行很可能缺乏必要的安全檢查。似乎可以構(gòu)造那么一種軟件,讓處理器開始執(zhí)行通常會被阻止的指令(比如以用戶態(tài)讀取內(nèi)核內(nèi)存),并在權(quán)限檢查發(fā)生前就將該指令執(zhí)行完畢。

這么做就可以使Ring3級用戶代碼能夠讀取Ring0級內(nèi)核數(shù)據(jù)了。當(dāng)然,這不是什么好事。

該漏洞的細(xì)節(jié)還有待證實(shí),關(guān)于其嚴(yán)重性的討論也只是猜測,但考慮到Linux和Windows的大改,以及這些大幅更新推出的快速性,這一漏洞很可能比KASLR繞過更嚴(yán)重。

在Linux上隔離內(nèi)核與用戶地址空間的更新,是在名為KAISER的補(bǔ)丁集上做出的。創(chuàng)建KAISER補(bǔ)丁集的奧地利格拉茨技術(shù)大學(xué)科學(xué)家們,正是發(fā)現(xiàn)可以通過對CPU虛擬內(nèi)存系統(tǒng)的邊信道攻擊,抽取內(nèi)核內(nèi)存布局信息以挫敗KASLR防護(hù)的那個團(tuán)隊。該團(tuán)隊提出,分隔內(nèi)核與用戶空間可防止此類信息泄露,而他們的研究正是這一輪KPTI補(bǔ)丁的靈感來源。

7月份的時候,有人寫了篇博客,記敘自己通過濫用猜測性執(zhí)行來從用戶態(tài)讀取內(nèi)核內(nèi)存的嘗試。盡管沒給出任何可用的概念驗(yàn)證代碼,這位仁兄提到:

我的結(jié)果表明,即便內(nèi)核態(tài)和用戶態(tài)之間的隔離被打破,猜測性執(zhí)行確實(shí)還在進(jìn)行。

KAISER補(bǔ)丁集似乎就與這篇博客文章相關(guān),而格拉茨技術(shù)大學(xué)團(tuán)隊通過濫用虛擬內(nèi)存布局突破KASLR防護(hù)的方法,也在某種程度上證明了這位博主的正確性——英特爾x86芯片上的猜測性執(zhí)行是可以用來獲取內(nèi)核內(nèi)存的。

共享系統(tǒng)

元旦時,一篇流傳甚廣的推特文章稱,該漏洞將影響一系列大品牌云計算環(huán)境,包括亞馬遜EC2、微軟Azure和谷歌Compute Engine:

目前有個暫不公開的安全漏洞,影響當(dāng)下所有實(shí)現(xiàn)了虛擬內(nèi)存的英特爾CPU架構(gòu),需要硬件修改才能完全解決。目前已經(jīng)開發(fā)出了緊急軟件緩解措施,并已應(yīng)用到Linux內(nèi)核上,NT內(nèi)核中的類似緩解措施似乎在11月份就出現(xiàn)了。最壞情況下,該軟件補(bǔ)丁會導(dǎo)致正常工作負(fù)載的執(zhí)行速度大幅變慢。有跡象表明,對這一漏洞的攻擊會影響到常見虛擬化環(huán)境,包括亞馬遜EC2和谷歌 Compute Engine……

微軟的Azure云上運(yùn)行有大量Linux系統(tǒng)和Windows系統(tǒng),大概就是為了應(yīng)用上述補(bǔ)丁,將于1月10日停機(jī)維護(hù)再重啟。

AWS也通過電子郵件提示客戶,將于本周五進(jìn)行重大安全更新,但沒有對更新內(nèi)容進(jìn)行詳細(xì)說明。

2017年底的時候就有流言說存在嚴(yán)重的虛擬機(jī)管理程序漏洞——可能是在Xen開源虛擬機(jī)平臺中?;蛟S該流言中的漏洞就是這個硬件漏洞:通過內(nèi)核內(nèi)存訪問可對虛擬機(jī)管理程序進(jìn)行攻擊。該漏洞必須得補(bǔ)上,因而也就會造成大量客戶虛擬機(jī)的重啟。

英特爾發(fā)言人對評論請求沒有做出任何響應(yīng)。

最新

英特爾處理器的缺陷已經(jīng)被確認(rèn)。一位在阿姆斯特丹自由大學(xué)攻讀系統(tǒng)和網(wǎng)絡(luò)安全的博士生給出了該 Chipzilla 漏洞的PoC程序,實(shí)現(xiàn)了在用戶模式下讀取內(nèi)核的內(nèi)存信息。

最終,蘋果的macOS也已經(jīng)發(fā)布補(bǔ)丁,修補(bǔ)了從10.13.2版本開始的芯片設(shè)計錯誤。并且,64位ARM Linux內(nèi)核似乎也會收到KAISER補(bǔ)丁集,將內(nèi)核與用戶空間完全隔離開,以阻止任何試圖突破KASLR的嘗試。

 
 

上一篇:2018年01月04日 聚銘安全速遞

下一篇:沈昌祥院士的網(wǎng)絡(luò)“安全夢”