国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

處理器微體系結(jié)構(gòu)時(shí)間側(cè)信道攻擊與防御

2020-11-26 01:36苑風(fēng)凱
關(guān)鍵詞:體系結(jié)構(gòu)攻擊者受害者

苑風(fēng)凱, 侯 銳

(中國(guó)科學(xué)院 信息工程研究所 信息安全國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京 100093)

過去的二十年,研究者已經(jīng)提出層出不窮的側(cè)信道攻擊,通過處理器微體系結(jié)構(gòu)竊取安全關(guān)鍵信息.微體系結(jié)構(gòu)側(cè)信道攻擊不僅能夠竊取加密密鑰、監(jiān)聽設(shè)備輸入、提取瀏覽器訪問歷史等敏感信息,破解地址隨機(jī)化ALSR,還成為了近期引起廣泛關(guān)注的幽靈[1]、熔斷[2]等瞬態(tài)執(zhí)行攻擊的幫兇,將“瞬態(tài)”獲取的敏感信息通過微體系結(jié)構(gòu)狀態(tài)的改變傳遞給攻擊者[3].本文聚焦基于時(shí)間的側(cè)信道,由于不同于基于電磁或功耗側(cè)信道,時(shí)間側(cè)信道攻擊不需要物理接觸目標(biāo)設(shè)備,僅需惡意程序與受害者程序運(yùn)行于同一處理器,更具威脅和現(xiàn)實(shí)意義.

站在體系結(jié)構(gòu)的視角,基于時(shí)間的側(cè)信道與處理器底層硬件存在著天然的聯(lián)系.性能優(yōu)先的處理器設(shè)計(jì)理念導(dǎo)致基于時(shí)間的側(cè)信道不可避免.首先,這些側(cè)信道的前提是運(yùn)行與處理器的不同程序?qū)ο鄳?yīng)的微架構(gòu)組件的共享,而資源共享是處理器動(dòng)態(tài)性能的最有力保障.其次,以性能優(yōu)化為目標(biāo)的微架構(gòu)設(shè)計(jì)導(dǎo)致了程序快速和慢速的微架構(gòu)行為,例如,從緩存命中獲取數(shù)據(jù)的延遲顯著低于緩存缺失.毋庸置疑,微架構(gòu)共享以及快速/慢速行為特性助推了現(xiàn)代處理器計(jì)算能力的迅猛發(fā)展.

然而,設(shè)計(jì)師追求性能優(yōu)化不斷為微架構(gòu)添加新特性的同時(shí),越來越多的微體系結(jié)構(gòu)漏洞被安全研究者披露并利用,對(duì)現(xiàn)實(shí)的商業(yè)處理器發(fā)起更具威脅的側(cè)信道攻擊.縱覽現(xiàn)有的針對(duì)微架構(gòu)組件的攻擊,筆者將微體系結(jié)構(gòu)側(cè)信道的利用概括為基于復(fù)用和基于競(jìng)爭(zhēng)兩大類.前者直接復(fù)用受害程序在微架構(gòu)組件內(nèi)的共享信息,獲知被害者的微架構(gòu)行為.后者通過與受害程序競(jìng)爭(zhēng)微架構(gòu)組件的資源,感知被害者的微架構(gòu)行為.輔以必要的去噪聲手段,一旦掌握足量的與被害者秘密相關(guān)微架構(gòu)行為軌跡,攻擊者就可以恢復(fù)出安全關(guān)鍵信息,例如,加/解密算法秘鑰.

為了補(bǔ)救微體系結(jié)構(gòu)側(cè)信道,研究者提出了很多基于硬件的防御措施.這些防御可以歸納為基于隔離、基于隨機(jī)以及基于檢測(cè)等三大類.這三類措施分別旨在消除程序間的微架構(gòu)組件共享,加入微架構(gòu)行為噪聲干擾攻擊者觀測(cè),以及監(jiān)控并捕獲可疑的微架構(gòu)異常行為特征而后發(fā)出預(yù)警或?qū)嵤┓粗?縱觀這些措施,微體系結(jié)構(gòu)側(cè)信道防御或多或少需要付出性能、邏輯及存儲(chǔ)代價(jià),這與能效提升為目標(biāo)的設(shè)計(jì)理念相違.值得注意的是,Intel SGX[4]和ARM TrustZone[5]都是通過邏輯隔離為敏感數(shù)據(jù)代碼提供安全的執(zhí)行環(huán)境.由于性能的考慮,安全和非安全域仍然共享著大量硬件資源,導(dǎo)致了側(cè)信道信息泄露風(fēng)險(xiǎn)[6-7],這在機(jī)密性方面削弱了它們的安全承諾.本文試圖通過分析微體系結(jié)構(gòu)側(cè)信道的建立以及攻防博弈的展示,引發(fā)處理器硬件社區(qū)對(duì)性能優(yōu)先的設(shè)計(jì)理念的重新審視,助力設(shè)計(jì)師在微架構(gòu)設(shè)計(jì)階段就優(yōu)化新特性可能帶來的信息泄露風(fēng)險(xiǎn)進(jìn)行評(píng)估.本文做出的貢獻(xiàn)具體如下:

(1)結(jié)合若干重要微架構(gòu)組件的特點(diǎn),比照微架構(gòu)共享及快速/慢速行為特征,分析微架構(gòu)組件各自時(shí)間側(cè)信道的建立.

(2)縱覽現(xiàn)有的微體系結(jié)構(gòu)側(cè)信道,根據(jù)微架構(gòu)組件利用的共性,將攻擊概括為兩大類:基于復(fù)用的攻擊和基于競(jìng)爭(zhēng)的攻擊.

