張偉娟 白 璐 凌雨卿 蘭 曉 賈曉啟
1 (中國科學院信息工程研究所 北京 100093)
2 (中國科學院大學網絡空間安全學院 北京 100049)
3 (四川大學網絡空間安全研究院 成都 610207)(zhangweijuan@iie.ac.cn)
近年來,信息安全越來越引起人們的重視.傳統的信息竊取技術通常從軟件系統實現漏洞入手,結合特定攻擊手段,對目標用戶敏感信息(如密鑰、口令等)進行竊取.然而,這類攻擊方式隨著軟件系統的更新有著時效性差、易防御等特性.相比之下,從物理信道中提取信息的側信道攻擊(side-channel attack,SCA)技術[1]通常基于設備物理架構特點實現,具有攻擊信道多樣、難以防御等特點,逐漸成為信息安全領域的研究熱點.
側信道攻擊技術最初針對加密設備提出,利用設備不同加密操作產生的時間差異、功率消耗差異或電磁輻射差異構造側信道,對加密設備進行攻擊,推測密鑰信息.之后,研究者將這種基于加密操作執行差異構造側信道,獲取密鑰信息的思想應用在處理器緩存,提出了緩存側信道攻擊技術.緩存作為處理器微結構的硬件組件,為不同進程所共享,給攻擊創造了條件.利用緩存構造的側信道攻擊巧妙且難以防御,其安全風險廣泛存在于普通用戶個人電腦及運營商服務器,被工業界和學術界廣泛關注和研究.
緩存側信道攻擊技術一般分為時序驅動(timedriven)緩存攻擊、蹤跡驅動(trace-driven)緩存攻擊和訪問驅動(access-driven)緩存攻擊[2].時序驅動緩存攻擊[1,3-5]依據執行加解密操作所消耗的時間差異來獲取用戶信息,實現密鑰恢復.蹤跡驅動緩存攻擊[6]依據用戶執行某個操作的能量消耗來推斷用戶信息,如攻擊者通過度量電量獲取用戶進程的緩存命中與未命中的訪問序列,從而獲取用戶敏感數據.訪問驅動緩存攻擊[7-11]依靠用戶訪問緩存時留下的訪問位置痕跡獲取用戶信息,攻擊者通過訪問與用戶共享的緩存來構造信道,通常為借助一個攻擊進程探測用戶進程在加解密操作執行前后對緩存特定位置訪問情況,進而恢復密鑰.在這3類攻擊中,時序驅動緩存攻擊的研究主要針對早期加密硬件;蹤跡驅動緩存攻擊通常需要一些物理接觸來獲取電量等數據,攻擊條件嚴格受限,難以進行遠程攻擊;訪問驅動緩存攻擊基于用戶進程對緩存的訪問蹤跡實現,攻擊粒度較細,攻擊條件較靈活,且近年來出現了很多新型攻擊,是緩存側信道攻擊研究的主流和熱點.
隨著緩存側信道攻擊的發展,其逐漸呈現攻擊場景復雜化、攻擊層次細致化、攻擊目標多樣化和攻擊原理精巧化的趨勢.在攻擊場景方面,從最初的處理器單核心攻擊發展到跨核心,從單機環境延伸到云環境,從單純針對緩存硬件的攻擊到利用新的硬件特性及安全機制進行攻擊;在攻擊實現層次上,隨著CPU的更新換代從開始的基于L1緩存的攻擊發展到針對L1、L2、最后一級緩存(last level cache,LLC),甚至基于轉址旁路緩存(translation lookaside buffer, TLB)等的攻擊;在攻擊目標上,從單純的密鑰提取擴展到對關鍵內存、鏈接、口令甚至隨機數的提取;在攻擊原理方面更是多種多樣,目前出現的典型攻擊及其變種多達數十種.本文對緩存側信道攻擊研究進展進行追蹤,并在攻擊場景、攻擊層次、攻擊目標和攻擊原理方面做了系統分析.
在緩存側信道攻擊防御方面,本文從攻擊防御的不同階段出發,分析了攻擊檢測和防御實施2部分研究工作.在防御實施階段,按照不同防御技術原理,分別從緩存隔離、緩存訪問隨機化、緩存計時破壞、漏洞分析與修復等方面進行了防御技術的歸納總結.
本文接下來首先對攻擊中利用的CPU緩存等組件工作原理予以介紹,并對信息系統中的緩存側信道攻擊風險進行分析;其次對緩存側信道攻擊進行分類,從攻擊場景、攻擊層次、攻擊目標和攻擊原理方面對緩存側信道攻擊進行系統分析;再次根據防御原理對緩存側信道攻擊的防御方法進行介紹;最后提出緩存側信道攻擊與防御技術未來可能的研究方向,并對全文進行總結.
為充分理解緩存側信道攻擊原理,本部分首先對緩存的組成、特性及工作機制進行介紹.以x86架構為例[12],最早的緩存只有L1緩存,L1緩存的訪問速度與寄存器接近.隨著CPU性能的進一步提升,在L1緩存與主存間逐漸引入了更大的L2和L3緩存,其中L3緩存又稱為LLC.L1緩存根據緩存內容又分為數據緩存和指令緩存,數據和指令都具有的緩存則稱為聯合緩存.在現代計算機系統中緩存結構如圖1 所示.
緩存的映射方式為3種:直接映射緩存、全相聯映射緩存和多路組相聯映射緩存,這3種方式各有優勢.現代系統出于功性能的綜合考慮,一般采取多路組相聯映射緩存設計.如圖2 所示,多路組相聯映射緩存首先被分為s個組,每組包含n路緩存,也稱作n個緩存行.內存數據以地址為索引分別映射到不同緩存組中,系統根據緩存組的使用情況選擇具體映射在哪個緩存行.由圖2可以看出,不同內存數據可能會映射在相同的緩存組中,當該緩存組所有緩存行都被占用時,下次CPU訪問的數據要映射在此緩存組時,就會發生緩存行的換出.

Fig.1 Cache architectures圖1 緩存架構
此外,還有一類較為特殊的緩存—TLB,它用來緩存虛擬地址到物理地址的轉換,由硬件內存管理單元(memory management unit, MMU)所管理.在Intel架構處理器中,TLB也分為2級緩存.當攻擊者與用戶共享TLB時,攻擊者同樣可進行側信道攻擊[1,13].

