作者:騰訊湛瀘實驗室

0x00 簡述:

最近Intel CPU爆出兩個重大安全漏洞Spectre ,meltdown,漏洞廣泛影響1995年之后的處理器。intel cpu存在設計上的缺陷,導致攻擊者可以讀取系統(windows或linux)kernel的內存,不受系統權限的限制。Spectre ,meltdown漏洞由Google研究團隊ProjectZero發現,已經在2017-06-01把兩個漏洞報告給相關cpu廠商。ProjectZero團隊給出了有效的攻擊方法。漏洞編號CVE-2017-5753,CVE-2017-5715,CVE-2017-5754。

0x01 漏洞簡述:

該CPU漏洞可以讓攻擊者從用戶態任意讀取kernel的內存,徹底打破了由硬件保證的內存隔離,根據intel 白皮書描述,屬于可預測的邊信道攻擊方式(Speculative Execution Side Channel Methods)Speculative execution本身是現代處理器為了提高性能引入的機制,通過對程序控制流的預測,判斷哪些指令高頻度執行,CPU中會有一個指令分析池,專門分析程序控制流,這種預測可以提高處理器的并行性能,這種Speculative execution操作本身并不影響處理器的狀態,但是可以影響微處理器的狀態,例如:存儲在TLBs(Translate Look side Buffers) 和caches(緩存)中的內容。邊信道攻擊(Side Channel Cache Methods):邊信道攻擊和其他的安全漏洞不一樣,邊信道攻擊可以用來獲取系統的內存信息,但是這種攻擊不會修改也不會刪除內存數據。

0x02 漏洞原理:

Meltdown攻擊:

了解這個漏洞原理之前,需要了解一些基礎的計算機系統知識,包括系統亂序執行,地址翻譯,以及系統cache, Meltdown的攻擊目標是獲取內核的內存內容。筆者介紹一下這個攻擊主要利用的機制,為了把漏洞原理解釋清楚,筆者采用匯編偽代碼方式,假設:要讀取的內核地址為0xFFFF0000 該地址的內容為0x00000001首先構造如下代碼,代碼執行在ring3

{

1 ; rcx = kernel address  0xFFFF0000

2 ; rbx = probe array

retry:

3 mov al, byte [rcx]

4 shl rax, 0xc

jz retry

5 mov rbx, qword [rbx + rax]

}

由于代碼運行在用戶態,在指令3中,一個僅有普通用戶級權限的攻擊者訪問目標內核內存地址(存儲在寄存器rcx中),正常代碼邏輯會發生一個異常,原因是在用戶態訪問了內核地址,這一條指令將會觸發訪問異常,使得該指令和它之后的指令對寄存器的修改將被全部丟棄。但是在等待CPU完成執行該指令的同時,后兩條指令因為預測執行實際上已經被執行過了,并且此時的計算是根據指令3所讀取到的數據所進行,并不受CPU權限限制。指令4將會把這個數據乘以4096,并在指令5中將其作為offset來對數組probe array進行訪問。由于一個內存頁的大小是4KB,不同的數據將會導致不同的內存頁被訪問并存放到CPU緩存中。此后,另一個攻擊者進程就可以通過緩存側信道攻擊,來探測哪個內存頁被訪問過了,從而推斷出被訪問的內核內存數據。

原理如圖

之后利用緩存側信道攻擊

此時訪問頁面probe array page 1,和一個沒有被加入到cache的頁面,如果訪問頁面1的速度比較快,那就說明內核地址0xffff0000內容最低的bit為1,然后依次對每個位進行測試,得出任意的內核內存內容,完成信息泄漏。

Spectre攻擊:

Spectre攻擊利用了CPU的預測執行對系統進行攻擊。預測執行是另外一種CPU優化特性。但是攻擊方式相似,攻擊者通過控制目標程序的某個變量或者寄存器,使其讀取攻擊者指定的內存地址。這里攻擊者指定的內存地址的內容就是攻擊者試圖獲取的機密數據(比如用戶密碼)。如果目標程序中含有將這個機密數據作為內存訪問的指針或者數組offset,那么攻擊者就可以利用緩存側信道來提取被訪問的內存地址,進而提取目標機密數據。

0x03 攻擊與危害:

該漏洞不但影響Intel CPU系列產品,同時影響AMD系列CPU,本質上說,Meltdown和Spectra都是基于側信道的攻擊,主要用于信息泄漏,并不能對目標的內存進行修改。但是Meltdown攻擊打破了原有的權限限制,可以讀取操作系統中的任意內存,這就對云服務器以及個人電腦構成了很大的威脅。漏洞可以用于內存中某些重要內容的讀取,例如系統密碼hash,token等等。

0x04 漏洞的防御:

Meltdown和Spectre攻擊利用的是CPU微碼架構上的設計缺陷,短時間內很難通過處理器廠商升級修復漏洞。

針對此漏洞微軟做出修復方案,微軟分離了用戶態和內核態的CR3,在2017年11月的Win10 RS4測試版本上引入了Dual-CR3機制,來緩解這個漏洞。由于媒體的廣泛報道,微軟一月份的漏洞公告中提前推送了這個漏洞的補丁。

0xFF 參考文章:

https://spectreattack.com/spectre.pdf

https://meltdownattack.com/meltdown.pdf

https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html

https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/Intel-Analysis-of-Speculative-Execution-Side-Channels.pdf

https://zhuanlan.zhihu.com/p/32654221


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/500/