(3)介紹基于硬件的微體系結(jié)構(gòu)側(cè)信道補(bǔ)救,將現(xiàn)有防御歸納為三大類:基于隔離的防御、基于隨機(jī)的防御以及基于檢測(cè)的防御.

1 微體系結(jié)構(gòu)側(cè)信道

理解微體系結(jié)構(gòu)側(cè)信道攻擊,需要了解處理器不同微架構(gòu)組件的特點(diǎn),以及它們?nèi)绾涡纬闪嘶跁r(shí)間的側(cè)信道,從而導(dǎo)致信息泄漏.圖1展示了將要分析時(shí)間側(cè)信道建立的微架構(gòu)組件.值得注意的是,不同的程序共享微架構(gòu)組件為程序間觀測(cè)微架構(gòu)行為提供了前提條件.進(jìn)一步,在了解(逆向工程)微架構(gòu)組件設(shè)計(jì)的前提下,執(zhí)行時(shí)間揭示了程序發(fā)生快速還是慢速的微架構(gòu)行為.掌握攻擊者自身或者受害程序的執(zhí)行時(shí)間就可以掌握受害者秘密相關(guān)的微架構(gòu)行為信息,從而建立起時(shí)間側(cè)信道.

圖1 面臨側(cè)信道風(fēng)險(xiǎn)的處理器微架構(gòu)組件(灰色)Fig.1 Processor microarchitecture components facing side channel risk (gray)

1.1 執(zhí)行單元(端口)

高性能處理器采用同時(shí)多線程(SMT)技術(shù),每個(gè)處理器核通常有兩條或多條流水線,而這些流水線共享“執(zhí)行階段”和其中的執(zhí)行單元(端口).當(dāng)不同流水線的程序嘗試執(zhí)行相同的計(jì)算操作時(shí)就會(huì)出現(xiàn)競(jìng)爭(zhēng),例如,如果兩個(gè)程序均嘗試執(zhí)行浮點(diǎn)運(yùn)算,則一個(gè)程序?qū)⑼V惯\(yùn)行(Stall),直到浮點(diǎn)單元可用為止,導(dǎo)致了程序執(zhí)行時(shí)間的差異.由此,惡意程序可以根據(jù)自身的執(zhí)行時(shí)間,判斷受害程序是否發(fā)生了使用目標(biāo)執(zhí)行單元的微架構(gòu)行為.近期的研究顯示,端口競(jìng)爭(zhēng)(Port Contention)側(cè)信道可以為幽靈、熔斷等攻擊,在緩存?zhèn)刃诺乐猓峁┬碌耐緩絺鬟f瞬態(tài)執(zhí)行獲取的敏感信息[8].

1.2 分支預(yù)測(cè)器

分支預(yù)測(cè)器負(fù)責(zé)在遇到條件或者間接分支時(shí),預(yù)測(cè)下一步應(yīng)執(zhí)行哪些指令.分支預(yù)測(cè)器嘗試學(xué)習(xí)程序的分支行為,其內(nèi)部狀態(tài)是通過觀察過去的分支建立的.根據(jù)分支指令的地址,建立分支的目標(biāo)地址歷史.遇到分支指令時(shí),根據(jù)分支指令的地址查找歷史并預(yù)測(cè)目標(biāo)地址.為了提高預(yù)測(cè)效率,分支預(yù)測(cè)器對(duì)處理器核內(nèi)運(yùn)行的所有程序收集全局的歷史記錄,導(dǎo)致不同的程序會(huì)影響分支預(yù)測(cè),造成彼此執(zhí)行時(shí)間受到影響.攻擊者利用分支預(yù)測(cè)器可以通過自身被影響分支執(zhí)行的時(shí)間,感知受害者安全關(guān)鍵分支指令的執(zhí)行情況,并推斷與該分支相關(guān)的敏感信息.

1.3 緩存

處理器設(shè)計(jì)人員使用緩存層次結(jié)構(gòu)(Cache Hierarchy)將最近和最常用的數(shù)據(jù)帶入最接近處理器核的緩存中,以便在有內(nèi)存訪問或指令獲取時(shí)可以從其中一個(gè)緩存層級(jí)中獲取數(shù)據(jù),而無需一路走到內(nèi)存.然而,最快的緩存層級(jí)也是最小的,需要替換策略決定哪些數(shù)據(jù)應(yīng)該放在最快的緩存層級(jí).最常使用的是(Least Recently Used, LRU)類的替換策略,驅(qū)逐最少使用的數(shù)據(jù),并保留最近使用的數(shù)據(jù).當(dāng)程序執(zhí)行內(nèi)存訪問時(shí),它們將新數(shù)據(jù)帶入緩存快速層級(jí),并將最少使用的數(shù)據(jù)驅(qū)逐到低速層級(jí)或最終到內(nèi)存.在整個(gè)緩存中跟蹤最少使用的數(shù)據(jù)是不切實(shí)際的.因此,如圖2所示,組相聯(lián)(Set-association)結(jié)構(gòu)將緩存分為組(Set),每個(gè)緩存行(Line)只能映射到一個(gè)特定的Set,而每個(gè)Set最多容納的行數(shù)為相聯(lián)度(Association),而替換策略就在Set內(nèi)維護(hù).

圖2 組相聯(lián)緩存結(jié)構(gòu)[9]Fig.2 Set-associative cache architecture[9]

