導讀:近日,國際頂級設計自動化大會DAC大會公佈DAC 2020會議議程和論文名單,由百度安全發表的《DRAMDig: A Knowledge-assisted Tool to Uncover DRAM Address Mapping》成功入選。
本篇論文介紹了由百度安全所研究設計的DRAM address mapping逆向工具——DRAMDig,能夠在平均7~8分鐘時間(最快僅需要69秒),快速、可靠地逆向出DRAM地址對映 ——Rowhammer攻擊實現的關鍵步驟。該工具可用來評估個人主機、雲端計算基礎設施是否受到Rowhammer攻擊的威脅。
DAC是以電子設計自動化(EDA)和嵌入式系統及軟體(ESS)為主題的國際公認的最頂尖學術會議,也是中國計算機學會(CCF)認定的A類會議,被譽為EDA界的奧斯卡。大會每年吸引全球知名的學者參與成果釋出和技術討論,近兩年論文接受率維持在20%左右。
圖1. 2020 DAC Accepted Papers
談到Rowhammer攻擊,整個安全行業一定都不陌生,2014卡內基梅隆大學 宣佈發現一種存在於動態隨機儲存器(下稱DRAM)的漏洞,藉助這項漏洞,攻擊者可以通過反覆載入記憶體的特定行來實現賬戶提權,研究一經發表,便掀起業內極大轟動,因為這表明了不管是PC、手機,不管作業系統是Linux、Windows··,幾乎所有搭載DRAM記憶體的X86構架CPU的裝置都會都會存在安全隱患,影響不言而喻。
那麼,今天我們就帶大家瞭解一下,究竟顛覆攻擊邏輯的Rowhammer到底是什麼?由百度安全研究員Minghua Wang和Yueqiang Cheng聯合Henry Zhang(來自澳洲Data61)所研究設計的對映逆向工具DRAMDig,又是如何快速、可靠地逆向出觸發Rowhammer攻擊的DRAM地址對映?
“一招通殺”所有裝置 ——Rowhammer攻擊原理
從硬體角度來看,計算機就是一個龐大的積體電路,由大量的電子管、繼電器和各種電氣元件組合而成。其中用來儲存資訊用的實體記憶體,就是我們上面提到的DRAM。就像去圖書館找一本書,你需要通過書的型別和編碼,定位到它在哪一個書架,哪一排,哪一格,DRAM裡想要找到儲存的某一資料,也有一套明確的訪問路徑:channel→DIMM→rank→chip→bank→cell。所以,計算機記憶體就是由無數個記憶體儲存單元(下簡稱cell)構成的電路板。
圖2.記憶體儲存單元cell結構
cell由一個電晶體和一個電容組成,就像一個小電池,每個cell存放1 bit資料,而計算機裡所有的內容,本質上都是一堆資料編碼,都可以用類似01010101001這樣的二進位制來表達——體現在cell上,電晶體通電狀態表示1,不通電狀態表示0。所以說,不管你在電腦裡存放的文件、照片,下載的遊戲、音樂程式,亦或是計算機本身的作業系統,其實歸根結底都是通過一定規則儲存在cell裡的“0”或“1”。
然而近年來,隨著人們生產生活對計算機儲存的需求要求更高,裝置廠商在不改變記憶體電路板面積大小的前提下,讓其能夠儲存更多的資料,只能將cell的設計越做越多,排列越來越近,密度大幅度增加,雖然製作工藝有所提升,但還是會存在一種假設,那就是相鄰的cell在執行中可能會受到干擾,如果頻繁“轟炸”某兩行(行話稱之為row),就可能會造成中間一排腹背受敵、上下夾擊,從而出現位元位翻轉,也就是0變成1,1變成0...
業內把這種上下敲擊的瘋狂操作,稱為double-sided Rowhammer test,而導致位元位翻轉的這個攻擊方式就叫做Rowhammer攻擊,Row是行,Hammer是反覆敲擊,如此簡潔明瞭,一針見血。
當然如果只是單純的瘋狂改寫資料,以此來搞破壞也過太小看Rowhammer攻擊的威力了,其實攻擊者的深層目標是利用Rowhammer攻擊來提升賬號許可權,獲得通往各路關卡的“通行證”。此前就有學者發現,通過rowhammer可以打破程式間隔離,user-kernel隔離,VM間隔離以及VM-VMM間隔離,從而獲得更多系統許可權。
再舉個例子,有攻擊者企圖獲取你的網銀支付密碼,但此類程式開發者為了安全起見,都會將諸如密碼、身份證號等核心資料,設立重重關卡,存放在金字塔的頂端,除了使用者自身,其他人無法觸及。而有了Rowhammer攻擊,雖然被設立關卡,攻擊者卻可以繞過這些,選擇通過更底層去找到儲存核心資料的cell,然後反覆敲擊其“隔壁鄰居”,引起位元位翻轉,來實現最終獲取支付密碼的目的。
說起來容易做起來難” ——Rowhammer攻擊難點
讀到現在,你是不是會有一個這樣的疑問,計算機記憶體裡密密麻麻分佈著cell,即使理解了Rowhammer攻擊的操作手法,如果不知道哪些cell裡隱藏著賬號提權的核心線索,一頓轟炸操作無異於隨機“抽盲盒”,能不能找到關鍵全靠運氣。
所以很長時間以來,對於Rowhammer攻擊的研究只停留在理論階段,歸根結底原因是:找到那最為關鍵的兩個row實在是太難了!
專業上,定位到最關鍵的兩個row需要解決的核心問題,是要找出DRAM核心資料所在的DRAM地址,其實也就是逆向DRAM地址對映(下簡稱DRAM address mapping)的過程。
上文我們講到過,在計算機裡,不管是什麼型別的檔案、資訊、資料,最終都會以0101011的形式被儲存在記憶體裡,程式執行中需要訪問到這些資料,只能通過虛擬地址來訪問。這些虛擬地址在作業系統中首先轉換成實體地址,然後實體地址再通過CPU中的Memory Controller轉為為DRAM中的地址。實體地址與DRAM中地址的對映關係是一段未公開的“咒語”,需要逆向分析來解決。
對此,百度安全研究員調研了的目前行業公開的所有DRAM address mapping逆向工具並做了分析,結果顯示這些工具的表現並不盡如人意,或是無法通用於各型別號的CPU,或是操作時間過長,需要數小時的時間,還有的甚至檢測多次,得出的結果前後不一致。
而此次即將在DAC大會上公開的,由百度安全所研究設計的DRAMaddress mapping逆向工具——DRAMDig, 能夠在平均7~8分鐘時間(最快僅需要69秒),快速、可靠地逆向出DRAM地址對映,並且通用於包括Non-ECC DDR3\DDR4記憶體條,以及當前市面上流行的Intel CPU(Sandy Bridge ~ Coffee Lake)。
更經得起推敲”—— DRAMDig工具核心原理**
目前已有逆向工具(如DRAMA)無法穩定、快速、準確逆向出DRAM address mapping,主要有如下幾個方面原因。首先,已有工具對DRAM自身資訊挖掘不到位,比如缺乏對bank數目、row/column位數的理解;其次,已有工具中存在實體地址盲目的隨機選取,導致逆向結果不穩定、不準確,同時存在大量的窮舉操作,導致較大時間開銷;最後,已有工具對interleaved mode形式的DRAM address mapping逆向能力有限。
由百度安全研發的新型DRAM address mapping對映逆向工具——DRAMDig,提出了Domain-knowledge assisted的方案,能夠充分挖掘、利用已有的knowledge來輔助逆向,使得最終得到的逆向結果準確、穩定、快速。Domain knowledge包括三個方面:
(1)DDR3/DDR4 Specification。我們從Specification中能夠獲取有關DRAM row/column bits的確切數量;
(2)系統資訊。通過程式來獲取DRAM中bank數量,系統的實體記憶體大小(實體地址中有效地址位數)等資訊;
(3)經驗觀察。我們認為Intel CPU上的bank定址採用的是線性XOR計算方式,參與XOR計算的是實體地址中的特定bits(稱之為bank bits)。例如,在某款Intel CPU,以及一個包含8個bank的DRAM的設定下,bank定址函式表示為:(BA0, BA1, BA2)。其中,BA0 = bit6⊗bit13, BA1= bit14⊗bit16,BA2=bit15⊗bit18。
DRAM address mapping逆向目標是確定實體地址到DRAM中地址的對映關係。包括兩個方面,第一,還原實體地址中bits的角色,即哪些是row bits,column bits和bank bits;第二,確定bank定址函式。圖3描述了DRAMDig的工作流程。在介紹具體流程之前,我們首先簡要介紹一個DRAMDig逆向所依賴的一個基本操作原語,它是DRAMDig工作的基石。
圖3. DRAMDig逆向流程
這個操作原語是一個timing channel。具體而言,這個timing channel是由同一DRAM bank中的row buffer衝突引起的。DRAM中每個bank都有一個row buffer來快取最後訪問到的row。如果一對地址在同一bank的兩個不同row中,交替訪問它們時row buffer將反覆重新載入、清除這兩個row,導致row buffer衝突。而如果兩個地址位於同一row或不同bank中,訪問這兩個地址時不會發生row buffer衝突。顯然發生row buffer衝突情況下,也就是兩個地址在同一bank不同row時,得到的latency更大。因此,根據兩個地址的latency測量結果的高低,可以判斷它們是否在同一bank不同row。
在這個操作原語基礎之上,我們來簡要介紹DRAMDig的逆向流程。主要分為三個階段。
第一階段,精心選取多對實體地址,利用timing channel進行latency測量,根據測量結果對row、column和bank bits範圍進行初步的劃分。首先從高到低考察實體地址中每個bit,選取僅有這個bit不同的兩個實體地址測量latency。如果是high latency,則說明它們在同一個bank不同row,當前只有1個bit不同,所以這個bit是row bit。然後選定1個row bit和一個非row bit,再選取僅有這2 bit不同的實體地址測量latency。如果是high則說明它們在同一bank不同row,這個非row bit不會是bank bit,而是column bit。這樣兩輪測量之後能夠得到row bits和column bits的位置範圍,剩餘的bits是bank bits。
第二階段,選取覆蓋bank bits所有取值情況的實體地址,再次利用timing channel來測量latency。將latency為high的地址劃分到一堆,最終這些實體地址將被劃分為#bank堆,同一堆實體地址都在一個bank中,而且每一堆的實體地址個數大致相同。然後依次在每堆中考察bank bits之間的XOR組合情況,找出堆中所有實體地址都滿足的bits XOR方式,作為候選bank定址函式。在所有地址堆都考察完畢後,將候選bank定址函式進行消元處理,得到最終的bank定址函式。
第三階段,確定具有多重角色的bits,這是由於存在interleave mode的定址情況,例如,有些bit既是row bit也是bank bit,有些bit既是column bit也是bank bit。還原多重角色row bits的方式是,考察2-bit的bank定址函式,選取僅有這2個bit不同的兩個實體地址,測量它們的latency。如果測量結果是high latency,則認為高位bit是row bit。對於多重角色的column bits,根據Domain knowledge和第一階段的還原結果,能夠獲知未還原的column bits數量(N)。在已還原出column bits的位置基礎上,按照從低到高的順序,將未還原數量(N)的bits認為是column bits。
由於DRAMDig選取了覆蓋所有bank bits取值情況的實體地址,不但能夠真實且完整揭示bank定址方式,而且能夠根據latency測量結果將這些地址均勻地劃分到#bank堆,保證了bank定址函式還原結果的準確性和穩定性。另外,DRAMDig僅需要在bank bits空間內的尋找bank定址函式,不需要在所有bits空間內窮舉,大大降低了時間開銷。
據介紹,百度安全利用DRAMDig在9臺具有不同CPU和記憶體設定的機器上進行了DRAM address mapping逆向實驗。實驗結果如表1所示。可以看到,實驗的CPU涵蓋Sandy Bridge、Ivy Bridge到Coffee Lake等多個新老微架構(Microarch.),記憶體條涵蓋DDR3和DDR4 (DRAM Type,Size),和包含多種DRAM設定方式(DRAM Config)。
表1. DRAMDig在9個不同機器設定上的逆向結果
其中Config表示如下引數:#channel,#DIMM/channel,#rank/DIMM,#bank/rank.
在這些逆向實驗中,最多需要17分鐘,最少需要69秒可以獲得逆向結果,如圖4所示。相比較逆向工具DRAMA而言,DRAMDig具備更短的時間開銷。其中,在第3和第7臺機器中,DRAMA花費了將近2小時都沒有輸出逆向結果。此外,百度安全研究員在實驗中發現,執行DRAMA多次,很大機率會出現每次逆向結果都不相同的情況,因此DRAMA在逆向結果的準確性和穩定性方面均無法保證。
圖4. DRAMDig和DRAMA逆向時間開銷(單位:秒)
在獲得逆向結果基礎之上,為進一步驗證,百度安全研究員還在多臺機器上進行了double-sided Rowhammer測試,並且和DRAMA進行了對比。使用兩個工具在不同的機器上分別進行了5次測試,每次測試5分鐘,最後統計bit翻轉的數量。可以從表2中看到,DRAMDig能夠產生更多的bit flips。有一些測試中DRAMA甚至沒有出現翻轉,而DRAMDig敲出了翻轉,這也能夠說明DRAMDig逆向結果的正確性。由此可見,準確的逆向DRAM address mapping對bit翻轉具有很重要的影響,對Rowhammer威脅評估具有非常關鍵的作用。
表2. DRAMDig和DRAM執行5次double-sided rowhammer測試,每次測試持續5分鐘。DRAMDig比DRAMA產生了更多的bit flip。
結語:毫無疑問,DRAMDig的誕生,大大提升了對DRAM address mapping逆向的效率和準確性,對於高效評估個人主機、雲端計算平臺等基礎設施是否受到Rowhammer攻擊的威脅有著重要意義。對於硬體廠商修復Rowhammer漏洞,提升晶片製作工藝,也提供了新的思路。據悉,百度安全正在計劃將DRAMDig開源。同時,百度安全也開放自身頂尖技術能力,以開放共享的姿態,歡迎整個行業上下游攜手一道,打破技術壁壘,推進安全生態建設,保護資料隱私安全。
瞭解更多專案資訊,歡迎關注【百度安全實驗室】公眾號