Fig.2 Multi-way set-associative mapping cache structure圖2 多路組相聯映射緩存結構
信息系統中存在的緩存側信道攻擊風險主要體現在3個方面:
1)緩存狀態可探測
信息系統中攻擊進程可以通過特定方式對緩存狀態進行探測.首先,由于硬件設計上的特性,緩存在不同進程之間共享,且緩存的分配和映射有一定規律,攻擊者可以利用這些規律設計實現有效的緩存監測方案.其次,程序在訪問各級緩存及內存時訪問時間存在一定差異,通過訪問時間差異可推斷緩存命中與否,從而監控緩存的使用情況.最后,還可以基于其他硬件特性,如事務同步擴展(transactional synchronization extensions, TSX)對緩存進行監測.TSX事務性內存的原子特性決定了當TSX事務中讀取的緩存行被從緩存中驅逐時,會引發事務中止.一旦中止發生,就意味著有其他進程訪問該緩存行[14].攻擊者可以利用這一特性監控目標進程對特定緩存的使用狀況,進而進一步提取信息.緩存狀態可探測是構建緩存側信道的根本.
2)可利用的硬件結構特性
緩存側信道攻擊的實施通常會借助硬件或軟件設計的特性,結合構造的緩存側信道來進行信息提取.在硬件特性方面最典型的為微體系結構特性中的CPU亂序執行和CPU分支預測執行,這2個執行的代表性攻擊為Meltdown[15]和Spectre[16].CPU亂序執行時允許在錯誤指令的未授權結果上進行計算,Meltdown攻擊利用這點來暫時繞過硬件安全策略,從而泄露敏感數據.Spectre攻擊則利用CPU分支預測執行的特性,通過反復訓練引導目標進程執行特定的路徑,暫時繞過軟件定義的安全策略(邊界檢查、內存存儲等),進而泄露機密信息.這2類攻擊后續衍生出大量的變種[17-21],均基于微體系結構特性構建.
3)可利用的程序設計特點
在信息系統軟件特性利用方面,攻擊者通常需要對密碼算法、敏感程序在設計實現上具有的緩存訪問特征進行分析,進而設計和構造側信道攻擊方法.以密碼算法實現為例,針對非對稱密碼算法RSA的攻擊可基于緩存狀態對其函數調用序列進行監控.RSA算法的實現主要為模冪運算,加解密進程在執行時會基于密鑰的比特位將模冪運算分解為“平方—乘”或“平方—乘—模—乘”操作.Yarom等人[22]提出的攻擊中通過逆向OpenSSL二進制文件,找到了其平方/平方乘操作代碼分別對應的內存地址,利用Flush-Reload[11]方法對加密算法的操作地址進行緩存探測,結合緩存命中與未命中的時間分析推斷目標的具體操作.
綜上,在緩存共享的前提下,攻擊者可以結合軟硬件特性進行巧妙地構思,實現多種場景下的緩存側信道攻擊.隨著信息系統的不斷發展,其引入的緩存側信道攻擊風險也在不斷變化.
本節從緩存側信道攻擊的場景變化、實現層次、攻擊目標和攻擊原理4個方面對近年來的研究工作進行分類介紹.
緩存側信道攻擊是Page[23]在2002年提出,這一研究是對Kelsey等人[24]在1998年提出的利用加密算法實現特點構造側信道獲取用戶密鑰這一想法的擴展.在此之前,利用側信道攻擊獲取密鑰的想法被認為理論性強于可操作性,并且難以實際應用,可以說是處于萌芽階段.
緩存攻擊的早期研究工作主要集中于單機環境.在CPU單核心時代,同步多線程技術的出現使得緩存攻擊具有了較強的可操作性[9].后續隨著CPU架構的發展,CPU開始出現多核心和多級緩存,緩存側信道攻擊也從一開始的L1逐漸擴展到L2,L3,并出現跨核心的緩存攻擊.隨著計算機硬件架構的復雜化,基于TLB,MMU等模塊的緩存攻擊也逐漸出現.此外,緩存側信道攻擊還呈現多平臺化,如針對AMD,ARM架構[4]的攻擊.2016年,Irazoqui等人[25]提出了跨CPU的細粒度緩存攻擊,在AMD Opteron處理器和ARM架構處理器上實現緩存側信道攻擊.同年,Lipp等人[26]提出針對移動端設備的緩存攻擊ARMageddon.
隨著虛擬化技術的發展,云計算應用領域的興起,出現了針對虛擬化和云環境的緩存側信道攻擊研究.2009年,Ristenpart等人[10]提出了在云環境下跨虛擬機的側信道攻擊方法,并以Amazon EC2云平臺為研究對象進行了實驗.Ristenpart提出的跨虛擬機緩存側信道攻擊利用Prime-Probe攻擊方法來探測EC2實例的緩存使用情況.在這項工作中,攻擊者獲取信息的粒度較粗,只能獲取到目標虛擬機的緩存使用概況,推測出鍵盤按鍵信息,攻擊效果還不足以從中獲取密鑰等信息.2012年Zhang等人[7]對跨虛擬機訪問驅動型緩存側信道攻擊的構成及實現進行了詳細的分析,且在攻擊者與目標同駐條件下能夠達到細粒度的信息獲取,分析出目標的完整私鑰.
此外,還有一些緩存側信道攻擊針對可信環境,如軟件保護擴展(software guard extensions, SGX)[27]展開.SGX的攻擊面較小,這種攻擊通常需要很強的攻擊模型,如具有操作系統特權級的控制.一些傳統緩存側信道攻擊方法在SGX環境同樣有效[28-31],這些攻擊需要的攻擊條件非常苛刻,其假設為攻擊者可以控制整個系統資源進行攻擊.有研究者將Prime-Probe緩存攻擊方法應用于SGX環境,在CPU配置開啟超線程使攻擊者與目標Enclave①SGX允許應用程序初始化一個Enclave,Enclave是一塊硬件隔離的可信內存區域,可以為應用程序的敏感部分提供硬件增強的機密性和完整性保護,實現不同程序間的隔離運行。進程運行在同一核心并共享緩存,在此基礎上結合操作系統提供的中斷服務實現與目標進程的同步,攻擊者結合以上攻擊條件獲取加密程序的密鑰.另外還有利用Pagefault[32]中斷構造側信道,對運行在不可信操作系統但認為硬件及虛擬化層可信的內存隔離環境進行攻擊,攻擊可以獲取目標環境的文本及圖片信息.之后,Bulck等人[33]在此基礎上又提出一種更加隱蔽的方法,能夠不依賴于Page-fault獲得Enclave所訪問的頁面信息.Lee等人[34]提出一個利用CPU分支預測單元構造側信道攻擊的方法Branch Shadowing.Schwarz等人[29]則從另一個角度出發,認為若惡意軟件利用SGX為Enclave提供的安全隔離機制,將攻擊行為隱藏在惡意Enclave中,則可以構造更加隱蔽的Enclave-Enclave之間的攻擊.多項研究工作表明,在TLB到動態隨機存取存儲器(dynamic RAM,DRAM)范圍都存在對SGX的側信道攻擊的潛在攻擊向量[35-40].攻擊者可以利用 TLB、行填充緩沖區(line fill buffer, LFB)、頁表項(page table entry,PTE)、page屬性位等機制構建側信道,實現較為隱蔽的攻擊.
研究者在SGX環境下對CPU指令特性也進行了深入的挖掘與利用,Foreshadow[41]和SgxPectre[42]分別是在SGX環境下利用Meltdown和Spectre漏洞的攻擊變種.這些研究工作從另一方面也說明,即使是在具有很強安全隔離的可信環境中依然無法避免緩存側信道攻擊.
對于CPU核心內部的L1和L2級緩存攻擊而言,攻擊者與目標運行于同一核心,這類攻擊主要利用Intel在2002年提出的超線程技術(hyper threading)實現.超線程技術使得單核心處理器允許同時執行2個線程,提高了處理器的效率.2個線程若共享某計算或存儲資源時會產生資源爭用,攻擊者通過與目標進程爭用L1,L2緩存而實現攻擊.在能夠利用L3緩存實現攻擊之前,緩存側信道攻擊的研究主要集中于利用L1緩存(I-cache和D-cache),而L2緩存與L1緩存在容量和速度上差異不大,研究相對較少[10].
I-cache是L1緩存中負責存儲處理器最近所執行指令的組件,Acii?mez[43]表明其可利用I-cache恢復RSA算法的1 024 b密鑰, 實現對OpenSSL (version 0.9.8d)的攻擊.Acii?mez使用的緩存探測方法是Prime-Probe,先用空指令占滿指令緩存繼而探測緩存使用情況恢復密鑰.此后,又相繼出現了對OpenSSL 不同實現方法的I-cache層面緩存攻擊[44-45].
D-cache在L1緩存中負責存儲最近處理的數據,因而也常被攻擊者利用進行敏感信息的恢復.如利用D-cache恢復同駐于同一核心的進程信息[9].2006年,Osvik等人[8]提出利用L1 D-cache的Prime-Probe和Evict-Time攻擊方法,實現了針對AES的密鑰恢復.同年,Neve等人[46]通過操作系統調度在單線程處理器上實現L1 D-cache側信道攻擊.2011年,Cache games[11]針對L1緩存,利用中斷在同核心實現攻擊者與OpenSSL AES加密線程同步恢復密鑰的緩存側信道攻擊.2012年,Zhang等人[7]使用L1數據緩存實現了跨虛擬機的攻擊,在實驗環境跨虛擬機獲取ElGamal解密密鑰.
由于L1 I-cache或D-cache為單核心所有,攻擊者與目標同駐于同一核心比較困難,一定程度上限制了攻擊的實際應用效果.隨著基于L3的緩存側信道攻擊的出現,攻擊逐漸具有實際效果.2014年,Yarom等人[22]提出Flush-Reload攻擊方法,該方法利用了LLC和內存頁的共享,攻擊可跨進程、CPU核心和虛擬機獲取泄露的信息,且攻擊粒度細,可以監控到單個內存行.隨后,Flush-Reload攻擊方法被擴展應用到對其他加密算法的攻擊[47-48]和在云環境中跨虛擬機(VM)的攻擊[49-51],更進一步還有研究者將該攻擊方法擴展到ARM處理器[26,52]和瀏覽器[53]中.2015年,Liu等人[54]提出了一種針對L3緩存的Prime-Probe側信道攻擊方法,這一方法能夠獲取較高的攻擊分辨率,且能夠在跨核及跨虛擬機環境下進行攻擊.Gruss等人[55]提出緩存模板攻擊,可自動分析和利用任何程序中基于緩存的信息泄露.2016年,Kayaalp等人[56]提出一種高分辨率的LLC側信道攻擊,與Flush+Reload相比,使用限制條件較少.
2017年,Gras等人[57]針對MMU執行的虛擬地址轉換進行攻擊,提出一個新的Evict-Time緩存攻擊AnC.這種攻擊方法利用在虛擬地址翻譯中會查找頁表并將其緩存在共享緩存中的實現特點,在目標MMU查找頁表后推斷目標所訪問的緩存組從而獲取信息.AnC是首個針對硬件組件MMU的攻擊方法,其攻擊場景是構造惡意JavaScript代碼獲取瀏覽器的地址空間.與之類似,Schaik等人[58]在2018年提出了一種基于MMU進行間接緩存攻擊的方法,攻擊者利用MMU在進行地址轉換操作時會將頁表的部分信息緩存在固定緩存組中的特性,結合Evict-Time、Prime-Probe攻擊原理設計了新型攻擊,這種間接攻擊方法可以繞過基于緩存隔離的防御方法.
2018年,Gras等人[13]提出了基于TLBs的攻擊方法TLBleed.這一方法通過逆向Intel處理器地址映射函數,并結合機器學習的方法實現.該方法表明即使用戶采用一些防御緩存側信道攻擊的方法,如CAT(cache allocation technology),但攻擊者仍可以通過TLB-leed攻擊探測細粒度的目標信息.因為TLB緩存為每個核心所獨有,攻擊需攻擊者與目標同駐于1個核心,當攻擊者與目標共享1個核心時可利用共享的TLB構建側信道進行攻擊.2019年,Canella等人[59]發現了新的TLB側信道——Store-to-Leak ,并提出利用該側信道的Fallout攻擊.實驗證明,Fallout可破壞內核地址空間布局隨機化,泄露由操作系統內核寫入內存的敏感數據.2020年,Schaik等人提出CacheOut[39]攻擊,并針對SGX環境進行改進提出SGAxe[40]攻擊.CacheOut攻擊利用TLB與L1數據緩存之間的隱藏交互行為,克服了以往微體系結構數據采樣(microarchitectural data sampling, MDS)攻擊在控制和可用性上的限制.攻擊者可利用此新漏洞來選擇要泄露的數據,而不必等待數據可用,同時還可控制泄露地址.
隨著計算機技術的發展,現代計算機系統單個處理器擁有核心的數量在增加,單個系統擁有的處理器數量也在增加,即使是移動平臺也常常擁有至少2個單獨的處理器.2016年,Irazoqui[25]提出了跨CPU的細粒度緩存攻擊,該方法基于現代處理器和多處理器系統緩存一致性協議來實現側信道攻擊,不依靠特定的緩存結構,可以達到恢復AES和ElGamal密鑰的攻擊效果.
綜上,隨著CPU和攻擊場景的變化,緩存側信道攻擊的實現近年來有從基于傳統的L1/L2,L3級緩存向TLB,MMU等更小的緩存單元甚至跨CPU發展的趨勢,攻擊層次逐漸多樣化,圖3對緩存側信道攻擊場景和攻擊實現層次變化進行了總結.
民族唱法美聲化,美聲唱法民族化,是中西文化相互融合、互相影響的結果,也是我國聲樂教育發展取得的一大成果。這種“洋為中用”的做法使得我國聲樂更加成熟化、科學化、國際化。這樣在保留自己本民族特點的基礎上進行學習、借鑒、改革對于我國民族聲樂的發展,具有很重要的意義。

