陳小全
摘要:針對部分英特爾x86架構(gòu)CPU產(chǎn)品設(shè)計上的漏洞,提出了一種新的通過衡量數(shù)據(jù)讀取時間的信息獲取方法。該方法利用數(shù)據(jù)從主存讀取和從Cache讀取的顯著時間差異,對比閾值和讀取花費(fèi)時間的大小來標(biāo)記數(shù)據(jù)來自Cache還是主存,進(jìn)而采用側(cè)信道攻擊的方式獲取目標(biāo)進(jìn)程的數(shù)據(jù)。實(shí)驗(yàn)結(jié)果顯示,該方法在無噪聲環(huán)境中數(shù)據(jù)恢復(fù)率可達(dá)到90%~100%,在低噪聲的環(huán)境中數(shù)據(jù)恢復(fù)率也可達(dá)到72%左右,在高噪聲環(huán)境中恢復(fù)率略低于45%。與當(dāng)前其他的攻擊方法相比,具有攻擊實(shí)施的門檻較低,數(shù)據(jù)恢復(fù)成功率高的特點(diǎn)。
Abstract: Aiming at the vulnerability of some Intel x86 architecture CPU product design, this paper proposes a new information acquisition method by measuring the data reading time. The method utilizes the significant time difference between the data read from the main memory and the read from the Cache, compares the threshold and the time spent reading to mark the data from the Cache or the main memory, and then uses the side channel attack to acquire the data of the target process. The experimental results show that the data recovery rate of the proposed method can reach 90%~100% in a noise-free environment, and the data recovery rate can reach 72% in a low-noise environment. The recovery rate is slightly lower than 45% in a noisy environment. Compared with other current attack methods, the method in this paper has the characteristics of low threshold of attack implementation and high success rate of data recovery.
關(guān)鍵詞:信息竊取;側(cè)信道攻擊;跨進(jìn)程攻擊;熔斷漏洞;高級加密標(biāo)準(zhǔn)
Key words: data leak;side channel attack;cross-process attack;meltdown;AES
中圖分類號:TN915.08? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識碼:A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文章編號:1006-4311(2020)04-0269-05
0? 引言
自1988年SUN微系統(tǒng)公司的合作創(chuàng)建者約翰提出云計算概念以來,云計算服務(wù)已經(jīng)經(jīng)歷了三十多年的發(fā)展歷程。在2005年亞馬遜推出AWS(Amazon Web Services)后,IT界衍生出了新的服務(wù)模式——云計算服務(wù)。云計算服務(wù)中包含了虛擬化技術(shù)、自動化部署、分布式框架的廣泛應(yīng)用,對外表現(xiàn)出超強(qiáng)的計算能力和易擴(kuò)展的特性。然而一個新的事物產(chǎn)生,必將帶來新的安全隱患,這種計算速度遠(yuǎn)超脫機(jī)計算的解決方案,實(shí)則包含敏感數(shù)據(jù)泄露等安全問題。云計算服務(wù)的核心思想是將物理服務(wù)器資源完全虛擬化,分配給多個用戶使用,不同的用戶共享一個物理資源。但針對云計算服務(wù)的旁路檢測攻擊、拒絕服務(wù)攻擊、側(cè)信道竊取用戶機(jī)密信息攻擊等已經(jīng)成為云計算面臨的主要安全威脅。當(dāng)前,云計算平臺針對這些安全威脅所做的防護(hù)措施主要包括兩方面:一方面是啟用地址空間布局隨機(jī)化技術(shù)(Address Space Layout Randomization,ASLR)[1],讓攻擊者難以確定攻擊面的位置,從而加大實(shí)施攻擊的難度。另一方面則是設(shè)置嚴(yán)格的邊界檢查,即不允許進(jìn)程跨邊界的信息讀取。這兩方面的防護(hù)措施在一定程度上保護(hù)了云計算平臺的安全。此外,針對云平臺中虛擬機(jī)的Cache緩存?zhèn)刃诺拦2]擊也都由于當(dāng)前商業(yè)云平臺中啟用了Cache緩存隔離、定期清除緩存等防護(hù)措施而被有效地阻止。但不可否認(rèn)的是,在網(wǎng)絡(luò)空間中是沒有絕對的安全的??赡茉谝欢ǖ臅r間和空間范圍內(nèi),云計算平臺處于安全的狀態(tài),但在另一個時間和空間范圍之內(nèi)就不一定安全了。有鑒于此,本文針對當(dāng)前云平臺現(xiàn)存的安全措施,基于CPU存在的漏洞,提出一種新的針對云計算平臺的攻擊方法。這種新的攻擊方法可以繞過云平臺現(xiàn)存的安全措施,實(shí)現(xiàn)云環(huán)境中虛擬機(jī)的跨進(jìn)程信息竊取和信息恢復(fù)。實(shí)驗(yàn)結(jié)果證明,本文所提出的攻擊方法與當(dāng)前其他的虛擬機(jī)跨進(jìn)程信息竊取方法相比,本方法適用范圍廣、執(zhí)行效率高、實(shí)施條件門檻低的優(yōu)點(diǎn),在信息的恢復(fù)度上可以達(dá)到90%以上,在某些情況下甚至可以達(dá)到100%。
本文的組織如下:第一節(jié)介紹相關(guān)的背景知識和技術(shù)知識;第二節(jié)介紹攻擊實(shí)施的假設(shè)場景;第三節(jié)對實(shí)施攻擊的總體流程進(jìn)行介紹;第四節(jié)將詳細(xì)闡述本文提出的攻擊方法的實(shí)施過程;第五節(jié)說明本文提出的方法的一些技術(shù)細(xì)節(jié)問題,包括數(shù)據(jù)來源的判定方法和數(shù)據(jù)恢復(fù)率的計算方法;第六節(jié)對本文提出的方法進(jìn)行了總結(jié)。
1? 相關(guān)背景介紹
在這一節(jié),我們將對本文提出的方法涉及到的技術(shù)背景進(jìn)行介紹,這將有助于對本方法的理解。
1.1 高速緩存
高速緩存存儲器(Cache)位于CPU中,一般分為三個部分,L1緩存、L2緩存和L3緩存。其中,L3又稱為LLC(Last Level Cache,LLC)緩存。高速緩存的加入是為了解決CPU從主存中讀取數(shù)據(jù)速度過慢的瓶頸問題。通常情況下,Cache的引入解決了內(nèi)存地址讀取花費(fèi)時間上的問題。CPU執(zhí)行讀取指定地址的內(nèi)存命令時,將目標(biāo)地址與緩存行中的內(nèi)存地址作對比,如果目標(biāo)地址在緩存行中,稱為緩存命中,直接進(jìn)行虛擬地址到物理地址的映射,則程序執(zhí)行的速度會很快。反之,稱為緩存未命中,CPU將訪問內(nèi)存中的映射表進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換,在這種情況下,程序執(zhí)行的速度會比較慢。
1.2 側(cè)信道攻擊
側(cè)信道攻擊(Side Channel Attack,SCA)是指通過監(jiān)測設(shè)備運(yùn)行中的能量消耗、時間消耗、功率變化水平等側(cè)信道信息來實(shí)施攻擊的一種方法。通過對信息進(jìn)行能耗分析和數(shù)據(jù)分類,可對設(shè)備的加密過程造成嚴(yán)重的威脅。這種側(cè)信道信息收集的方法,比傳統(tǒng)通過數(shù)學(xué)分析密碼更高效,攻擊者很容易從收集到的信息中尋找到加密結(jié)果的特征信息。本文所提出的方法借鑒側(cè)信道攻擊手段,通過基于數(shù)據(jù)讀取時間的探測,確定數(shù)據(jù)的來源。該方法的好處在于拋開了復(fù)雜的密碼加密過程和結(jié)果歸類分析過程,對加密結(jié)果直接提取特征分析從而泄露敏感信息。
1.3 熔斷漏洞
CPU分支預(yù)測是提高CPU使用率的一種優(yōu)化策略。目前計算機(jī)的現(xiàn)狀為CPU性能過剩,由于調(diào)度算法的瓶頸和資源競爭的原因,導(dǎo)致CPU的使用率過低。這樣,CPU制造商就通過添加分支預(yù)測技術(shù),使CPU在一個周期內(nèi)能執(zhí)行更多的機(jī)器指令,提高CPU的使用效率。在執(zhí)行分支預(yù)測的過程中,如果CPU在執(zhí)行指令寄存器時遇到了多種選擇,比如判斷語句、選擇語句,CPU就會通過廣度優(yōu)先或深度優(yōu)先的搜索算法對所有可能進(jìn)行試探,并將搜索結(jié)果保存在數(shù)據(jù)寄存器中。如果訪問未授權(quán)空間則拋出異常,CPU將回滾到上一次斷點(diǎn),判定為分支異常。反之,判定為分支預(yù)測成功,并有效地提前存儲了指令寄存器的執(zhí)行結(jié)果。
在去年初被發(fā)現(xiàn)的熔斷漏洞(Meltdown)[3-5]就是通過惡意使用CPU的分支預(yù)測策略,使用主動拋出異常指令的攻擊方式,在異常指令后將目標(biāo)數(shù)據(jù)寫入到緩存中,從而避開了CPU對數(shù)據(jù)執(zhí)行的檢查,使得跨邊界的數(shù)據(jù)讀取變?yōu)楝F(xiàn)實(shí)。
1.4 Flush+Reload攻擊
Flush+Reload攻擊是一種基于Cache的側(cè)信道攻擊方法[6-8]。該攻擊方法可以分為以下幾個攻擊過程。Flush過程,攻擊者使用clflush指令清除內(nèi)存數(shù)據(jù)對應(yīng)的L1、L2、L3的緩存行內(nèi)容,即將緩存行中的內(nèi)存地址清除并重置映射表。Reload過程,攻擊者先使用rdtsc指令獲取計數(shù)器中的時間,將其存儲到寄存器中,該時間我們記為T1。接下來執(zhí)行讀取數(shù)據(jù)的指令,之后獲取寄存器中的時間值,該時間我們記為T2。最后計算T1和T2的差值,并將這個差值和提前設(shè)定的閾值做比較。若差值大于設(shè)定的閾值,則說明緩存未命中,數(shù)據(jù)存儲在主存中。反之,則表示緩存命中,數(shù)據(jù)存儲在Cache中,進(jìn)而攻擊者可以獲取目標(biāo)程序的機(jī)密數(shù)據(jù)。
1.5 AES加密算法
高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)[9-11]是一種高級加密算法,用于替代先前的數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)加密算法。英特爾在Clarkdale架構(gòu)處理器上第一次使用了AES加密指令集,伴隨云平臺的迅猛發(fā)展趨勢,AES被廣泛應(yīng)用于云計算、云桌面等云計算領(lǐng)域中。迄今為止,使用AES指令集加解密效率約為不使用情況下的200%。在Linux環(huán)境下,可通過命令查看是否支持AES加密指令集。
2? 攻擊場景假設(shè)
為了詳細(xì)敘述本文提出的攻擊方法,我們做以下的攻擊場景假設(shè)。
假設(shè)1:實(shí)驗(yàn)環(huán)境中的云平臺采用嚴(yán)格的防御措施保證用戶程序的隔離性。云平臺符合主流云平臺的防御措施,提供部分內(nèi)存、緩存共享。同時在云平臺內(nèi)部不存在任何威脅。
假設(shè)2:攻擊者為云平臺服務(wù)的使用者,具有虛擬機(jī)的高權(quán)限,以及擁有程序的執(zhí)行權(quán)限,并使用OpenSSL1.1.1進(jìn)行加密操作。其他版本的AES加密雖然沒有測試,但從理論上來說,本文所提出的方法也都適用。
上述假設(shè)均符合實(shí)際應(yīng)用場景,假設(shè)1中針對攻擊者背景知識的假設(shè)也具有相當(dāng)?shù)钠者m意義。為了方便描述,下面將攻擊者創(chuàng)建的進(jìn)程稱為攻擊進(jìn)程,將被攻擊的進(jìn)程稱為目標(biāo)進(jìn)程。
3? 攻擊的實(shí)施過程
攻擊進(jìn)程通過基于OpenSSL的加密程序?qū)⒚魑男畔⑦M(jìn)行密碼分組鏈接(Cipher-Block Chaining,CBC)工作模式下的AES加密,并存儲加密結(jié)果到內(nèi)存中。需要注意的是,加密后的數(shù)據(jù)大小要和Cache中L1、L2、L3的緩存容量之和相同。因?yàn)槿绻用芎蟮臄?shù)據(jù)大于緩存寄存器的總?cè)萘浚瑫?dǎo)致數(shù)據(jù)被覆寫且不能保證恢復(fù)成功率。其次,需要在讀取過程中持續(xù)的運(yùn)行加密程序。這樣才能使加密程序使用同一數(shù)據(jù)反復(fù)刷新Cache中的內(nèi)容,以保證數(shù)據(jù)讀取成功的機(jī)率維持在90%~100%的高水平范圍之內(nèi)。此外,如果系統(tǒng)開啟了ASLR技術(shù),將會導(dǎo)致程序入口地址的偏移量發(fā)生變化。為了解決此問題,可以使用暴力破解的方式獲取表間轉(zhuǎn)換的偏移量,再通過物理地址與虛擬地址之間的映射關(guān)系計算出進(jìn)程的入口物理地址,進(jìn)而讀出指定物理地址的數(shù)據(jù)。經(jīng)過我們的測算,該方法耗費(fèi)的時間一般在幾分鐘和幾個小時之內(nèi),時間花費(fèi)雖然較長,但獲取地址偏移量后,可以攻擊的過程中重復(fù)使用。
本文提出的攻擊方法的一個攻擊過程由三個階段組成。在第一階段中,從映射表中剔除被監(jiān)控的內(nèi)存映射,在第二階段,獲取寄存器中的時間,對指定內(nèi)存進(jìn)行讀取操作。在第三階段,攻擊進(jìn)程重新載入內(nèi)存,測量重新載入的時間。如果在等待的階段,目標(biāo)進(jìn)程訪問了指定的內(nèi)存地址,內(nèi)存地址就在Cache中有記錄,讀取所花費(fèi)CPU周期小于閾值。如果目標(biāo)沒有訪問指定的內(nèi)存地址,則這個地址就需要從內(nèi)存中查找,讀取花費(fèi)時間大于等于閾值。該算法意在驗(yàn)證通過Flush+Reload的攻擊手段讀取緩存中的敏感數(shù)據(jù)的可靠性。圖1顯示了攻擊的三個階段。
4? 攻擊方法的具體實(shí)現(xiàn)與實(shí)驗(yàn)測試
本節(jié)我們將詳細(xì)介紹本文所提出方法的具體實(shí)現(xiàn)細(xì)節(jié)和實(shí)驗(yàn)測試的過程。我們的實(shí)驗(yàn)分別在國內(nèi)某主流云平臺和VMware vSphere 的Esxi 6.5、6.7虛擬化平臺上進(jìn)行。其中,國內(nèi)某主流云平臺的安全策略由云平臺本身提供,在實(shí)驗(yàn)過程中不做任何改動。VMware vSphere Esxi 6.5和6.7的實(shí)驗(yàn)環(huán)境由一臺Dell R720和兩臺Dell R420服務(wù)器組成集群來構(gòu)成,并使用虛擬私有云(Virtual Private Cloud,VPC)來對云環(huán)境進(jìn)行隔離。另外,Esxi 6.5和6.7中采用默認(rèn)安全策略,也不做任何安全策略上的改動,因此我們的實(shí)驗(yàn)環(huán)境具有上述假設(shè)1中提到的普適意義。為了充分證明本文所提出方法的可行性和可靠性,實(shí)驗(yàn)中產(chǎn)生的數(shù)據(jù)由未知安全策略的云平臺中采集,并制成統(tǒng)計圖來顯示。實(shí)驗(yàn)過程中的數(shù)據(jù)加密方式采用OpenSSL1.1.1進(jìn)行加密。本文所提出方法的核心在于利用CPU從內(nèi)存和緩存中讀取數(shù)據(jù)花費(fèi)的時間不同的特性,通過使用Flush + Reload方法讀取內(nèi)存地址,對比讀取數(shù)據(jù)花費(fèi)時間同閾值的大小關(guān)系,確定數(shù)據(jù)處于緩存中還是內(nèi)存中。具體的攻擊方法實(shí)現(xiàn)如下所示。
在步驟一中,將Cache行重置,確保最大可能性減少其他程序產(chǎn)生的噪聲值干擾。在步驟二中,確保數(shù)據(jù)在Cache中。在步驟三和步驟四中,利用熔斷漏洞的分支特性,將緩存數(shù)據(jù)讀取到緩沖區(qū),進(jìn)而讀取用戶的機(jī)密信息。
下面我們將介紹本文所提出的攻擊方法在實(shí)施過程中的一些實(shí)現(xiàn)細(xì)節(jié)。
4.1 基準(zhǔn)測試
基準(zhǔn)測試用于檢測目標(biāo)機(jī)的CPU是否受熔斷漏洞的影響。根據(jù)實(shí)驗(yàn)結(jié)果表明,除了AMD R7和i9部分處理器不受熔斷漏洞的影響之外,其他的CPU大都受該漏洞的影響。在本文的實(shí)驗(yàn)環(huán)境中,實(shí)驗(yàn)服務(wù)器是Dell R720服務(wù)器。該服務(wù)器使用的CPU的型號為E5-2603,受到熔斷漏洞的影響,故基準(zhǔn)測試通過。在國內(nèi)某著名云平臺進(jìn)行實(shí)驗(yàn)時,該云平臺使用的CPU同樣受到熔斷漏洞的影響,使用本文提出的方法可以獲取目標(biāo)程序的信息。但我們也經(jīng)過實(shí)驗(yàn)證明,采用不定期清理Cache映射表的方法,可以部分的阻止該方法的成功實(shí)施。
4.2 數(shù)據(jù)讀取工具
本文提出的方法用來讀取數(shù)據(jù)的工具以目標(biāo)程序的物理地址作為參數(shù),將指定物理地址的數(shù)據(jù)進(jìn)行轉(zhuǎn)化讀取,使用的讀取方法類似于文獻(xiàn)[4]中的方法,通過記錄讀取時間,以及從內(nèi)存讀取的時間和從緩存讀取的時間顯著差異來斷定數(shù)據(jù)的來源。圖2顯示了實(shí)驗(yàn)結(jié)果的可靠性。
4.3 噪聲降低
在實(shí)驗(yàn)過程中,系統(tǒng)當(dāng)中的其他進(jìn)程如Firefox、apt-get、Ping命令在發(fā)送網(wǎng)絡(luò)請求時會產(chǎn)生噪聲。關(guān)于這一點(diǎn),可以使用手動關(guān)閉進(jìn)程的方式減少噪聲的產(chǎn)生。另外,為了減少本文提出的方法因刷新操作而產(chǎn)生的噪聲,本文采用文獻(xiàn)[5]中的方法使用rdtsc指令最小化的調(diào)用系統(tǒng)資源,從而降低因刷新而產(chǎn)生的噪聲。為了說明CPU噪聲對攻擊進(jìn)程的影響,本文使用不同CPU核心來模擬不同的負(fù)載環(huán)境,將結(jié)果制作成如圖3、圖4統(tǒng)計圖。
由此可見,CPU的負(fù)載會影響數(shù)據(jù)恢復(fù)的成功率。在使用Dell R720服務(wù)器實(shí)驗(yàn)時,使用負(fù)載較高的CPU核心執(zhí)行恢復(fù)程序的數(shù)據(jù)恢復(fù)可靠率較高。在Linux環(huán)境下,可以使用taskset指令單獨(dú)調(diào)用一個CPU核心執(zhí)行程序,從而增大指定序號CPU負(fù)載程度。
5? 閾值衡量標(biāo)準(zhǔn)
5.1 閾值衡量標(biāo)準(zhǔn)公式
本文所提出的方法中,衡量Cache是否命中的閾值是判斷數(shù)據(jù)來源的關(guān)鍵參數(shù),將地址讀取花費(fèi)時間和閾值進(jìn)行對比可以判斷數(shù)據(jù)的來源。大于閾值,則證明數(shù)據(jù)來源于內(nèi)存。反之?dāng)?shù)據(jù)來源于Cache緩存。通過閾值對比法判斷數(shù)據(jù)來源的依據(jù)是CPU的一種硬件特性,計算的公式可以在CPU的開發(fā)手冊中明確找到。本文所使用的閾值計算方法如下:
假設(shè)數(shù)據(jù)長度為a,執(zhí)行第i(i=1,2,3……0
情況1 Fi+Ri>=v判定為數(shù)據(jù)來源于主存。
情況2 Fi+Ri 簡而言之,該公式說明了閾值取值的可靠性。從而證明通過對比讀取指令所需要的時間來判斷數(shù)據(jù)存儲的位置的可行性。 5.2 可靠率衡量公式 在實(shí)驗(yàn)過程中,通過反復(fù)讀寫數(shù)據(jù)確保了數(shù)據(jù)存儲在Cache中。通過5.1中閾值衡量公式可以區(qū)分?jǐn)?shù)據(jù)是否來源于Cache,記錄讀取時間是否小于閾值的為合法數(shù)據(jù),并且設(shè)合法數(shù)據(jù)的總個數(shù)為count。將合法數(shù)據(jù)與源數(shù)據(jù)進(jìn)行對比,如果數(shù)據(jù)一致,則可以認(rèn)為是有效數(shù)據(jù)。可靠率的計算公式為:。通過該可靠率計算公式,就可以判斷本文所提出的方法恢復(fù)數(shù)據(jù)的可靠程度,量化的表現(xiàn)出該方法的實(shí)施效果。 6? 結(jié)語 本文所提出的攻擊方法思路來自于主存讀取數(shù)據(jù)和Cache讀取數(shù)據(jù)的時間差異特性,并在其基礎(chǔ)上進(jìn)行了改進(jìn)。最后以攻擊AES加密算法為例證明了該方法跨進(jìn)程恢復(fù)信息的可行性和可靠性,并提出了基于Flush+Reload算法提高恢復(fù)秘鑰的準(zhǔn)確率的算法,最后指出高負(fù)載對恢復(fù)信息可靠性的影響。 參考文獻(xiàn): [1]Parikh V, Mateti P. ASLR and ROP Attack Mitigations for ARM-Based Android Devices[C]// International Symposium on Security in Computing & Communication. 2017. [2]LIU, F., YAROM, Y., GE, Q., HEISER, G., AND LEE, R. B. Last-Level Cache Side-Channel Attacks are Practical. In IEEE Symposium on Security and Privacy – SP (2015), IEEE Computer Society, pp. 605-622. [3]Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher,Werner Haas, Anders Fogh, Jann Horn, Stefan Mangard, Paul Kocher, Daniel Genkin, Yuval Yarom, and Mike Hamburg. Meltdown: Reading kernel memory from user space. In 27th USENIX Security Symposium (USENIX Security 18), Baltimore, MD, 2018. USENIX Association. [4]Simakov N A, Innus M D, Jones M D, et al. Effect of Meltdown and Spectre Patches on the Performance of HPC Applications[J]. 2018. [5]Trippel C, Lustig D, Martonosi M. MeltdownPrime and SpectrePrime: Automatically-Synthesized Attacks Exploiting Invalidation-Based Coherence Protocols[J]. 2018. [6]Yarom Y , Falkner K . Flush+reload: a high resolution, low noise, l3 Cache side-channel attack[C]// Usenix Conference on Security Symposium. USENIX Association, 2014. [7]Zhou P, Wang T, Lou X, et al. Efficient flush-reload cache attack on scalar multiplication based signature algorithm[J]. Science China Information Sciences, 2018, 61(3):039102. [8]Yuan Z, Li Y, Sakiyama K, et al. Recovering Memory Access Sequence with Differential Flush+Reload Attack[M]// Information Security Practice and Experience. 2018. [9]Neve M, Seifert J P. Advances on Access-Driven Cache Attacks on AES.[J]. Lecture Notes in Computer Science, 2006, 4356:147-162. [10]Pammu A A, Chong K S, Ho W G, et al. Interceptive side channel attack on AES-128 wireless communications for IoT applications[C]// Circuits & Systems. 2017. [11]Li-Dong X U, Wang M Q, Mathematics S O, et al. A meet-in-the-middle attack on 10-round AES-128[J]. Journal of Shandong University, 2018.