王 崇 魏 帥 張 帆 宋 克
(國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心(戰(zhàn)略支援部隊信息工程大學) 鄭州 450003)
隨著Spectre[1],Meltdown[2],Foreshadow[3],ZombieLoad[4]等一系列CPU硬件漏洞的發(fā)現(xiàn),人們在研究應(yīng)用軟件和操作系統(tǒng)漏洞的同時,也開始重視硬件層面,尤其是由于硬件架構(gòu)特點而引發(fā)的安全威脅.側(cè)信道攻擊是利用計算機硬件的一種主要的攻擊方式,它利用微架構(gòu)狀態(tài)開展攻擊,可能會造成用戶的信息泄露;同時,它也具有較高的隱蔽性,對用戶信息和設(shè)備安全帶來極大的安全威脅.
側(cè)信道攻擊[5](side channel attack, SCA),是指對軟件在物理設(shè)備上執(zhí)行過程中暴露出來的某些特征,如聲音、電磁輻射、溫度等側(cè)信道信息(side channel information)分析,得出設(shè)備內(nèi)部的執(zhí)行情況,推斷出用戶信息的一種攻擊方式.這種攻擊方式常用來繞過加密算法等安全機制提供的安全性,造成用戶信息泄露.一般而言,側(cè)信道攻擊具有3個方面特點[6]:1)難以檢測,大部分側(cè)信道攻擊不需要特殊的權(quán)限,只要能夠完成對側(cè)信道信息的采集,就可以開展后續(xù)分析;2)防御成本高,減緩側(cè)信道攻擊會對系統(tǒng)的性能帶來很大影響;3)平臺依賴性高,側(cè)信道攻擊利用的不是算法或程序本身存在的問題,而是程序的實現(xiàn)及運行過程中存在的問題進行攻擊,嚴重依賴于程序的執(zhí)行環(huán)境以及硬件架構(gòu)等.而基于微架構(gòu)的側(cè)信道攻擊是近年來新興的一種側(cè)信道攻擊方式,它對處理器緩存(cache)[1-4,6-24]、內(nèi)存管理單元(memory management unit, MMU)[25]、快表(translation lookaside buffer, TLB)[26]、總線(bus)[27]等微架構(gòu)進行監(jiān)控,并根據(jù)一些先驗知識獲取出用戶程序的執(zhí)行狀態(tài),從而造成用戶信息泄露.
微架構(gòu)側(cè)信道攻擊利用CPU硬件上的漏洞展開攻擊,它屬于一種來自硬件的威脅.處理器緩存具有3個特征:1)目前絕大多數(shù)處理器中有緩存結(jié)構(gòu);2)緩存可以擁有一個系統(tǒng)細粒度的數(shù)據(jù)訪問和指令執(zhí)行的狀態(tài)信息;3)緩存狀態(tài)不同時,程序的執(zhí)行結(jié)果相同,但運行時間等外部特性會存在較大的差異.攻擊者可以通過這些特征可以很方便地構(gòu)建側(cè)信道,因此這種攻擊方式最具有吸引力,相關(guān)研究也相對較多.2006年Osvik等人[8]使用Prime+Probe實現(xiàn)了在同一個處理器核上的側(cè)信道攻擊,并展示了如何獲取出AES加密算法的密鑰,隨后,由此展開了對這種攻擊方式的研究.2009年Ristenpart等人[9]將這種攻擊方式擴展到云環(huán)境中,在EC2服務(wù)器上完成了微架構(gòu)側(cè)信道攻擊.但是之前的攻擊方式都是使用第一級緩存進行攻擊,攻擊的范圍和能力都相對有限,Yarom等人[10]首次使用共享庫利用最后一級緩存(last level cache, LLC)完成跨核側(cè)信道攻擊.隨后,Liu等人[14]對不存在共享庫等共享文件的前提下使用LLC完成側(cè)信道攻擊的難點進行分析,并成功使用Prime+Probe實現(xiàn)了跨核微架構(gòu)側(cè)信道攻擊.
微架構(gòu)側(cè)信道攻擊尤其是基于緩存的微架構(gòu)側(cè)信道攻擊嚴重威脅用戶的信息安全,造成用戶密碼等敏感信息泄露.緩存?zhèn)刃诺拦舴烙胧┑南嚓P(guān)研究工作主要圍繞重構(gòu)軟件代碼、增加操作系統(tǒng)功能等方面展開.文獻[28-29]從緩存?zhèn)刃诺拦羰侄巍⒎烙绞降冉嵌葘彺鎮(zhèn)刃诺拦舻南嚓P(guān)工作進行歸納總結(jié);文獻[30]重點考慮了嵌入式設(shè)備和云環(huán)境中的相關(guān)防御手段.但是這些研究只是從防御的具體措施、實施方法的角度和防御的層次對現(xiàn)有防御手段進行分類,沒有從攻擊模型的角度解釋防御的安全性,同時對硬件架構(gòu)的關(guān)注相對較少.因此,本文從攻擊模型角度對現(xiàn)有的防御措施進行分析比較,重點介紹了新型安全緩存架構(gòu)設(shè)計方案.
本文的主要貢獻有3個方面:
1) 總結(jié)歸納緩存?zhèn)刃诺拦舻哪P?,并結(jié)合攻擊模型討論具體的攻擊步驟;
2) 對現(xiàn)有的防御手段進行分析比較;
3) 討論緩存?zhèn)刃诺拦舴烙胧┟媾R的挑戰(zhàn)以及未來研究方向.
基于緩存的側(cè)信道攻擊可以實現(xiàn)跨進程、跨處理器核以及跨虛擬機的攻擊,這種攻擊方式對市面上幾乎所有主流架構(gòu)的處理器(如Intel,AMD,ARM[31])等都有效,攻擊的范圍涵蓋RSA,AES,ECC等加密算法及其他軟件甚至操作系統(tǒng),可以在本地處理器上甚至遠程虛擬機上開展攻擊.
本節(jié)首先結(jié)合RSA加密算法,介紹了緩存?zhèn)刃诺馈奥┒础薄肮袅6取币约熬唧w的攻擊過程;之后討論了緩存?zhèn)刃诺拦裟P?
微架構(gòu)側(cè)信道“漏洞”是指可執(zhí)行程序的某一部分區(qū)域,它可以位于代碼段,也可以位于數(shù)據(jù)段,這段代碼或數(shù)據(jù)本身邏輯和設(shè)計沒有什么問題,但是這部分內(nèi)存區(qū)域與用戶敏感信息相關(guān),攻擊者可以利用這段代碼的執(zhí)行情況或數(shù)據(jù)的訪問情況判斷出用戶信息,從而造成用戶信息泄露.例如,對于平方-乘算法而言,由于算法1行⑦~⑩是一個與用戶密鑰相關(guān)的代碼分支,也就是說,攻擊者可以根據(jù)這一分支的執(zhí)行情況推斷出用戶密鑰,因此稱算法1行⑦~⑩為微架構(gòu)側(cè)信道“漏洞”.
算法1.平方-乘算法.
① functionexponent(b,e,m)
② begin
③x=1;
④ fori=|e|-1 downto 0 do
⑤x=x2;
⑥x=xmodn;
⑦ if (ei=1) then
⑧x=x×b;
⑨x=xmodm;
⑩ end if
攻擊者可以通過用戶程序的整體執(zhí)行時間“監(jiān)聽”,也可以通過內(nèi)存訪問情況“監(jiān)聽”獲取用戶程序執(zhí)行信息,不同攻擊方式的信息來源不同,“監(jiān)聽”手段不同,我們稱攻擊者“監(jiān)聽”用戶程序的手段為攻擊者的攻擊粒度.
一般來講,根據(jù)微架構(gòu)的側(cè)信道攻擊的獲取信息的來源,可以把攻擊方式分為:時間驅(qū)動(time-based)攻擊、訪問驅(qū)動(access-based)攻擊[32]和蹤跡驅(qū)動(trace-based)攻擊,表1從信息來源、具體特點以及代表攻擊手段對3種攻擊方式進行了比較.“Evict+Time”[8]是時間驅(qū)動攻擊的典型代表,具體的攻擊過程為:
1) 攻擊者測量程序在正常工作下執(zhí)行所需要的時間;
2) 攻擊者根據(jù)之前確定的漏洞,填充對應(yīng)位置緩存,把這部分內(nèi)容從緩存中“清除”;
3) 攻擊者再次測量程序執(zhí)行所需要的時間,利用整體上的時間差異判斷用戶程序的執(zhí)行流程.
攻擊者可以通過程序整體執(zhí)行的時間差異推測出程序的執(zhí)行流程,此時攻擊粒度為整個用戶程序.但是,這種攻擊方式需要多次觸發(fā)用戶程序,且需要判斷程序的整體執(zhí)行時間,精度較差,探測時間較長,因此這類攻擊方式應(yīng)用范圍相對較小.
“Flush+Reload”[10,33]是訪問驅(qū)動攻擊的典型代表,這種攻擊方式的攻擊粒度為一個緩存塊,具體攻擊步驟為:
1) 攻擊者根據(jù)具體的處理器判斷緩存命中與缺失的閾值;
2) 根據(jù)之前確定的漏洞,flush指令強制清除對應(yīng)位置的緩存塊;
3) 等待用戶程序執(zhí)行;
4) 重新載入漏洞位置代碼,根據(jù)這次訪問時間與閾值的關(guān)系,判斷用戶程序執(zhí)行情況.
而蹤跡驅(qū)動需要采集加密算法執(zhí)行過程中所有緩存訪問的命中和缺失序列[12],并結(jié)合明文或密文推測出用戶密鑰,蹤跡驅(qū)動的攻擊方式能夠獲取的信息最多,但往往需要操作系統(tǒng)等的支持才能獲取所有緩存訪問情況.
在3種攻擊中,蹤跡驅(qū)動需要系統(tǒng)提供的信息最多,需要能夠?qū)ο到y(tǒng)進行持續(xù)的探測,精度也最高;時間驅(qū)動只需要對程序的執(zhí)行時間進行探測,利用不同硬件狀態(tài)的不同執(zhí)行時間,但是容易受到外界噪聲的干擾;訪問驅(qū)動需要能訪問與用戶所使用的資源,判斷用戶是否執(zhí)行過與該區(qū)域相關(guān)的訪問操作.
Table 1 Comparison Between Different Microarchitecture Side Channel Attacks表1 微架構(gòu)側(cè)信道攻擊方式比較
在討論基于緩存的側(cè)信道攻擊模型之前,我們首先假定攻擊者具有3方面能力:
1) 攻擊者要與被攻擊的對象存在共享的硬件資源,包括緩存、總線等;
2) 攻擊者可以隨意訪問自己用戶空間中的內(nèi)存;
3) 攻擊者可以測量訪問某個內(nèi)存所需要的時間.
這些條件在現(xiàn)代計算機系統(tǒng)中或者云環(huán)境中基本能夠滿足.
一般而言,緩存?zhèn)刃诺拦艨梢愿鶕?jù)攻擊的目標分為針對主機的攻擊和針對虛擬機的攻擊;根據(jù)攻擊的模式可以分為隱蔽信道攻擊和側(cè)信道攻擊;根據(jù)攻擊對象把攻擊分為針對不同加密算法的攻擊、針對操作系統(tǒng)的攻擊等.本文按照攻擊者對緩存的利用方式不同,把攻擊分為基于復用的緩存?zhèn)刃诺拦艉突跊_突的緩存?zhèn)刃诺拦?
基于復用的緩存?zhèn)刃诺拦?,指攻擊者與用戶存在共享內(nèi)存,例如共享的庫、共享文件等,且攻擊者利用的“漏洞”存在于共享內(nèi)存中,攻擊者可以獲取到該區(qū)域的內(nèi)存訪問模式.
基于沖突的緩存?zhèn)刃诺拦羰侵?,攻擊者與用戶不存在共享內(nèi)存,或有可能存在共享內(nèi)存,但是“漏洞”不存在于共享內(nèi)存中,攻擊者只能通過對自己的地址空間中的內(nèi)容訪問,影響正常用戶進程中對緩存的使用,推斷出用戶對某物理地址的訪問模式.
Fig. 1 Model of cache based side channel attack圖1 基于緩存的側(cè)信道攻擊模型
如圖1所示,根據(jù)攻擊者實施基于緩存的微架構(gòu)側(cè)信道攻擊需要采取的操作,攻擊過程可以分為4個步驟:
1) 確定“微架構(gòu)側(cè)信道漏洞”;
1.3 旅游產(chǎn)業(yè)的郁勃 目前,我國旅游產(chǎn)業(yè)正處于“多元化、全域化、高質(zhì)量、大眾化”新格局的構(gòu)建時期。2013年,國家出臺的《國民旅游休閑綱要(2013-2020)》提出:至2020年基本建成與小康社會相適應(yīng)的現(xiàn)代國民旅游休閑體系。隨后又陸續(xù)發(fā)布了關(guān)于“旅游業(yè)改革、特色旅游城鎮(zhèn)建設(shè)、旅游投資和消費”等系列政策,“從旅游產(chǎn)品的供給到旅游產(chǎn)品質(zhì)量的提升”這一政策性導向從根本上奠定了我國旅游產(chǎn)業(yè)發(fā)展的基調(diào),這不僅是旅游產(chǎn)業(yè)發(fā)展的一項高標準,更是對我國經(jīng)濟產(chǎn)業(yè)發(fā)展的一個嚴要求,我國旅游業(yè)將進入提質(zhì)增效的攻堅階段。
2) 確定攻擊者與用戶程序的“沖突域”;
3) 攻擊者通過“沖突域”對“微架構(gòu)側(cè)信道漏洞”的位置進行監(jiān)聽,獲取出微架構(gòu)狀態(tài)的變化;
4) 攻擊者根據(jù)獲取到的信息以及一些先驗知識,還原用戶信息.
本節(jié)根據(jù)之前討論的攻擊者能力按照攻擊模型對攻擊步驟進行詳細介紹.
1.2.1 確定“漏洞”
根據(jù)“漏洞”的目標程序?qū)?yīng)地址所包含的內(nèi)容不同,微架構(gòu)側(cè)信道漏洞主要包括兩大類:1)基于指令執(zhí)行的漏洞;2)基于數(shù)據(jù)訪問的漏洞.
基于指令執(zhí)行的漏洞是指用戶程序在執(zhí)行過程中,存在與用戶信息相關(guān)的指令控制流,例如把用戶信息作為分支跳轉(zhuǎn)指令的轉(zhuǎn)移條件等.通過這些對這些指令的監(jiān)控,攻擊者可以分析出用戶的指令執(zhí)行過程,之后對攻擊者的信息進行推斷;基于數(shù)據(jù)訪問的漏洞是指用戶程序訪問的數(shù)據(jù)與用戶信息相關(guān),例如把用戶信息作為索引,查找某個地址的數(shù)據(jù)內(nèi)容.攻擊者可以通過觀察這些內(nèi)存的訪問情況,獲取出用戶信息.
攻擊者在攻擊過程中,首先要確定出“漏洞”源,才能對“漏洞”確定的地址進行“監(jiān)聽”.
根據(jù)攻擊者和用戶共享的層面不同,攻擊可以分為跨進程攻擊、跨處理器核攻擊、跨虛擬機攻擊.與其他的攻擊方式相比,跨虛擬機的攻擊首先要進行“虛擬機同駐”的判斷,即判斷攻擊者和用戶所在的虛擬機之間的關(guān)系是處于同一個處理器核,還是同一個處理器中不同的處理器核上;或者不同的虛擬機運行于不同的處理器上.通過“虛擬機同駐”判斷,可以分析出攻擊者與用戶之間的共享結(jié)構(gòu),就可以把問題轉(zhuǎn)化為其他2種攻擊方式.
如圖2的處理器共享層次所示,跨進程攻擊是指攻擊者和用戶運行于同一個處理器核之上,可以共享的資源包括緩存、內(nèi)存、內(nèi)存控制器等資源;跨處理器核攻擊是指當攻擊者和用戶運行于不同的處理器核之上,可以共享的資源包括最后一級緩存、內(nèi)存等;跨虛擬機攻擊主要指在多租戶的云服務(wù)器中,攻擊者和用戶位于不同的虛擬機之上[34],完成“虛擬機同駐”后,跨虛擬機的攻擊方式與其他2種攻擊的攻擊方式無異,而當處理器位于不同的物理封裝時,共享內(nèi)存控制器同樣會成為被攻擊的對象[35].
Fig. 2 Contended resources in a hierarchical multicore system[29]圖2 層次化多核系統(tǒng)中的爭用資源[29]
當攻擊者利用的“漏洞”存在于共享內(nèi)存中時,攻擊者可以通過對該“漏洞”對應(yīng)地址進行直接訪問,影響“漏洞”對應(yīng)內(nèi)容在緩存中的狀態(tài);而“漏洞”不存在于共享內(nèi)存中時,攻擊者則需要首先分析出一組“虛擬地址集合”,攻擊者通過這個集合影響“漏洞”對應(yīng)的代碼或數(shù)據(jù)在緩存中的狀態(tài),這個集合被稱為“沖突域”.
具體來講,沖突域[36]是一組虛擬地址的集合,攻擊者可以訪問這個集合中的地址.它具有3個特點:
1) “沖突域”與目標地址影響同一個緩存微架構(gòu)狀態(tài)(比如都可以對同一塊Cache的狀態(tài)產(chǎn)生影響).
2) 通過沖突域的訪問可以把目標地址所涉及到的微架構(gòu)狀態(tài)初始化到攻擊者可以控制的狀態(tài).
3) 通過沖突域的訪問可以感知目標地址對應(yīng)的微架構(gòu)狀態(tài)的變化.
當選取的“沖突域”太大時,一方面造成比較大的“噪聲”,對攻擊過程產(chǎn)生影響;另一方面會增加攻擊的時間.因此在尋找“沖突域”的過程中,較小的沖突集(small conflict groups, SCG)對攻擊過程更有意義[13].一般來講,攻擊者選擇的沖突域的大小與緩存關(guān)聯(lián)度相同[36-37].
1.2.3 信息獲取
微架構(gòu)狀態(tài)的不同,不會對程序的執(zhí)行結(jié)果產(chǎn)生影響,但是會對程序執(zhí)行過程產(chǎn)生影響.具體可以有3個方面的效果:
1) 執(zhí)行時間的區(qū)別.數(shù)據(jù)或代碼位于不同的存儲器層次結(jié)構(gòu)時,訪問時間會存在較大的差異.對于Xeon E5-2430處理器[10]從LLC讀取數(shù)據(jù)需要55~82個時鐘周期,而從內(nèi)存中讀取數(shù)據(jù)則需要230個時鐘周期;而對于Intel i5-2430M處理器[16],訪問LLC需要50個硬件周期,而訪問內(nèi)存則需要220個時鐘周期.
2) 引發(fā)中斷事件.在使用Intel TSX指令的時候,當檢測到緩存被驅(qū)逐時,會引發(fā)事務(wù)中斷[21],攻擊者可以捕捉這些事件,對用戶行為進行分析.
3) 硬件結(jié)構(gòu)資源使用情況.程序在執(zhí)行過程中,有可能對某些硬件單元獨占或鎖定[27],導致別的程序不能使用,攻擊者可以通過對這些硬件資源的檢測,分析用戶正在執(zhí)行的一些操作.
但是,對中斷事件的捕獲,需要操作系統(tǒng)的支持,對某些硬件結(jié)構(gòu)進行監(jiān)控分析,精度較差,應(yīng)用范圍相對較小.而緩存幾乎存在于所有的處理器中,且粒度較細,精度較高,因此把緩存狀態(tài)作為獲取信息的途徑是最為廣泛的.
攻擊者通過緩存狀態(tài)獲取的信息,需要有一個比較精確的時間統(tǒng)計信息,判斷“漏洞”位置所處的存儲器層次結(jié)構(gòu).目前攻擊者獲取“精準時鐘”有3個途徑[38]:
1) 硬件內(nèi)部的時鐘源;
2) 其他計算機或設(shè)備的時鐘源;
3) 軟件生成的虛擬時鐘源.
1.2.4 信息還原
攻擊者獲取到微架構(gòu)狀態(tài)信息的變化后,需要根據(jù)一定的先驗知識,對獲取到的內(nèi)存訪問模式等信息進行處理,包括消除信息中的噪聲、還原信息的控制流、還原用戶內(nèi)存訪問情況等.通過這些操作及分析,攻擊者可以獲取密鑰[16]、用戶行為信息[13]、內(nèi)核空間的分布信息[24]等.
但是,在實際的攻擊過程中,這一步往往是通過離線操作進行的,攻擊者不需要再與用戶進行信息交互,也不需要“監(jiān)聽”內(nèi)存訪問情況,因此攻擊者就不需要過多關(guān)注“執(zhí)行環(huán)境”,而本文重點關(guān)注攻擊者在攻擊過程中對硬件結(jié)構(gòu)等的利用情況,討論攻擊者和用戶通過“硬件架構(gòu)”完成“交互”,因此這部分不作為本文的討論內(nèi)容.
根據(jù)1.2節(jié)攻擊步驟的討論,攻擊者想要實施側(cè)信道攻擊,首先就要判斷出“監(jiān)聽位置”,即找到緩存?zhèn)刃诺馈奥┒础保黄浯涡枰_定“監(jiān)聽手段”,即“沖突域”;最后攻擊者才能“監(jiān)聽”出用戶程序的執(zhí)行情況,完成信息竊取.
若攻擊者完成信息竊取之前的相關(guān)工作,攻擊也就無從談起.因此,根據(jù)防御的目的和效果,本文把目前的防御手段分為代碼檢測、緩解“漏洞”、降低測量精度3類.
緩存?zhèn)刃诺罊z測技術(shù)(cache side channel detec-tion technology),即代碼檢測技術(shù),是指通過檢測用戶程序,判斷所執(zhí)行程序中是否存在可以被緩存?zhèn)刃诺浪玫摹奥┒础钡募夹g(shù).它從用戶程序的角度實現(xiàn)對緩存?zhèn)刃诺赖姆烙?
表2列舉了近年來關(guān)于代碼檢測工具的相關(guān)研究,并從檢測工具的分析方法、輸入輸出、可以發(fā)現(xiàn)的漏洞類型,以及是否需要用戶程序的源代碼角度進行比較,最后展示了各個檢測工具的分析性能.
代碼檢測技術(shù)主要包括兩大類:靜態(tài)分析和動態(tài)分析.Doychev等人[39]及其擴展工作[40]使用抽象解釋的方式,對3種常見的基于Cache的攻擊方式進行分析,首次采用自動化的方式檢測緩存?zhèn)刃诺缆┒?CacheAudit及其擴展工作給出的是用戶由于微架構(gòu)側(cè)信道漏洞存在造成的信息泄露的上限,但是有可能會給出一個過高的上限而導致結(jié)果無意義.也就是說,CacheAudit工具只能驗證代碼的安全性,而不能判斷代碼是不安全的.
靜態(tài)分析的方式雖然具有較高的代碼覆蓋率,但是只能對程序是否存在側(cè)信道的風險進行判斷,不能準確地描述出漏洞的具體位置和漏洞的成因.Zankl等人[41]使用PIN作為動態(tài)二進制測量工具,對二進制代碼運行過程中的執(zhí)行過程的內(nèi)存訪問情況進行跟蹤,檢測微架構(gòu)側(cè)信道漏洞的位置.此外,Carré等人[42]采用動靜結(jié)合的分析方式,把依賴于密碼的控制流或者依賴查找表作為可能的側(cè)信道漏洞點,在“可疑點”處設(shè)置斷點,統(tǒng)計代碼的執(zhí)行數(shù)目和訪問模式,對代碼中存在的這些可能的漏洞進行進一步的確認,但是在分析過程中,單純考慮了內(nèi)存查找表訪問和控制流程,沒有過多地考慮Cache本身的影響.針對這個問題,Irazoqui等人[43]在MI-Tool中首先使用KLEE作為污點分析的工具,分析出密碼相關(guān)的指令或數(shù)據(jù),之后在這些“疑點”前后分別插入Cache強制清除和Cache重新訪問的代碼,使用不同的輸入執(zhí)行代碼,獲得Cache的蹤跡,最終對這些“疑點”是否屬于側(cè)信道進行驗證.
之前的檢測工具雖然可以對用戶程序進行檢測,但是代碼覆蓋率相對較低,且沒有展示出攻擊者對“漏洞”的具體利用手段.隨后,Brotzman等人[44]提出CaSym,為了避免不同的編譯器對檢測工具的影響,CaSym使用IR-level代碼作為輸入,并對Cache的行為建模,使用抽象的Cache模型,使用符號執(zhí)行對程序的執(zhí)行路徑進行分析,對目前已知的基于Cache的攻擊方式進行檢測.CacheD[45]將一個具體的程序執(zhí)行蹤跡作為輸入,并在符號執(zhí)行期間符號化敏感信息,以識別敏感信息相關(guān)的內(nèi)存訪問.CacheD探索與輸入動態(tài)跟蹤相同的執(zhí)行路徑.但是只能探測與輸入相同的路徑,那些未被探測的代碼中的漏洞或那些由依賴于秘密的分支引起的漏洞不能被緩存檢測到.Weiser等人[46]開發(fā)了DATA工具.該工具使用不同輸入激勵多次執(zhí)行程序,找出程序執(zhí)行過程中地址軌跡的不同點;再用一個固定的輸入與多個隨機的輸入,統(tǒng)計找出真正的泄漏點,最后對安全關(guān)鍵軟件進行測試和驗證,揭示用戶秘密信息與程序執(zhí)行之間的依賴關(guān)系.
漏洞,“×”表示不能檢測出這種類型漏洞.
代碼檢測不能同時兼顧高精度、代碼覆蓋率以及整個系統(tǒng)的擴展性,因此在實際使用過程中受到了很大的限制.Wang等人[47]發(fā)現(xiàn)程序的密鑰信息以及其依賴關(guān)系通常只會在很小的一個程序上表現(xiàn),其他大量的變量只是用來維護公共信息.根據(jù)這個特點,他們設(shè)計了“秘密增強符號域”(SAS),開發(fā)了一個新的靜態(tài)檢測側(cè)信道漏洞的工具——CacheS,對密鑰相關(guān)的代碼進行細粒度的分析,而對其他代碼采用可伸縮的探測方式.通過這種分析方式,作者定位出了54個之前沒有提及的漏洞點.此外,Gridin等人[48]利用GDB調(diào)試工具開發(fā)了Triggerflow,在源注釋的幫助下動態(tài)分析二進制文件,可以以一個較快的速度發(fā)現(xiàn)OpenSSL庫中可能存在的緩存?zhèn)刃诺里L險.
為了能夠?qū)幾g器的輸出進行分析,Wichelmann等人[49]開發(fā)了一種可擴展的MicroWalk框架,并對2個廣泛應(yīng)用但閉源的加密算法庫Intel IPP和Microsoft CNG中的15個不同的加密算法進行驗證,解釋了二進制代碼中是否存在緩存?zhèn)刃诺里L險、緩存?zhèn)刃诺里L險的位置以及緩存?zhèn)刃诺缆┒袋c的位置與密鑰的關(guān)系等相關(guān)問題.
之前的代碼檢測工具可以對用戶程序中的基于數(shù)據(jù)訪問或控制流的“漏洞”進行檢測,但是對Spectre[1]等攻擊方式卻無能為力.SpecFuzz[50]首次使用動態(tài)分析的方式實現(xiàn)了對代碼中潛在的預測執(zhí)行漏洞進行判斷,SpecuSym[51]基于符號執(zhí)行的方法,系統(tǒng)地探測用戶執(zhí)行空間,對分支的推測行為進行建模.在動態(tài)執(zhí)行期間,檢查緩存行為,判斷可能出現(xiàn)的風險.
代碼檢測只能判斷用戶程序中是否存在“漏洞”,但是卻不能消除“漏洞”.因此,本節(jié)對常用的緩解緩存?zhèn)刃诺拦舻募夹g(shù)進行歸納總結(jié).
目前常見的緩解“緩存?zhèn)刃诺缆┒础钡姆椒ㄖ饕ǎ汉愣〞r間技術(shù)、緩存清除以及編譯器輔助安全措施等.恒定時間技術(shù)(constant-time technology)[52]是一種用于抵抗基于微架構(gòu)的時間側(cè)信道攻擊的有效手段.其主要思想是通過軟件的方式,使不同表項和指令流的執(zhí)行過程中的訪問時間相同,避免程序執(zhí)行時間與執(zhí)行流程之間的相關(guān)性,從而消除“側(cè)信道漏洞”.NaCl[53]避免從密碼到加載地址和分支預測的數(shù)據(jù)通路,消除了許多已經(jīng)發(fā)現(xiàn)的漏洞;Andrysco等人[54]設(shè)計了一個固定時間的數(shù)學庫libfixedtimefixpoint,使用“恒定時間”策略,保證程序本身的安全性.Panda[55]采用了一種“向后缺失觸發(fā)硬件預取技術(shù)”(BITP),在攻擊者“觀察”內(nèi)存訪問模式之前把缺失內(nèi)容完成硬件預期,不需要軟件、操作系統(tǒng)的支持,就可以消除攻擊者的觀察接口,使攻擊者無法觀察到用戶的內(nèi)存訪問模式.表3所示為緩解緩存?zhèn)刃诺赖募夹g(shù).
對于恒定時間技術(shù)而言,一方面需要解決如何實現(xiàn)“恒定時間”,另一方面是如何“驗證程序是恒定時間的”.而且,隨著程序規(guī)模的擴大,如何確定程序是“時間固定的”,是一個具有挑戰(zhàn)性的問題.Almeida等人[56]對程序進行LLVM級邏輯驗證,開發(fā)了用于分析程序“恒定時間特征”的自動化驗證工具ct-verif,在NaCl,OpenSSL,FourQ等多個商用的庫上進行驗證,較為快捷地實現(xiàn)了“恒定時間”的驗證.但是程序執(zhí)行與硬件架構(gòu)相關(guān),因此需要從匯編代碼級別對程序進行分析.Bond等人[57]開發(fā)了Vale工具,把帶注釋的匯編語言轉(zhuǎn)化為抽象語法樹,在ARM和X86平臺上對SHA-256算法、X64平臺的Poly1305的代碼進行分析,結(jié)果表明:Vale可以對現(xiàn)有代碼的正確性、安全性進行驗證.對于二進制代碼而言,Daniel等人[58]開發(fā)了BINSECREL,對程序的執(zhí)行流進行分析,并通過對338種密碼的實現(xiàn)方案進行驗證,極大地提高了對代碼恒定時間的驗證速度和精度.此外,文獻[59]中使用靜態(tài)信息流分析的方法對加密算法庫中的代碼進行驗證.
Table 3 Cache-Based SCA Mitigation Technology表3 緩解緩存?zhèn)刃诺赖募夹g(shù)
緩存清除技術(shù)(cache flushing technology),是指通過操作系統(tǒng)等的輔助,清除由于用戶程序執(zhí)行帶來的微架構(gòu)狀態(tài)的變化.Zhang等人[60]周期性地清除L1緩存,消除了攻擊者對時間信息的利用,他們采用2種模式,跳過不必要的緩存清除操作,實現(xiàn)不到7%的性能開銷;為了降低性能開銷,Godfrey等人[61]在虛擬機調(diào)度器發(fā)生內(nèi)容切換的時候進行清除,新字段將添加到VCPU,以指示當前緩存數(shù)據(jù)的擁有者,而切換到空閑或相同的域時則不會發(fā)生緩存刷新.
修改用戶程序以緩解“漏洞”,無疑會增加用戶程序的開發(fā)周期和開發(fā)成本,而編譯器輔助技術(shù)(compiler-assist)則可以極大地提高開發(fā)效率,實現(xiàn)對緩存?zhèn)刃诺拦舻姆烙?Crane等人[62]采用“移動目標防御”的防御理念,把一個代碼編譯為多個版本,各個版本的不同在于插入了不同數(shù)目的空操作、函數(shù)位置、寄存器隨機化、指令替換等.程序在執(zhí)行過程中動態(tài)選擇執(zhí)行路徑,從而產(chǎn)生不同的結(jié)果,擾亂攻擊者對信息的探測,實現(xiàn)緩存?zhèn)刃诺婪烙?Khan等人[63]開發(fā)了一個編譯器輔助調(diào)度程序Biscuit,它可以非常高精度地檢測到針對多租戶服務(wù)器場中調(diào)度進程的基于緩存的側(cè)通道攻擊.用戶以6%的性能為代價,可以實現(xiàn)對Flush+Flush,Flush+Reload,Prime+Probe等主流攻擊方式的防御.
攻擊者在實施微架構(gòu)側(cè)信道攻擊時,需要獲取到用戶程序的執(zhí)行情況、用戶程序的內(nèi)存訪問模式后才能完成后續(xù)的攻擊,而攻擊者獲取信息的精準度直接影響攻擊的效果甚至攻擊的成功與否.
目前的防御手段主要通過操作系統(tǒng)、虛擬機管理程序以及設(shè)計新型安全緩存架構(gòu)提高映射關(guān)系的不確定性,降低資源共享的概率,從而降低攻擊者對用戶訪問模式的獲取精準度,提高系統(tǒng)的安全性,實現(xiàn)對緩存?zhèn)刃诺赖姆烙?
2.3.1 干擾信息獲取
表4展示了從操作系統(tǒng)(operating system, OS)和虛擬機管理程序(virtual machine manager, VMM)的角度降低攻擊者測量精度的相關(guān)研究工作,并比較了不同防御措施需要修改的層次結(jié)構(gòu).
Table 4 OS & VMM-Based Countermeasure表4 基于操作系統(tǒng)和VMM的防御措施
對于虛擬機管理程序而言,StealthMem[64]為每個處理器核管理一組鎖定的Cache line,這些Cache line不會被驅(qū)逐,每個虛擬機可以把自己的敏感數(shù)據(jù)加載到鎖定的Cache line中,使其對其他的虛擬機不可見.Han等人[65]則從虛擬機分配的角度出發(fā),提出PSSF虛擬機分配策略.隨后,Jia等人[66]從運行的主機數(shù)量和CPU利用率角度進行優(yōu)化,減少能耗,攻擊效率和攻擊范圍表明,采用合適的虛擬機分配策略可以有效降低虛擬機共存的攻擊的成功率.劉維杰[70]提出一個全局的動態(tài)時鐘模糊方案,利用最新的硬件虛擬化擴展技術(shù),提供一個輕量級和動態(tài)的環(huán)境,使系統(tǒng)范圍內(nèi)的側(cè)信道危害得到緩解.
除了虛擬機管理程序,相關(guān)研究表明也可以從操作系統(tǒng)的角度提供安全防御.Zhou等人[67]提出了CacheBar,采用新的復制訪問管理模式對多用戶的物理內(nèi)存頁進行管理,同時,設(shè)計了一種動態(tài)可維護的內(nèi)存頁面隊列管理機制避免攻擊者對緩存的惡意探.Sprabery等人[68]則認為,全部隔離用戶頁面會造成存儲上的浪費,因此他們從側(cè)信道的根源入手,把程序劃分為多個安全隔離區(qū)域和正常區(qū)域,允許同一個安全域內(nèi)的用戶共享內(nèi)存頁,當用戶在不同的安全域進行切換的時候,對硬件的狀態(tài)進行清除.更進一步地,Nomani等人[69]使用HPC預測出程序的下一個執(zhí)行階段,并通過操作系統(tǒng)的調(diào)度,把預測出相同程序階段的應(yīng)用調(diào)度到不同的處理器核上,通過動態(tài)調(diào)度避免底層硬件結(jié)構(gòu)的爭用,緩解側(cè)信道攻擊的影響.
操作系統(tǒng)方面對內(nèi)存進行防護很多時候需要硬件的支持,才能夠在開銷盡可能小的情況下完成.Ge等人[71]對現(xiàn)有的主流處理器進行分析,研究表明現(xiàn)有的結(jié)構(gòu)不能支撐軟件的防護.他們呼吁處理器廠商對現(xiàn)有的指令集進行安全擴充,并從5個方面對安全擴充指令集進行建議,以便于從操作系統(tǒng)等方面提供安全防護.
除了通過操作系統(tǒng)或虛擬機管理程序的調(diào)度外,還可以通過增加噪聲的方式,干擾用戶對信息的“監(jiān)聽”過程.Wang等人[72]利用DRAM更新作為噪聲源,設(shè)計了MemJam架構(gòu),以較小的代價避免攻擊者通過共享內(nèi)存控制器“監(jiān)聽”用戶程序的內(nèi)存訪問情況.
2.3.2 新型安全架構(gòu)
使用硬件手段改變增加攻擊者獲取信息的難度,可以擾亂攻擊者獲取由于用戶操作而對微架構(gòu)狀態(tài)產(chǎn)生的影響.表5列舉了近幾年的新型Cache架構(gòu),并從新型緩存架構(gòu)設(shè)計方案、安全性、開銷等方面對相關(guān)工作進行比較.
Table 5 Comparison Between Cache Architecture表5 Cache架構(gòu)及其比較
1) 隔離架構(gòu)
一種增加攻擊者獲取有效信息的緩存設(shè)計方案是通過隔離手段,即雖然攻擊者與用戶仍然共享緩存,但卻使用不同的緩存塊,從而避免攻擊者判斷用戶程序的內(nèi)存訪問情況.Wang等人[73]提出了PLCache設(shè)計方案,在原有的緩存架構(gòu)中增加Lock和ID位,并且軟件程序員在程序運行時,可以通過操作系統(tǒng)把某個具體的緩存塊鎖定,當程序執(zhí)行結(jié)束后再解除鎖定;鎖定的方式雖然可以提高安全性,但是會導致緩存利用率降低,針對這個問題,Domnitser等人[74]提出NoMo Cache架構(gòu),為所有正在運行的進程在對應(yīng)的每個緩存集中預留Y個Cache line,通過對進程預留Cache line的方式對安全性和性能進行權(quán)衡,盡可能避免側(cè)信道的攻擊.
此外,很多人開始探索采用動態(tài)分隔的方式[87-88]提高安全性.如果動態(tài)分隔策略依賴于程序運行狀態(tài)時,仍然會產(chǎn)生側(cè)信道的風險,Wang等人[75]提供了一種安全的動態(tài)高速緩存分區(qū)方案,根據(jù)應(yīng)用的不同安全等級進行分類,在提高緩存性能的同時,滿足了分層安全的策略需求,與靜態(tài)分區(qū)的方式相比,這種動態(tài)隔離的方式可以平均提升12.5%的性能.Werner等人[76]提出ScatterCache架構(gòu),使用關(guān)鍵字映射的方式實現(xiàn)偏置相聯(lián)緩存,并對不同的安全域進行區(qū)分,使共享緩存的行為變得不可預測,實現(xiàn)對基于緩存?zhèn)刃诺赖姆烙?
針對共享內(nèi)存控制器的攻擊,Wang等人[89]根據(jù)傳統(tǒng)內(nèi)存控制器的特點,分析攻擊者對內(nèi)存控制器的利用方式,根據(jù)用戶安全域的不同,設(shè)計了一種基于靜態(tài)時間隙的內(nèi)存控制器隊列調(diào)度算法,避免了攻擊者對用戶信息的探測.
2) 動態(tài)映射架構(gòu)
除了靜態(tài)和動態(tài)分隔的方案之外,還可以通過隨機映射的方案,擾亂攻擊者對用戶信息的判斷,實現(xiàn)對緩存?zhèn)刃诺拦舻姆烙?
Wang等人[73]設(shè)計了RPCache架構(gòu),使用一個重映射表實現(xiàn)第一級數(shù)據(jù)緩存Cache與內(nèi)存映射的隨機性,降低攻擊者對用戶訪問數(shù)據(jù)的探測精度.文獻[77]分析Prime+Probe在指令緩存上的實現(xiàn)方式,通過SVM(support vector machine)分類矩陣對使用隨機映射策略的指令緩存的緩存蹤跡進行定量分析,并實現(xiàn)了對第一級指令緩存的隨機映射方案.更進一步地,NewCache[78]提供了一種隨機映射的方法,使用CAM作為動態(tài)行號映射器,把原來的直接映射緩存的固定地址譯碼器替換為動態(tài)行號映射器,擾亂了攻擊者對Cache line訪問情況的探測,并使用65-nm CMOS工藝對原型系統(tǒng)進行驗證.
雖然采用映射表的方式可以提高對側(cè)信道攻擊的抵抗能力,但是采用查找表的方式會受到存儲代價的限制,導致其只能應(yīng)用于較小的緩存.針對這個問題,Qureshi[79]設(shè)計了CEASE架構(gòu),如圖3所示.在訪問緩存時,采用低延時加密解密模塊(LLBC),而對除緩存外的其他模塊則是透明的,用較小的代價實現(xiàn)了對緩存?zhèn)刃诺赖姆烙?,同時又將隨機映射的方式擴展到最后一級緩存.
Fig. 3 Overview of CEASE[79]圖3 CEASE 總體結(jié)構(gòu)圖[79]
為了避免靜態(tài)密鑰被攻擊者探測,Qureshi[80]在CEASE的基礎(chǔ)上,對LLBC的加密密鑰不斷改變,即CEASER架構(gòu),進一步提升系統(tǒng)魯棒性.算法的重映射速率會影響對緩存?zhèn)刃诺赖姆烙Ч?但是,他們發(fā)現(xiàn),通過修改查找沖突域的收縮算法,或者根據(jù)處理器的緩存替換算法,能夠有效地縮短攻擊者查找沖突域的時間,因此采用偏置映射的方式,把原有的CEASER改進為CEASER-S,把高速緩存分為多個區(qū),不同的區(qū)中使用不同的Hash函數(shù)進行映射,把同一緩存集中的數(shù)據(jù)映射到不同的位置.隨后,Ramkrishnan等人[81]發(fā)現(xiàn)CEASER-S架構(gòu)使用二分查找攻擊方式,同樣可以把搜尋SCG的時間復雜度變?yōu)镺(N),因此他們使用間接查找表的方式實現(xiàn)“高偏置”和“高刷新率”,對基于沖突的緩存?zhèn)刃诺拦魧崿F(xiàn)防御.
當對整個LLC進行隨機映射時,性能損耗較大,且重映射的方式會增加對內(nèi)存的訪問延時和緩存缺失的概率.Tan等人[82]認為并不需要對整體進行隨機化映射,提出PhantomCache的局部隨機化的緩存架構(gòu),以0.5%的性能下降,在保證隨機化的同時,也實現(xiàn)了對微架構(gòu)側(cè)信道攻擊的防御.
3) 緩存替換策略
根據(jù)緩存的工作原理,當用戶訪問的數(shù)據(jù)不在緩存中時,需要從內(nèi)存中讀取并寫到緩存中,攻擊者在攻擊中,也需要依賴這一條件.Liu等人[83]提出了一種隨機換入Cache的結(jié)構(gòu),這種架構(gòu)的基本原理是當發(fā)生Cache miss時,把從內(nèi)存中獲取到的數(shù)據(jù)發(fā)送給CPU,但并不把這個數(shù)據(jù)保留到緩存,而是把這個數(shù)據(jù)“附近”的值填入到緩存中,在保證局部性的同時實現(xiàn)安全防御.Yan等人[84]發(fā)現(xiàn)當攻擊者在多核處理器上開展側(cè)信道攻擊時,會存在“包容性受害緩存”(inclusive victim),攻擊者需要利用“包容性受害緩存”獲取信息,因此,他們提出通過采用新的緩存塊的替換策略SHARP,避免攻擊者通過“inclusive victim”獲取到用戶的有用信息,從而實現(xiàn)安全防御.
4) 動態(tài)緩存架構(gòu)
攻擊者對塊的大小、關(guān)聯(lián)度、緩存替換算法、內(nèi)存到緩存的映射函數(shù)等緩存架構(gòu)信息掌握得越少,攻擊的難度越高,攻擊效果越差.因此,Bandara等人[85]從這個角度出發(fā),通過動態(tài)改變緩存塊的大小、緩存的相關(guān)聯(lián)度以及緩存的大小,設(shè)計了自適應(yīng)緩存架構(gòu).實驗表明,在運行過程中動態(tài)改變緩存參數(shù),最多可以降低90%的攻擊精度;Dai等人[86]根據(jù)具體應(yīng)用設(shè)計了多種不同緩存結(jié)構(gòu),并在運行過程中不斷改變緩存配置,使攻擊者無法采集到足夠的信息,從而避免緩存?zhèn)刃诺拦?
如表6所示,軟件檢測的防御方式不需要改變現(xiàn)有的操作系統(tǒng)、硬件結(jié)構(gòu),只需在程序發(fā)布時對應(yīng)用進行檢測或用戶在本地進行檢測,部署方式最為靈活便捷.但是檢測攻擊的精準度、覆蓋率、檢測速度以及擴展性會直接影響檢測工具在實際過程中的使用.
Table 6 Cache Side Channel Attack Countermeasure表6 緩存?zhèn)刃诺拦舴烙胧?/p>
使用軟件方式對代碼進行修正,緩解“側(cè)信道漏洞”同樣不需要改變操作系統(tǒng)等,只需要采用“恒定時間技術(shù)”或“加入噪聲”等手段就可以完成防御.但是,一方面,開發(fā)人員在設(shè)計時還需要考慮“恒定時間”等問題,增加了開發(fā)的周期和負擔,同時驗證代碼的“恒定時間”也是一個很大的挑戰(zhàn);另一方面,對代碼進行修正無疑會降低程序執(zhí)行效率,影響程序性能.
從操作系統(tǒng)(OS)或虛擬機管理程序(VMM)的角度實現(xiàn)不同安全域之間的隔離,增加攻擊者獲取信息的精準度,或者改變虛擬機的分配策略,實現(xiàn)對緩存?zhèn)刃诺拦舻姆烙?,但是管理粒度相對較粗,增大操作系統(tǒng)的負擔,還有可能需要硬件的支持.
緩存?zhèn)刃诺拦糁校粽呤抢糜布Y(jié)構(gòu)的特點開展攻擊,而新型安全緩存架構(gòu)設(shè)計直接影響了緩存?zhèn)刃诺拦糁蝎@取信息的途徑,可以有效阻止緩存?zhèn)刃诺拦?,且對操作系統(tǒng)、用戶程序等的要求相對較小,對用戶程序的性能影響也最小,因此受到了越來越多的研究和關(guān)注.但是這種方式需要硬件的更新和硬件廠商的支持,因此部署周期相對較長.
隨著越來越多的基于處理器的硬件攻擊方式的出現(xiàn),學術(shù)界和廠商在研究如何能夠提高處理器的性能和降低處理器功耗的同時,也開始對處理器的安全性進行考慮.基于微架構(gòu)的側(cè)信道攻擊屬于側(cè)信道攻擊的一種,嚴重威脅了用戶的信息安全,與傳統(tǒng)的側(cè)信道攻擊不同的是,微架構(gòu)側(cè)信道攻擊利用處理器中的微架構(gòu)狀態(tài)傳遞信息,打破了操作系統(tǒng)等提供的安全隔離,攻擊者可以通過運行于同一硬件結(jié)構(gòu)上的進程“竊取”用戶信息,造成密鑰等信息泄露;攻擊者的攻擊范圍包括運行于同一個實體設(shè)備的進程,也可以包括云環(huán)境共享硬件結(jié)構(gòu)的不同租戶;攻擊者可以通過直接操作,也可以通過遠程操作完成攻擊.未來緩存?zhèn)刃诺赖难芯恐饕?個方面:
1) 定位緩存?zhèn)刃诺缆┒?/p>
在防御方面,硬件的更新迭代周期比較長,更新的代價較大,利用軟件實現(xiàn)對側(cè)信道的防御措施可以以最快的速度完成部署,但是使用軟件進行防護時,或者在對即將發(fā)布程序的安全性進行驗證時,需要知道軟件中是否存在側(cè)信道漏洞以及側(cè)信道漏洞的位置.
CacheS[47],DATA[46],CacheAudit[40],CacheD[45]等工具可以對軟件進行分析,檢測程序中是否有可能遭受被基于緩存的側(cè)信道攻擊,以及程序的哪些位置可能遭受這種攻擊,另一方面,攻擊者也可以利用發(fā)現(xiàn)的漏洞對用戶程序開展攻擊.但是,作為一種與處理器硬件緊密相關(guān)的攻擊方式,在分析程序是否存在“微架構(gòu)側(cè)信道漏洞”時,需要對硬件平臺以及緩存結(jié)構(gòu)進行考慮,而不能僅從軟件的角度對程序進行分析.
在對緩存?zhèn)刃诺缆┒催M行分析時,需要兼顧緩存替換算法、緩存塊大小、緩存組相連度等緩存架構(gòu)參數(shù)的硬件模型描述緩存行為,才能較為準確地判斷出程序中是否存在“緩存?zhèn)刃诺缆┒础?程序在真實環(huán)境中運行時,硬件結(jié)構(gòu)的不同、指令集的不同,操作系統(tǒng)的不同都會對“緩存?zhèn)刃诺缆┒础钡呐袛喈a(chǎn)生影響.此外在使用各種攻擊分析定位程序中的漏洞時,仍會存在代碼覆蓋率、檢測時間、檢測結(jié)果解釋性等問題.如何保證分析工具的結(jié)果與程序在真實環(huán)境下運行的結(jié)果相同,也是一個急需解決的問題.
2) 動態(tài)緩存架構(gòu)設(shè)計
在緩存?zhèn)刃诺拦糁校粽咝枰ㄟ^緩存獲取出用戶的內(nèi)存訪問模式,再通過其他先驗知識對用戶內(nèi)存訪問模式進行分析,就可以得到用戶信息.因此,設(shè)計一個新的緩存架構(gòu),避免攻擊者獲取用戶內(nèi)存訪問模式,可以有效地對緩存?zhèn)刃诺拦暨M行防御.在基于沖突的攻擊中,攻擊者需要使用沖突域填充緩存,把緩存初始化到攻擊者已知的某個狀態(tài);同時攻擊者也需要沖突域獲取緩存的狀態(tài)變化,從而對用戶對緩存的訪問情況進行“監(jiān)聽”.攻擊者需要一個比較小的沖突域,稱為SCG來保證攻擊的精度和速度.
Vila等人[36]首次系統(tǒng)地對“沖突域”進行研究,把查找算法的復雜度從O(N2)變?yōu)镺(a2N).隨后,Song等人[37]從理論上對該查找算法進行分析,認為當對分隔參數(shù)進行設(shè)置后,算法的復雜度應(yīng)為O(aN).此外,Qureshi[80]和Ramkrishnan等人[81]分別根據(jù)Cache結(jié)構(gòu)特點設(shè)計了線性復雜度的查找算法,這無疑增加了攻擊者的攻擊速度.靜態(tài)的Cache訪問模式的固定化給攻擊者以可乘之機,因此設(shè)計一個動態(tài)變化的緩存結(jié)構(gòu)能夠提高對緩存?zhèn)刃诺拦舻姆烙?,增加攻擊者尋找“沖突域”的復雜度.CEASER及CEASER-S等工作實現(xiàn)了一個密鑰周期性變化的緩存映射方案,以一個較小的代價實現(xiàn)了動態(tài)緩存結(jié)構(gòu),但是Bodduna等人[90]認為由于CEASER方案中LLBC采用線性加密算法,切換密鑰對防御效果沒有增益,而采用查找表的方式又會面臨內(nèi)存開銷太大的問題,一種兼顧性能和動態(tài)隨機映射效果的加密算法仍是一個公開的難題.
3) Cache架構(gòu)安全性評估
目前,設(shè)計新的安全緩存架構(gòu)、改變緩存的替換算法、緩存的預取方式等從緩存角度增加了攻擊者對內(nèi)存訪問模式的“監(jiān)聽”精準度.但是目前大多數(shù)硬件結(jié)構(gòu)是閉源的,且各自的研究中沒有一個統(tǒng)一的安全評價標準,因此對目前的Cache結(jié)構(gòu)安全性的比較就成為一個比較困難的問題.Helft[91]從沖突域的角度開發(fā)了一個用于分析微架構(gòu)安全性的模擬器,對緩存架構(gòu)的不同參數(shù)進行分析,討論Cache架構(gòu)對“沖突域”查找算法的影響.Deng等人[92]建立“3步分析模型”,并分析了18種Cache的安全架構(gòu),討論不同的緩存設(shè)計對可能的緩存?zhèn)刃诺拦舻姆烙Ч?He等人[6]使用信息流(information flow)對Cache結(jié)構(gòu)的安全性進行分析.這些研究內(nèi)容都對Cache結(jié)構(gòu)進行安全性分析,但是,統(tǒng)一的度量標準和緩存、攻擊以及軟件執(zhí)行的形式化建模仍然是一個尚未解決的問題.
基于緩存的側(cè)信道攻擊由于其高隱蔽性、高傳輸速度、可開展遠程攻擊等特點,打破了由軟件和操作系統(tǒng)提供的隔離機制,造成用戶信息泄露,引起了學術(shù)界和工業(yè)界的廣泛關(guān)注.本文從攻擊步驟的角度對基于緩存的側(cè)信道攻擊進行系統(tǒng)描述,把攻擊的步驟分為:確定“漏洞”、確定“沖突域”、獲取內(nèi)存訪問模式信息、還原信息等,并根據(jù)這些步驟對攻擊方式進行分析,對各個步驟所需要解決的問題以及面臨的挑戰(zhàn)進行總結(jié).之后,我們按照攻擊模型對防御手段把防御分為代碼檢測、緩解“漏洞”、降低信息獲取精準度等不同階段,并對不同階段的防御手段進行分析比較,我們發(fā)現(xiàn)動態(tài)修改緩存內(nèi)數(shù)據(jù)分布的方式可以以一個較低的性能代價對緩存?zhèn)刃诺拦魧崿F(xiàn)有效防御.最后討論了緩存?zhèn)刃诺婪烙媾R的主要挑戰(zhàn)以及未來的研究方向.