Fig.3 The development of scenarios and levels of cache side-channel attacks圖3 緩存側信道攻擊場景和層次的發展
緩存攻擊的目的通常為探測和信息竊取,攻擊的目標多為包含敏感信息的程序或系統模塊,如含密碼算法的程序或加密庫、用戶名/口令文件、關鍵內存、目標系統運行情況等.本節對緩存側信道攻擊關注的攻擊目標做歸納總結,為針對緩存攻擊的系統安全性提升提供參考.
1)含密碼算法的程序或加密庫
緩存側信道攻擊的最典型的攻擊目的是提取加解密過程中的密鑰,因此最常見的攻擊目標為包含密碼算法的程序或加密庫,如OpenSSL,GnuPG,GnuTLS,Libcrypt,CyaSSL,MatrixSSL,PolarSSL 等.密碼算法通常可分為2類,即對稱密碼和非對稱密碼.對稱密碼算法的加密過程和解密過程均采用同一密鑰,且加解密過程是“對稱”的,典型的算法有AES,DES等.研究人員實現了針對AES的緩存側信道攻擊等[61]、針對OpenSSL中AES密鑰的提取[8,62-63]攻擊等.非對稱密碼算法又稱公鑰密碼算法,采用公私鑰對將加密和解密功能分開,主要用途為加密和簽名,典型的算法有RSA、橢圓曲線等.研究人員實現了對GnuPG中RSA密鑰的提取[22,64]、Libcrypt中ElGamal解密密鑰提取[4]、OpenSSL中ECDSA簽名破解[48]等.
2)用戶名/口令文件
文獻[49]中提到借助Flush-Reload緩存側信道攻擊方法,實現基于密碼重置方式的用戶賬號竊取、購物車信息竊取等.RIDL[37]是一類新的預測執行攻擊,可以跨地址空間和特權邊界泄露任意數據,其中包括跨虛擬機邊界.攻擊者通過反復嘗試用SSH進行身份驗證,結合Flush-Reload攻擊方法提取目標虛擬機/etc/shadow文件,進而提取用戶口令.
3)關鍵內存數據
Meltdown[15]攻擊利用現代處理器亂序執行漏洞,結合Flush-Reload緩存側信道攻擊方法實現任意內核內存的讀取.Spectre[16]攻擊基于分支預測執行技術實現對應用程序間隔離性的破壞,使攻擊程序有機會訪問到其他應用程序所使用的內存空間.研究人員還實現了繞過地址空間布局隨機化機制對內存地址空間布局進行推測[59,65].如文獻[66]設計的攻擊方法,可以在攻擊者進程或是用戶級目標進程的分支指令間利用分支目標緩沖區(branch target buffer,BTB)沖突來影響攻擊者代碼執行時間,進而推斷目標進程或內核地址空間分支指令的位置,獲取內核和用戶級應用程序的內存地址分布.
4)目標系統運行情況
部分緩存側信道攻擊的目的是探測目標系統運行情況,例如目標系統運行的操作系統、關鍵軟件、瀏覽器頁面等.目標系統可以是與攻擊進程同駐的虛擬機,也可以是遠程連接的操作系統.Irazoqui等人[67]給出基于Flush-Reload攻擊方法對同駐虛擬機的加密庫進行探測的攻擊,該攻擊可以檢測并區分多種加密庫,包括 MatrixSSL,PolarSSL,GnuTLS等,還可以對加密庫的版本進行區分.Shusterman等人[68]提出對瀏覽器頁面的攻擊,該攻擊探測同駐虛擬機內部瀏覽器頁面信息,瀏覽器類型包括Chrome (Win,Linux),Firefox (Win,Linux),Safari MacOS,Tor Linux.
本文對2002—2020年共66篇緩存側信道攻擊文獻①文獻主要來自dblp數據庫,此外還有部分其他在線資源。中攻擊目標進行統計分類,4類攻擊目標所占比例如圖4所示,可見含密碼算法的程序或加密庫為攻擊者的首要攻擊目標.