無論從效率還是功耗考慮,相聯(lián)度都不宜過大(一般為4至16),這就為不同程序在Set內(nèi)造成競(jìng)爭(zhēng)進(jìn)而引起緩存行驅(qū)逐,最終導(dǎo)致不同緩存層級(jí)間乃至內(nèi)存的訪問時(shí)延差異,創(chuàng)造了優(yōu)越的快捷條件(如圖2,構(gòu)造{B0,…,Bn}地址集就可以確保將同Set內(nèi)任意目標(biāo)緩存行驅(qū)逐).攻擊者也可以利用同受害者共享地址空間,通過將共享的緩存行預(yù)先驅(qū)逐至低速緩存層級(jí),之后重訪(復(fù)用)該行,根據(jù)訪問時(shí)延判斷受害者是否訪問并將該行帶入快速緩存層級(jí).如圖3所示,攻擊者可以根據(jù)Reload的時(shí)延(紅條的長(zhǎng)短)判斷受害者目標(biāo)緩存行訪問情況.目前研究主要關(guān)注可以跨處理器核的末級(jí)緩存(Last Level Cache, LLC)攻擊,因?yàn)檫@為攻擊放松了限制,不要求攻擊者和受害者位于相同的處理器核,使得攻擊更容易發(fā)起,在當(dāng)前云環(huán)境和虛擬技術(shù)背景下也更具現(xiàn)實(shí)意義.

圖3 Flush + Reload攻擊示意圖[11]Fig.3 Scheme of Flush + Reload attacks[11]攻擊者觀測(cè)受害者訪問目標(biāo)緩存行情況:(A)未訪問;(B)訪問(C)訪問重疊;(D)訪問部分重疊;(E)多次訪問

近期研究表明[10],在非包含型(Non-inclusive)緩存架構(gòu)中,除了末級(jí)緩存,可以利用一致性目錄(Directory),發(fā)起涉及私有L1/L2的跨核側(cè)信道攻擊.在包含型(Inclusive)緩存架構(gòu)中,目錄條目與末級(jí)緩存行是一一對(duì)應(yīng)的關(guān)系,對(duì)緩存的側(cè)信道攻擊也相當(dāng)于攻擊目錄.相反,在非包含型緩存架構(gòu)中,被受害程序訪問的數(shù)據(jù)會(huì)加載到核內(nèi)私有緩存,位于其他核的攻擊者難以利用末級(jí)緩存沖突觀測(cè)受害者的訪存行為.然而,非包含型架構(gòu)下目錄包含L2目錄和LLC目錄兩級(jí)結(jié)構(gòu).共享的L2目錄使得攻擊者可以利用L2目錄沖突影響受害者的私有緩存行,進(jìn)而利用L2和LLC的訪問延遲差異建立跨核時(shí)間側(cè)信道,推斷出受害者的私有緩存行為.

1.4 Translation look-aside buffer (TLB)

現(xiàn)代系統(tǒng)中,程序使用的內(nèi)存地址為虛擬地址,CPU訪問內(nèi)存使用的為物理地址.CPU每次訪問內(nèi)存需要首先將虛擬地址翻譯為物理地址.用于虛擬地址到物理地址翻譯的多級(jí)頁表存儲(chǔ)在內(nèi)存中,每次地址翻譯都要多次訪問內(nèi)存.為加速地址翻譯過程,TLB中存儲(chǔ)部分虛擬頁號(hào)到物理頁號(hào)的直接映射.TLB是類似于Cache的緩存,為多路組相聯(lián)結(jié)構(gòu).用于數(shù)據(jù)訪問進(jìn)行地址翻譯的為L(zhǎng)1 dTLB,用于指令訪問進(jìn)行地址翻譯的為L(zhǎng)1 iTLB.L2 sTLB為數(shù)據(jù)地址和指令地址翻譯共享.同一進(jìn)程中不同特權(quán)級(jí)對(duì)TLB的共享和開啟超線程時(shí)不同進(jìn)程對(duì)TLB的共享,使得攻擊者可以探測(cè)受害者頁粒度的訪存信息.

攻擊分為復(fù)用引起的攻擊(用戶態(tài)和內(nèi)核態(tài)共享TLB)和競(jìng)爭(zhēng)引起的攻擊(超線程的不同進(jìn)程共享TLB).前者,用戶態(tài)訪問內(nèi)核態(tài)的頁面會(huì)因權(quán)限檢查失敗產(chǎn)生頁錯(cuò)誤.當(dāng)訪問的頁面為已分配的頁面時(shí),內(nèi)存管理單元(MMU)會(huì)創(chuàng)建對(duì)應(yīng)的TLB項(xiàng).若訪問的頁面為未分配頁面,由于地址翻譯失敗,MMU不會(huì)創(chuàng)建TLB項(xiàng).當(dāng)再次從用戶態(tài)訪問該內(nèi)核態(tài)頁面時(shí),雖然仍會(huì)發(fā)生頁錯(cuò)誤,但已分配頁面的訪問會(huì)發(fā)生TLB命中,從而頁錯(cuò)誤處理時(shí)間更短.用戶態(tài)程序可以根據(jù)該時(shí)間差異探測(cè)內(nèi)核態(tài)地址訪問蹤跡.TLB的相聯(lián)度也較小(一般為4至12),不同進(jìn)程在TLB Set內(nèi)同樣存在競(jìng)爭(zhēng)導(dǎo)致可以互相驅(qū)逐TLB項(xiàng),可以創(chuàng)造不同級(jí)TLB訪問和TLB訪問與內(nèi)存的訪問延遲差.攻擊者可以利用超線程和受害者共享TLB,通過將一組TLB項(xiàng)預(yù)先加載至TLB Set,等待一個(gè)時(shí)間片后再重新訪問該組TLB項(xiàng),根據(jù)時(shí)延判斷是否和受害者發(fā)生訪問競(jìng)爭(zhēng)即受害者是否訪問該TLB set.針對(duì)TLB的側(cè)信道攻擊只能獲得頁粒度的訪問信息,相較攻擊緩存行,粒度更粗.利用該粗粒度的訪存信息推測(cè)細(xì)粒度的敏感信息是研究難點(diǎn).

1.5 預(yù)取器

