◆李志峰 高玉琢
基于高速緩存的側信道攻擊方法研究
◆李志峰 高玉琢
(寧夏大學信息工程學院 寧夏 750000)
基于高速緩存的側信道攻擊由于其高隱蔽性、高傳輸性、甚至無須物理接觸等特點打破了設備的隔離保護機制,對當今的信息安全產(chǎn)生了重大的威脅,開展側信道攻擊的研究具有重要的國家和社會意義。本文進行了基于高速緩存的側信道攻擊的研究。該攻擊所用到的信息包括cache訪問軌跡、整體加密時間或者cache訪問模式。根據(jù)攻擊者對目標系統(tǒng)的攻擊手段和擁有的權限能力可以將攻擊歸為三大類:軌跡驅(qū)動攻擊、時間驅(qū)動攻擊和訪問驅(qū)動攻擊。本文首先研究cache信息的泄露原理及三大類攻擊方法,并指出該類攻擊方法的優(yōu)勢,最后對cache側信道攻擊的通用架構及具體的攻擊步驟進行詳細研究。
高速緩存;側信道攻擊;漏洞;信息泄露
在硬件設備實際應用中,會泄漏出能量、電磁等多種類型的物理信息,這些信息被稱為側信息。側信息在密碼計算過程中是無法避免總會產(chǎn)生的,攻擊者通過直接或間接的方式獲取密碼算法運算過程中的中間值信息,對算法進行攻擊,進而恢復出算法密鑰,這一類攻擊方法統(tǒng)稱為側信道攻擊技術。側信道攻擊對信息安全有著重大的安全威脅,對于側信道攻擊的研究具有重要的國家和社會意義?;诟咚倬彺妫–ache)的側信道攻擊方法[1]是在2002年第一次提出的,其利用了密碼運算過程中對cache資源訪問時泄露的信息來對密碼算法實現(xiàn)進行攻擊從而獲得算法的密鑰[2-4]。Cache是CPU內(nèi)部集成的高速緩存存儲器件,CPU通過使用Cache緩存數(shù)據(jù)來對訪問內(nèi)存進行加速。當CPU讀取數(shù)據(jù)時,訪問Cache的速度與訪問內(nèi)存的速度相差約兩個數(shù)量級[3],從而造成訪問數(shù)據(jù)時由于數(shù)據(jù)所在位置不同(Cache命中與否)出現(xiàn)顯著的時間差異。攻擊者通過觀察密碼系統(tǒng)運行時Cache數(shù)據(jù)訪問時間、密碼運算執(zhí)行時間的差異,分析獲取Cache訪問狀態(tài)與密鑰數(shù)據(jù)的關系,進而獲取部分或全部密鑰信息,是一種非常有效的攻擊方法。相比于其他類型側信道攻擊,Cache側信道攻擊無須專用硬件設備,攻擊者甚至無須物理接觸目標對象,僅通過測量密碼運算執(zhí)行時間或在目標對象上執(zhí)行攻擊程序以獲取Cache訪問模式,即可獲取全部或部分密鑰信息,因此Cache側信道要比其他側信道的威脅更大,危害更嚴重。Cache側信道攻擊技術發(fā)展至今,已有多種針對不同環(huán)境和場景的攻擊方法,可以對不同運行環(huán)境中的不同密碼算法發(fā)起攻擊。本文將針對當前主流的Cache側信道攻擊方法進行研究,并對攻擊的思路和方法進行探究,抽象出Cache側信道攻擊通用的框架模型。
Cache是位于CPU與主存之間的靜態(tài)存儲器,用以解決CPU與主存之間讀取速度不匹配的問題[5]。具有高速存儲性質(zhì)的Cache造價昂貴,因此,現(xiàn)代計算機的Cache大多采用多層次結構,通常為三層。其特點就是越靠近CPU的模塊,存儲速度越快。當CPU讀取數(shù)據(jù)時,首先查看Cache中是否存在所需數(shù)據(jù)。如果存在,則直接從Cache中讀取數(shù)據(jù),即Cache 命中,此時讀取速度較快;如果不存在,則需要從內(nèi)存中讀取數(shù)據(jù)并將數(shù)據(jù)加載到Cache中,即Cache失效,此時讀取速度較慢。Cache和內(nèi)存在存取速度上存在較大差異,內(nèi)存的存取速度遠小于Cache的存取速度,兩者相差約兩個數(shù)量級,故CPU 訪問內(nèi)存所需的時間遠大于訪問Cache所需的時間。根據(jù)該時間差異,可以判斷出數(shù)據(jù)是否被訪問過,如果訪問過,則會在Cache 中留下痕跡。
Cache側信道攻擊可以獲取Cache信息從而實現(xiàn)攻擊的另一個重要原理是共享內(nèi)存。為防止內(nèi)存中出現(xiàn)冗余數(shù)據(jù),操作系統(tǒng)使用共享內(nèi)存為不同的程序進程提供共享數(shù)據(jù)。共享數(shù)據(jù)的內(nèi)容包括二進制文件或者程序段,每個程序都能訪問共享內(nèi)存,如果程序?qū)蚕頂?shù)據(jù)進行修改,原有的共享內(nèi)容將繼續(xù)在各進程中進行共享。因為很多程序擁有共性,比如輸入、顯示以及一些程序代碼。通過以上的方法和過程,能夠解決內(nèi)存數(shù)據(jù)冗余的問題,同時降低Cache競爭并提高運行速度,但這種共享內(nèi)存使得Cache計時攻擊成為可能。操作系統(tǒng)通過將同一個物理地址空間映射到不同程序的虛擬地址空間,以實現(xiàn)內(nèi)存共享,其中,不同程序?qū)蚕頂?shù)據(jù)的打開與讀取操作互不影響。利用間諜程序?qū)⑹芎Τ绦虻囊欢喂蚕矶M制映射到內(nèi)存中,當受害程序運行時,則會直接從物理內(nèi)存中獲取數(shù)據(jù),且訪問的數(shù)據(jù)將會停留在Cache中。因為這段共享二進制文件的物理地址對間諜程序透明,間諜程序遍歷所有固定地址范圍,通過訪問數(shù)據(jù)時的Cache 命中與失效差異,以判斷受害程序訪問的數(shù)據(jù),從而實現(xiàn)對Cache信息獲取。
自2002年Page[1]提出了基于高速緩存的側信道攻擊方法以來,研究者們分析Cache訪問時所能利用到的不同信息:Cache訪問軌跡、整體加密時間或者Cache訪問模式,提出了各種各樣的攻擊方法,這些方法根據(jù)攻擊者對目標系統(tǒng)的攻擊手段和擁有的權限能力可以分為三大類,分別是:軌跡驅(qū)動(trace-driven)的攻擊、時間驅(qū)動(time-driven)的攻擊和訪問驅(qū)動(access-driven)的攻擊。
(1)軌跡驅(qū)動(trace-driven)攻擊。攻擊者有能力接觸到目標物理機器硬件,通過在密碼運算時對Cache和內(nèi)存的能量、電磁輻射等變化進行物理監(jiān)聽,分析每次密碼運算時查找表訪問中Cache命中(即查找表在Cache中)與否,對多組不同明文進行監(jiān)測,通過分析Cache命中與否的序列,獲取密鑰信息。軌跡驅(qū)動Cache側信道攻擊最早由Page[1]提出,通過對DES算法的查找表進行監(jiān)控,成功降低了DES密鑰查找空間。2005年,Bertoni等人成功獲取了AES第一輪的Cache命中序列,分析序列得到48bit的AES密鑰。2006年,Bonneau將攻擊擴展到AES最后一輪,成功獲取AES完整密鑰。Gallias等人在2010年對軌跡驅(qū)動Cache攻擊進行了改進,對AES第一輪攻擊即可獲取98bit的密鑰。
(2)時間驅(qū)動(time-driven)攻擊。攻擊者僅能測量密碼運算的整體時間,通過統(tǒng)計由Cache命中和未命中所造成的密碼運算時間差異,獲取密鑰信息。對于不同明文輸入,由于Cache命中數(shù)不同會導致計算時間有明顯差異,攻擊者通過測量密碼運算整體執(zhí)行時間,統(tǒng)計分析不同明文對應的加密時間可獲取密鑰信息。時間驅(qū)動Cache攻擊主要分為兩類:內(nèi)部碰撞攻擊[6]和Bernstein攻擊[7]。內(nèi)部碰撞攻擊利用同一個Cache line中查找表條目的訪問會產(chǎn)生內(nèi)部碰撞,內(nèi)部碰撞的發(fā)生導致更多的Cache命中,使得執(zhí)行時間更短,攻擊者通過控制輸入的明文信息,根據(jù)執(zhí)行時間即可推斷出密鑰部分比特信息。Bernstein攻擊通過在與目標機器完全相同的機器上運行相同的密碼算法實現(xiàn),針對查找表的每個輸入,在學習機器上獲取加密時間的極值點對應的輸入值,以確定目標機器上的密鑰信息。
(3)訪問驅(qū)動(access-driven)攻擊。訪問驅(qū)動攻擊要求攻擊者能夠在目標機器中運行程序以控制Cache并獲取Cache訪問的精確時間,進而能夠獲取相應的Cache是否被訪問,并分析獲取密鑰信息。訪問驅(qū)動攻擊的攻擊者在目標機器中運行的間諜進程和密碼運算進程共享部分Cache資源,間諜進程監(jiān)控訪問自身數(shù)據(jù)所需的時間,根據(jù)訪問時間長短判斷相應數(shù)據(jù)是否在Cache中,從而推斷出密碼運算所訪問的Cache line。通過連續(xù)的監(jiān)控,攻擊者得到密碼運算的Cache訪問模式序列,并結合算法特性分析得到密鑰的信息。典型的訪問驅(qū)動攻擊包括Prime+Probe和Flush+Reload等[8-10]。
相比于其他類型的攻擊,基于Cache 的側信道攻擊擁有以下優(yōu)勢:
(1)相比于傳統(tǒng)的密碼分析,基于Cache 的側信道攻擊在算法實現(xiàn)運行時Cache的使用進行監(jiān)控,避免了復雜的理論分析,且能夠有效獲取密碼運算關鍵步驟的信息,進而對密鑰信息進行恢復。例如對128位的AES算法,使用Cache側信道攻擊只需要6-7個加密周期就能成功恢復出其密鑰。
(2)相比于其他類型的側信道攻擊,Cache側信道攻擊不需要額外的設備對目標系統(tǒng)進行監(jiān)控。比如能量攻擊需要使用設備對目標系統(tǒng)的能量功耗進行測量,電磁泄漏側信道攻擊需要使用特定設備對目標系統(tǒng)散發(fā)的電磁信息進行測量。而Cache本身是計算機結構的一部分,攻擊者可以直接通過指令獲取Cache的訪問時間,并不需要特定的裝置來測量。
(3)Cache側信道攻擊可以實施跨平臺、跨CPU、跨虛擬機的遠程攻擊,并且攻擊程序利用的是對Cache的正常訪問機制,攻擊過程就是正常的緩存訪問過程,在系統(tǒng)中并不會產(chǎn)生異常信息,因此Cache側信道攻擊具有很高的隱蔽性,不易被檢測。
基于緩存的側信道攻擊模型討論需攻擊者具備以下的條件,而在現(xiàn)代計算機系統(tǒng)中這些條件基本都能夠滿足:
(1)攻擊者要與受害者存在共享的硬件資源,包括緩存、總線等等;
(2)攻擊者可以隨意訪問受害者空間中的內(nèi)存;
(3)攻擊者可以測量訪問內(nèi)存的時間。
一般而言,基于緩存的側信道攻擊可以根據(jù)攻擊目標及受害者分為針對主機的攻擊和針對虛擬機的攻擊;根據(jù)攻擊對象可以分為針對加密算法的攻擊、針對操作系統(tǒng)的攻擊等。本文后續(xù)討論按照攻擊者在實施攻擊時對緩存的利用方式區(qū)別,把攻擊分為基于沖突的緩存?zhèn)刃诺拦艉突趶陀玫木彺鎮(zhèn)刃诺拦??;跊_突的緩存?zhèn)刃诺拦羰侵?,攻擊者與受害者不存在共享內(nèi)存,或有可能存在共享內(nèi)存,但是“漏洞”不存在于共享內(nèi)存中,攻擊者只能通過對自己的地址空間中的內(nèi)容訪問,影響正常受害者進程中對緩存的使用,從而推斷出受害者對某物理地址的訪問模式。其中,這里提到的“漏洞”是指可執(zhí)行程序的某一部分區(qū)域,它可以位于代碼段,也可以位于數(shù)據(jù)段,這段代碼或數(shù)據(jù)本身邏輯和設計沒有什么問題,但是這部分內(nèi)存區(qū)域與受害者敏感信息相關,攻擊者可以利用這段代碼的執(zhí)行情況或數(shù)據(jù)的訪問情況判斷出受害者信息,從而造成受害者信息泄露[11-12]?;趶陀玫木彺?zhèn)刃诺拦簦腹粽吲c受害者可以共享內(nèi)存,例如共享的庫、文件等等,且攻擊者利用的“漏洞”存在于共享內(nèi)存中,攻擊者可以獲取到該區(qū)域的內(nèi)存訪問模式。
根據(jù)攻擊者實施基于緩存?zhèn)刃诺拦羲枰扇〉木唧w操作,攻擊過程可以分為以下幾個步驟:
(1)確定“漏洞”
攻擊者在攻擊過程中,首先要確定出“漏洞”源,才能對“漏洞”確定的地址進行監(jiān)視從而獲取信息。漏洞主要包括基于指令執(zhí)行的漏洞和基于數(shù)據(jù)訪問的漏洞?;谥噶顖?zhí)行的漏洞是指受害者程序在執(zhí)行過程中,存在與受害者信息相關的指令控制流,例如轉(zhuǎn)移條件中的分支跳轉(zhuǎn)指令。通過對這些指令的監(jiān)控,攻擊者可以分析出受害者的指令執(zhí)行過程,之后對獲得的信息進行推斷;基于數(shù)據(jù)訪問的漏洞是指程序訪問的數(shù)據(jù)與受害者信息相關,例如查找某個地址的數(shù)據(jù)內(nèi)容時把受害者信息作為索引。攻擊者只需通過觀察內(nèi)存的訪問情況,便可以獲取出受害者信息。
(2)確定“沖突域”
根據(jù)攻擊者和受害者共享的層面不同,攻擊可以分為跨虛擬機攻擊、跨進程攻擊、跨處理器核攻擊。與其他的攻擊方式相比,跨虛擬機的攻擊首先要進行“虛擬機同駐”的判斷,即判斷攻擊者和受害者所在的虛擬機之間的關系是處于同一個處理器核,還是在同一個處理器中不同的處理器核上;或者不同的虛擬機運行于不同的處理器上。通過“虛擬機同駐”判斷,可以分析出攻擊者與受害者之間的共享結構,從而就可以把問題轉(zhuǎn)化為跨進程攻擊或者跨處理器核攻擊??邕M程攻擊是指攻擊者和受害者運行于同一個處理器核之上,可以共享的資源包括緩存、內(nèi)存、內(nèi)存控制器等資源;跨處理器核攻擊是指當攻擊者和受害者運行于不同的處理器核之上時,可以共享的資源包括最后一級緩存(LLC,Last Level Cache)、內(nèi)存等。當攻擊者所要利用的“漏洞”存在于共享內(nèi)存中時,攻擊者便可以通過對該“漏洞”對應地址進行直接訪問,影響“漏洞”對應內(nèi)容在緩存中的狀態(tài);而假如“漏洞”不存在于共享內(nèi)存中時,攻擊者則需要首先分析出一組“虛擬地址集合”,攻擊者通過這個集合影響“漏洞”對應的代碼或數(shù)據(jù)在緩存中的狀態(tài),這個虛擬地址集合被稱為“沖突域”。具體來講,沖突域是一組虛擬地址的集合,攻擊者可以訪問這個集合中的地址。一般來說,通過沖突域的訪問可以得到目標地址對應的狀態(tài)變化,且攻擊者需根據(jù)緩存的關聯(lián)程度選擇合適大小的沖突域以得到更為精準的受害者信息。
(3)獲取信息
攻擊者通過“沖突域”對“漏洞”的位置進行監(jiān)視,從而獲得相關區(qū)域的裝填變化信息,即攻擊者竊取的信息,這些信息包括以下幾種類別:
1)訪問執(zhí)行時間的差異信息。數(shù)據(jù)或代碼位于不同的存儲器層次結構時,訪問時間會存在較大的差異。通常訪問內(nèi)存的時間和訪問高速緩存的時間相差約兩個數(shù)量級,通過對執(zhí)行時間的測量,可以獲取到受害者的訪存情況信息。
2)引發(fā)中斷的事件信息。當檢測到緩存被驅(qū)逐的時候,會引起事務中斷,攻擊者可以捕捉這些事件,從而對受害者行為進行分析,獲取受害者的信息。
3)硬件資源使用情況信息。程序在執(zhí)行過程中,有可能對硬件單元獨占或者鎖定,從而導致別的程序不能使用。攻擊者可以通過對這些硬件資源的使用情況進行檢測,從而分析出受害者正在執(zhí)行的部分操作。
(3)還原信息
攻擊者獲取到受害者相關狀態(tài)信息的變化后,需要根據(jù)已有的先驗知識同時結合獲得的信息進行受害者信息的還原。在還原前需要對獲取到的信息進行一些處理,包括噪聲消除、控制流信息還原、內(nèi)存訪問情況還原等。通過這些操作及分析,攻擊者便可以獲取到密鑰、受害者行為,內(nèi)核空間的分布等信息。
基于緩存的側信道攻擊利用Cache相關活動泄露的信息對受害者的信息進行竊取,相比于其他類型側信道攻擊,Cache側信道攻擊無須專用硬件設備,攻擊者甚至無須物理接觸目標對象,即可獲取部分或者全部的受害者信息,因此Cache側信道要比其他側信道的威脅更大,危害更嚴重,對當今的信息安全產(chǎn)生了重大的威脅。本文從Cache信息的泄露原理以及目前主流的Cache側信道攻擊方法及原理進行研究,并針對主流的攻擊方法進行分析和與傳統(tǒng)的攻擊方法進行優(yōu)勢對比,最后總結出Cache側信道攻擊的通用架構,包括攻擊模型和具體的攻擊步驟。該研究對針對基于緩存的側信道攻擊的防御方法的研究具有重要的意義。
[1]Dan P.Theoretical Use of Cache Memory as a Cryptanalytic Side-Channel. cryptology eprint archive,2002.
[2]Trace-Driven Cache Attacks on AES (Short Paper)[C]// Information and Communications Security,8th International Conference,ICICS 2006,Raleigh,NC,USA,December 4-7, 2006,Proceedings. Springer,Berlin,Heidelberg,2006.
[3]Bonneau J,Mironov I . Cache-Collision Timing Attacks Against AES[J].International Workshop on Cryptographic Hardware and Embedded Systems,2006.
[4]Yarom Y,F(xiàn)alkner K E . FLUSH+RELOAD:a high resolution,low noise,L3 Cache side-channel attack.2014.
[5]程志煒,陳財森,邱雪歡. 基于Flush+Reload的DES算法Cache計時攻擊[J]. 計算機工程,2018,495(12):169-173.
[6]Bonneau J,Mironov I . Cache-Collision Timing Attacks Against AES[J]. International Workshop on Cryptographic Hardware and Embedded Systems,2006.
[7]Bernstein D J. Cache-timing attacks on AES[J]. 2005.
[8]Yarom Y,F(xiàn)alkner K E . FLUSH+RELOAD:a high resolution,low noise,L3 Cache side-channel attack. 2014.
[9]Liu F,Yarom Y,Ge Q,et al. Last-Level Cache Side-Channel Attacks are Practical. IEEE Computer Society,2015.
[10]Tromer E,Osvik D A,Shamir A . Efficient Cache Attacks on AES, and Countermeasures[J]. Journal of Cryptology,2010.
[11]王崇,魏帥,張帆,宋克.緩存?zhèn)刃诺婪烙芯烤C述[J].計算機研究與發(fā)展,2021,58(04):794-810.
[12]苗新亮,蔣烈輝,常瑞.訪問驅(qū)動下的Cache側信道攻擊研究綜述[J].計算機研究與發(fā)展,2020,57(04):824-835.