Fig.4 Statistical analysis of targets of cache side-channel attacks圖4 緩存側信道攻擊目標統計分析
目前從攻擊原理來分,現有的緩存側信道攻擊主 要有 Evict-Time,Prime-Probe,Flush-Reload,Flush-Flush,Evict-Reload,Prime-Abort,Reload-Refresh 這7 種.表1對各類型緩存攻擊的探測方法進行了對比總結.
2.4.1 Evict-Time
Evict-Time[8]攻擊方法在2006年被提出,是比較早期的Cache計時攻擊.該攻擊在單機單核心環境下恢復出了完整的AES密鑰,其攻擊步驟有3個:
1)目標進程執行加密操作并測量所需時間.
2)Evict.攻擊者通過訪問自身內存空間,驅逐部分目標進程執行加密操作時占用的緩存.
3)Time.攻擊者再次觸發目標進程進行加密運算,測量完成加密所需要的時間.
該攻擊基于AES算法的查表操作實現.在執行步驟1)之后,目標進程在加密時所用到的全部T表②在實踐中,T表通常是提前算出然后作為一個常量數組編碼在密碼算法軟件的實現代碼中。這樣,就可將繁瑣的運算過程變成對于計算機而言簡單高效的查表和按位運算。內存塊被加載入內存;步驟2)中攻擊進程通過訪問特定內存塊,驅逐目標進程部分緩存,例如驅逐的恰好是T表某元素p映射到的緩存組,則p將被換出緩存;步驟3)對同樣的明文以預測的密鑰key′再次執行加密操作,若執行時間變長說明在此密鑰下查找了此前被換出的T表元素p,以此推斷密鑰key′為密鑰key的可能性,并通過進一步分析推斷完整密鑰.該攻擊對目標進程的T表加載空間做了大量先驗測試,并在明文已知的前提下通過多次測試來實現密鑰恢復.

