席卷全球的CPU內核漏洞是什么?華為云給你科普
翻開最近的新聞,總少不了CPU內核高危漏洞的報道,其影響之大,修復之難,從電腦被發明以來還是首次。這個漏洞為什么這么厲害?
一、漏洞有多可怕?
近日,國外相關安全研究機構公布了CPU內核高危漏洞Meltdown(熔斷)和Spectre(幽靈)。利用這兩組漏洞,攻擊者可繞過內存訪問的安全隔離機制,獲取操作系統和其他程序保護的核心數據,造成敏感信息泄露。
這兩組漏洞,相當于在一座大廈的地基上出現了嚴重的安全隱患,允許任何人隨意進出大夏的每個房間、每個角落,而且還可以拿到房間里值錢的東西。要修復起來,不僅地基要重新設計,上面的每個樓層,都要加上防護措施。這座大廈有多大?大到包括全球幾乎所有的手機、電腦甚至物聯網設備。特別在云場景下,不同的用戶可能共享同一個物理主機,云廠商對用戶做了資源隔離,防止用戶訪問不屬于自己的資源和信息,而這兩組漏洞正好允許攻擊者突破這種隔離。
漏洞引起的危害如此嚴重,影響范圍如此廣大,一經公布,立即引起了全世界的矚目,被媒體稱為史上最大的安全漏洞。
二、漏洞怎么產生的?
這兩組漏洞,都利用了CPU亂序執行和預測執行的機制。采用預測執行和亂序執行,目的是提升CPU的運算速度。而漏洞的產生則都拜預測執行所賜。
亂序執行,顧名思義,就是指令的執行是沒有順序的。每條指令執行時間差異是很大的,就跟吃飯一樣,有人5分鐘搞定,有人1小時還沒吃完。假設吃飯要按順序來,那如果吃飯時間長的人一直沒結束,后面的人就得餓著肚子等待。這顯然不可能,所以CPU都采用亂序執行,就是大家自己找個位置,自己吃,互不干擾。
預測執行,也如其名,就是根據你平常的操作,預測你后面要干什么,CPU就幫你干了。預測錯了呢?正常的設想,肯定是指令取消掉就行。但問題就出在這里。錯誤指令雖然取消了,但會留下緩存。而緩存的最大特點,就是曾經存過什么數據,這些數據后續訪問就會變快。利用這個特點,攻擊者可以“騙”處理器把目標數據,比如賬號密碼讀入緩存中,然后遍歷一個外部數組,根據讀取速度的快慢來推導出讀入緩存的數據值。
鑒于漏洞的技術分析需要計算機、代碼等知識,比較復雜,感興趣的同學可閱讀文末的附錄。
三、華為云安全提供立體的防御手段
該漏洞出現在電子世界的地基上,但地基的修復是很困難的,有待于CPU廠商的設計和更新。因此,目前主要的修復方案是修復地基上層的建筑,比如云平臺操作系統、用戶虛擬機操作系統。漏洞雖然產生了世界性的影響,但對用戶來說,大可不必過于惶恐。
首先,華為云安全一直在與CPU廠商們積極溝通合作,不斷分析和嘗試給出更好的底層修復方案,以期徹底解決該漏洞。
其次,從云平臺來說,包括華為云在內的各云廠商,都已啟動了底層基礎架構的修復更新。華為云安全已于1月4日發布公告,將于1月11日0時啟動基礎平臺安全升級,方式為對用戶無感知的熱升級,正常情況下對用戶業務無影響。
再次,對用戶而言,漏洞原理及利用代碼雖已公開,但要在真實的云環境下利用起來,是非常復雜和困難的。而且華為云安全推出了漏洞消減服務,可幫助用戶對漏洞可能造成的威脅進行檢測及防御。
最后,包括華為云在內的各大云廠商,日常最重要的工作之一,即是例行地檢測和阻斷各種針對云的攻擊,保障云環境的安全穩定。華為云安全并配備了強大的專家團隊,隨時響應可能的安全事件。此次高危漏洞的爆發,華為云更加強了檢測和防護力度,安全專家7*24小時輪班值守。截止目前,尚未發現可在真實環境下攻擊成功,并造成明顯損失的漏洞利用代碼。
四、華為云安全與用戶同承擔、共進退
這兩組漏洞,危害之大,修復之難,前所未有。可以預見,未來一段時間,仍將是業界關注的熱點,但不管如何,華為云安全都堅定地站在用戶身邊,同承擔、共進退,持續對漏洞進行跟蹤、分析、研究,不斷推出更好的防護方案和服務,幫助用戶防護好業務數據。
***
附錄:漏洞技術分析
1、Meltdown漏洞分析
Meltdown對應漏洞庫編號為:CVE-2017-5754。結合業界公開的漏洞利用代碼,分析如下:
1、此段代碼運行在CPU用戶態模式下(cpl=3),且ptr指向一個內核地址空間的地址。
2、CPU在執行指令2時,會首先把數據讀取到緩存中(這時還沒有進行權限檢查)。
3、由于CPU的亂序執行特性,執行步驟2的同時,后面幾條指令也被會執行,且指令3和指令5的計算操作是根據 指令2讀取到的數據 執行的。
4、當CPU對指令2進行權限檢查時會發生一個訪問異常,之后執行的兩條指令的操作狀態會發生回滾,但Cache、TLB沒有回滾,這樣就繞過了CPU的權限檢查機制。
5、可以利用邊信道攻擊來探測哪些頁面被訪問過,結合特定的代碼場景,就可以推測出內核地址空間中的內容了。
2、Spectre漏洞分析
Spectre,對應漏洞庫編號:CVE-2017-5753/CVE-2017-5715。
1、正常情況下,當offset 大于array1->length時,下面的代碼永遠不會執行。
2、如果array1->length沒有被緩存,由于CPU分支預測的特性,CPU當前指令流水線會等待緩存加載完成,同時在另外一條指令流水線上,下一條指令“value = array1->data[offset]”會被預測執行。
3、一旦發現offset大于array1->length,預測執行的指令和結果將會被丟棄并加載正確的指令重新處理。
4、當array1->length和array2->length沒有被緩存時,exploit可以分別讀取 array2->data 0x200和0x300偏移處的數據,通過比較兩次訪問的用時,就可推斷執行的是哪條指令,從而推斷出value的低位值,而這個value正是上面越界讀取到的值,這樣就可以泄露任意內核地址空間的一位,這當然就可以構造出能讀取更多內存地址的exploit了。通常訪問用時更短的,說明數據已經被加載到了緩存,這也意味著分支指令被預測執行到了。
來源:華為微信云公眾號
云市場 華為云
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。