現(xiàn)代處理器通常會(huì)采用預(yù)取機(jī)制將系統(tǒng)未來可能需要的數(shù)據(jù)(或指令)提前放置到緩存,以避免因缺失引起的較長(zhǎng)內(nèi)存延遲,提高程序的執(zhí)行速度.預(yù)取通常有軟件預(yù)取和硬件預(yù)取.前者由編譯器支持,后者由專用的硬件依據(jù)規(guī)則對(duì)預(yù)取進(jìn)行決策.本文聚焦硬件預(yù)取器.最基本的是順序(Sequential)預(yù)取器,即在訪問地址x時(shí),會(huì)將x+1預(yù)取到緩存.主流處理器已經(jīng)普遍采用了基于步距預(yù)測(cè)的方法,即跨步(Stride)預(yù)取器.具體地,當(dāng)處理器連續(xù)多次地以相同的間距訪問地址時(shí),后續(xù)的地址會(huì)被預(yù)取.例如,當(dāng)?shù)刂稟+m,A+2m,A+3m被訪問時(shí),預(yù)測(cè)期會(huì)推斷A+4m大概率也會(huì)被處理器需要,進(jìn)而提前預(yù)取到緩存中以降低缺失率.上述的預(yù)測(cè)依賴于訪問預(yù)測(cè)表(RPT)對(duì)過去的訪問歷史的記錄,這種相同步距的規(guī)律性訪問會(huì)使得該表處于穩(wěn)定狀態(tài)并進(jìn)行持續(xù)的預(yù)測(cè).盡管預(yù)取器提升了性能,一些原本與敏感信息無關(guān)的數(shù)據(jù)卻可能因?yàn)轭A(yù)取機(jī)制與敏感信息產(chǎn)生關(guān)聯(lián).忽視對(duì)預(yù)取數(shù)據(jù)的保護(hù)會(huì)再一次出現(xiàn)新的時(shí)間側(cè)信道以致信息泄露.

1.6 內(nèi)存

內(nèi)存控制器(Memory Controller)負(fù)責(zé)管理進(jìn)出處理器芯片和內(nèi)存的數(shù)據(jù).內(nèi)存控制器包含用于處理器請(qǐng)求的隊(duì)列(讀和寫,通常來自LLC),它必須調(diào)度這些請(qǐng)求在發(fā)出請(qǐng)求的緩存之間進(jìn)行處理,并處理DRAM的資源競(jìng)爭(zhēng).不同程序共享內(nèi)存控制器和DRAM,來自每個(gè)處理器核的請(qǐng)求需要進(jìn)行排序和排隊(duì)以便由內(nèi)存處理. 動(dòng)態(tài)更改一個(gè)處理器核的內(nèi)存需求將影響另一個(gè)核的內(nèi)存訪問延遲.雖然內(nèi)存控制器試圖實(shí)現(xiàn)公平性,但并不總是能夠平衡來自不同內(nèi)核的內(nèi)存流量.特別是,當(dāng)今的DRAM內(nèi)部的數(shù)據(jù)在進(jìn)行實(shí)際處理之前以內(nèi)存行(Row)為單位首先要載入行緩沖區(qū)(Row Buffer).內(nèi)存行的大小一般為2~4物理頁,后續(xù)的訪問若發(fā)生在相同內(nèi)存行則延遲較低,而如果發(fā)生在不同行則引起行沖突(Row Conflict),需先將當(dāng)前行寫回,再將當(dāng)前訪問行載入行緩沖區(qū),導(dǎo)致明顯的內(nèi)存訪問延遲差異.攻擊者既可以利用內(nèi)存控制器的隊(duì)列競(jìng)爭(zhēng),也可以制造行沖突來獲取受害者的內(nèi)存訪問足跡,竊取相關(guān)的敏感信息.

2 微體系結(jié)構(gòu)側(cè)信道攻擊

現(xiàn)有的微體系結(jié)構(gòu)側(cè)信道攻擊可以分為兩大類:基于復(fù)用的攻擊和基于競(jìng)爭(zhēng)的攻擊,如表1所示.基于復(fù)用的攻擊中,攻擊者直接讀取微架構(gòu)組件中受害者程序遺留的歷史,獲取相關(guān)的安全敏感信息.基于競(jìng)爭(zhēng)的攻擊中,攻擊者通過搶占微架構(gòu)組件,迫使受害者程序競(jìng)爭(zhēng)該微架構(gòu)組件的資源,并觀察自身所受的影響,推斷出受害者的微架構(gòu)行為,進(jìn)而獲取相關(guān)的安全敏感信息.

表1 微體系結(jié)構(gòu)側(cè)信道攻擊Table 1 Microarchitectural side channel attacks

2.1 基于復(fù)用的攻擊

針對(duì)緩存,基于Flush的攻擊能夠精準(zhǔn)地確定一個(gè)緩存行在特定的時(shí)間間隔內(nèi)是否被受害者使用.以Flush + Reload[11]為例,該攻擊分為三個(gè)階段:①Flush階段:攻擊者使用clflush (x86架構(gòu))類指令將目標(biāo)緩存行從緩存中驅(qū)逐;②Wait階段:攻擊者等待預(yù)設(shè)的時(shí)間間隔,受害者程序如果訪問了目標(biāo)地址,則會(huì)將緩存行載入緩存;③Reload階段:通過觀察目標(biāo)緩存行的訪問延遲,攻擊者可以確定受害者是否訪問了該緩存行.此外,這類攻擊還有Flush+Flush[14]、Flush+Prefetch[15]和Invalidate+Transfer[16]等變種.因?yàn)閺?fù)用特定緩存行,攻擊在效率和準(zhǔn)確度上很有大優(yōu)勢(shì).但由于clflush指令的限制,這種攻擊只能針對(duì)攻擊者和受害者共享的緩存行.

