苗新亮 蔣烈輝 常 瑞
1(數(shù)學(xué)工程與先進(jìn)計(jì)算國家重點(diǎn)實(shí)驗(yàn)室(戰(zhàn)略支援部隊(duì)信息工程大學(xué)) 鄭州 450001) 2(浙江大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 杭州 310027)
隨著物聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,其安全問題受到了很多研究者的關(guān)注.一方面,海量異構(gòu)的智能設(shè)備承載著核心功能,容易成為攻擊者的直接目標(biāo);另一方面,智能終端設(shè)備收集到的數(shù)據(jù)在云、邊、端等處理過程中存在數(shù)據(jù)泄漏等安全問題.側(cè)信道攻擊利用物聯(lián)網(wǎng)環(huán)境中共享的物理資源,構(gòu)建隱蔽信道獲取時(shí)間、功耗、電壓、聲音等側(cè)信息,從智能終端設(shè)備或云平臺(tái)中提取敏感信息,目標(biāo)對(duì)象包括智能手機(jī)[1]、智能手表[2]、智能燈[3]、電動(dòng)汽車[4]等實(shí)體設(shè)備,對(duì)物聯(lián)網(wǎng)終端設(shè)備及應(yīng)用環(huán)境造成了嚴(yán)重危害.
側(cè)信道攻擊與傳統(tǒng)直接獲取訪問敏感數(shù)據(jù)權(quán)限的攻擊不同,它通過分析所監(jiān)控的某些特定資源從系統(tǒng)中獲取敏感信息.而物聯(lián)網(wǎng)設(shè)備容易遭受側(cè)信道攻擊的原因主要有2個(gè):1)大量的用戶共享系統(tǒng)資源,且多個(gè)應(yīng)用程序運(yùn)行在同一臺(tái)物聯(lián)網(wǎng)設(shè)備中,利用共享資源獲取信息的側(cè)信道攻擊一旦危害一個(gè)用戶或應(yīng)用程序,其他用戶或應(yīng)用程序立即面臨威脅;2)物聯(lián)網(wǎng)設(shè)備的大量部署,為物理訪問這些設(shè)備提供了更多機(jī)會(huì),使得攻擊者獲取更多的側(cè)信道信息.雖然目前提出的一些隔離技術(shù)(虛擬機(jī)、沙箱、特權(quán)分級(jí)等)可以防止非授權(quán)訪問,但這種隔離僅僅是邏輯上的隔離,物理資源仍是共享的,因此無法防御側(cè)信道攻擊.根據(jù)監(jiān)控的資源類型,側(cè)信道攻擊通過構(gòu)建不同的側(cè)信道獲取側(cè)信息并實(shí)施攻擊行為.Ronen等人[3]將差分能量分析和相關(guān)性能量分析相結(jié)合,利用功率消耗構(gòu)建側(cè)信道,成功提取Philips用來加密和授權(quán)新固件的全局AES-CCM密鑰,實(shí)現(xiàn)對(duì)物聯(lián)網(wǎng)設(shè)備Philips Hue智能燈的遠(yuǎn)距離復(fù)位和控制.Islam等人[5-7]分別利用熱力、電壓、聲音構(gòu)建側(cè)信道來提取云環(huán)境中良性租戶的運(yùn)行時(shí)功率使用信息,確定攻擊時(shí)間,實(shí)現(xiàn)對(duì)共享電力設(shè)施的有效攻擊.Zhang等人[8]提出在iOS系統(tǒng)中構(gòu)建計(jì)時(shí)側(cè)信道破壞文件系統(tǒng),利用側(cè)信道攻擊成功提取用戶信息,包括識(shí)別訪問的網(wǎng)站以及檢測(cè)安裝的應(yīng)用程序等.Genkin等人[9]通過計(jì)算機(jī)內(nèi)置網(wǎng)絡(luò)攝像頭或麥克風(fēng)等設(shè)備收集噪聲,構(gòu)建聲音側(cè)信道,通過對(duì)信號(hào)進(jìn)行分析,可以實(shí)時(shí)檢測(cè)屏幕上的文本內(nèi)容以及使用虛擬鍵盤輸入的內(nèi)容等信息.此外,電磁側(cè)信道攻擊[4,10-12]、溫度側(cè)信道攻擊[13]、光子側(cè)信道攻擊[14]、緩存?zhèn)刃诺拦鬧15-16]等在終端設(shè)備或云平臺(tái)中也得到了廣泛應(yīng)用.側(cè)信道攻擊通過監(jiān)控某些資源,結(jié)合已知條件推斷出一些敏感數(shù)據(jù),其攻擊效果顯著,且由于不在系統(tǒng)中留下任何痕跡,很難被檢測(cè).
大量物聯(lián)網(wǎng)設(shè)備及云平臺(tái)中的用戶信息等敏感數(shù)據(jù)都依賴于密碼庫的可靠性進(jìn)行保護(hù),而側(cè)信道攻擊在提出之初就是一種針對(duì)密碼實(shí)現(xiàn)的物理攻擊方法,因此很容易對(duì)物聯(lián)網(wǎng)終端設(shè)備實(shí)施攻擊.在眾多側(cè)信道攻擊中,訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊利用Cache資源共享,通過監(jiān)控用戶程序?qū)ache的訪問行為,結(jié)合已知信息可推斷目標(biāo)設(shè)備和云平臺(tái)目標(biāo)虛擬機(jī)中的加密密鑰,同時(shí)也可以獲取用戶密碼、瀏覽器訪問記錄等敏感數(shù)據(jù).對(duì)不同架構(gòu)下的設(shè)備安全和云安全環(huán)境造成了嚴(yán)重威脅.因此,本文主要針對(duì)訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊進(jìn)行研究.
本文的主要貢獻(xiàn)有3個(gè)方面:
1) 重點(diǎn)研究了訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊技術(shù),通過理論分析和實(shí)例驗(yàn)證的方式,對(duì)比分析了“清除+重載”、“填充+探測(cè)”和“刷新+重載”3種攻擊的攻擊原理、攻擊過程和攻擊效果,詳細(xì)闡述了不同攻擊的適用場(chǎng)景以及可能存在的問題;
2) 提出了Cache側(cè)信道攻擊在攻擊LLC和處理噪聲方面的挑戰(zhàn),并給出相應(yīng)的解決措施;
3) 結(jié)合可信應(yīng)用環(huán)境廣泛應(yīng)用于數(shù)據(jù)存儲(chǔ)和保護(hù)等現(xiàn)狀,討論了對(duì)部署隔離機(jī)制的終端設(shè)備和可信云安全環(huán)境實(shí)施攻擊等未來研究方向.
CPU Cache(1)無特殊說明,后文中Cache均指CPU Cache是一個(gè)緩沖CPU頻繁使用的數(shù)據(jù)的小容量存儲(chǔ)器,它利用數(shù)據(jù)訪問的局部性原理(最近被訪問的數(shù)據(jù)容易被再次訪問)避免數(shù)據(jù)再次訪問主存時(shí)帶來的高延遲.由于Cache可在不同進(jìn)程間共享,因此可在CPU Cache中實(shí)施Cache側(cè)信道攻擊.該攻擊通過監(jiān)控指定程序的Cache訪問行為,推斷出該程序的敏感信息,其核心是利用Cache命中和未命中的時(shí)間差實(shí)施攻擊行為.算法1是一個(gè)RSA平方乘求冪算法,通過側(cè)信道攻擊可以獲取算法中的敏感數(shù)據(jù).在計(jì)算過程中,對(duì)于每個(gè)位,執(zhí)行一次squ()和mod()函數(shù),當(dāng)該位值為1時(shí),執(zhí)行一次mul()和mod()函數(shù).因此,第3行函數(shù)squ()的執(zhí)行次數(shù)可表示二進(jìn)制指數(shù)e的位數(shù),第6行函數(shù)mul()是否執(zhí)行表示該位的值是否為1.通過觀察這2個(gè)函數(shù)地址的Cache訪問行為、比較地址訪問的時(shí)間,可以判斷函數(shù)是否執(zhí)行,進(jìn)而推斷出指數(shù)e所有位上的值.
Cache側(cè)信道攻擊包含1個(gè)目標(biāo)進(jìn)程和1個(gè)間諜進(jìn)程,目標(biāo)進(jìn)程即被攻擊的進(jìn)程,間諜進(jìn)程指在Cache中探測(cè)關(guān)鍵位置的惡意進(jìn)程.通過探測(cè),攻擊者可以推斷目標(biāo)進(jìn)程的Cache行為信息.最近幾年,Cache側(cè)信道攻擊越來越復(fù)雜,憑借可以繞過監(jiān)督模式執(zhí)行保護(hù)(supervisor mode execution protection, SMEP)以及地址空間布局隨機(jī)化(address space layout randomization, ASLR)[17]的特點(diǎn),逐步由攻擊AES[18-21],RSA[22],DSA[23]等加密算法到獲取擊鍵信息[24]等,而且其攻擊對(duì)象包括臺(tái)式機(jī)[25]、移動(dòng)設(shè)備[24]以及云平臺(tái)[15-16,26-27]等.根據(jù)攻擊者獲取信息的方式及粒度,可以將Cache側(cè)信道攻擊分為3類[28]:1)時(shí)序驅(qū)動(dòng)攻擊.攻擊者通過觀察某一次計(jì)算運(yùn)行的整體時(shí)間來推測(cè)目標(biāo)程序的Cache命中和未命中的數(shù)量.2)蹤跡驅(qū)動(dòng)攻擊.攻擊者在目標(biāo)進(jìn)程運(yùn)行時(shí),通過觀察到大概的Cache行為來推測(cè)哪些內(nèi)存訪問產(chǎn)生了Cache命中.3)訪問驅(qū)動(dòng)攻擊.攻擊者判定目標(biāo)進(jìn)程運(yùn)行時(shí)訪問指定Cache組的情況,進(jìn)而推測(cè)出目標(biāo)進(jìn)程所訪問的敏感數(shù)據(jù).在這3類攻擊中,訪問驅(qū)動(dòng)攻擊的攻擊粒度更細(xì),且在實(shí)際應(yīng)用中更為廣泛.該攻擊一般分為清除、等待、分析3個(gè)步驟[29].根據(jù)不同的攻擊場(chǎng)景,清除和分析方法有所不同,攻擊方式也變化多樣.第2~4節(jié)分別針對(duì)訪問驅(qū)動(dòng)下的“清除+重載(Evict+Reload)”、“填充+探測(cè)(Prime+Probe)”、“刷新+重載(Flush+Reload)”這3種Cache側(cè)信道攻擊進(jìn)行詳細(xì)闡述.
Evict+Reload攻擊是一種典型的訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊,主要針對(duì)L1-Cache獲取敏感信息.該攻擊的原理是,攻擊者利用Cache組相聯(lián)的特點(diǎn),把指定Cache組中的所有內(nèi)存行進(jìn)行清除和檢查,由于間諜進(jìn)程和目標(biāo)進(jìn)程共享Cache,間諜進(jìn)程可以探查到該Cache組中哪一行被目標(biāo)進(jìn)程重新加載,進(jìn)一步推測(cè)出運(yùn)行目標(biāo)進(jìn)程的內(nèi)核中私有Cache中的數(shù)據(jù).
Evict+Reload攻擊分為3個(gè)步驟:1)間諜進(jìn)程利用沖突地址填滿Cache組中所有行,將目標(biāo)進(jìn)程訪問的探查地址從該組中清除;2)間諜進(jìn)程等待目標(biāo)進(jìn)程訪問該Cache組;3)間諜程序訪問探查地址并測(cè)量訪問時(shí)間.通過訪問時(shí)間,確定目標(biāo)進(jìn)程在等待階段是否訪問了該探查地址.
圖1是一個(gè)在6路組相聯(lián)Cache中實(shí)施Evict+Reload攻擊的示例[29].在時(shí)刻T0,目標(biāo)進(jìn)程將探查地址加載到Cache的某一行中;在清除階段(T1),間諜進(jìn)程利用沖突地址清除該組中包括探查地址在內(nèi)的所有的行;在等待階段(T2),間諜進(jìn)程等待目標(biāo)進(jìn)程訪問探查地址;在分析階段(T3),間諜進(jìn)程訪問探查地址并測(cè)量訪問時(shí)間.此時(shí),由于目標(biāo)進(jìn)程在時(shí)刻T2訪問了探查地址,間諜進(jìn)程再次訪問時(shí)會(huì)產(chǎn)生一個(gè)命中.而在下一個(gè)循環(huán)(T4,T5,T6)中,目標(biāo)進(jìn)程在時(shí)刻T5沒有訪問探查地址,所以當(dāng)間諜進(jìn)程在時(shí)刻T6訪問探查地址時(shí),會(huì)產(chǎn)生一個(gè)未命中,此時(shí)訪問的時(shí)間相比于命中時(shí)較長.通過訪問時(shí)間,間諜進(jìn)程很容易確定目標(biāo)進(jìn)程是否訪問了該探查地址,進(jìn)而推斷出敏感數(shù)據(jù).例如,給出一串0和1構(gòu)成的位,當(dāng)值為“1”時(shí),數(shù)值加1,否則查看下一位.那么間諜進(jìn)程只需獲知在每次循環(huán)中,目標(biāo)進(jìn)程是否訪問了“加1”這個(gè)操作的探查地址,即可推斷出該串位的具體數(shù)值.
Fig.1 Example of Evict+Reload圖1 Evict+Reload攻擊示例
Gruss等人[30]在提出Cache模板攻擊時(shí),實(shí)施并驗(yàn)證了Evict+Reload攻擊.他們利用物理地址的低18位實(shí)施攻擊,清除率接近于100%,而且對(duì)按鍵n的探查地址進(jìn)行檢測(cè),平均檢測(cè)率為90%,假陽率為5%.證明了在攻擊者可以訪問共享Cache行的情況下,實(shí)施的Evict+Reload攻擊難以被完全防御.
Prime+Probe攻擊由Osvik等人[31]首次提出,該攻擊的特點(diǎn)是不需要攻擊者和受害者內(nèi)存共享.其攻擊原理與Evict+Reload攻擊相似,都是利用Cache命中和未命中的時(shí)間差,確定目標(biāo)程序的Cache訪問行為.但由于Prime+Probe攻擊不依賴于間諜程序和目標(biāo)程序共享內(nèi)存,因此,不同于Evict+Reload攻擊中比較訪問探測(cè)地址的時(shí)間差,該攻擊的攻擊者只能測(cè)量比較間諜進(jìn)程訪問指定Cache組的時(shí)間差.
利用Cache訪問特性,攻擊分為3個(gè)步驟:1)填充階段,攻擊者通過訪問自己內(nèi)存空間中部分區(qū)域,將特定的Cache組中的所有行進(jìn)行填充;2)目標(biāo)訪問階段,攻擊者等待目標(biāo)程序訪問該Cache組中的內(nèi)存行,從而清除第一階段填充的對(duì)應(yīng)Cache行;3)探查階段,攻擊者再次訪問該Cache組中的所有行,并測(cè)量訪問時(shí)間.如果該內(nèi)存行已被目標(biāo)程序從Cache中清除,則訪問時(shí)間較長;反之,則所有填充的行仍存儲(chǔ)在Cache中,那么訪問時(shí)間較短.通過該攻擊,攻擊者確定目標(biāo)程序是否訪問指定的Cache組,從而推測(cè)敏感數(shù)據(jù).
假設(shè)一個(gè)m路、n組相聯(lián)的Cache,容量為c,Cache中每行大小為b,則n=c/(m×b).目前市場(chǎng)上大部分的L1指令Cache大小為32 KB,每組有8行,且每行占據(jù)64 B,因此,L1指令Cache有32 KB/(8×64 B)=64組.在一個(gè)4 KB的頁面中,按照Cache行大小進(jìn)行分塊,可以分成64(4 KB/64 B)塊,而偏移量相同的塊會(huì)映射到同一個(gè)Cache組中.當(dāng)對(duì)L1指令Cache實(shí)施Prime+Probe攻擊時(shí),在填充階段,首先分配足量的連續(xù)內(nèi)存頁面,使其大小總量與L1指令Cache相同;其次把每個(gè)頁面分成64個(gè)與Cache行大小相等的塊;然后通過執(zhí)行指令把每個(gè)頁面的第i個(gè)數(shù)據(jù)塊映射到第i個(gè)Cache組中,使得特定組中的所有行都被填充.
在探查階段,如圖2所示,通過執(zhí)行rdtsc指令測(cè)量訪問第i個(gè)Cache組所用的時(shí)間.其中,cpuid指令防止指令重序或者亂序執(zhí)行.每個(gè)mov指令讀取該Cache組中的一行,每個(gè)內(nèi)存行存儲(chǔ)指向下一行的指針,寄存器%eax存儲(chǔ)測(cè)量的時(shí)間.通過比較這2個(gè)階段中的訪問時(shí)間,確定受害者進(jìn)程是否在等待階段訪問了L1指令Cache中指定的組.
Fig. 2 Code of probing an 8-way cache
圖2 探查一個(gè)8路組Cache的代碼
此外,利用Prime+Probe攻擊在探查時(shí)也填充了相關(guān)的Cache組的特點(diǎn),有一個(gè)改進(jìn)之處是在重復(fù)執(zhí)行探查時(shí),只需在每2個(gè)探查之間執(zhí)行預(yù)設(shè)的等待即可完成Prime+Probe攻擊,而不用額外地執(zhí)行填充操作,提高了攻擊效率.
Osvik等人[31]利用該攻擊檢測(cè)Cache在AES加密后的狀態(tài),找到執(zhí)行加密時(shí)訪問的Cache組,從而提取密鑰.在已知虛擬地址到物理地址映射關(guān)系的情況下,在Athlon 64上可以在300次加密后獲取全部的128 b AES密鑰,在Pentium 4E上需要執(zhí)行16 000次加密獲取全部密鑰;在不知任何地址映射的情況下,在Althon上執(zhí)行8 000次加密后,可以獲取全部密鑰.
Fig. 3 Timing of Flush+Reload圖3 Flush+Reload攻擊的時(shí)序過程
Flush+Reload攻擊是Prime+Probe攻擊的一種變形,該攻擊可以從包括L3在內(nèi)的各級(jí)Cache中清除內(nèi)存行,實(shí)施條件依賴于間諜程序和目標(biāo)程序之間共享內(nèi)存頁面[32].在Intel處理器中,用戶線程可以使用clflush指令刷新可讀和可執(zhí)行的頁面,這就使得攻擊者可以通過刷新與目標(biāo)程序共享的頁面來實(shí)施攻擊.由于clflush指令可以從整個(gè)Cache層次架構(gòu)中清除指定的內(nèi)存行,攻擊者使用clflush指令頻繁地刷新目標(biāo)內(nèi)存位置,通過測(cè)量重新加載該內(nèi)存行的時(shí)間,確定目標(biāo)程序是否同時(shí)將該內(nèi)存行緩存到Cache中.
Flush+Reload攻擊由3個(gè)步驟組成:1)被監(jiān)控的內(nèi)存行從Cache中刷新;2)間諜程序等待目標(biāo)程序訪問該內(nèi)存行;3)間諜程序重新加載被刷新的內(nèi)存行并測(cè)量加載時(shí)間.
如圖3(a)所示,如果受害者在步驟2沒有訪問被刷新的內(nèi)存行,那么該內(nèi)存行不會(huì)把內(nèi)存緩存到Cache中,因此在步驟3被重新加載的時(shí)間較長;圖3(b)表示受害者在步驟2訪問被刷新的內(nèi)存行,此時(shí)該內(nèi)存行會(huì)緩存到Cache中,因此在步驟3被重新加載的時(shí)間較短.通過測(cè)量重新加載時(shí)間即可判斷該內(nèi)存行是否在等待時(shí)間被目標(biāo)程序訪問.
在Flush+Reload攻擊中,攻擊者無法確定受害者訪問的具體時(shí)間,只能設(shè)置一個(gè)等待時(shí)間進(jìn)行等待并測(cè)量,等待時(shí)間的設(shè)置對(duì)攻擊的成功率有著重要的影響.若時(shí)間設(shè)置較短,如圖3(c)所示,受害者訪問的時(shí)間可能與攻擊者重新加載的時(shí)間重疊,且是在攻擊者開始進(jìn)行重新加載后受害者才開始訪問該內(nèi)存行.此時(shí),受害者訪問該數(shù)據(jù)時(shí)會(huì)直接使用攻擊者已重新加載的數(shù)據(jù),而不會(huì)再從內(nèi)存中讀取.所以,攻擊者認(rèn)為受害者在等待階段并沒有訪問該內(nèi)存行,從而檢測(cè)錯(cuò)誤.若時(shí)間設(shè)置較長,如圖3(d)所示,受害者訪問的時(shí)間與攻擊者重新加載的時(shí)間也可能發(fā)生重疊,但此時(shí)是受害者先訪問被刷新的內(nèi)存行,且在訪問未結(jié)束時(shí),攻擊者開始重新加載該內(nèi)存行.由于受害者已經(jīng)訪問該內(nèi)存行,攻擊者無需從內(nèi)存中再訪問該內(nèi)存行,且重新加載與受害者訪問同時(shí)結(jié)束,此時(shí)重新加載的時(shí)間比從內(nèi)存中加載該內(nèi)存行的時(shí)間短,但比從Cache中裝載的時(shí)間長.雖然延長等待時(shí)間可以降低由于時(shí)間重疊導(dǎo)致的檢測(cè)錯(cuò)誤率,但同時(shí)也降低了攻擊粒度.一種解決方案就是對(duì)訪問頻率高的內(nèi)存塊(如循環(huán)體)進(jìn)行刷新和重新加載,如圖3(e)所示,在等待時(shí)間內(nèi)盡可能多地讓受害者訪問內(nèi)存行,雖然不能在每次訪問后都能檢測(cè)到,但可以降低未檢測(cè)率.
由于Flush+Reload攻擊使得攻擊者可以確定哪些具體的指令被執(zhí)行以及哪些具體的數(shù)據(jù)被受害者訪問,因此被廣泛應(yīng)用于加密算法的破解中.例如利用運(yùn)行在不同內(nèi)核的虛擬機(jī)共享物理資源這一特性,對(duì)目標(biāo)虛擬機(jī)實(shí)施Flush+Reload攻擊獲取敏感數(shù)據(jù).Irazoqui等人[33]對(duì)該攻擊進(jìn)行了修改,并對(duì)目標(biāo)虛擬機(jī)中運(yùn)行的OpenSSL 1.0.1中的AES算法上進(jìn)行了攻擊驗(yàn)證.與之前攻擊不同,該攻擊只監(jiān)視一個(gè)內(nèi)存行,且在加密之前執(zhí)行刷新,在加密后執(zhí)行重新加載,避免攻擊者中斷受害者進(jìn)程.通過這些修改,改進(jìn)的Flush+Reload攻擊更加隱蔽,且攻擊速度更快,只需幾秒到幾分鐘的時(shí)間可獲取AES全部密鑰.除此之外,利用Flush+Reload攻擊也可以提取擊鍵信息,Oren等人[25]證實(shí)了在Intel平臺(tái)上利用該攻擊獲知受害者訪問的網(wǎng)頁以及鼠標(biāo)使用痕跡.
近年來,隨著Cache側(cè)信道攻擊的不斷完善,其攻擊復(fù)雜度越來越高,且各攻擊模型的優(yōu)缺點(diǎn)和適用場(chǎng)景也更加明顯.Evict+Reload攻擊主要還是在L1-Cache中實(shí)施,利用攻擊者和受害者共享內(nèi)存,間諜進(jìn)程能夠獲得所需的Cache行,通過攻擊準(zhǔn)確判斷指定Cache行的訪問行為,攻擊效率較高.Prime+Probe攻擊不再依賴于攻擊者和受害者共享內(nèi)存,因此間諜進(jìn)程無法獲得具體的Cache行,而是通過比較訪問指定Cache組中所有行的時(shí)間判斷目標(biāo)進(jìn)程Cache訪問行為.雖然攻擊粒度沒有Evict+Reload攻擊細(xì),但該攻擊已逐步發(fā)展為針對(duì)LLC的攻擊,更符合實(shí)際應(yīng)用.相比于前2種攻擊,F(xiàn)lush+Reload攻擊速度更快,而且可以直接在LLC中實(shí)施,但該攻擊除了需要間諜進(jìn)程和目標(biāo)進(jìn)程之間共享內(nèi)存外,更依賴于clflush指令刷新Cache,因此,只能作用于支持clflush指令的環(huán)境中,同時(shí),由于刷新指令執(zhí)行周期很短,需要更精準(zhǔn)的時(shí)鐘計(jì)數(shù)器提高分辨率,對(duì)噪聲處理的要求也更高.
從攻擊范圍的角度比較,如表1所示,“清除+重載”攻擊目前仍針對(duì)低級(jí)Cache實(shí)施,且主要應(yīng)用于獲取擊鍵信息;“刷新+重載”攻擊因?yàn)樾枰猚lflush指令和內(nèi)存共享,實(shí)施條件相對(duì)苛刻,剛開始只能在Intel處理器中實(shí)施,經(jīng)過不斷發(fā)展,在ARM中也可以變型實(shí)施;“填充+探測(cè)”攻擊由最初的針對(duì)低級(jí)Cache發(fā)展為高級(jí)Cache,且不需要內(nèi)存共享,因此攻擊范圍最廣.
Table 1 Comparison of Attack Range of Three Cache Side Channel Attacks
Note: “√” indicates that the attack is performed on this target.
從防御的角度比較,如表2所示,由于“填充+探測(cè)”攻擊的應(yīng)用最為廣泛,針對(duì)這一攻擊提出的防御方法較多.“清除+重載”攻擊一般不用于LLC攻擊中,威脅相對(duì)較小,而針對(duì)“刷新+重載”攻擊提出的防御方案一般都是在Intel處理器中.雖然這些防御方案可以在一定程度上緩解Cache側(cè)信道攻擊,但受限于性能、處理器平臺(tái)等因素,并不能完全消除Cache側(cè)信道攻擊,利用Intel TSX(transactional synchronization extension)技術(shù)可以檢測(cè)中斷異常,但目前的攻擊已經(jīng)可以不觸發(fā)AEX(asynchronous enclave exit),Intel CAT(cache allocation technology)技術(shù)可以保護(hù)密碼算法,但無法防御來自隔離容器外部的攻擊.
Table 2 Defense Schemes Proposed for Cache Side Channel Attacks
Note: “√” indicates that the attack is defeated by this defense.
Fig. 4 Virtual address composition of regular page (4 KB,top) and huge page (256 KB,bottom) in an Intel x86 processor圖4 Intel x86處理器普通頁面(4 KB)和大頁面(256 KB)虛擬地址組成
當(dāng)前訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊主要還是在低級(jí)Cache中實(shí)施,例如Evict+Reload和Prime+Probe攻擊都用于監(jiān)視L1-Cache行為.主要原因有2點(diǎn):大多數(shù)情況下,攻擊者僅能獲取虛擬地址,容量小的Cache,由于對(duì)應(yīng)的組索引位以及Cache行偏移量較少,通過虛擬地址即可獲得,符合攻擊的實(shí)際情況;容量小的Cache更容易實(shí)現(xiàn)對(duì)所有的行進(jìn)行填充和探查.但是,在很多實(shí)際場(chǎng)景中,攻擊者和受害者并不是處于同一個(gè)內(nèi)核中,例如運(yùn)行在同一個(gè)物理機(jī)上的不同虛擬機(jī)會(huì)運(yùn)行在不同內(nèi)核上.因此,該類攻擊逐漸轉(zhuǎn)移到內(nèi)核共享的LLC上.但在LLC上實(shí)施這類攻擊比在L1-Cache上困難很多,主要面臨2個(gè)挑戰(zhàn):1)LLC比L1-Cache容量大很多,正常的虛擬地址的頁面偏移量難以完全包含LLC的組索引位;2)現(xiàn)代Intel處理器,從“沙橋”微架構(gòu)(Sandy Bridge microarchitecture)開始,為提高LLC性能引入了切片技術(shù),即每個(gè)內(nèi)核對(duì)應(yīng)一個(gè)切片,每個(gè)切片的功能與一個(gè)Cache相似,在這種情況下,即使組索引位已知,也無法確定映射到哪一個(gè)切片的Cache組中,從而無法完成對(duì)應(yīng)組的填充和探查工作.
為解決第1個(gè)挑戰(zhàn),目前基本上采用調(diào)整頁面大小的方法[33,35,46].默認(rèn)的頁面大小是4 KB,則虛擬地址的低12位表示頁面偏移量,現(xiàn)代處理器中Cache行大小通常為64 B,則行內(nèi)偏移量需6 b,其余6 b為組索引位,最多索引64個(gè)Cache組,無法滿足LLC組索引要求.因此,增加頁面大小成為一種解決方案.如圖4所示,在3級(jí)Cache架構(gòu)的Intel x86處理器中,若L1-Cache,L2-Cache,L3-Cache分別有64,512,4096組,設(shè)置頁面大小為256 KB,則頁面偏移量需18 b,其中低0~5位表示Cache行內(nèi)偏移量,6~11位為L1-Cache的組索引位,6~14位為L2-Cache的組索引位,6~17位為L3-Cache(LLC)的組索引位.因此,當(dāng)頁面大小為256 KB或者更大時(shí),LLC的組索引位完全包含在虛擬地址的頁面偏移量中,不用地址轉(zhuǎn)換即可索引對(duì)應(yīng)的組.
為解決第2個(gè)挑戰(zhàn),目前已提出一些解決方案.Irazoqui等人[33]發(fā)現(xiàn)Intel i5-650處理器上LLC分為2個(gè)切片,且數(shù)據(jù)將進(jìn)入哪個(gè)切片由虛擬地址的第(l+1)位決定,其中l(wèi)為組索引和行內(nèi)偏移量需要的位數(shù).第(l+1)位為0,數(shù)據(jù)存儲(chǔ)在第0切片,第(l+1)位為1,數(shù)據(jù)存儲(chǔ)在第1切片,通過(l+1)位判斷內(nèi)存行映射到哪一切片中的哪一個(gè)Cache組中.但是,該方法不具有通用性.Liu等人[35]利用Cache訪問沖突原理設(shè)計(jì)了一個(gè)巧妙的方法,實(shí)現(xiàn)在LLC中實(shí)施Prime+Probe攻擊.首先,把具有相同的組索引位的內(nèi)存行作為候選者,建立1個(gè)沖突集,初始為空,通過迭代的方式,如果候選者與沖突集中的內(nèi)存行不發(fā)生沖突,則加入沖突集中,每個(gè)切片中要進(jìn)行填充的Cache組稱為清除組,沖突集是所有切片中清除組的集合;其次,從沖突集中劃分出對(duì)應(yīng)每個(gè)切片的清除組.具體是遍歷所有未進(jìn)入沖突集的候選者,把沖突集中的每條內(nèi)存行依次除去,如果該候選者與除去的內(nèi)存行映射到同一個(gè)切片的清除組中,此時(shí)該候選者與沖突集不再發(fā)生沖突(候選者緩存到被除去的內(nèi)存行所在的Cache組中),則重新加載該候選者的時(shí)間較短;如果該候選者與除去的內(nèi)存行沒有映射到同一個(gè)切片的清除組中,此時(shí)該候選者與沖突集繼續(xù)發(fā)生沖突(該候選者映射到的Cache組已滿),則重新加載該候選者的時(shí)間較長.通過時(shí)間差,可以把與該候選者在同一清除組的所有內(nèi)存行找出,從而劃分出每個(gè)切片的清除組.通過該方法,即使在切片號(hào)由Hash函數(shù)產(chǎn)生的情況下依然可以在LLC上實(shí)施Prime+Probe攻擊,且攻擊效果顯著,對(duì)于舊版本的GnuPG,幾秒鐘即可破解密鑰,在新的版本中,也僅需要12~27 min.
訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊針對(duì)不同的場(chǎng)景,提出了各種攻擊方式.雖然這些攻擊應(yīng)用廣泛,且因?yàn)椴涣粝潞圹E難以被檢測(cè),但因?yàn)檐浻布蛩?,攻擊?shí)施的過程中都不可避免地存在噪聲問題,影響了攻擊效果.對(duì)噪聲進(jìn)行處理,成為當(dāng)前實(shí)施該攻擊的一大挑戰(zhàn).噪聲產(chǎn)生的根源主要有2方面:
1) 硬件方面.①TLB未命中.TLB是很小的組關(guān)聯(lián)Cache,用于將虛擬地址轉(zhuǎn)換到物理地址.在Evict+Reload和Prime+Probe攻擊的探測(cè)階段,第1個(gè)Cache組總會(huì)未命中,此時(shí)需要從內(nèi)存中取數(shù)據(jù),產(chǎn)生異常.通常的解決方法是,丟棄第1個(gè)Cache組的探測(cè)結(jié)果消除異常.②預(yù)測(cè)執(zhí)行.現(xiàn)代處理器通常使用分支預(yù)測(cè)技術(shù),指令會(huì)亂序執(zhí)行,影響探測(cè)結(jié)果.為防止該噪聲產(chǎn)生,目前基本使用cpuid和mfence指令迫使指令順序執(zhí)行.
2) 軟件方面.①上下文切換.管理程序上下文切換會(huì)污染Cache,導(dǎo)致Cache未命中,從而產(chǎn)生噪聲.②rdtsc指令調(diào)用.在探查和重新加載階段,當(dāng)使用rdtsc指令計(jì)時(shí)時(shí),由于該指令調(diào)用的時(shí)間是本地調(diào)用的5~20倍,因此測(cè)量時(shí)間精度有所降低,從而產(chǎn)生噪聲.③其他進(jìn)程的干擾.在物理機(jī)器上,不僅僅是間諜進(jìn)程和目標(biāo)進(jìn)程這2個(gè)進(jìn)程在運(yùn)行,其他進(jìn)程也會(huì)在該系統(tǒng)中不斷運(yùn)行并執(zhí)行內(nèi)存存取.因此,攻擊者觀察到的Cache行為,可能是目標(biāo)進(jìn)程訪問Cache導(dǎo)致,也可能是相鄰目標(biāo)域的其他進(jìn)程運(yùn)行時(shí)訪問Cache導(dǎo)致,從而產(chǎn)生噪聲.
訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊應(yīng)用十分廣泛,例如2018年初曝出的“熔斷”和“幽靈”2個(gè)漏洞均利用了該攻擊[53-54]以及2019年出現(xiàn)的“熔斷2.0”版本,涉及范圍廣,包括各處理器芯片、操作系統(tǒng)、云服務(wù)提供商等都受到較大影響,且由于該攻擊難以通過軟件技術(shù)被檢測(cè),硬件防御會(huì)導(dǎo)致嚴(yán)重的性能下降,因此難以提出有效的軟硬件防御方案.目前很多學(xué)者針對(duì)該攻擊進(jìn)行了深入地研究,促進(jìn)了該攻擊模型的進(jìn)一步完善.綜合該攻擊在實(shí)際應(yīng)用中的擴(kuò)展性高、粒度細(xì)、強(qiáng)度大以及隱蔽性強(qiáng)等特點(diǎn),提出可針對(duì)4個(gè)方面開展研究:
1) 針對(duì)其他Cache層次結(jié)構(gòu)特性實(shí)施攻擊.現(xiàn)代Cache層次結(jié)構(gòu)逐漸成為非包含性、獨(dú)占性,因此利用Cache包含性特點(diǎn)進(jìn)行監(jiān)控Cache訪問行為的跨核側(cè)信道攻擊無法高效實(shí)施.目前提出的利用ARM處理器中Cache一致性協(xié)議[24]以及逆向Intel處理器中目錄[55]的方法可以成功實(shí)施攻擊,但受到攻擊平臺(tái)的限制無法通用.因此,如何對(duì)其他特性的Cache架構(gòu)實(shí)施跨核攻擊,成為值得研究的問題.
2) 構(gòu)建混合信道攻擊物聯(lián)網(wǎng)設(shè)備.目前針對(duì)物聯(lián)網(wǎng)設(shè)備的側(cè)信道攻擊往往僅關(guān)注1個(gè)側(cè)信道信息,單一的側(cè)信道攻擊只能針對(duì)1個(gè)攻擊面,相比之下,混合側(cè)信道攻擊通過多個(gè)攻擊面的共同作用放大差異,能夠獲得更高的精度和準(zhǔn)確度.雖然已有研究人員提出在傳感器中注入少量特殊噪聲以降低攻擊的成功率[56],但在實(shí)際場(chǎng)景中,物聯(lián)網(wǎng)設(shè)備往往“不經(jīng)意間”同時(shí)泄露功耗、電磁、內(nèi)存使用等信息,且設(shè)備的大量部署更容易通過物理方式獲取這些信息.利用物聯(lián)網(wǎng)這一特性,將Cache側(cè)信道與多種側(cè)信道結(jié)合,構(gòu)建混合隱蔽信道,提高對(duì)物聯(lián)網(wǎng)設(shè)備進(jìn)行側(cè)信道攻擊的效果,是未來值得研究的一個(gè)方向.
3) 加強(qiáng)對(duì)云平臺(tái)攻擊.在萬物互聯(lián)時(shí)代下,云、端、邊都存儲(chǔ)了大量的敏感信息,雖然Cache側(cè)信道攻擊已在云環(huán)境中成功實(shí)現(xiàn),但實(shí)施該攻擊需要提前判斷同駐情況,這成為防御該攻擊的一個(gè)突破點(diǎn).因此,變換攻擊方式,加強(qiáng)云平臺(tái)攻擊成為重點(diǎn)研究方向.
4) 打破可信執(zhí)行環(huán)境的隔離機(jī)制.可信執(zhí)行環(huán)境提供的隔離機(jī)制(如ARM TrustZone,Intel SGX)可以將隱私數(shù)據(jù)和代碼隔離在一個(gè)可信環(huán)境中,阻止其他程序?qū)ζ湓L問[57-62].目前TrustZone技術(shù)已大范圍部署在嵌入式設(shè)備中,且SGX技術(shù)也用于構(gòu)建可信云安全環(huán)境,以及加強(qiáng)邊緣計(jì)算平臺(tái)的安全性[63],增加了該攻擊實(shí)施在物聯(lián)網(wǎng)設(shè)備和云平臺(tái)上的難度,而且現(xiàn)在也已經(jīng)提出利用這種隔離機(jī)制緩解側(cè)信道攻擊的方案[64-66].如何打破這種隔離機(jī)制,實(shí)施Cache側(cè)信道攻擊,成為該攻擊的一個(gè)研究趨勢(shì).
利用計(jì)算機(jī)運(yùn)行時(shí)物理硬件“不經(jīng)意間”泄露的信息,側(cè)信道攻擊無需獲取數(shù)據(jù)訪問權(quán)限即可竊取重要數(shù)據(jù),因此被廣泛應(yīng)用于破解密碼算法等場(chǎng)景中.本文研究了訪問驅(qū)動(dòng)下的Cache側(cè)信道攻擊,重點(diǎn)闡述了“清除+重載”攻擊、“填充+探測(cè)”攻擊和“刷新+重載”攻擊這3種攻擊方式的原理和過程,對(duì)比分析了不同攻擊方式的訪問行為、攻擊范圍和對(duì)應(yīng)的防御方案,并通過攻擊結(jié)果討論了該攻擊粒度細(xì)、范圍廣和隱蔽性高的特點(diǎn)以及各自攻擊方式的適用場(chǎng)景.同時(shí),結(jié)合攻擊過程中存在的問題,提出了Cache側(cè)信道攻擊在攻擊LLC和處理噪聲上面臨的挑戰(zhàn),并根據(jù)實(shí)際應(yīng)用情況,對(duì)該攻擊未來的發(fā)展趨勢(shì)進(jìn)行更深層次的探討.在物聯(lián)網(wǎng)時(shí)代下,打破Cache側(cè)信道攻擊原有的桎梏,加強(qiáng)對(duì)隔離機(jī)制保護(hù)下物聯(lián)網(wǎng)設(shè)備和云平臺(tái)的攻擊,成為該攻擊新的攻破點(diǎn).