張偉娟 白 璐 凌雨卿 蘭 曉 賈曉啟
1 (中國科學院信息工程研究所 北京 100093)
2 (中國科學院大學網(wǎng)絡空間安全學院 北京 100049)
3 (四川大學網(wǎng)絡空間安全研究院 成都 610207)(zhangweijuan@iie.ac.cn)
近年來,信息安全越來越引起人們的重視.傳統(tǒng)的信息竊取技術通常從軟件系統(tǒng)實現(xiàn)漏洞入手,結合特定攻擊手段,對目標用戶敏感信息(如密鑰、口令等)進行竊取.然而,這類攻擊方式隨著軟件系統(tǒng)的更新有著時效性差、易防御等特性.相比之下,從物理信道中提取信息的側信道攻擊(side-channel attack,SCA)技術[1]通?;谠O備物理架構特點實現(xiàn),具有攻擊信道多樣、難以防御等特點,逐漸成為信息安全領域的研究熱點.
側信道攻擊技術最初針對加密設備提出,利用設備不同加密操作產生的時間差異、功率消耗差異或電磁輻射差異構造側信道,對加密設備進行攻擊,推測密鑰信息.之后,研究者將這種基于加密操作執(zhí)行差異構造側信道,獲取密鑰信息的思想應用在處理器緩存,提出了緩存?zhèn)刃诺拦艏夹g.緩存作為處理器微結構的硬件組件,為不同進程所共享,給攻擊創(chuàng)造了條件.利用緩存構造的側信道攻擊巧妙且難以防御,其安全風險廣泛存在于普通用戶個人電腦及運營商服務器,被工業(yè)界和學術界廣泛關注和研究.
緩存?zhèn)刃诺拦艏夹g一般分為時序驅動(timedriven)緩存攻擊、蹤跡驅動(trace-driven)緩存攻擊和訪問驅動(access-driven)緩存攻擊[2].時序驅動緩存攻擊[1,3-5]依據(jù)執(zhí)行加解密操作所消耗的時間差異來獲取用戶信息,實現(xiàn)密鑰恢復.蹤跡驅動緩存攻擊[6]依據(jù)用戶執(zhí)行某個操作的能量消耗來推斷用戶信息,如攻擊者通過度量電量獲取用戶進程的緩存命中與未命中的訪問序列,從而獲取用戶敏感數(shù)據(jù).訪問驅動緩存攻擊[7-11]依靠用戶訪問緩存時留下的訪問位置痕跡獲取用戶信息,攻擊者通過訪問與用戶共享的緩存來構造信道,通常為借助一個攻擊進程探測用戶進程在加解密操作執(zhí)行前后對緩存特定位置訪問情況,進而恢復密鑰.在這3類攻擊中,時序驅動緩存攻擊的研究主要針對早期加密硬件;蹤跡驅動緩存攻擊通常需要一些物理接觸來獲取電量等數(shù)據(jù),攻擊條件嚴格受限,難以進行遠程攻擊;訪問驅動緩存攻擊基于用戶進程對緩存的訪問蹤跡實現(xiàn),攻擊粒度較細,攻擊條件較靈活,且近年來出現(xiàn)了很多新型攻擊,是緩存?zhèn)刃诺拦粞芯康闹髁骱蜔狳c.
隨著緩存?zhèn)刃诺拦舻陌l(fā)展,其逐漸呈現(xiàn)攻擊場景復雜化、攻擊層次細致化、攻擊目標多樣化和攻擊原理精巧化的趨勢.在攻擊場景方面,從最初的處理器單核心攻擊發(fā)展到跨核心,從單機環(huán)境延伸到云環(huán)境,從單純針對緩存硬件的攻擊到利用新的硬件特性及安全機制進行攻擊;在攻擊實現(xiàn)層次上,隨著CPU的更新?lián)Q代從開始的基于L1緩存的攻擊發(fā)展到針對L1、L2、最后一級緩存(last level cache,LLC),甚至基于轉址旁路緩存(translation lookaside buffer, TLB)等的攻擊;在攻擊目標上,從單純的密鑰提取擴展到對關鍵內存、鏈接、口令甚至隨機數(shù)的提??;在攻擊原理方面更是多種多樣,目前出現(xiàn)的典型攻擊及其變種多達數(shù)十種.本文對緩存?zhèn)刃诺拦粞芯窟M展進行追蹤,并在攻擊場景、攻擊層次、攻擊目標和攻擊原理方面做了系統(tǒng)分析.
在緩存?zhèn)刃诺拦舴烙矫?,本文從攻擊防御的不同階段出發(fā),分析了攻擊檢測和防御實施2部分研究工作.在防御實施階段,按照不同防御技術原理,分別從緩存隔離、緩存訪問隨機化、緩存計時破壞、漏洞分析與修復等方面進行了防御技術的歸納總結.
本文接下來首先對攻擊中利用的CPU緩存等組件工作原理予以介紹,并對信息系統(tǒng)中的緩存?zhèn)刃诺拦麸L險進行分析;其次對緩存?zhèn)刃诺拦暨M行分類,從攻擊場景、攻擊層次、攻擊目標和攻擊原理方面對緩存?zhèn)刃诺拦暨M行系統(tǒng)分析;再次根據(jù)防御原理對緩存?zhèn)刃诺拦舻姆烙椒ㄟM行介紹;最后提出緩存?zhèn)刃诺拦襞c防御技術未來可能的研究方向,并對全文進行總結.
為充分理解緩存?zhèn)刃诺拦粼?,本部分首先對緩存的組成、特性及工作機制進行介紹.以x86架構為例[12],最早的緩存只有L1緩存,L1緩存的訪問速度與寄存器接近.隨著CPU性能的進一步提升,在L1緩存與主存間逐漸引入了更大的L2和L3緩存,其中L3緩存又稱為LLC.L1緩存根據(jù)緩存內容又分為數(shù)據(jù)緩存和指令緩存,數(shù)據(jù)和指令都具有的緩存則稱為聯(lián)合緩存.在現(xiàn)代計算機系統(tǒng)中緩存結構如圖1 所示.
緩存的映射方式為3種:直接映射緩存、全相聯(lián)映射緩存和多路組相聯(lián)映射緩存,這3種方式各有優(yōu)勢.現(xiàn)代系統(tǒng)出于功性能的綜合考慮,一般采取多路組相聯(lián)映射緩存設計.如圖2 所示,多路組相聯(lián)映射緩存首先被分為s個組,每組包含n路緩存,也稱作n個緩存行.內存數(shù)據(jù)以地址為索引分別映射到不同緩存組中,系統(tǒng)根據(jù)緩存組的使用情況選擇具體映射在哪個緩存行.由圖2可以看出,不同內存數(shù)據(jù)可能會映射在相同的緩存組中,當該緩存組所有緩存行都被占用時,下次CPU訪問的數(shù)據(jù)要映射在此緩存組時,就會發(fā)生緩存行的換出.
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 多路組相聯(lián)映射緩存結構
信息系統(tǒng)中存在的緩存?zhèn)刃诺拦麸L險主要體現(xiàn)在3個方面:
1)緩存狀態(tài)可探測
信息系統(tǒng)中攻擊進程可以通過特定方式對緩存狀態(tài)進行探測.首先,由于硬件設計上的特性,緩存在不同進程之間共享,且緩存的分配和映射有一定規(guī)律,攻擊者可以利用這些規(guī)律設計實現(xiàn)有效的緩存監(jiān)測方案.其次,程序在訪問各級緩存及內存時訪問時間存在一定差異,通過訪問時間差異可推斷緩存命中與否,從而監(jiān)控緩存的使用情況.最后,還可以基于其他硬件特性,如事務同步擴展(transactional synchronization extensions, TSX)對緩存進行監(jiān)測.TSX事務性內存的原子特性決定了當TSX事務中讀取的緩存行被從緩存中驅逐時,會引發(fā)事務中止.一旦中止發(fā)生,就意味著有其他進程訪問該緩存行[14].攻擊者可以利用這一特性監(jiān)控目標進程對特定緩存的使用狀況,進而進一步提取信息.緩存狀態(tài)可探測是構建緩存?zhèn)刃诺赖母?
2)可利用的硬件結構特性
緩存?zhèn)刃诺拦舻膶嵤┩ǔ柚布蜍浖O計的特性,結合構造的緩存?zhèn)刃诺纴磉M行信息提取.在硬件特性方面最典型的為微體系結構特性中的CPU亂序執(zhí)行和CPU分支預測執(zhí)行,這2個執(zhí)行的代表性攻擊為Meltdown[15]和Spectre[16].CPU亂序執(zhí)行時允許在錯誤指令的未授權結果上進行計算,Meltdown攻擊利用這點來暫時繞過硬件安全策略,從而泄露敏感數(shù)據(jù).Spectre攻擊則利用CPU分支預測執(zhí)行的特性,通過反復訓練引導目標進程執(zhí)行特定的路徑,暫時繞過軟件定義的安全策略(邊界檢查、內存存儲等),進而泄露機密信息.這2類攻擊后續(xù)衍生出大量的變種[17-21],均基于微體系結構特性構建.
3)可利用的程序設計特點
在信息系統(tǒng)軟件特性利用方面,攻擊者通常需要對密碼算法、敏感程序在設計實現(xiàn)上具有的緩存訪問特征進行分析,進而設計和構造側信道攻擊方法.以密碼算法實現(xiàn)為例,針對非對稱密碼算法RSA的攻擊可基于緩存狀態(tài)對其函數(shù)調用序列進行監(jiān)控.RSA算法的實現(xiàn)主要為模冪運算,加解密進程在執(zhí)行時會基于密鑰的比特位將模冪運算分解為“平方—乘”或“平方—乘—?!恕辈僮?Yarom等人[22]提出的攻擊中通過逆向OpenSSL二進制文件,找到了其平方/平方乘操作代碼分別對應的內存地址,利用Flush-Reload[11]方法對加密算法的操作地址進行緩存探測,結合緩存命中與未命中的時間分析推斷目標的具體操作.
綜上,在緩存共享的前提下,攻擊者可以結合軟硬件特性進行巧妙地構思,實現(xiàn)多種場景下的緩存?zhèn)刃诺拦?隨著信息系統(tǒng)的不斷發(fā)展,其引入的緩存?zhèn)刃诺拦麸L險也在不斷變化.
本節(jié)從緩存?zhèn)刃诺拦舻膱鼍白兓?、實現(xiàn)層次、攻擊目標和攻擊原理4個方面對近年來的研究工作進行分類介紹.
緩存?zhèn)刃诺拦羰荘age[23]在2002年提出,這一研究是對Kelsey等人[24]在1998年提出的利用加密算法實現(xiàn)特點構造側信道獲取用戶密鑰這一想法的擴展.在此之前,利用側信道攻擊獲取密鑰的想法被認為理論性強于可操作性,并且難以實際應用,可以說是處于萌芽階段.
緩存攻擊的早期研究工作主要集中于單機環(huán)境.在CPU單核心時代,同步多線程技術的出現(xiàn)使得緩存攻擊具有了較強的可操作性[9].后續(xù)隨著CPU架構的發(fā)展,CPU開始出現(xiàn)多核心和多級緩存,緩存?zhèn)刃诺拦粢矎囊婚_始的L1逐漸擴展到L2,L3,并出現(xiàn)跨核心的緩存攻擊.隨著計算機硬件架構的復雜化,基于TLB,MMU等模塊的緩存攻擊也逐漸出現(xiàn).此外,緩存?zhèn)刃诺拦暨€呈現(xiàn)多平臺化,如針對AMD,ARM架構[4]的攻擊.2016年,Irazoqui等人[25]提出了跨CPU的細粒度緩存攻擊,在AMD Opteron處理器和ARM架構處理器上實現(xiàn)緩存?zhèn)刃诺拦?同年,Lipp等人[26]提出針對移動端設備的緩存攻擊ARMageddon.
隨著虛擬化技術的發(fā)展,云計算應用領域的興起,出現(xiàn)了針對虛擬化和云環(huán)境的緩存?zhèn)刃诺拦粞芯?2009年,Ristenpart等人[10]提出了在云環(huán)境下跨虛擬機的側信道攻擊方法,并以Amazon EC2云平臺為研究對象進行了實驗.Ristenpart提出的跨虛擬機緩存?zhèn)刃诺拦衾肞rime-Probe攻擊方法來探測EC2實例的緩存使用情況.在這項工作中,攻擊者獲取信息的粒度較粗,只能獲取到目標虛擬機的緩存使用概況,推測出鍵盤按鍵信息,攻擊效果還不足以從中獲取密鑰等信息.2012年Zhang等人[7]對跨虛擬機訪問驅動型緩存?zhèn)刃诺拦舻臉嫵杉皩崿F(xiàn)進行了詳細的分析,且在攻擊者與目標同駐條件下能夠達到細粒度的信息獲取,分析出目標的完整私鑰.
此外,還有一些緩存?zhèn)刃诺拦翎槍尚怒h(huán)境,如軟件保護擴展(software guard extensions, SGX)[27]展開.SGX的攻擊面較小,這種攻擊通常需要很強的攻擊模型,如具有操作系統(tǒng)特權級的控制.一些傳統(tǒng)緩存?zhèn)刃诺拦舴椒ㄔ赟GX環(huán)境同樣有效[28-31],這些攻擊需要的攻擊條件非??量?,其假設為攻擊者可以控制整個系統(tǒng)資源進行攻擊.有研究者將Prime-Probe緩存攻擊方法應用于SGX環(huán)境,在CPU配置開啟超線程使攻擊者與目標Enclave①SGX允許應用程序初始化一個Enclave,Enclave是一塊硬件隔離的可信內存區(qū)域,可以為應用程序的敏感部分提供硬件增強的機密性和完整性保護,實現(xiàn)不同程序間的隔離運行。進程運行在同一核心并共享緩存,在此基礎上結合操作系統(tǒng)提供的中斷服務實現(xiàn)與目標進程的同步,攻擊者結合以上攻擊條件獲取加密程序的密鑰.另外還有利用Pagefault[32]中斷構造側信道,對運行在不可信操作系統(tǒng)但認為硬件及虛擬化層可信的內存隔離環(huán)境進行攻擊,攻擊可以獲取目標環(huán)境的文本及圖片信息.之后,Bulck等人[33]在此基礎上又提出一種更加隱蔽的方法,能夠不依賴于Page-fault獲得Enclave所訪問的頁面信息.Lee等人[34]提出一個利用CPU分支預測單元構造側信道攻擊的方法Branch Shadowing.Schwarz等人[29]則從另一個角度出發(fā),認為若惡意軟件利用SGX為Enclave提供的安全隔離機制,將攻擊行為隱藏在惡意Enclave中,則可以構造更加隱蔽的Enclave-Enclave之間的攻擊.多項研究工作表明,在TLB到動態(tài)隨機存取存儲器(dynamic RAM,DRAM)范圍都存在對SGX的側信道攻擊的潛在攻擊向量[35-40].攻擊者可以利用 TLB、行填充緩沖區(qū)(line fill buffer, LFB)、頁表項(page table entry,PTE)、page屬性位等機制構建側信道,實現(xiàn)較為隱蔽的攻擊.
研究者在SGX環(huán)境下對CPU指令特性也進行了深入的挖掘與利用,F(xiàn)oreshadow[41]和SgxPectre[42]分別是在SGX環(huán)境下利用Meltdown和Spectre漏洞的攻擊變種.這些研究工作從另一方面也說明,即使是在具有很強安全隔離的可信環(huán)境中依然無法避免緩存?zhèn)刃诺拦?
對于CPU核心內部的L1和L2級緩存攻擊而言,攻擊者與目標運行于同一核心,這類攻擊主要利用Intel在2002年提出的超線程技術(hyper threading)實現(xiàn).超線程技術使得單核心處理器允許同時執(zhí)行2個線程,提高了處理器的效率.2個線程若共享某計算或存儲資源時會產生資源爭用,攻擊者通過與目標進程爭用L1,L2緩存而實現(xiàn)攻擊.在能夠利用L3緩存實現(xiàn)攻擊之前,緩存?zhèn)刃诺拦舻难芯恐饕杏诶肔1緩存(I-cache和D-cache),而L2緩存與L1緩存在容量和速度上差異不大,研究相對較少[10].
I-cache是L1緩存中負責存儲處理器最近所執(zhí)行指令的組件,Acii?mez[43]表明其可利用I-cache恢復RSA算法的1 024 b密鑰, 實現(xiàn)對OpenSSL (version 0.9.8d)的攻擊.Acii?mez使用的緩存探測方法是Prime-Probe,先用空指令占滿指令緩存繼而探測緩存使用情況恢復密鑰.此后,又相繼出現(xiàn)了對OpenSSL 不同實現(xiàn)方法的I-cache層面緩存攻擊[44-45].
D-cache在L1緩存中負責存儲最近處理的數(shù)據(jù),因而也常被攻擊者利用進行敏感信息的恢復.如利用D-cache恢復同駐于同一核心的進程信息[9].2006年,Osvik等人[8]提出利用L1 D-cache的Prime-Probe和Evict-Time攻擊方法,實現(xiàn)了針對AES的密鑰恢復.同年,Neve等人[46]通過操作系統(tǒng)調度在單線程處理器上實現(xiàn)L1 D-cache側信道攻擊.2011年,Cache games[11]針對L1緩存,利用中斷在同核心實現(xiàn)攻擊者與OpenSSL AES加密線程同步恢復密鑰的緩存?zhèn)刃诺拦?2012年,Zhang等人[7]使用L1數(shù)據(jù)緩存實現(xiàn)了跨虛擬機的攻擊,在實驗環(huán)境跨虛擬機獲取ElGamal解密密鑰.
由于L1 I-cache或D-cache為單核心所有,攻擊者與目標同駐于同一核心比較困難,一定程度上限制了攻擊的實際應用效果.隨著基于L3的緩存?zhèn)刃诺拦舻某霈F(xiàn),攻擊逐漸具有實際效果.2014年,Yarom等人[22]提出Flush-Reload攻擊方法,該方法利用了LLC和內存頁的共享,攻擊可跨進程、CPU核心和虛擬機獲取泄露的信息,且攻擊粒度細,可以監(jiān)控到單個內存行.隨后,F(xiàn)lush-Reload攻擊方法被擴展應用到對其他加密算法的攻擊[47-48]和在云環(huán)境中跨虛擬機(VM)的攻擊[49-51],更進一步還有研究者將該攻擊方法擴展到ARM處理器[26,52]和瀏覽器[53]中.2015年,Liu等人[54]提出了一種針對L3緩存的Prime-Probe側信道攻擊方法,這一方法能夠獲取較高的攻擊分辨率,且能夠在跨核及跨虛擬機環(huán)境下進行攻擊.Gruss等人[55]提出緩存模板攻擊,可自動分析和利用任何程序中基于緩存的信息泄露.2016年,Kayaalp等人[56]提出一種高分辨率的LLC側信道攻擊,與Flush+Reload相比,使用限制條件較少.
2017年,Gras等人[57]針對MMU執(zhí)行的虛擬地址轉換進行攻擊,提出一個新的Evict-Time緩存攻擊AnC.這種攻擊方法利用在虛擬地址翻譯中會查找頁表并將其緩存在共享緩存中的實現(xiàn)特點,在目標MMU查找頁表后推斷目標所訪問的緩存組從而獲取信息.AnC是首個針對硬件組件MMU的攻擊方法,其攻擊場景是構造惡意JavaScript代碼獲取瀏覽器的地址空間.與之類似,Schaik等人[58]在2018年提出了一種基于MMU進行間接緩存攻擊的方法,攻擊者利用MMU在進行地址轉換操作時會將頁表的部分信息緩存在固定緩存組中的特性,結合Evict-Time、Prime-Probe攻擊原理設計了新型攻擊,這種間接攻擊方法可以繞過基于緩存隔離的防御方法.
2018年,Gras等人[13]提出了基于TLBs的攻擊方法TLBleed.這一方法通過逆向Intel處理器地址映射函數(shù),并結合機器學習的方法實現(xiàn).該方法表明即使用戶采用一些防御緩存?zhèn)刃诺拦舻姆椒?,如CAT(cache allocation technology),但攻擊者仍可以通過TLB-leed攻擊探測細粒度的目標信息.因為TLB緩存為每個核心所獨有,攻擊需攻擊者與目標同駐于1個核心,當攻擊者與目標共享1個核心時可利用共享的TLB構建側信道進行攻擊.2019年,Canella等人[59]發(fā)現(xiàn)了新的TLB側信道——Store-to-Leak ,并提出利用該側信道的Fallout攻擊.實驗證明,F(xiàn)allout可破壞內核地址空間布局隨機化,泄露由操作系統(tǒng)內核寫入內存的敏感數(shù)據(jù).2020年,Schaik等人提出CacheOut[39]攻擊,并針對SGX環(huán)境進行改進提出SGAxe[40]攻擊.CacheOut攻擊利用TLB與L1數(shù)據(jù)緩存之間的隱藏交互行為,克服了以往微體系結構數(shù)據(jù)采樣(microarchitectural data sampling, MDS)攻擊在控制和可用性上的限制.攻擊者可利用此新漏洞來選擇要泄露的數(shù)據(jù),而不必等待數(shù)據(jù)可用,同時還可控制泄露地址.
隨著計算機技術的發(fā)展,現(xiàn)代計算機系統(tǒng)單個處理器擁有核心的數(shù)量在增加,單個系統(tǒng)擁有的處理器數(shù)量也在增加,即使是移動平臺也常常擁有至少2個單獨的處理器.2016年,Irazoqui[25]提出了跨CPU的細粒度緩存攻擊,該方法基于現(xiàn)代處理器和多處理器系統(tǒng)緩存一致性協(xié)議來實現(xiàn)側信道攻擊,不依靠特定的緩存結構,可以達到恢復AES和ElGamal密鑰的攻擊效果.
綜上,隨著CPU和攻擊場景的變化,緩存?zhèn)刃诺拦舻膶崿F(xiàn)近年來有從基于傳統(tǒng)的L1/L2,L3級緩存向TLB,MMU等更小的緩存單元甚至跨CPU發(fā)展的趨勢,攻擊層次逐漸多樣化,圖3對緩存?zhèn)刃诺拦魣鼍昂凸魧崿F(xiàn)層次變化進行了總結.
民族唱法美聲化,美聲唱法民族化,是中西文化相互融合、互相影響的結果,也是我國聲樂教育發(fā)展取得的一大成果。這種“洋為中用”的做法使得我國聲樂更加成熟化、科學化、國際化。這樣在保留自己本民族特點的基礎上進行學習、借鑒、改革對于我國民族聲樂的發(fā)展,具有很重要的意義。
Fig.3 The development of scenarios and levels of cache side-channel attacks圖3 緩存?zhèn)刃诺拦魣鼍昂蛯哟蔚陌l(fā)展
緩存攻擊的目的通常為探測和信息竊取,攻擊的目標多為包含敏感信息的程序或系統(tǒng)模塊,如含密碼算法的程序或加密庫、用戶名/口令文件、關鍵內存、目標系統(tǒng)運行情況等.本節(jié)對緩存?zhèn)刃诺拦絷P注的攻擊目標做歸納總結,為針對緩存攻擊的系統(tǒng)安全性提升提供參考.
1)含密碼算法的程序或加密庫
緩存?zhèn)刃诺拦舻淖畹湫偷墓裟康氖翘崛〖咏饷苓^程中的密鑰,因此最常見的攻擊目標為包含密碼算法的程序或加密庫,如OpenSSL,GnuPG,GnuTLS,Libcrypt,CyaSSL,MatrixSSL,PolarSSL 等.密碼算法通??煞譃?類,即對稱密碼和非對稱密碼.對稱密碼算法的加密過程和解密過程均采用同一密鑰,且加解密過程是“對稱”的,典型的算法有AES,DES等.研究人員實現(xiàn)了針對AES的緩存?zhèn)刃诺拦舻萚61]、針對OpenSSL中AES密鑰的提取[8,62-63]攻擊等.非對稱密碼算法又稱公鑰密碼算法,采用公私鑰對將加密和解密功能分開,主要用途為加密和簽名,典型的算法有RSA、橢圓曲線等.研究人員實現(xiàn)了對GnuPG中RSA密鑰的提取[22,64]、Libcrypt中ElGamal解密密鑰提取[4]、OpenSSL中ECDSA簽名破解[48]等.
2)用戶名/口令文件
文獻[49]中提到借助Flush-Reload緩存?zhèn)刃诺拦舴椒?,實現(xiàn)基于密碼重置方式的用戶賬號竊取、購物車信息竊取等.RIDL[37]是一類新的預測執(zhí)行攻擊,可以跨地址空間和特權邊界泄露任意數(shù)據(jù),其中包括跨虛擬機邊界.攻擊者通過反復嘗試用SSH進行身份驗證,結合Flush-Reload攻擊方法提取目標虛擬機/etc/shadow文件,進而提取用戶口令.
3)關鍵內存數(shù)據(jù)
Meltdown[15]攻擊利用現(xiàn)代處理器亂序執(zhí)行漏洞,結合Flush-Reload緩存?zhèn)刃诺拦舴椒▽崿F(xiàn)任意內核內存的讀取.Spectre[16]攻擊基于分支預測執(zhí)行技術實現(xiàn)對應用程序間隔離性的破壞,使攻擊程序有機會訪問到其他應用程序所使用的內存空間.研究人員還實現(xiàn)了繞過地址空間布局隨機化機制對內存地址空間布局進行推測[59,65].如文獻[66]設計的攻擊方法,可以在攻擊者進程或是用戶級目標進程的分支指令間利用分支目標緩沖區(qū)(branch target buffer,BTB)沖突來影響攻擊者代碼執(zhí)行時間,進而推斷目標進程或內核地址空間分支指令的位置,獲取內核和用戶級應用程序的內存地址分布.
4)目標系統(tǒng)運行情況
部分緩存?zhèn)刃诺拦舻哪康氖翘綔y目標系統(tǒng)運行情況,例如目標系統(tǒng)運行的操作系統(tǒng)、關鍵軟件、瀏覽器頁面等.目標系統(tǒng)可以是與攻擊進程同駐的虛擬機,也可以是遠程連接的操作系統(tǒng).Irazoqui等人[67]給出基于Flush-Reload攻擊方法對同駐虛擬機的加密庫進行探測的攻擊,該攻擊可以檢測并區(qū)分多種加密庫,包括 MatrixSSL,PolarSSL,GnuTLS等,還可以對加密庫的版本進行區(qū)分.Shusterman等人[68]提出對瀏覽器頁面的攻擊,該攻擊探測同駐虛擬機內部瀏覽器頁面信息,瀏覽器類型包括Chrome (Win,Linux),F(xiàn)irefox (Win,Linux),Safari MacOS,Tor Linux.
本文對2002—2020年共66篇緩存?zhèn)刃诺拦粑墨I①文獻主要來自dblp數(shù)據(jù)庫,此外還有部分其他在線資源。中攻擊目標進行統(tǒng)計分類,4類攻擊目標所占比例如圖4所示,可見含密碼算法的程序或加密庫為攻擊者的首要攻擊目標.
Fig.4 Statistical analysis of targets of cache side-channel attacks圖4 緩存?zhèn)刃诺拦裟繕私y(tǒng)計分析
目前從攻擊原理來分,現(xiàn)有的緩存?zhèn)刃诺拦糁?要有 Evict-Time,Prime-Probe,F(xiàn)lush-Reload,F(xiàn)lush-Flush,Evict-Reload,Prime-Abort,Reload-Refresh 這7 種.表1對各類型緩存攻擊的探測方法進行了對比總結.
2.4.1 Evict-Time
Evict-Time[8]攻擊方法在2006年被提出,是比較早期的Cache計時攻擊.該攻擊在單機單核心環(huán)境下恢復出了完整的AES密鑰,其攻擊步驟有3個:
1)目標進程執(zhí)行加密操作并測量所需時間.
2)Evict.攻擊者通過訪問自身內存空間,驅逐部分目標進程執(zhí)行加密操作時占用的緩存.
3)Time.攻擊者再次觸發(fā)目標進程進行加密運算,測量完成加密所需要的時間.
該攻擊基于AES算法的查表操作實現(xiàn).在執(zhí)行步驟1)之后,目標進程在加密時所用到的全部T表②在實踐中,T表通常是提前算出然后作為一個常量數(shù)組編碼在密碼算法軟件的實現(xiàn)代碼中。這樣,就可將繁瑣的運算過程變成對于計算機而言簡單高效的查表和按位運算。內存塊被加載入內存;步驟2)中攻擊進程通過訪問特定內存塊,驅逐目標進程部分緩存,例如驅逐的恰好是T表某元素p映射到的緩存組,則p將被換出緩存;步驟3)對同樣的明文以預測的密鑰key′再次執(zhí)行加密操作,若執(zhí)行時間變長說明在此密鑰下查找了此前被換出的T表元素p,以此推斷密鑰key′為密鑰key的可能性,并通過進一步分析推斷完整密鑰.該攻擊對目標進程的T表加載空間做了大量先驗測試,并在明文已知的前提下通過多次測試來實現(xiàn)密鑰恢復.
Table 1 Comprehensive Comparison of Cache Side-Channel Attacks表1 不同緩存?zhèn)刃诺拦艏夹g的綜合比較
2.4.2 Prime-Probe
Prime-Probe[8-9]同樣是在2006年提出的Cache計時攻擊,它與Evict-Time方法的區(qū)別在于它度量的是攻擊者訪問自身內存塊所需的時間,這一特點也使得Prime-Probe攻擊方法更容易應用于實際場景中.具體攻擊步驟有3個:
1)Prime.攻擊者通過訪問內存塊填充緩存.
2)等待.攻擊者等待一段時間,在這期間目標進程將執(zhí)行自身代碼,訪問內存數(shù)據(jù).
3)Probe.攻擊者再次訪問在步驟1)用來Prime緩存的內存塊,測試訪問時間.
攻擊者需要確定一個區(qū)分內存訪問和緩存訪問的時間閾值,還需設計一個驅逐集(映射到同一緩存組,同時分別駐留在不同緩存行的一組地址).攻擊者在步驟1)中首先利用準備好的數(shù)據(jù)填充緩存集,等待目標進程運行之后,再次對先前準備的數(shù)據(jù)集進行訪問,根據(jù)訪問的時間差異判斷目標進程對于緩存的訪問.如果目標進程沒有訪問目標緩存集中的數(shù)據(jù),則攻擊者對該緩存集的訪問會緩存命中,則訪問時間短;反之,則訪問時間長.通過監(jiān)控目標進程對緩存的使用狀況,攻擊者可以推斷目標進程的敏感信息,如密鑰等.Prime-Probe攻擊以單個緩存集為目標,可以檢測目標進程對指令或數(shù)據(jù)的訪問,還可以跨虛擬機實現(xiàn)[7,10].Prime-Probe攻擊最開始基于L1緩存實現(xiàn),之后擴展到L3緩存.Liu等人[54]的研究提出了新的算法使Prime-Probe緩存探測方法在L3緩存上的應用得以實現(xiàn),在跨虛擬機的側信道攻擊中成功獲取密鑰.
2.4.3 Flush-Reload
Flush-Reload攻擊方法在2011年提出[11],隨后又發(fā)展出了跨核的攻擊[22,67].Flush-Reload方法是較為細粒度的攻擊,攻擊者可以比較準確地獲取特定內存位置是否被緩存的情況,F(xiàn)lush-Reload攻擊方法條件比較苛刻,要求攻擊者與目標共享某塊使用到的物理內存,例如共享庫文件.假設攻擊者與目標共享內存塊b,具體攻擊步驟有3個:
1)Flush.攻擊者使用 clflush 指令清空內存塊b所映射的緩存內容.
2)等待.攻擊者等待目標運行一段時間.
3)Reload.重新加載指定內存塊b,測量并記錄數(shù)據(jù)塊的重載時間.
步驟1)保證了下一次訪問b時需要再次讀取內存,同時clflush指令會將各級緩存中的b都清空.在步驟2)中,攻擊者等待目標執(zhí)行代碼片,期間目標可能會訪問到在步驟1)時換出緩存的數(shù)據(jù)塊b.步驟3)攻擊者利用rdtsc指令度量再次訪問數(shù)據(jù)塊b所需的時間,若所需時間超過某個閾值則認為在步驟2)中目標并沒有訪問到這塊數(shù)據(jù),否則表示目標在運行時訪問了數(shù)據(jù)塊b.同樣地,攻擊者通過這種方式監(jiān)控目標進程對緩存的使用狀況,從而推斷目標進程的敏感信息.
Flush-Reload攻擊方法將訪問驅動型緩存?zhèn)刃诺拦艏夹g繼續(xù)向前推進了一步,它不僅將攻擊從單一核心擴展到了跨核心,同時還提高了信息獲取粒度,將探測緩存的粒度從緩存組(在x86架構中一般為4路256 B或8路512 B)層面提升到了緩存行(在x86架構中一般為64 B).因為具備跨核心和細粒度這2點優(yōu)勢,F(xiàn)lush-Reload方法與之前的側信道攻擊研究相比其攻擊性更強也更加危險.
2.4.4 Flush-Flush
Flush-Flush[69]攻擊方法是Flush-Reload方法的變種,它的實現(xiàn)同樣需要滿足與目標共享內存的條件.它利用clflush指令在清空緩存時所用時間的差異探測信息,當緩存位置有緩存數(shù)據(jù)時執(zhí)行時間長,反之則短.具體的利用方式為:
1)Flush.攻擊者執(zhí)行clflush指令清空與目標共享的內存塊所映射的緩存行.
2)等待.攻擊者等待目標運行一段時間間隔.
3)Flush.攻擊者循環(huán)執(zhí)行clflush指令,并使用rdtsc指令度量clflush指令的執(zhí)行時間.
當被清除的數(shù)據(jù)為緩存命中時,clflush指令的執(zhí)行時間長,反之若為緩存未命中則執(zhí)行時間短.攻擊者通過測量clflush指令的執(zhí)行時間推測內存數(shù)據(jù)是否被換入緩存,即目標進程是否訪問了該內存塊數(shù)據(jù).Flush-Flush攻擊測量緩存是否命中的時間差異較小,因而準確率比Flush-Reload低,但其攻擊相對隱蔽,且可以繞過部分基于硬件性能計數(shù)器的緩存?zhèn)刃诺拦魴z測方法.
2.4.5 Evict-Reload
Evict-Reload[26,55,60]攻擊同樣是Flush-Reload方法的變種,它將clflush指令用緩存驅逐(cache eviction)的方式代替,使得在無法執(zhí)行clflush指令的環(huán)境或架構下仍然可以利用Evict-Reload方法進行緩存信息探測.具體攻擊方式為:
1)Evict.通過訪問大塊內存,如較大的數(shù)組,將目標緩存組換出.
2)等待.等待受害者進程的運行.
3)Reload.重新訪問目標地址,測量訪問時間,做出判斷.
這種攻擊方式下要從緩存中驅逐特定的緩存組,需要結合緩存映射方式和替換策略進行設計,通過訪問特定內存地址來填充緩存,驅逐目標地址.根據(jù)不同CPU緩存替換策略、所需的地址數(shù)量和訪問模式,實現(xiàn)緩存驅逐的方式可能會有所不同.
2.4.6 Prime-Abort
Prime-Abort[14]是一個不依賴于時間計數(shù)的緩存信息探測方法,它利用了Intel TSX[70]中事務性內存特性.當目標進程訪問特定地址時會引起行為中止(Abort),因此可以依靠TSX這一特點監(jiān)測對某些共享內存塊的寫操作,監(jiān)測同一核心上的進程讀寫操作,或是監(jiān)測同一處理器上的進程讀寫操作.具體的利用方式為:
1)Prime.攻擊者開啟TSX事務,用自己的內存塊將緩存填滿,即Prime.
2)等待.攻擊者等待一段時間,這個間歇目標進程將執(zhí)行自身代碼,訪問內存數(shù)據(jù)等,目標進程的執(zhí)行將會引起數(shù)據(jù)在緩存的換入/換出,由于TSX原子操作的緣故會導致事務Abort的發(fā)生.
3)Abort.攻擊者檢測事務Abort的發(fā)生,以此推斷目標進程訪問了特定緩存組.
與傳統(tǒng)緩存攻擊相比,它具有不依賴時間計數(shù)的優(yōu)勢,可以繞過基于計時干擾的攻擊防御方法.另外,基于TSX機制,目標進程對特定緩存的訪問行為會實時觸發(fā)攻擊者的監(jiān)測,解決了攻擊者在探測目標行為時與目標進程難以同步的問題.
2.4.7 Reload-Refresh
Reload-Refresh攻擊[71]在2020年被提出,該攻擊巧妙地利用緩存替換策略,在不強制驅逐目標進程數(shù)據(jù)的情況下,跟蹤目標進程的緩存訪問.這一攻擊同樣需要攻擊進程和目標進程共享目標內存(即攻擊的目標內存空間),攻擊進程還要事先準備好一組替換目標內存的內存條目,稱為驅逐集,并執(zhí)行4個攻擊步驟:
1)準備.攻擊進程首先將目標內存讀入緩存,然后逐條加載驅逐集,保留一個監(jiān)控條目(目標地址),作為緩存策略的驅逐候選者.
2)等待.等待目標進程執(zhí)行,若目標進程訪問了目標地址,則目標地址不再是驅逐候選者;若沒有訪問,則目標地址仍然是驅逐候選者.
3)Reload.攻擊進程加載之前保留的監(jiān)控條目,使得緩存集中發(fā)生沖突,緩存要依據(jù)替換策略驅逐緩存條目.攻擊進程重新讀取目標地址,可根據(jù)讀取時間判斷該地址是否被替換,從而推斷在上一階段中是否被目標進程訪問.
4)Refresh.將緩存的狀態(tài)恢復到步驟1)的狀態(tài),進行下一次迭代.
攻擊成功實施的前提是要知道當前運行環(huán)境中緩存的替換策略.所以在攻擊開始之前,需要對目標進程運行的處理器進行測試,以確定該處理器使用的是哪一種緩存替換策略,并根據(jù)策略構建目標地址的驅逐集.
隨著緩存攻擊的不斷出現(xiàn),針對緩存攻擊的防御方法也在同步發(fā)展.本節(jié)將針對緩存攻擊的防御分為2個階段:1)針對緩存?zhèn)刃诺拦舻臋z測;2)防御技術的實施.針對緩存攻擊的檢測可在攻擊發(fā)生之前或攻擊的初始階段發(fā)現(xiàn)攻擊,及時告警或終止緩存攻擊;針對緩存攻擊的防御技術從攻擊實現(xiàn)原理、攻擊目標等方面入手,考慮通過緩存隔離、緩存訪問隨機化、緩存計時破壞、漏洞分析與修復等技術對緩存?zhèn)刃诺拦暨M行主動防御.本節(jié)從攻擊檢測和攻擊防御2個方面出發(fā),對近年來緩存?zhèn)刃诺拦舴烙夹g的發(fā)展進行了系統(tǒng)分析.
在前期針對緩存?zhèn)刃诺拦魴z測技術的研究中,研究人員基于緩存攻擊原理做了一些探索.2011年,Zhang等人[72]設計出了命名為HomeAlone的軟件工具,通過在自己的虛擬機中運行Prime-Probe攻擊并檢測操作時間的變化,來檢測是否有攻擊者的虛擬機和自己同駐.該文針對緩存攻擊特征的收集和處理,給緩存攻擊檢測帶來一定借鑒.之后Gruss等人[55]提出緩存模板攻擊,開發(fā)人員可以針對特定選擇的事件自動檢測潛在的緩存?zhèn)刃诺缆┒?,然后對其進行修復.該文通過觸發(fā)特定事件,使用Flush-Reload攻擊測試訪問內存地址的cache-hit蹤跡,形成緩存模板.將“緩存模板攻擊”作為系統(tǒng)服務運行,則可以檢測可能受到攻擊的代碼和數(shù)據(jù).
之后,基于CPU硬件性能計數(shù)器(hardware performance counters, HPCs)對緩存攻擊進行檢測的方法出現(xiàn).HPCs是一組內置在 x86(如 Intel,AMD)和 ARM處理器中的特殊寄存器,它們與特定硬件事件的事件選擇器一起工作,并在硬件事件發(fā)生后更新計數(shù)器.2013年,Demme等人[73]提出基于HPCs提取的特征檢測 Prime-Probe攻擊.2016年,Chiappetta等人[74]提出將攻擊進程硬件特征與機器學習相結合進行緩存攻擊實時檢測的方法,該方法通過 quickhpc工具收集攻擊進程運行過程中的硬件特性(CPU cycles, L2 cache hit, L3 cache miss等),基于機器學習的方法將收集到的進程特征與已有攻擊進程特征做匹配,實時檢測緩存攻擊.同年,Zhang等人[75]提出基于HPCs的緩存攻擊檢測架構CloudRadar.CloudRadar使用HPCs計數(shù)器讀取到的硬件事件(cache hit/miss等)作為特征,結合特征檢測和異常檢測對緩存攻擊進行實時檢測.該架構可檢測引起HPCs變化的緩存攻擊如Flush-Reload,Prime-Probe等,根據(jù)應用環(huán)境的不同可在操作系統(tǒng)層或虛擬化層實現(xiàn).
還有研究人員希望通過修改硬件架構來實現(xiàn)對緩存?zhèn)刃诺拦舻臋z測.2014年,Chen等人[76]提出Cache計時攻擊檢測架構CC-Hunter,該架構通過使用額外的硬件單元來動態(tài)跟蹤共享CPU的緩存資源使用沖突情況,進而對Cache計時攻擊進行檢測.部分研究人員提出針對特定緩存攻擊的檢測.2020年,Guo等人[77]提出基于符號執(zhí)行的方法來檢測由預測執(zhí)行引入的緩存計時側信道漏洞.2021年,Kim等人[78]提 出 基于 PMU(performance monitoring unit),PCM(performance counter monitor)對 Prime-Abort攻擊進行實時檢測的系統(tǒng).
此外,針對一些新型緩存?zhèn)刃诺拦簦鏢GX環(huán)境下的緩存?zhèn)刃诺拦?,也出現(xiàn)了一些檢測方法.2018年,Chen等人[79]提出HyperRace架構,將虛擬化云環(huán)境同駐檢測方法HomeAlone[72]的想法擴展到SGX領域,基于LLVM實現(xiàn)了基于超線程技術的緩存?zhèn)刃诺拦魴z測方法.研究人員還提出了一類結合TSX技術對SGX緩存?zhèn)刃诺拦暨M行檢測的方法[80-82],這類檢測方法主要針對特殊環(huán)境下的緩存攻擊,不具備普適性.
3.2.1 緩存隔離
緩存?zhèn)刃诺拦舻幕驹硎腔谶M程間緩存共享,因此,基于緩存隔離的攻擊防御技術一直是研究人員關注的熱點.
Page[83]在2005年提出一個隔離緩存的硬件防御措施,將一部分緩存隔離給受保護的進程使用,以減少不同用戶間緩存爭用的情況發(fā)生.這種對緩存的隔離方法比較粗暴,對緩存使用的性能影響較大.2007年,Wang等人[84]提出一種新的緩存設計結構,采用緩存隔離的方式鎖定部分緩存作為安全區(qū)域PLcache,這種緩存設計結構與之前的方法相比較為靈活,隔離粒度細.2009年,Kong等人[85]的研究使得防御方法在此前PLcache的基礎上又有了新的改善,可以防止更強的攻擊.
2016年Zhou等人[86]提出一個內存管理系統(tǒng)CacheBar,可以防御利用L3緩存共享導致的跨核緩存?zhèn)刃诺拦?CacheBar劃分不同安全域并且對安全域之間共享的物理內存頁進行自動管理,防止L3緩存行的共享,能夠防御Prime-Probe和Flush-Reload攻擊.2016年,Liu等人[87]利用目前商用CPU的性能優(yōu)化技術CAT設計實現(xiàn)了原型系統(tǒng)CATalyst來實現(xiàn)對L3緩存?zhèn)刃诺拦舻姆烙?CATalyst通過將L3緩存劃分成不同的管理域緩存,從而實現(xiàn)不同虛擬機在L3緩存的隔離.這種方法不僅可以防御Prime-Probe攻擊,同時也在一定程度上防御了基于頁復用技術的Flush-Reload攻擊.
2017年,Yan等人[88]提出一種針對共享緩存的緩存行替換算法SHARP,需要很小的硬件修改就可以有效防御現(xiàn)有的跨核共享緩存攻擊.2019年Werner等人[89]提出了新的緩存設計方法SCATTERCACHE來防止緩存攻擊,它排除了特定緩存組的一致性,使基于驅逐集的緩存攻擊不再適用.
還有一類云環(huán)境中防御緩存?zhèn)刃诺拦舻牡湫图夹gPage Coloring[90].在云環(huán)境中,要對虛擬機之間的緩存進行隔離,研究人員需要通過重新設計內存到緩存的映射方案來實現(xiàn).這類方法因為涉及到物理內存地址到緩存的映射,所以需要系統(tǒng)級別(系統(tǒng)內核或虛擬化層)的修改,這種緩存隔離策略通常稱為Page Coloring.Chameleon[91]提供了1個低消耗的自動化Page Coloring機制,在安全域執(zhí)行時提供緩存隔離.安全進程將被分配在具有特定安全色的緩存中.安全色緩存只提供給關鍵安全敏感操作使用,與其同駐于相同硬件的其他虛擬機不可訪問這塊區(qū)域.STEALTHMEM[92]也是基于Page Coloring實現(xiàn)的系統(tǒng)級緩存攻擊防御,其為每個核心管理一組鎖定的緩存行,對這些緩存行的使用不會發(fā)生換出的情況.虛擬機可以將敏感數(shù)據(jù)加載到鎖定的緩存行,鎖定的緩存行為該虛擬機獨占,這樣一來每個虛擬機可以使用專屬的特殊頁面來存儲敏感數(shù)據(jù),其對敏感數(shù)據(jù)的訪問也不會因為共享而泄露,從而保障虛擬機之間的安全.
3.2.2 緩存訪問隨機化
緩存訪問隨機化的防御方法是通過將內存到緩存的映射隨機化,使其并不按照固定的映射策略進行,破壞攻擊者通過監(jiān)測緩存特定位置獲取信息.RPcache[84]和 Newcache就是使用內存到緩存映射隨機化的方法來實現(xiàn)防御.RPcache為需要保護的可信域提供單獨的映射表,可以將索引位映射到不同組,防止了攻擊者將受保護進程緩存行換出的情況發(fā)生,可防御基于Flush-Reload進行目標信息探測的攻擊.Newcache通過引入重映射表,利用邏輯上“直接映射緩存”架構將訪問地址隨機映射到某緩存行,實現(xiàn)緩存訪問的隨機化.2014年,Liu等人[93]提出一個基于硬件的解決方案,將內存地址到緩存的映射變?yōu)檫\行時自動隨機化,這種緩存映射隨機化的方式對性能的影響較小.
2015年,Crane等人[94]提出了利用軟件相異性實現(xiàn)緩存攻擊防御的方式.該工作利用代碼復制和控制流隨機化實現(xiàn)了較細粒度的程序多樣化來防御緩存攻擊,在保持了原始程序語義的同時確保指令集級別每一副本的不同.此方法通過動態(tài)變化程序運行時的控制流,使攻擊者無法從緩存中探測到目標程序的執(zhí)行意圖.
另外一些研究工作基于編譯器實現(xiàn)緩存訪問隨機化,使程序在執(zhí)行內存/緩存訪問時不易被攻擊者追蹤.Raccoon[95]基于混淆程序在源碼層制造出程序具有很多執(zhí)行路徑的假象,使攻擊者難以通過程序使用緩存的規(guī)律推斷出分支的邏輯信息,進而防御多種側信道攻擊,如利用地址痕跡、緩存使用、數(shù)據(jù)大小等作為側信道的攻擊.
3.2.3 緩存計時破壞
大多數(shù)緩存?zhèn)刃诺拦舴椒ㄒ揽坎煌瑺顟B(tài)下對特定緩存的訪問時間差異來推測目標信息,因此,可以通過破壞系統(tǒng)中計時的精度來破壞依賴時間度量的緩存攻擊,進而達到防御的效果.
部分研究人員希望通過增大計時粒度實現(xiàn)緩存攻擊的防御.Vattikonda等人[96]提出在虛擬化環(huán)境中通過去掉細粒度的時間計數(shù)來限制惡意虛擬機探測緩存的能力,他們在x86架構的Xen虛擬化平臺上通過修改rdtcs指令返回值來模糊時間度量,進而使該惡意虛擬機獲取的時間粒度變粗,無法基于高精度的計時信息來分析緩存狀況,從而實現(xiàn)緩存攻擊防御.
一些研究人員試圖通過在計時器中添加噪聲來實現(xiàn)緩存?zhèn)刃诺拦舻姆烙?,如Martin等人[97]提出的防御措施TimeWarp.TimeWarp通過在攻擊者進行時間度量時加入任意數(shù)值的時間噪聲使其無法區(qū)分緩存命中與未命中的狀態(tài),使攻擊者無法從被噪聲污染的數(shù)據(jù)中獲取有效信息.TimeWarp中的計時器分析較為全面,它將時間計數(shù)分為內部時間計數(shù)、外部時間計數(shù)和指令時間計數(shù),這3種時間計數(shù)分別對應于硬件計時器、外部中斷或其他設備傳輸網(wǎng)絡包的傳輸時間,以及執(zhí)行時間周期確定的指令(如執(zhí)行周期為1 cycle的ADD指令),通過對這些時間計數(shù)進行混淆來防御攻擊.
還有研究人員研究實現(xiàn)恒定時間的防御方法,x86處理器中浮點加法和乘法指令的運行時間根據(jù)操作數(shù)的不同差距很大,Andrysco等人[98]設計了一個新的數(shù)學庫libfixedtimefixedpoint來緩解浮點數(shù)據(jù)時間通道的問題,該庫可用于非整數(shù)運算,且所有操作都在恒定時間內完成.也有一些研究人員提出通過禁用系統(tǒng)中的高精度計時器來實現(xiàn)緩存?zhèn)刃诺拦舴烙?,如Gullasch等人[11]實現(xiàn)的Cache games方法則提出通過禁用細粒度的時間計數(shù)指令rdtsc來緩解緩存攻擊.但在信息系統(tǒng)中,很多應用程序基于高精度的計時指令rdtsc實現(xiàn),所以這一類實現(xiàn)方式并不理想.3.2.4 漏洞分析與修復
軟件設計和硬件實現(xiàn)上的一些漏洞往往是攻擊者利用的對象,例如密碼算法實現(xiàn)的邏輯漏洞、CPU亂序執(zhí)行特性等.部分研究人員針對這些側信道攻擊風險展開研究工作,致力于軟硬件漏洞的分析和修復,防范于未然.
Doychev等人[99]實現(xiàn)了緩存?zhèn)刃诺漓o態(tài)分析工具CacheAudit,該工具以二進制文件作為輸入,通過靜態(tài)分析自動預測程序的緩存使用狀況,評估其對各類型緩存攻擊的安全對抗情況,預測可能存在的各類型側信道,進而給出改進建議.Wang等人[100]提出針對程序的靜態(tài)分析方法CacheS.CacheS基于SAS(secret-augmented symbolic)域實現(xiàn),SAS 通常用來在大規(guī)模敏感軟件上執(zhí)行抽象表示,完成對程序細粒度敏感信息(如密鑰及密鑰依賴)的跟蹤.CacheS可以做到對實際使用的加密系統(tǒng)進行完整的靜態(tài)度量,覆蓋率及準確率較高,能夠在一定程度上防御緩存?zhèn)刃诺拦?Hassan等人[101]組合了2個獨立開發(fā)的側信道攻擊(side-channel attack,SCA)安全框架來識別和測試安全漏洞,并實現(xiàn)了對Mozilla的NSS安全庫的庫一級SCA安全性評估.
Gras等人[102]針對商業(yè)的CPU微體系架構,通過實現(xiàn)自動化的黑盒側信道分析來發(fā)現(xiàn)CPU微體系結構中的側信道攻擊風險;還有研究者通過修補微體系結構上導致信息泄露的漏洞來防御相關的緩存?zhèn)刃诺拦?Andrea等人[103]提出一種用于研究微體系結構攻擊及其緩解措施的新工具Speculator,用于研究單個代碼片段或更復雜的場景(例如分支目標注入攻擊)中微體系結構行為.Yu等人[104]提出數(shù)據(jù)無關的指令集架構(instruction set architecture, ISA)擴展,該擴展的設計在指令層面保證了現(xiàn)有數(shù)據(jù)無關的程序(不在共享資源上施加敏感的數(shù)據(jù)依賴)的安全執(zhí)行,從而阻塞側信道攻擊.Koruyeh等人[105]提出的SpecCFI防御機制,利用控制流完整性(control-flow integrity, CFI)信息約束投機執(zhí)行過程中的非法控制流,以限制前向控制流路徑(間接調用和分支)上的危險推測,從而防御Spectre類型攻擊.
3.2.5 其他防御方法
隨著新的硬件機制的出現(xiàn),研究者開始嘗試利用硬件特性實現(xiàn)針對緩存?zhèn)刃诺拦舻姆烙鏣SX,SGX等技術.
Gruss等人[106]提出了針對緩存?zhèn)刃诺拦舻姆烙胧〤loak,其核心思想是利用TSX技術防止敏感操作或數(shù)據(jù)訪問時緩存未命中情況的發(fā)生,防止攻擊者探測緩存訪問信息.Cloak利用TSX事務內存來執(zhí)行可能泄露信息的敏感算法,保證所有敏感數(shù)據(jù)和代碼在執(zhí)行時受事務內存保護,以增加緩存攻擊的難度,甚至阻止攻擊的發(fā)生.
Weiser等人[107]提出基于SGX可信執(zhí)行環(huán)境的緩存?zhèn)刃诺拦舴烙椒⊿GXJail.SGXJail針對以Enclave為宿主的惡意軟件提出了實際的防御機制,其通過對SGX進行硬件擴展,利用Intel的內存保護密鑰限制Enclave的執(zhí)行,實現(xiàn)了對惡意Enclave更高效的防御,一定程度防止了Enclave間的緩存?zhèn)刃诺拦?Ahmad等人[108]提出在SGX商用硬件上的混淆引擎方法OBFUSCURO,該方法可以用來防御緩存模式攻擊和緩存計時攻擊.Weichbrodt等人[109]則給出一個SGX Enclave性能分析工具集SGX-perf,可自動化地為SGX應用程序提供細粒度的性能關鍵事件分析,為SXG可信環(huán)境中緩存?zhèn)刃诺腊踩治鎏峁﹨⒖?
緩存?zhèn)刃诺拦綦S著計算機技術的發(fā)展及應用環(huán)境的變化而不斷創(chuàng)新,攻擊者在將傳統(tǒng)緩存?zhèn)刃诺拦粼磉M行擴展的同時也在不斷提出新的緩存利用方式,設計和構造令安全防御人員感到棘手的側信道攻擊方法.Meltdown及Spectre漏洞的曝出將緩存?zhèn)刃诺拦舻难芯坑滞葡蛄诵碌母叱?,Intel SGX等安全機制的出現(xiàn)則使緩存?zhèn)刃诺拦粞芯款I域進一步擴大.
緩存?zhèn)刃诺拦舻脑O計往往很精巧,能夠造成較強的攻擊效果.但緩存?zhèn)刃诺拦舻膶嵤l件也比較苛刻,從實際攻擊場景中獲取有效信息存在一定難度.從緩存?zhèn)刃诺拦舭l(fā)展來看,攻擊實現(xiàn)的設計思路與信道構造條件基本不變,但近年的研究工作正嘗試著朝攻破更強的安全隔離發(fā)展.一方面,隨著緩存結構向non-inclusive[110]的模式發(fā)展,此前主要針對inclusive緩存攻擊的可靠性可能受到動搖.AMD處理器一直在使用獨立LLC[111],在L1緩存的數(shù)據(jù)不一定存在于LLC,也就不能通過LLC探測目標信息,Intel處理器也在向這個方向轉變[32].針對noninclusive緩存的攻擊或許是未來值得研究的一個方向.另一方面,由于微體系架構中的漏洞相對徹底修補的復雜度和代價更高,近年來新提出的攻擊也逐漸偏向于利用TLB,LFB等更低層次的緩存結構中的漏洞來構造側信道,再結合Flush-Reload等攻擊方法來提取泄露的信息.
在緩存?zhèn)刃诺拦舴烙矫?,研究者一方面針對典型攻擊不斷地提出新型防御方法,如攻擊檢測、緩存隔離、地址隨機化、計時器混淆、軟硬件漏洞分析與修復等方式;另一方面,針對新型場景下的緩存?zhèn)刃诺拦?,提出在特定條件下的防御措施,如在可信環(huán)境SGX中的緩存?zhèn)刃诺拦舻姆烙?目前針對緩存?zhèn)刃诺拦舻姆烙?,軟件層面的實現(xiàn)方式多引入較大性能開銷,硬件防御方法多為設計思路,未能實際落地.未來,基于新型CPU體系結構和硬件設計的防御方案或許是從根本上杜絕緩存?zhèn)刃诺拦舻淖罱K出路.
綜上,對于現(xiàn)代處理器架構及操作系統(tǒng)來說,緩存?zhèn)刃诺拦羧匀皇瞧渲匾陌踩{.隨著新型攻擊方法和高效率攻擊手段的不斷出現(xiàn),針對緩存?zhèn)刃诺拦舻难芯渴钱斚聼狳c,設計實現(xiàn)有效的防御手段同樣有著重要意義.
作者貢獻聲明:張偉娟提出論文主體研究思路和框架,撰寫論文初稿;白璐參與論文主體研究思路的討論,整理文獻,以及審閱和修改論文;凌雨卿收集和梳理相關文獻,制作圖表,排版與??闭撐模惶m曉負責部分內容的撰寫與修改;賈曉啟參與部分內容撰寫.