小心,Cache 側信道攻擊
密碼是一種用來混淆的技術,它將正常的(可識別的)信息轉變為無法識別的信息。現階段用戶的隱私信息大多是依靠加密技術實現,如登錄網站、電子郵箱、銀行取款等等。用戶信息的安全性依靠于加密算法的安全性。然而理論上的安全并不等同于物理實現上的安全。
側信道攻擊是利用密碼算法執行過程中泄漏的與內部運算緊密相關的多種物理狀態信息如聲光信息、功耗、電磁輻射以及運行時間等,再結合統計學手段等進行攻擊。近年來,側信道技術已經逐漸地從設備外部深入到計算機內部的CPU、高速緩存(Cache)、分支預測單元等等得到其中蘊含的敏感信息(如密鑰)。Cache攻擊是一種新型的側信道分析技術,它可以跨平臺、跨CPU、突破安全邊界對目標設備進行攻擊,對現有安全防護造成極大的威脅。另外,由于Cache側信道攻擊可以利用cache共享實施攻擊,因此具有不易發現且極難防御的特點。
Cache是什么?
Cache的學名是中央處理單元高速緩沖存儲器,由靜態存儲芯片(SRAM)組成,容量比較小但速度比主存高得多, 接近于CPU的速度。主要由三大部分組成:
?Cache存儲體:存放由主存調入的指令與數據塊。
?地址轉換部件:建立目錄表以實現主存地址到緩存地址的轉換。
?替換部件:在緩存已滿時按一定策略進行數據塊替換,并修改地址轉換部件。
Cache的作用
馮.諾依曼體系結構是現代計算機的基礎,現在大多計算機仍是馮.諾依曼計算機的組織結構。一個典型的馮諾依曼系統如圖1所示,包含下面幾大件:計算機由控制器、運算器、存儲器、輸入設備、輸出設備五部分組成。然而由于計算機技術發展,主存儲器速度比CPU處理速度慢得多,使得CPU的高速處理能力不能充分發揮,整個計算機系統的工作效率受到影響。為了緩和中央處理器和主存儲器之間速度不匹配的矛盾,計算機系統加入了Cache模塊,現代計算機CPU與內存和Cache基本關系如圖2所示 。CPU在Cache中找到有用的數據被稱為命中,當Cache中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。
圖1 馮諾依曼體系結構
圖2 最簡單的高速緩存配置圖
Cache結構
一般處理器的cache分三層,其架構如下圖3所示,L1 Cache一般分為Data Cache(數據緩存)和Instruction Cache(指令緩存),為每個核單獨占有。L2 Cache一般是每個核心單獨占有,或者兩個核心共享。L3 Cache一般在多核CPU中是所有核心CPU共用。訪問時間關系為T-(內存)>T--(L3)>T(L2)>T(L1)。
圖3 Intel cache架構
Cache側信道攻擊原理
多核之間cache數據共享,而cache命中和失效對應響應時間有差別,攻擊者可以通過訪問時間的差異,推測cache中的信息,從而獲得隱私數據。根據采集信息不同,cache側信道攻擊可分為時序驅動攻擊、訪問驅動攻擊以及蹤跡驅動攻擊。時序驅動攻擊需要獲得目標攻擊系統詳細配置參數,重建對照環境,利用統計分析方法,對照采集到的密碼算法一次加密/解密的整體時間,推測密鑰。蹤跡驅動攻擊需采集密碼算法執行過程中所有cache訪問命中和失效序列,再結合明文或密文推測密鑰,一般通過功耗檢測手段進行,但該手段需要特殊的信息采集設備而且需要物理接觸密碼設備,實現起來比較復雜。訪問驅動攻擊通過采集加密或解密過程中訪問的cache組集合,再利用數學分析方法推測密鑰,可以遠程實現,攻擊實現可行性較強。目前,cache側信道攻擊中訪問驅動攻擊實現最為簡單,影響范圍最大,以下將介紹其兩種主流的方法,Prime-probe方法和Flush-reload方法。
Prime-Probe(PP)方法
攻擊者首先在prime階段將特定cache組填充為自己的數據,然后等待目標虛擬機在Trigger階段使用被填充的cache 組地址,一些數據將被驅逐出cache,在probe階段重新讀取數據,驅逐的cache需要一個較長的讀取時間.因此,根據Probe 階段探測的cache重載時間,可以判斷目標虛擬機在響應服務時使用Cache地址。其方法具體步驟如下:
步驟1. Prime: 攻擊者用預先準備的數據填充特定多個cache 組
步驟2. Trigger: 等待目標虛擬機響應服務請求,將cache數據更新
步驟3. Probe: 重新讀取Prime 階段填充的數據,測量并記錄各個cache 組讀取時間
其主要攻擊原理如圖4所示。
圖4 Prime-Probe方法
Flush-Reload(FR)方法
Flush-Reload(FR)方法是prime-probe方法的變種,基于共享內存實現,是一種跨內核、跨虛擬機的Cache 探測方法。在Flush 階段,攻擊者將監控的內存塊從cache中驅逐出去,然后在Trigger階段等待目標用戶訪問共享內存。在Reload階段,攻擊者重新加載監控的共享內存塊。如果在等待的期間,目標虛擬機訪問過的內存塊需要重新加載,時間將會較短,因為這些數據已經被緩存在cache中。根據加載時間長短,可判定目標虛擬機訪問過的數據。Flush-Reload具體步驟如下:
步驟1. Flush:將共享內存中特定位置映射的cache數據驅逐
步驟2. Trigger:等待目標虛擬機響應服務請求,更新Cache
步驟3. Reload:重新加載Flush階段驅逐的內存塊,測量并記錄cache組的重載時間
其方法攻擊原理如圖5所示。
圖5 Flush-Reload方法
Cache側信道的攻擊發展
1998 年,Kesley 等人首次提出Cache 命中率可用于密鑰分析的思想,顛覆了傳統密鑰分析方法,引起了研究人員的廣泛關注。之后,研究人員以數據緩存、指令緩存作為研究對象,提出了多種可行的Cache 側信道攻擊方法,對算法安全性帶來了嚴重威脅。但大部分研究成果都是基于單機非虛擬化環境。直到2009年,Ristenpart等人首次提出在云環境中存在跨虛擬機cache側信道攻擊的安全威脅,并利用Prime-Probe 方法在Amazon EC2 云平臺中探測得到同駐虛擬機的Cache 負載狀態信息以及用戶擊鍵間隔時間信息等。2014年,Yarom提出第一個跨內核的cache側信道攻擊Flush-reload。其利用Intel X86處理器系統共享內存的漏洞,通過監測內存得到CPU處理的cache line。此種攻擊主要利用L3層cache實現攻擊,同時并不需要共享執行core。2015年,Liu和Irazoqu使Prime-Probe攻擊可以應用于跨內核的cache側信道攻擊。2016年,Irazaqui提出第一個可以跨CPU的AMD平臺的cache攻擊。攻擊環境逐漸從單核轉為跨核,從微處理器轉到云環境。
攻擊實例
在2015CCS大會上,Yossef Oren等人利用不安全的網站鏈接,探測得到用戶的鼠標和網頁活動信息,甚至可以利用受害者的正在訪問的網頁信息。此種攻擊可移植性強,不用安裝惡意軟件,可行性較高,攻擊原理如圖6所示。
圖6 利用JavaScript的cache側信道攻擊原理
在Europe 2016 Blackhat上,Moritz Lipp等人演示了如何從cache中得到信息確定用戶正在輸入的字符,演示情況如圖7所示,用戶輸入字符,攻擊者可以很快獲得相應的信息。
圖7 Moritz Lipp演示在智能手機上的cache 側信道攻擊
在USA 2016 Blackhat上,Taylor Hornby等人演示了如何從cache的側信道信息中得到其他用戶正在瀏覽的網頁,演示現場圖如圖8所示。
圖8 Taylor Hornby演示如何獲取受害者正在瀏覽的網頁
此外,伴隨著云服務越來越貼近生活,云用戶持續增多。云環境中同駐虛擬機cache資源共享也成為cache側信道攻擊的目標,近幾年針對云上安全的研究也逐漸增多。在CHES 2016,Inci,M.等人成功實現了在亞馬遜云上得到用戶RSA私鑰,現場如圖9所示。
圖9 Inci,M等人在CHES上講解攻擊原理
在2016 USENIX, Moritz Lipp等人上演示了如何在擁有trustzone安全環境的安卓手機上實施cache攻擊,得到精準的用戶信息,部分成果如圖10 所示。
圖10 利用cache模版側信道攻擊得到用戶輸入信息
在arXiv 2017 ,Schwarz,M等人在Malware Guard Extension: Using SGX to Conceal Cache Attacks一文中,利用SGX來隱藏cache攻擊(Intel聲稱的SGX可以消除側信道攻擊,并且推薦使用SGX保護加密計算),得到用戶的私鑰。一條跡的數據可以恢復96%的私鑰,11條跡可以恢復全部的私鑰,其攻擊原理如圖11所示。
圖11 在SGX可信執行環境下的cache側信道攻擊原理
總結
Cache側信道攻擊方法嚴重威脅加密算法的安全性,而且隨著云服務技術的大規模應用,虛擬化技術的普及,使得Cache側信道遠程攻擊更為隱蔽從而也更具攻擊力。Cache攻擊逐漸滲透到我們的日常應用中,智能手機的可信環境在此種攻擊方法下也存在嚴重安全隱患。安全問題日益突出,用戶的隱私需要更加完善的安全措施來保護。希望更多地研究學者加入我們的隊伍中,為隱私保駕護航。
【本文為51CTO專欄作者“中國保密協會科學技術分會”原創稿件,轉載請聯系原作者】