作者:騰訊湛瀘實驗室
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://zhuanlan.zhihu.com/p/32654221
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/500/
暫無評論