針對(duì)TLB、Double Page Fault攻擊[17]基于用戶態(tài)和內(nèi)核態(tài)對(duì)TLB的共享.利用在用戶態(tài)訪問該內(nèi)核態(tài)頁面時(shí),頁錯(cuò)誤處理時(shí)間會(huì)因已分配頁面的TLB(用戶態(tài)直接訪問內(nèi)核頁面TLB項(xiàng))訪問發(fā)生命中而更短,攻擊者推斷出了內(nèi)核空間的內(nèi)存地址分配布局,可用于進(jìn)一步繞過KASLR獲得內(nèi)核空間的基址及內(nèi)核驅(qū)動(dòng)的地址.

針對(duì)分支預(yù)測(cè)器,攻擊利用的是程序間能互相使用保存在分支預(yù)測(cè)器中彼此的歷史信息.以針對(duì)(Prediction History Table, PHT)攻擊的BranchScope[12]為例,攻擊者首先找到PHT中與受害者程序敏感信息依賴的分支項(xiàng)的共享的組(Set),并設(shè)置其飽和計(jì)數(shù)器至特定的狀態(tài),例如Weak Taken.受害者程序執(zhí)行敏感分支后,該項(xiàng)內(nèi)容會(huì)更新.切換回攻擊者程序后,本應(yīng)跳轉(zhuǎn)的指令在采用被更新的共享項(xiàng)預(yù)測(cè),Strong Taken與Not Taken會(huì)有執(zhí)行時(shí)間上的差異.據(jù)此,攻擊者可以感知該關(guān)鍵指令的執(zhí)行情況,進(jìn)而推測(cè)受害者的執(zhí)行路徑.另外一個(gè)典型的攻擊實(shí)例是Branch Shadowing攻擊[13],該攻擊通過構(gòu)造受害程序的影子代碼,來檢測(cè)目標(biāo)分支指令是否殘留(Branch Transfer Buffer)BTB中,從而觀察SGX中受害者分支的跳轉(zhuǎn)方向.

針對(duì)預(yù)取器,與敏感信息相關(guān)的被預(yù)取的數(shù)據(jù)可能成為新的側(cè)信道攻擊目標(biāo).例如,Shin等[18]指出Branchless Montgomery ladder (OpenSSL的一種加解密算法)在執(zhí)行過程中因?yàn)榭绮筋A(yù)取器的存在,會(huì)有一些地址與密碼存在緊密相關(guān)的特性.在不同的密鑰下,這些地址會(huì)出現(xiàn)不同的緩存缺失率的變化.當(dāng)攻擊者嘗試不同的密鑰并找到與受害者相同的缺失率記錄時(shí),就成功破譯了密鑰.恒定執(zhí)行時(shí)間是一種有效的緩解側(cè)信道攻擊的策略,但是Bhattacharya等[19]指出因?yàn)轫樞蝾A(yù)取器的存在,這種恒定會(huì)受到干擾,進(jìn)而存在可以利用的時(shí)間差異,依據(jù)此特性,攻擊者成功恢復(fù)了128位CLEFIA密鑰.

2.2 基于競(jìng)爭(zhēng)的攻擊

針對(duì)緩存,基于競(jìng)爭(zhēng)的攻擊觀察一個(gè)緩存Set在特定時(shí)間內(nèi)是否被受害者訪問.以Prime + Probe[23]為例,該攻擊同樣包含三個(gè)階段.在發(fā)起攻擊前,攻擊者首先會(huì)構(gòu)造一個(gè)針對(duì)目標(biāo)緩存行的驅(qū)逐集(Eviction Set),該緩存行集合包含與Set相聯(lián)度相同的元素并且每個(gè)元素都于目標(biāo)地址落入相同的Set.①Prime階段:攻擊者使用構(gòu)造好的驅(qū)逐集占據(jù)緩存中特定的組,將目標(biāo)地址從緩存驅(qū)逐;②Wait階段:攻擊者同樣需要等待特定的時(shí)間.在該間隔內(nèi),若受害者訪問了目標(biāo)地址,由于沖突(Set Conflict),驅(qū)逐集中的一個(gè)元素必然會(huì)被驅(qū)逐;③Probe階段:攻擊者重訪這個(gè)驅(qū)逐集并觀測(cè)訪問延遲,若發(fā)現(xiàn)出現(xiàn)了長(zhǎng)延遲則可以推斷受害者訪問了目標(biāo)地址.基于競(jìng)爭(zhēng)的攻擊還有Evict + Perfetch[15]、Alias-driven Attack[24]和Evict + Time[25]等變種.

針對(duì)分支預(yù)測(cè)器,攻擊利用的是分支預(yù)測(cè)器允許程序間互相搶占分支預(yù)測(cè)表的項(xiàng).攻擊者通過探測(cè)分支預(yù)測(cè)器是否發(fā)生競(jìng)爭(zhēng),從而感知受害者分支執(zhí)行的情況.以針對(duì)BTB攻擊的SBPA[21]為例,攻擊者首先占用BTB中與受害者目標(biāo)分支共享組中的所有路.在受害者程序執(zhí)行時(shí),敏感分支由于歷史信息缺失,預(yù)測(cè)跳轉(zhuǎn)方向?yàn)镹ot Taken.根據(jù)BTB更新機(jī)制,若最終該指令not taken,則不會(huì)更新BTB;否則會(huì)由于錯(cuò)誤預(yù)測(cè)更新BTB,搶占原攻擊者的一條分支歷史項(xiàng).在切換回攻擊者后,攻擊者依據(jù)被搶占分支的執(zhí)行時(shí)間,確認(rèn)該項(xiàng)歷史是否被替換,從而得知受害者敏感分支是否Taken.文獻(xiàn)[22]提到PHT中也面臨著類似的安全隱患.