Table 1 Comprehensive Comparison of Cache Side-Channel Attacks表1 不同緩存側信道攻擊技術的綜合比較
2.4.2 Prime-Probe
Prime-Probe[8-9]同樣是在2006年提出的Cache計時攻擊,它與Evict-Time方法的區別在于它度量的是攻擊者訪問自身內存塊所需的時間,這一特點也使得Prime-Probe攻擊方法更容易應用于實際場景中.具體攻擊步驟有3個:
1)Prime.攻擊者通過訪問內存塊填充緩存.
2)等待.攻擊者等待一段時間,在這期間目標進程將執行自身代碼,訪問內存數據.
3)Probe.攻擊者再次訪問在步驟1)用來Prime緩存的內存塊,測試訪問時間.
攻擊者需要確定一個區分內存訪問和緩存訪問的時間閾值,還需設計一個驅逐集(映射到同一緩存組,同時分別駐留在不同緩存行的一組地址).攻擊者在步驟1)中首先利用準備好的數據填充緩存集,等待目標進程運行之后,再次對先前準備的數據集進行訪問,根據訪問的時間差異判斷目標進程對于緩存的訪問.如果目標進程沒有訪問目標緩存集中的數據,則攻擊者對該緩存集的訪問會緩存命中,則訪問時間短;反之,則訪問時間長.通過監控目標進程對緩存的使用狀況,攻擊者可以推斷目標進程的敏感信息,如密鑰等.Prime-Probe攻擊以單個緩存集為目標,可以檢測目標進程對指令或數據的訪問,還可以跨虛擬機實現[7,10].Prime-Probe攻擊最開始基于L1緩存實現,之后擴展到L3緩存.Liu等人[54]的研究提出了新的算法使Prime-Probe緩存探測方法在L3緩存上的應用得以實現,在跨虛擬機的側信道攻擊中成功獲取密鑰.
2.4.3 Flush-Reload
Flush-Reload攻擊方法在2011年提出[11],隨后又發展出了跨核的攻擊[22,67].Flush-Reload方法是較為細粒度的攻擊,攻擊者可以比較準確地獲取特定內存位置是否被緩存的情況,Flush-Reload攻擊方法條件比較苛刻,要求攻擊者與目標共享某塊使用到的物理內存,例如共享庫文件.假設攻擊者與目標共享內存塊b,具體攻擊步驟有3個:
1)Flush.攻擊者使用 clflush 指令清空內存塊b所映射的緩存內容.
2)等待.攻擊者等待目標運行一段時間.
3)Reload.重新加載指定內存塊b,測量并記錄數據塊的重載時間.
步驟1)保證了下一次訪問b時需要再次讀取內存,同時clflush指令會將各級緩存中的b都清空.在步驟2)中,攻擊者等待目標執行代碼片,期間目標可能會訪問到在步驟1)時換出緩存的數據塊b.步驟3)攻擊者利用rdtsc指令度量再次訪問數據塊b所需的時間,若所需時間超過某個閾值則認為在步驟2)中目標并沒有訪問到這塊數據,否則表示目標在運行時訪問了數據塊b.同樣地,攻擊者通過這種方式監控目標進程對緩存的使用狀況,從而推斷目標進程的敏感信息.
Flush-Reload攻擊方法將訪問驅動型緩存側信道攻擊技術繼續向前推進了一步,它不僅將攻擊從單一核心擴展到了跨核心,同時還提高了信息獲取粒度,將探測緩存的粒度從緩存組(在x86架構中一般為4路256 B或8路512 B)層面提升到了緩存行(在x86架構中一般為64 B).因為具備跨核心和細粒度這2點優勢,Flush-Reload方法與之前的側信道攻擊研究相比其攻擊性更強也更加危險.
2.4.4 Flush-Flush
Flush-Flush[69]攻擊方法是Flush-Reload方法的變種,它的實現同樣需要滿足與目標共享內存的條件.它利用clflush指令在清空緩存時所用時間的差異探測信息,當緩存位置有緩存數據時執行時間長,反之則短.具體的利用方式為:
1)Flush.攻擊者執行clflush指令清空與目標共享的內存塊所映射的緩存行.
2)等待.攻擊者等待目標運行一段時間間隔.
3)Flush.攻擊者循環執行clflush指令,并使用rdtsc指令度量clflush指令的執行時間.
當被清除的數據為緩存命中時,clflush指令的執行時間長,反之若為緩存未命中則執行時間短.攻擊者通過測量clflush指令的執行時間推測內存數據是否被換入緩存,即目標進程是否訪問了該內存塊數據.Flush-Flush攻擊測量緩存是否命中的時間差異較小,因而準確率比Flush-Reload低,但其攻擊相對隱蔽,且可以繞過部分基于硬件性能計數器的緩存側信道攻擊檢測方法.
2.4.5 Evict-Reload
Evict-Reload[26,55,60]攻擊同樣是Flush-Reload方法的變種,它將clflush指令用緩存驅逐(cache eviction)的方式代替,使得在無法執行clflush指令的環境或架構下仍然可以利用Evict-Reload方法進行緩存信息探測.具體攻擊方式為:
1)Evict.通過訪問大塊內存,如較大的數組,將目標緩存組換出.
2)等待.等待受害者進程的運行.
3)Reload.重新訪問目標地址,測量訪問時間,做出判斷.
這種攻擊方式下要從緩存中驅逐特定的緩存組,需要結合緩存映射方式和替換策略進行設計,通過訪問特定內存地址來填充緩存,驅逐目標地址.根據不同CPU緩存替換策略、所需的地址數量和訪問模式,實現緩存驅逐的方式可能會有所不同.
2.4.6 Prime-Abort
Prime-Abort[14]是一個不依賴于時間計數的緩存信息探測方法,它利用了Intel TSX[70]中事務性內存特性.當目標進程訪問特定地址時會引起行為中止(Abort),因此可以依靠TSX這一特點監測對某些共享內存塊的寫操作,監測同一核心上的進程讀寫操作,或是監測同一處理器上的進程讀寫操作.具體的利用方式為:
1)Prime.攻擊者開啟TSX事務,用自己的內存塊將緩存填滿,即Prime.
2)等待.攻擊者等待一段時間,這個間歇目標進程將執行自身代碼,訪問內存數據等,目標進程的執行將會引起數據在緩存的換入/換出,由于TSX原子操作的緣故會導致事務Abort的發生.
3)Abort.攻擊者檢測事務Abort的發生,以此推斷目標進程訪問了特定緩存組.
與傳統緩存攻擊相比,它具有不依賴時間計數的優勢,可以繞過基于計時干擾的攻擊防御方法.另外,基于TSX機制,目標進程對特定緩存的訪問行為會實時觸發攻擊者的監測,解決了攻擊者在探測目標行為時與目標進程難以同步的問題.
2.4.7 Reload-Refresh
Reload-Refresh攻擊[71]在2020年被提出,該攻擊巧妙地利用緩存替換策略,在不強制驅逐目標進程數據的情況下,跟蹤目標進程的緩存訪問.這一攻擊同樣需要攻擊進程和目標進程共享目標內存(即攻擊的目標內存空間),攻擊進程還要事先準備好一組替換目標內存的內存條目,稱為驅逐集,并執行4個攻擊步驟:
1)準備.攻擊進程首先將目標內存讀入緩存,然后逐條加載驅逐集,保留一個監控條目(目標地址),作為緩存策略的驅逐候選者.
2)等待.等待目標進程執行,若目標進程訪問了目標地址,則目標地址不再是驅逐候選者;若沒有訪問,則目標地址仍然是驅逐候選者.
3)Reload.攻擊進程加載之前保留的監控條目,使得緩存集中發生沖突,緩存要依據替換策略驅逐緩存條目.攻擊進程重新讀取目標地址,可根據讀取時間判斷該地址是否被替換,從而推斷在上一階段中是否被目標進程訪問.
4)Refresh.將緩存的狀態恢復到步驟1)的狀態,進行下一次迭代.
攻擊成功實施的前提是要知道當前運行環境中緩存的替換策略.所以在攻擊開始之前,需要對目標進程運行的處理器進行測試,以確定該處理器使用的是哪一種緩存替換策略,并根據策略構建目標地址的驅逐集.
隨著緩存攻擊的不斷出現,針對緩存攻擊的防御方法也在同步發展.本節將針對緩存攻擊的防御分為2個階段:1)針對緩存側信道攻擊的檢測;2)防御技術的實施.針對緩存攻擊的檢測可在攻擊發生之前或攻擊的初始階段發現攻擊,及時告警或終止緩存攻擊;針對緩存攻擊的防御技術從攻擊實現原理、攻擊目標等方面入手,考慮通過緩存隔離、緩存訪問隨機化、緩存計時破壞、漏洞分析與修復等技術對緩存側信道攻擊進行主動防御.本節從攻擊檢測和攻擊防御2個方面出發,對近年來緩存側信道攻擊防御技術的發展進行了系統分析.
在前期針對緩存側信道攻擊檢測技術的研究中,研究人員基于緩存攻擊原理做了一些探索.2011年,Zhang等人[72]設計出了命名為HomeAlone的軟件工具,通過在自己的虛擬機中運行Prime-Probe攻擊并檢測操作時間的變化,來檢測是否有攻擊者的虛擬機和自己同駐.該文針對緩存攻擊特征的收集和處理,給緩存攻擊檢測帶來一定借鑒.之后Gruss等人[55]提出緩存模板攻擊,開發人員可以針對特定選擇的事件自動檢測潛在的緩存側信道漏洞,然后對其進行修復.該文通過觸發特定事件,使用Flush-Reload攻擊測試訪問內存地址的cache-hit蹤跡,形成緩存模板.將“緩存模板攻擊”作為系統服務運行,則可以檢測可能受到攻擊的代碼和數據.
之后,基于CPU硬件性能計數器(hardware performance counters, HPCs)對緩存攻擊進行檢測的方法出現.HPCs是一組內置在 x86(如 Intel,AMD)和 ARM處理器中的特殊寄存器,它們與特定硬件事件的事件選擇器一起工作,并在硬件事件發生后更新計數器.2013年,Demme等人[73]提出基于HPCs提取的特征檢測 Prime-Probe攻擊.2016年,Chiappetta等人[74]提出將攻擊進程硬件特征與機器學習相結合進行緩存攻擊實時檢測的方法,該方法通過 quickhpc工具收集攻擊進程運行過程中的硬件特性(CPU cycles, L2 cache hit, L3 cache miss等),基于機器學習的方法將收集到的進程特征與已有攻擊進程特征做匹配,實時檢測緩存攻擊.同年,Zhang等人[75]提出基于HPCs的緩存攻擊檢測架構CloudRadar.CloudRadar使用HPCs計數器讀取到的硬件事件(cache hit/miss等)作為特征,結合特征檢測和異常檢測對緩存攻擊進行實時檢測.該架構可檢測引起HPCs變化的緩存攻擊如Flush-Reload,Prime-Probe等,根據應用環境的不同可在操作系統層或虛擬化層實現.
還有研究人員希望通過修改硬件架構來實現對緩存側信道攻擊的檢測.2014年,Chen等人[76]提出Cache計時攻擊檢測架構CC-Hunter,該架構通過使用額外的硬件單元來動態跟蹤共享CPU的緩存資源使用沖突情況,進而對Cache計時攻擊進行檢測.部分研究人員提出針對特定緩存攻擊的檢測.2020年,Guo等人[77]提出基于符號執行的方法來檢測由預測執行引入的緩存計時側信道漏洞.2021年,Kim等人[78]提 出 基于 PMU(performance monitoring unit),PCM(performance counter monitor)對 Prime-Abort攻擊進行實時檢測的系統.
此外,針對一些新型緩存側信道攻擊,如SGX環境下的緩存側信道攻擊,也出現了一些檢測方法.2018年,Chen等人[79]提出HyperRace架構,將虛擬化云環境同駐檢測方法HomeAlone[72]的想法擴展到SGX領域,基于LLVM實現了基于超線程技術的緩存側信道攻擊檢測方法.研究人員還提出了一類結合TSX技術對SGX緩存側信道攻擊進行檢測的方法[80-82],這類檢測方法主要針對特殊環境下的緩存攻擊,不具備普適性.
3.2.1 緩存隔離
緩存側信道攻擊的基本原理是基于進程間緩存共享,因此,基于緩存隔離的攻擊防御技術一直是研究人員關注的熱點.
Page[83]在2005年提出一個隔離緩存的硬件防御措施,將一部分緩存隔離給受保護的進程使用,以減少不同用戶間緩存爭用的情況發生.這種對緩存的隔離方法比較粗暴,對緩存使用的性能影響較大.2007年,Wang等人[84]提出一種新的緩存設計結構,采用緩存隔離的方式鎖定部分緩存作為安全區域PLcache,這種緩存設計結構與之前的方法相比較為靈活,隔離粒度細.2009年,Kong等人[85]的研究使得防御方法在此前PLcache的基礎上又有了新的改善,可以防止更強的攻擊.
2016年Zhou等人[86]提出一個內存管理系統CacheBar,可以防御利用L3緩存共享導致的跨核緩存側信道攻擊.CacheBar劃分不同安全域并且對安全域之間共享的物理內存頁進行自動管理,防止L3緩存行的共享,能夠防御Prime-Probe和Flush-Reload攻擊.2016年,Liu等人[87]利用目前商用CPU的性能優化技術CAT設計實現了原型系統CATalyst來實現對L3緩存側信道攻擊的防御.CATalyst通過將L3緩存劃分成不同的管理域緩存,從而實現不同虛擬機在L3緩存的隔離.這種方法不僅可以防御Prime-Probe攻擊,同時也在一定程度上防御了基于頁復用技術的Flush-Reload攻擊.
2017年,Yan等人[88]提出一種針對共享緩存的緩存行替換算法SHARP,需要很小的硬件修改就可以有效防御現有的跨核共享緩存攻擊.2019年Werner等人[89]提出了新的緩存設計方法SCATTERCACHE來防止緩存攻擊,它排除了特定緩存組的一致性,使基于驅逐集的緩存攻擊不再適用.
還有一類云環境中防御緩存側信道攻擊的典型技術Page Coloring[90].在云環境中,要對虛擬機之間的緩存進行隔離,研究人員需要通過重新設計內存到緩存的映射方案來實現.這類方法因為涉及到物理內存地址到緩存的映射,所以需要系統級別(系統內核或虛擬化層)的修改,這種緩存隔離策略通常稱為Page Coloring.Chameleon[91]提供了1個低消耗的自動化Page Coloring機制,在安全域執行時提供緩存隔離.安全進程將被分配在具有特定安全色的緩存中.安全色緩存只提供給關鍵安全敏感操作使用,與其同駐于相同硬件的其他虛擬機不可訪問這塊區域.STEALTHMEM[92]也是基于Page Coloring實現的系統級緩存攻擊防御,其為每個核心管理一組鎖定的緩存行,對這些緩存行的使用不會發生換出的情況.虛擬機可以將敏感數據加載到鎖定的緩存行,鎖定的緩存行為該虛擬機獨占,這樣一來每個虛擬機可以使用專屬的特殊頁面來存儲敏感數據,其對敏感數據的訪問也不會因為共享而泄露,從而保障虛擬機之間的安全.
3.2.2 緩存訪問隨機化
緩存訪問隨機化的防御方法是通過將內存到緩存的映射隨機化,使其并不按照固定的映射策略進行,破壞攻擊者通過監測緩存特定位置獲取信息.RPcache[84]和 Newcache就是使用內存到緩存映射隨機化的方法來實現防御.RPcache為需要保護的可信域提供單獨的映射表,可以將索引位映射到不同組,防止了攻擊者將受保護進程緩存行換出的情況發生,可防御基于Flush-Reload進行目標信息探測的攻擊.Newcache通過引入重映射表,利用邏輯上“直接映射緩存”架構將訪問地址隨機映射到某緩存行,實現緩存訪問的隨機化.2014年,Liu等人[93]提出一個基于硬件的解決方案,將內存地址到緩存的映射變為運行時自動隨機化,這種緩存映射隨機化的方式對性能的影響較小.
2015年,Crane等人[94]提出了利用軟件相異性實現緩存攻擊防御的方式.該工作利用代碼復制和控制流隨機化實現了較細粒度的程序多樣化來防御緩存攻擊,在保持了原始程序語義的同時確保指令集級別每一副本的不同.此方法通過動態變化程序運行時的控制流,使攻擊者無法從緩存中探測到目標程序的執行意圖.
另外一些研究工作基于編譯器實現緩存訪問隨機化,使程序在執行內存/緩存訪問時不易被攻擊者追蹤.Raccoon[95]基于混淆程序在源碼層制造出程序具有很多執行路徑的假象,使攻擊者難以通過程序使用緩存的規律推斷出分支的邏輯信息,進而防御多種側信道攻擊,如利用地址痕跡、緩存使用、數據大小等作為側信道的攻擊.
3.2.3 緩存計時破壞
大多數緩存側信道攻擊方法依靠不同狀態下對特定緩存的訪問時間差異來推測目標信息,因此,可以通過破壞系統中計時的精度來破壞依賴時間度量的緩存攻擊,進而達到防御的效果.
部分研究人員希望通過增大計時粒度實現緩存攻擊的防御.Vattikonda等人[96]提出在虛擬化環境中通過去掉細粒度的時間計數來限制惡意虛擬機探測緩存的能力,他們在x86架構的Xen虛擬化平臺上通過修改rdtcs指令返回值來模糊時間度量,進而使該惡意虛擬機獲取的時間粒度變粗,無法基于高精度的計時信息來分析緩存狀況,從而實現緩存攻擊防御.
一些研究人員試圖通過在計時器中添加噪聲來實現緩存側信道攻擊的防御,如Martin等人[97]提出的防御措施TimeWarp.TimeWarp通過在攻擊者進行時間度量時加入任意數值的時間噪聲使其無法區分緩存命中與未命中的狀態,使攻擊者無法從被噪聲污染的數據中獲取有效信息.TimeWarp中的計時器分析較為全面,它將時間計數分為內部時間計數、外部時間計數和指令時間計數,這3種時間計數分別對應于硬件計時器、外部中斷或其他設備傳輸網絡包的傳輸時間,以及執行時間周期確定的指令(如執行周期為1 cycle的ADD指令),通過對這些時間計數進行混淆來防御攻擊.
還有研究人員研究實現恒定時間的防御方法,x86處理器中浮點加法和乘法指令的運行時間根據操作數的不同差距很大,Andrysco等人[98]設計了一個新的數學庫libfixedtimefixedpoint來緩解浮點數據時間通道的問題,該庫可用于非整數運算,且所有操作都在恒定時間內完成.也有一些研究人員提出通過禁用系統中的高精度計時器來實現緩存側信道攻擊防御,如Gullasch等人[11]實現的Cache games方法則提出通過禁用細粒度的時間計數指令rdtsc來緩解緩存攻擊.但在信息系統中,很多應用程序基于高精度的計時指令rdtsc實現,所以這一類實現方式并不理想.3.2.4 漏洞分析與修復
軟件設計和硬件實現上的一些漏洞往往是攻擊者利用的對象,例如密碼算法實現的邏輯漏洞、CPU亂序執行特性等.部分研究人員針對這些側信道攻擊風險展開研究工作,致力于軟硬件漏洞的分析和修復,防范于未然.
Doychev等人[99]實現了緩存側信道靜態分析工具CacheAudit,該工具以二進制文件作為輸入,通過靜態分析自動預測程序的緩存使用狀況,評估其對各類型緩存攻擊的安全對抗情況,預測可能存在的各類型側信道,進而給出改進建議.Wang等人[100]提出針對程序的靜態分析方法CacheS.CacheS基于SAS(secret-augmented symbolic)域實現,SAS 通常用來在大規模敏感軟件上執行抽象表示,完成對程序細粒度敏感信息(如密鑰及密鑰依賴)的跟蹤.CacheS可以做到對實際使用的加密系統進行完整的靜態度量,覆蓋率及準確率較高,能夠在一定程度上防御緩存側信道攻擊.Hassan等人[101]組合了2個獨立開發的側信道攻擊(side-channel attack,SCA)安全框架來識別和測試安全漏洞,并實現了對Mozilla的NSS安全庫的庫一級SCA安全性評估.
Gras等人[102]針對商業的CPU微體系架構,通過實現自動化的黑盒側信道分析來發現CPU微體系結構中的側信道攻擊風險;還有研究者通過修補微體系結構上導致信息泄露的漏洞來防御相關的緩存側信道攻擊.Andrea等人[103]提出一種用于研究微體系結構攻擊及其緩解措施的新工具Speculator,用于研究單個代碼片段或更復雜的場景(例如分支目標注入攻擊)中微體系結構行為.Yu等人[104]提出數據無關的指令集架構(instruction set architecture, ISA)擴展,該擴展的設計在指令層面保證了現有數據無關的程序(不在共享資源上施加敏感的數據依賴)的安全執行,從而阻塞側信道攻擊.Koruyeh等人[105]提出的SpecCFI防御機制,利用控制流完整性(control-flow integrity, CFI)信息約束投機執行過程中的非法控制流,以限制前向控制流路徑(間接調用和分支)上的危險推測,從而防御Spectre類型攻擊.
3.2.5 其他防御方法
隨著新的硬件機制的出現,研究者開始嘗試利用硬件特性實現針對緩存側信道攻擊的防御,如TSX,SGX等技術.
Gruss等人[106]提出了針對緩存側信道攻擊的防御措施Cloak,其核心思想是利用TSX技術防止敏感操作或數據訪問時緩存未命中情況的發生,防止攻擊者探測緩存訪問信息.Cloak利用TSX事務內存來執行可能泄露信息的敏感算法,保證所有敏感數據和代碼在執行時受事務內存保護,以增加緩存攻擊的難度,甚至阻止攻擊的發生.
Weiser等人[107]提出基于SGX可信執行環境的緩存側信道攻擊防御方法SGXJail.SGXJail針對以Enclave為宿主的惡意軟件提出了實際的防御機制,其通過對SGX進行硬件擴展,利用Intel的內存保護密鑰限制Enclave的執行,實現了對惡意Enclave更高效的防御,一定程度防止了Enclave間的緩存側信道攻擊.Ahmad等人[108]提出在SGX商用硬件上的混淆引擎方法OBFUSCURO,該方法可以用來防御緩存模式攻擊和緩存計時攻擊.Weichbrodt等人[109]則給出一個SGX Enclave性能分析工具集SGX-perf,可自動化地為SGX應用程序提供細粒度的性能關鍵事件分析,為SXG可信環境中緩存側信道安全分析提供參考.
緩存側信道攻擊隨著計算機技術的發展及應用環境的變化而不斷創新,攻擊者在將傳統緩存側信道攻擊原理進行擴展的同時也在不斷提出新的緩存利用方式,設計和構造令安全防御人員感到棘手的側信道攻擊方法.Meltdown及Spectre漏洞的曝出將緩存側信道攻擊的研究又推向了新的高潮,Intel SGX等安全機制的出現則使緩存側信道攻擊研究領域進一步擴大.
緩存側信道攻擊的設計往往很精巧,能夠造成較強的攻擊效果.但緩存側信道攻擊的實施條件也比較苛刻,從實際攻擊場景中獲取有效信息存在一定難度.從緩存側信道攻擊發展來看,攻擊實現的設計思路與信道構造條件基本不變,但近年的研究工作正嘗試著朝攻破更強的安全隔離發展.一方面,隨著緩存結構向non-inclusive[110]的模式發展,此前主要針對inclusive緩存攻擊的可靠性可能受到動搖.AMD處理器一直在使用獨立LLC[111],在L1緩存的數據不一定存在于LLC,也就不能通過LLC探測目標信息,Intel處理器也在向這個方向轉變[32].針對noninclusive緩存的攻擊或許是未來值得研究的一個方向.另一方面,由于微體系架構中的漏洞相對徹底修補的復雜度和代價更高,近年來新提出的攻擊也逐漸偏向于利用TLB,LFB等更低層次的緩存結構中的漏洞來構造側信道,再結合Flush-Reload等攻擊方法來提取泄露的信息.
在緩存側信道攻擊防御方面,研究者一方面針對典型攻擊不斷地提出新型防御方法,如攻擊檢測、緩存隔離、地址隨機化、計時器混淆、軟硬件漏洞分析與修復等方式;另一方面,針對新型場景下的緩存側信道攻擊,提出在特定條件下的防御措施,如在可信環境SGX中的緩存側信道攻擊的防御.目前針對緩存側信道攻擊的防御,軟件層面的實現方式多引入較大性能開銷,硬件防御方法多為設計思路,未能實際落地.未來,基于新型CPU體系結構和硬件設計的防御方案或許是從根本上杜絕緩存側信道攻擊的最終出路.
綜上,對于現代處理器架構及操作系統來說,緩存側信道攻擊仍然是其重要的安全威脅.隨著新型攻擊方法和高效率攻擊手段的不斷出現,針對緩存側信道攻擊的研究是當下熱點,設計實現有效的防御手段同樣有著重要意義.
作者貢獻聲明:張偉娟提出論文主體研究思路和框架,撰寫論文初稿;白璐參與論文主體研究思路的討論,整理文獻,以及審閱和修改論文;凌雨卿收集和梳理相關文獻,制作圖表,排版與校勘論文;蘭曉負責部分內容的撰寫與修改;賈曉啟參與部分內容撰寫.