針對(duì)TLB,TLBleed[26]攻擊使用類似于cache攻擊中的Prime+Prime方法監(jiān)測(cè)TLB set的訪問蹤跡:攻擊者首先通過訪問一組虛擬地址,地址翻譯產(chǎn)生的TLB項(xiàng)會(huì)填滿某個(gè)TLB Set,等待一個(gè)時(shí)間片后,攻擊者再次訪問改組虛擬地址并記錄訪問時(shí)間,若訪問延遲較短,則受害者未訪問過該TLB Set,若訪問延遲較長(zhǎng),則受害者訪問過該TLB set.雖然受害加密算法的不同分支訪問了相同的數(shù)據(jù)TLB Set,但訪問的時(shí)間模式不同.根據(jù)數(shù)據(jù)訪問的時(shí)間模式不同,攻擊者區(qū)分了受害者安全敏感函數(shù)執(zhí)行的不同分支,進(jìn)一步破解了256位EdDSA密鑰和92%的RSA密鑰.TLBleed只監(jiān)測(cè)一次密碼操作就能破解密鑰,該時(shí)間遠(yuǎn)小于ASLR重隨機(jī)化地址的時(shí)間片,從而不受ASLR影響.

針對(duì)執(zhí)行單元(端口),PortSmash[20]發(fā)起Port Contention攻擊,以連接一系列執(zhí)行單元的端口為目標(biāo)構(gòu)建高分辨率的時(shí)間側(cè)信道.因?yàn)椴幌衿渌槍?duì)緩存或者TLB 的攻擊那樣依賴于存儲(chǔ)子系統(tǒng),所以該攻擊具有天然的隱蔽性.攻擊程序與ECDSA P-384并行執(zhí)行,測(cè)量Port Contention延遲創(chuàng)建一個(gè)時(shí)間信號(hào)Trace,并最終恢復(fù)出了TLS服務(wù)器的ECDSA私鑰.針對(duì)內(nèi)存,Wang等[27]表明時(shí)間側(cè)信道攻擊可以通過共享內(nèi)存控制器來實(shí)現(xiàn).通過測(cè)量其自身內(nèi)存訪問的延遲,攻擊者能夠觀測(cè)同時(shí)運(yùn)行的程序的動(dòng)態(tài)內(nèi)存需求,推斷受害者程序的私密信息.DRAMA[28]利用DRAM中的Row Buffer沖突,建立了一個(gè)時(shí)間側(cè)信道,可以通過Template攻擊自動(dòng)地定位并監(jiān)視內(nèi)存訪問.

3 微體系結(jié)構(gòu)側(cè)信道防御

針對(duì)微體系結(jié)構(gòu)側(cè)信道攻擊的防御主要分為三大類:基于隔離的防御、基于隨機(jī)的防御和基于檢測(cè)的防御,如表2所示.基于隔離的防御的核心就是消除時(shí)間側(cè)信道,取締不同程序?qū)ξ⒓軜?gòu)的共享,通過隔離阻止攻擊者影響并觀察受害者對(duì)微架構(gòu)組件的使用.基于隨機(jī)的防御旨在通過噪聲注入的方式干擾攻擊者觀測(cè),阻止其對(duì)時(shí)間側(cè)信道利用的同時(shí),保留不同程序?qū)ξ⒓軜?gòu)組件的共享.基于檢測(cè)的防御傾向于基于特定的規(guī)則或者機(jī)器學(xué)習(xí)(統(tǒng)計(jì)學(xué))來識(shí)別可疑的微架構(gòu)異常行為特征,發(fā)現(xiàn)潛在的側(cè)信道利用,進(jìn)而發(fā)起預(yù)警或者采取針對(duì)性的反制措施.

表2 微體系結(jié)構(gòu)側(cè)信道防御Table 2 Microarchitectural side channel defenses

3.1 基于隔離的防御

對(duì)于緩存,Liu等[33]利用Intel的資源調(diào)配技術(shù)(Cache Allocation Technology, CAT[55])將敏感信息和普通信息分配到不同的緩存其余,使得攻擊者永遠(yuǎn)無法影響和觀測(cè)被標(biāo)注敏感的目標(biāo)地址.Shi等[34]基于緩存著色技術(shù)(Page Coloring)提出了動(dòng)態(tài)染色機(jī)制,將敏感信息分配到特定的緩存區(qū)域,而其余的進(jìn)程將不能使用.當(dāng)安全頁和非安全頁切換頻繁時(shí),這種方案會(huì)帶來明顯的性能下降.STEALTHMEM[35]為每個(gè)處理器核預(yù)留空間存放隱藏頁,這些頁會(huì)被鎖定在共享緩存內(nèi)不被其余的核驅(qū)逐.SecDCP[36]將所有程序分割到不同等級(jí)的安全域中,并依據(jù)需求動(dòng)態(tài)為各個(gè)安全域分配可用的緩存組相聯(lián)度,阻止高安全域向低安全域信息泄露,同等級(jí)的安全域則采用靜態(tài)分配緩存的方式.CacheBar[37]同樣選擇周期性地為每個(gè)安全域配置在每個(gè)緩存組中最大的可用相聯(lián)度以實(shí)現(xiàn)隔離.文獻(xiàn)[38]為頁表項(xiàng)和普通數(shù)據(jù)分配不同的緩存空間,防御了AnC[56]和Xlate[57]類基于MMU和CPU核共享cache的側(cè)信道攻擊.

對(duì)于分支預(yù)測(cè)器,防御為需要保護(hù)的程序以及危險(xiǎn)的程序分配不同的分支預(yù)測(cè)表項(xiàng).例如對(duì)于SGX中運(yùn)行的敏感程序,采用單獨(dú)的分支預(yù)測(cè)信息,避免不可信的進(jìn)程對(duì)敏感進(jìn)程的污染[12].對(duì)于云平臺(tái)上同時(shí)運(yùn)行在同一個(gè)物理核上的程序存在Residual的攻擊場(chǎng)景,而且不依賴于上下文切換,危險(xiǎn)性要大于單核上的信息泄露.之前的研究表明SMT采用各自的分支預(yù)測(cè)器并未帶來性能優(yōu)勢(shì)[30].文獻(xiàn)[31]提出在上下文切換時(shí),用VMM將分支預(yù)測(cè)信息壓縮并保存至VMM專屬的內(nèi)存空間,對(duì)軟件不可見.BRB[32]提出為不同的程序分配各自的分支預(yù)測(cè)歷史表,在上下文切換時(shí),將安全敏感的預(yù)測(cè)信息保存至片上SRAM.但考慮到備份面積以及VMM的空間,引入的備份個(gè)數(shù)有限,仍存在共享引起的安全隱患.

對(duì)于TLB,SP-TLB[39]在組相聯(lián)TLB中,按路為受害者和攻擊者進(jìn)程分配不同的TLB空間.同傳統(tǒng)TLB,當(dāng)?shù)刂泛瓦M(jìn)程號(hào)都匹配時(shí)TLB命中.但發(fā)生TLB缺失時(shí),進(jìn)程號(hào)不同的TLB條目不可互相替換,受害者和攻擊者都只能替換屬于其分區(qū)的TLB條目.通過靜態(tài)分區(qū)可以防止外部干擾引起的攻擊,但是無法阻止內(nèi)部干擾.

對(duì)于執(zhí)行單元(端口),SMT-COP[29]通過在同一處理器核上運(yùn)行的線程之間劃分執(zhí)行單元和/或與之關(guān)聯(lián)的發(fā)射端口,從而消除SMT處理器中的執(zhí)行單元端口側(cè)信道.對(duì)于內(nèi)存,Temporal Partitioning (TP)[27]顯示,靜態(tài)輪轉(zhuǎn)調(diào)度可以消除內(nèi)存控制器時(shí)間側(cè)信道,但是會(huì)產(chǎn)生較高的性能開銷.SecMC[40]通過交錯(cuò)不同Bands和Ranks的訪問請(qǐng)求,消除時(shí)間側(cè)信道的同時(shí),實(shí)現(xiàn)動(dòng)態(tài)的、緊湊的內(nèi)存調(diào)度,從而提升性能.

3.2 基于Randomization的防御

對(duì)于緩存,HybCache[41]將敏感數(shù)據(jù)放置到一些改造成全相連結(jié)構(gòu)的緩存區(qū)域,并采用隨機(jī)替換的策略阻止攻擊者精準(zhǔn)的驅(qū)逐.Random Fill Cache[42]將被請(qǐng)求的數(shù)據(jù)直接傳遞給處理器,在緩存上則將其可配置窗口內(nèi)的臨近數(shù)據(jù)隨機(jī)載入,以此避免攻擊者發(fā)起針對(duì)特定地址的基于重用的攻擊.隨機(jī)緩存映射改變物理地址到緩存Set的映射關(guān)系,從而阻止攻擊者構(gòu)建驅(qū)逐集來發(fā)起基于競(jìng)爭(zhēng)的攻擊.RPCache[43]和NewCache[44]依賴間接表來記錄每個(gè)緩存行新的映射關(guān)系,這種記錄應(yīng)用在較小的L1 cache上可行,但在LLC上采用上述策略會(huì)引起不可接受的存儲(chǔ)開銷.ScatterCache[45]和PhantomCache[46]選擇同時(shí)引入多個(gè)哈希函數(shù),使得一個(gè)物理地址在緩存中存在多個(gè)Set位置可選,由于難以尋找到覆蓋到多位置的驅(qū)逐集,攻擊者難以實(shí)現(xiàn)觀測(cè).CEAER[47]和CEASER-S[48]傾向以周期性變更密鑰的方式實(shí)現(xiàn)Set映射關(guān)系的不確定性.

對(duì)于TLB,RF-TLB[39]采用與Random Fill Cache類似的方法,對(duì)于安全域的地址訪問,不是將請(qǐng)求的地址轉(zhuǎn)換載入TLB,而是隨機(jī)選擇其他地址轉(zhuǎn)換載入TLB.請(qǐng)求的地址直接返回給CPU.在RF-TLB中,發(fā)生命中時(shí),處理邏輯和傳統(tǒng)TLB相同.當(dāng)發(fā)生TLB缺失時(shí),若請(qǐng)求的地址翻譯或?qū)⒁惶鎿Q的地址轉(zhuǎn)換屬于非安全域,請(qǐng)求的地址不會(huì)載入TLB而直接返回給CPU,同時(shí)隨機(jī)選取其他地址翻譯進(jìn)行替換:當(dāng)請(qǐng)求的地址來自非安全域時(shí),隨機(jī)選取的地址為TLB索引不同的地址,使得攻擊者無法確定性地驅(qū)逐安全域地址;當(dāng)請(qǐng)求的地址來自安全域時(shí),隨機(jī)選取的地址為安全域內(nèi)的地址, 攻擊者雖然可以觀察到TLB的狀態(tài)改變,但是由隨機(jī)選取的地址引起.

3.3 基于檢測(cè)的防御

基于規(guī)則的檢測(cè):SHARP[49]發(fā)現(xiàn)基于競(jìng)爭(zhēng)的跨核緩存?zhèn)刃诺拦糁?,被?qū)逐和觀測(cè)的目標(biāo)通常是那些不僅在末級(jí)緩存還在私有緩存中存在備份的緩存行.基于此,該方案更改了末級(jí)緩存的替換策略優(yōu)先驅(qū)逐僅存在于末級(jí)緩存的緩存行,從而避免潛在的攻擊目標(biāo)地址被攻擊者觀測(cè).而當(dāng)不存在可以優(yōu)先驅(qū)逐的緩存行時(shí)(所有候選的替換緩存行都有私有緩存?zhèn)浞?,對(duì)這些緩存行實(shí)施隨機(jī)替換策略,且當(dāng)此類替換發(fā)生次數(shù)超過閾值時(shí),向操作系統(tǒng)發(fā)出預(yù)警.Wang等[50]指出由于每輪迭代攻擊獲取的信息量有限,攻擊者通常需要頻繁的探測(cè)目標(biāo)緩存行.這種持續(xù)性的攻擊過程會(huì)引發(fā)目標(biāo)緩存行在各緩存層級(jí)(或內(nèi)存)間頻繁的遷移,呈現(xiàn)出異常的乒乓流量.該防御提出擴(kuò)展的整流器目錄,記錄每個(gè)緩存行的重訪次數(shù)識(shí)別異常流量的乒乓模式,并針對(duì)性地觸發(fā)保護(hù)動(dòng)作(Preload或Lock),從而干擾攻擊者的探測(cè)結(jié)果.Panda[51]指出被攻擊的緩存行存在著Back-Invalidation-Hits的特性,即攻擊者首先要在緩存層次無效化目標(biāo),再通過命中或缺失確定受害者的訪問特性.因此,該方案選擇對(duì)出現(xiàn)這種特征的緩存行觸發(fā)硬件預(yù)取以干擾對(duì)此類潛在的目標(biāo)地址的攻擊.

基于機(jī)器學(xué)習(xí)的檢測(cè):Zhang等[52]使用無監(jiān)督學(xué)習(xí)分析加密程序執(zhí)行過程中每個(gè)程序片段的末級(jí)緩存緩存命中和缺失,若測(cè)試集某個(gè)片段出現(xiàn)異常的值偏離則認(rèn)為存在潛在的攻擊,但是該方案需要標(biāo)記進(jìn)程號(hào)以標(biāo)注需要被監(jiān)控的程序.CHIAPPETTA等[53]分析多個(gè)程序執(zhí)行過程的特征(如總指令數(shù)、L3命中和缺失等),獲得均值、方差和概率密度函數(shù),從而鑒別異常和正常程序微架構(gòu)行為.上述兩種探測(cè)機(jī)制僅能夠?qū)用艹绦蛴行?,F(xiàn)ortuneTeller[54]利用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)同時(shí)訓(xùn)練正常程序和多種攻擊程序,在識(shí)別微體系結(jié)構(gòu)側(cè)信道攻擊的基礎(chǔ)上,還能發(fā)現(xiàn)諸如幽靈、熔斷等新攻擊.

4 結(jié) 語

本文闡述了存在處理器微體系結(jié)構(gòu)時(shí)間側(cè)信道的根本原因,程序間的微架構(gòu)共享以及快/慢速微架構(gòu)行為特性.結(jié)合若干重要微架構(gòu)組件各自的特點(diǎn),分析了微體系結(jié)構(gòu)時(shí)間側(cè)信道是如何被惡意程序建立并利用的.縱覽現(xiàn)有的針對(duì)微架構(gòu)組件的攻擊,依據(jù)攻擊手段將微體系結(jié)構(gòu)側(cè)信道的利用分為兩大類,即基于復(fù)用和基于競(jìng)爭(zhēng),并分別進(jìn)行介紹.本文分析了現(xiàn)有的基于硬件的微體系結(jié)構(gòu)側(cè)信道補(bǔ)救,將這些防御分為三大類,即基于隔離、基于隨機(jī)和基于檢測(cè).本文系統(tǒng)性地介紹處理器微體系結(jié)構(gòu)側(cè)信道,通過分析微架構(gòu)組件時(shí)間側(cè)信道的建立以及對(duì)攻防博弈的全局概括,倡導(dǎo)重新審視性能優(yōu)先的設(shè)計(jì)理念,助力微架構(gòu)設(shè)計(jì)師對(duì)優(yōu)化新特性的信息泄露風(fēng)險(xiǎn)進(jìn)行評(píng)估.

猜你喜歡
體系結(jié)構(gòu)攻擊者受害者
機(jī)動(dòng)能力受限的目標(biāo)-攻擊-防御定性微分對(duì)策
正面迎接批判
基于粒計(jì)算的武器裝備體系結(jié)構(gòu)超網(wǎng)絡(luò)模型
作戰(zhàn)體系結(jié)構(gòu)穩(wěn)定性突變分析
基于DODAF的裝備體系結(jié)構(gòu)設(shè)計(jì)
有限次重復(fù)博弈下的網(wǎng)絡(luò)攻擊行為研究
受害者敏感性與報(bào)復(fù)、寬恕的關(guān)系:沉思的中介作用
基于云計(jì)算的航天器控制系統(tǒng)自組織體系結(jié)構(gòu)
兒童霧霾的長(zhǎng)期受害者
關(guān)注恐怖主義受害者
安平县| 右玉县| 保靖县| 德江县| 荆州市| 土默特左旗| 澎湖县| 荔浦县| 芮城县| 沅陵县| 刚察县| 梁山县| 蕉岭县| 德阳市| 邢台县| 中阳县| 商河县| 翁源县| 特克斯县| 邵武市| 威海市| 尉氏县| 辉南县| 海盐县| 赞皇县| 万州区| 莱西市| 天长市| 本溪| 焦作市| 平罗县| 平和县| 察哈| 石城县| 白朗县| 彰武县| 庐江县| 福建省| 抚松县| 灵丘县| 奇台县|