亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        CPU漏洞熔斷、幽靈原理、風險與應對措施

        2018-08-27 00:37:58張經(jīng)宇
        移動信息 2018年6期
        關鍵詞:指令內(nèi)容

        張經(jīng)宇

        ?

        CPU漏洞熔斷、幽靈原理、風險與應對措施

        張經(jīng)宇1,2

        1.中國移動通信集團有限公司,北京 100033 2.天津大學微電子學院,天津 300072

        分析了Intel、AMD和ARM等CPU芯片存在熔斷、幽靈系列等安全漏洞的技術背景、漏洞原理、風險及影響,提出了應對措施和修復方法。

        CPU;安全漏洞;熔斷;幽靈

        1 技術背景

        旁路攻擊是一種從電子系統(tǒng)物理實現(xiàn)過程中獲得信息的攻擊方式。電子設備在計算過程中除了輸出正常結(jié)果外,通常會有其他可觀察的特征。其中運行時間、功率消耗、電磁泄漏甚至聲音都可以作為信息源,用來進一步進行系統(tǒng)破解。對于個人電腦、手機等,由于可執(zhí)行未知來源的程序,它的旁路攻擊手段可以不需要外部測量設備,主要針對緩存時間、分支預測歷史、分支目標緩沖器等,還有裝載錯誤攻擊來改變物理內(nèi)存和CPU的值。

        現(xiàn)代CPU的線程之間共享緩存,意味著內(nèi)核數(shù)據(jù)和不同程序的數(shù)據(jù)混合放在一起,只有在計算結(jié)果提交時才會檢查權(quán)限。這就會為不同線程間竊取數(shù)據(jù)留下隱患,常見的高速緩存隱蔽通道竊取數(shù)據(jù)方式有Flush+Reload和Evict+Reload[1]。

        為了提高CPU執(zhí)行效率,亂序執(zhí)行被引入。在傳統(tǒng)的順序執(zhí)行架構(gòu)中,指令嚴格按照順序執(zhí)行。由于存儲讀取速度低于CPU執(zhí)行速度,因此經(jīng)常會出現(xiàn)CPU停下來等待數(shù)據(jù)讀取的情況,從而降低整體運行速度。如從內(nèi)存中提取數(shù)據(jù)需要超過100個時鐘周期,而處理一條指令一般僅需4~5個時鐘周期,就會出現(xiàn)CPU等待的現(xiàn)象。亂序執(zhí)行可以交替執(zhí)行不同的流水線,從而節(jié)省等待時間,保證整體運行速度。預測執(zhí)行是CPU根據(jù)現(xiàn)有信息,利用空閑時間提前執(zhí)行一些將來可能會使用的指令,如果將來使用,就能大幅提高執(zhí)行速度。如果將來未用,計算結(jié)果便會廢棄,并回退到未執(zhí)行前的狀態(tài)[2]。分支預測是CPU嘗試提前猜測分支(如if-then-else結(jié)構(gòu))結(jié)果來提前執(zhí)行,可以通過多種算法提高預測準確率。

        在微指令被重排序緩沖器(Reorder Buffer)排序后就會轉(zhuǎn)發(fā)到統(tǒng)一保留站。沒有統(tǒng)一保留站之前CPU每次執(zhí)行需要從寄存器中讀取數(shù)據(jù),而現(xiàn)在可以從保留站中提前讀取操作數(shù)并保存操作結(jié)果,這樣亂序執(zhí)行的后續(xù)指令可以在第一時間獲得需要的數(shù)值。

        為了實現(xiàn)進程之間的隔離,目前進程均被操作系統(tǒng)分配使用虛擬地址空間,而虛擬地址通過轉(zhuǎn)化表轉(zhuǎn)化到物理地址,轉(zhuǎn)化表中定義了映射和權(quán)限[3]。操作系統(tǒng)內(nèi)核也同樣使用虛擬地址空間,但所需的讀寫權(quán)限較高,所以用戶進程無法直接訪問內(nèi)核數(shù)據(jù),只有CPU在特權(quán)模式下可以訪問內(nèi)核地址空間。在將虛擬地址轉(zhuǎn)換為物理地址的同時,CPU會檢查虛擬地址的權(quán)限位,確認其訪問權(quán)限。這種安全隔離方式被認為是安全的。所以現(xiàn)在的操作系統(tǒng)都會將整個內(nèi)核映射到每個用戶進程的虛擬地址空間。

        2 漏洞原理

        2018年1月3日,國外安全研究機構(gòu)Google Project?Zero公布了兩組CPU漏洞,即Meltdown(熔斷),對應漏洞CVE-2017-5754(亂序執(zhí)行緩存污染)[1]和Spectre(幽靈),對應漏洞CVE-2017-5753(邊界檢查繞過)、CVE-2017-5715(分支目標注入)[2]。

        熔斷攻擊是利用亂序執(zhí)行漏洞和高速緩存旁路通道攻擊結(jié)合,繞過正常權(quán)限檢查,讓未授權(quán)進程讀取到其他正在運行進程地址空間的任何數(shù)據(jù)。幽靈攻擊是利用推測執(zhí)行和微體系結(jié)構(gòu)隱蔽通道的數(shù)據(jù)泄漏結(jié)合,穿透內(nèi)存隔離邊界獲取機密信息。這兩種攻擊竊取數(shù)據(jù)后傳輸方式均通過高速緩存Flush+Reload、Evict+Reload,但兩種攻擊的竊取方式不同[3]。

        2.1 熔斷攻擊

        熔斷利用了亂序執(zhí)行,使用了非法內(nèi)存訪問和引發(fā)異常之間的時間窗口執(zhí)行指令。攻擊包括三個步驟:攻擊者選擇的內(nèi)存地址(但無法訪問到)被加載到寄存器里;瞬態(tài)指令根據(jù)寄存器內(nèi)容將探測陣列內(nèi)容加載至高速緩存中;攻擊者使用Flush+Reload來確定被訪問的探測陣列行數(shù),從而確定所選內(nèi)存地址的內(nèi)容,如圖1所示。

        圖1 熔斷的核心代碼

        圖1中,rcx內(nèi)存儲的是要訪問的核心內(nèi)存地址,rbx是一個256*4? 096(28*212)的探測陣列,2的8次方源于1? byte=8? bit,4? 096源于一個內(nèi)存塊是4? kB,從而避免CPU預讀取附近內(nèi)存內(nèi)容,混淆被讀取地址的真實內(nèi)容。

        當執(zhí)行第四條指令時,CPU對其做權(quán)限檢查,并發(fā)現(xiàn)用戶級權(quán)限無法訪問核心地址從而觸發(fā)異常。但由于亂序執(zhí)行的緣故,第五、六、七條指令已經(jīng)在第四條指令從內(nèi)存讀取數(shù)據(jù)期間執(zhí)行了。第五條指令是指將讀取的數(shù)據(jù)乘以4? 096,而第七條指令是指根據(jù)讀取的數(shù)據(jù)內(nèi)容,將探測陣列該行數(shù)的內(nèi)容加載到寄存器里(期間也會加載到高速緩存里)。由于使用了前文所述的統(tǒng)一保留站,在CPU讀取數(shù)據(jù)的第一時間(還沒有進行權(quán)限確認時),數(shù)據(jù)就已經(jīng)被后續(xù)指令讀取。雖然在權(quán)限確認后這些指令帶來的所有操作狀態(tài)改變已全部恢復,管線清空,但由于高速緩存沒有被清空,其中的部分探測陣列還在,就為下一步的Flush+Reload提供了便利。

        Flush+Reload的原理為:逐行讀取探測陣列(256行,4? 096列)并對讀取用時計時。由于攻擊代碼之前已經(jīng)讀取過一行內(nèi)容,可以發(fā)現(xiàn)相比其他行,該行的內(nèi)容讀取用時特別短。該行的行數(shù),就是想要的內(nèi)容字節(jié)。這樣的過程重復多次,即可將全部需要的內(nèi)容逐個字節(jié)地讀取出來。

        假設需要讀取的內(nèi)容是“123456789”,需要通過熔斷攻擊方式探測出來。第一個字節(jié)內(nèi)容是“1”,根據(jù)ASCII碼表對應49,那么核心攻擊代碼的第七條指令就會把探測矩陣的第49行內(nèi)容讀取到高速緩存中,在后期Flush+Reload過程中,第49行也會讀取得特別快,從而識別到該字節(jié)內(nèi)容是“1”,然后將要訪問的內(nèi)存地址加一后讀取下一個字節(jié),從而逐個字節(jié)讀取出該內(nèi)容。

        2.2 幽靈攻擊

        幽靈5753攻擊分為三步:首先攻擊者訓練CPU的分支預測器,確保分支預測在下一次循環(huán)時順利執(zhí)行;然后把分支條件清出高速緩存,誘使CPU推測并錯誤執(zhí)行惡意代碼,從而泄露機密信息;最后通過隱蔽通道將機密信息傳輸出來。最后一步是與熔斷相同的Flush+Reload過程,不再復述[2]。

        當具有分支預測的CPU遇到類似IF語句的分支條件語句時,由于判斷條件可能并不在CPU的寄存器或高速緩存中,因此為了避免等待,CPU會根據(jù)以往判斷的結(jié)果預測本次的結(jié)果。

        在現(xiàn)在Intel、AMD的CPU中,分支預測機制為全局分支預測,包含兩個層次:內(nèi)部是飽和計數(shù)器。只有連續(xù)選擇“真”兩次,才可以將預測方向從原有強“假”改變至“真”,反之亦然。外部是全局預測歷史寄存器,包含了分支結(jié)果歷史、不同分支之間的關聯(lián)關系(當分支0、1是真時,分支2是假)等。這意味著訓練分支預測器需要比2次更多的次數(shù),才可以確保分支預測選擇“真”,保證攻擊程序持續(xù)讀取機密信息。在幽靈的原理驗證代碼中,訓練次數(shù)為5次。

        圖2 幽靈的核心代碼

        在幽靈的核心代碼(見圖2)中,array1是某一長度較短的數(shù)組,array1_size是array1的長度,array2是探測數(shù)組,數(shù)組長度256*512,用途和熔斷基本相同。幽靈為了讀取機密,需要將array1[x]指向機密字節(jié)的地址,即x=機密字節(jié)地址-array1的開始地址。但這超出了array1的邊界,在正常的代碼執(zhí)行會觸發(fā)異常,機密讀取不到,所以需要繞過邊界檢查。核心代碼就是為了這個目的編寫,繞過邊界檢查需要:

        (2)array1_size和array2不在CPU的高速緩存中,而秘密字節(jié)內(nèi)容被緩存。

        高速緩存的要求可以通過大量讀取不相干的內(nèi)存數(shù)據(jù)來沖洗,或者在X86中使用CLFLUSH指令,清除包含指定信息的緩存線。

        核心代碼執(zhí)行時,CPU會先將x與array1_size進行對比,由于array1_size不在高速緩存中,需要從內(nèi)存中提取,用時較長。CPU會根據(jù)訓練結(jié)果假定該判斷條件為真,讀取秘密字節(jié)內(nèi)容并計算array1[x]*256,將array2[array1[x]*256]的內(nèi)容讀取到高速緩存中。此時array1_size被讀取到,發(fā)現(xiàn)判斷預測錯誤,CPU就將CPU狀態(tài)回置,寄存器相應內(nèi)容清空,但是高速緩存中仍然保留了array2[array1[x]*256]的內(nèi)容,再通過第三步的Flush-Reload即可讀出機密字節(jié)。

        3 漏洞風險及影響

        經(jīng)過各方的測試,熔斷、幽靈攻擊影響到1995年以后Intel生產(chǎn)的CPU、除Cortex-M型號之外的ARM及部分AMDCPU芯片。使用上述處理器的各類操作系統(tǒng)和云計算平臺均受影響,廣泛涉及目前大部分的PC、手機、平板電腦等。其中公有云平臺由于存在多個租戶共用一臺宿主機的情況,虛機到虛機、虛機到主機是漏洞攻擊的薄弱點,需要盡快完成升級補丁。

        由于熔斷、幽靈漏洞的攻擊目的均為竊取機密數(shù)據(jù),所以未對任何系統(tǒng)的正常運行造成較大影響(實施攻擊時會導致短時CPU利用率飆高,但并沒有長期影響)。

        4 修復方法

        主要通過內(nèi)核頁表隔離(KPTI)來防護熔斷漏洞,KPTI可以不再映射內(nèi)核內(nèi)存至用戶進程空間,從而杜絕了竊取內(nèi)核數(shù)據(jù)的可能性。目前可以通過操作系統(tǒng)內(nèi)核補丁程序修復。

        幽靈變體1(CVE-2017-5753):主要通過靜態(tài)分析來防護,一旦系統(tǒng)發(fā)現(xiàn)有攻擊代碼時會暫停CPU分支預測功能,從而防止竊取數(shù)據(jù)。目前也可以通過操作系統(tǒng)內(nèi)核補丁程序修復,由于漏洞可以通過網(wǎng)頁瀏覽器的JavaScript執(zhí)行,系統(tǒng)內(nèi)核補丁會加強瀏覽器防護。

        幽靈變體2(CVE-2017-5715):由于該漏洞允許虛擬機非法讀取宿主機數(shù)據(jù),修補最為復雜。Google提供了用Retpoline分支代替間接分支的軟件防護方法,但需要將全部涉及代碼重新編碼編譯,工作量巨大故不常被使用。而Intel在新的微碼中提供了間接分支限制預測(IBRS)、單線程間接分支預測器(STIBP)、間接分支預測器屏障(IBPB)三個硬件防護方式??梢酝ㄟ^強制刷新分支預測緩存、禁用單CPU中多個同級線程互相影響分支預測的情況。這些硬件防護手段雖然帶來約20%性能損失,但由于簡單易行,被各大廠商廣泛使用[4]。

        對于云環(huán)境中需要升級物理CPU的微碼、安裝虛擬機操作系統(tǒng)、虛擬化層的操作系統(tǒng)的安全補丁,物理機里也需要升級CPU微碼及安裝操作系統(tǒng)補丁。目前Intel、AMD已經(jīng)向主流PC廠家提供了微碼修補程序,用戶通過下載升級最新的BIOS就可以完成升級微碼工作。即使硬件廠家暫時沒有推出的BIOS升級包,根據(jù)微軟的官方說明,通過將虛擬機與宿主機操作系統(tǒng)使用的CPU物理核之間進行強行隔離以及虛擬機之間的物理核獨占分配,也可以對5715漏洞做到有效防護[5]。

        目前的熔斷、幽靈的安全補丁都不同程度地造成系統(tǒng)性能下降及其他穩(wěn)定性問題。根據(jù)Intel的官方說明,在舊CPU上的變體2相關BIOS升級可能導致意外重啟及系統(tǒng)穩(wěn)定性問題,建議在充分測試確認影響可接受后再全面升級[6]。

        5 結(jié)束語

        近幾年來,雖然各種安全漏洞層出不窮,但像熔斷、幽靈漏洞這樣從根本上挑戰(zhàn)現(xiàn)有芯片結(jié)構(gòu)和運行方式的還是非常罕見的。因此,需要從根本上改變芯片及軟件的設計思想,在進一步挖掘芯片制式、結(jié)構(gòu)、算法潛力的同時,安全問題不容忽視。同時,由于目前的安全補丁均導致性能下降,短期內(nèi)對云平臺及用戶不可避免地會造成影響。安全與性能之間的平衡與取舍,值得每個IT、通信從業(yè)者思考。

        [1] Moritz Lipp,Michael Schwarz,Daniel Gruss,Thomas Prescher,Werner Haas,Stefan Mangard,Paul Kocher,Daniel Genkin,Yuval Yarom,Mike Hamburg. Meltdown[J]. Unpublished,2018.

        [2] Paul Kocher,Daniel Genkin,Daniel Gruss,Werner Haas,Mike Hamburg,Moritz Lipp,Stefan Mangard,Thomas Prescher,Michael Schwarz,Yuval Yarom. Spectre Attacks:Exploiting Speculative Execution[J]. Unpublished,2018.

        [3]Jann Horn. Project Zero. Reading privileged memory with a side-channel[J/OL]. https://googleprojectzero. blogspot.com/2018/01/reading-privileged-memory-with-side. html.

        [4]Leslie Culbertson.Addressing New Research for Side-Channel Analysis[J/OL].https://newsroom.intel. com/editorials/addressing-new-research-for-side-channel-analysis/.

        [5] Justin Hall. Alternative protection for Windows Server 2016 Hyper-V Hosts against the speculative execution side-channel vulnerabilities[J/OL].https://docs.microsoft. com/en-us/virtualization/hyper-v-on-windows/cve-2017-5715-and-hyper-v-hosts.

        [6] Microsoft. Windows Server guidance to protect against speculative execution side-channel vulnerabilities[J/OL]. https://support.microsoft.com/en- us/help/4072698/windows-server-guidance-to-protect-against-the-speculative-execution.

        The Principle Risks and Mitigation of CPU Vulnerabilities Meltdown and Spectre

        Zhang Jingyu1、2

        1.China Mobile Communication Group Co., Ltd., Beijing 100033 2.School of Microelectronics,Tianjin University, Tianjin 300072

        The technical background, principle of vulnerabilities, risks and the impact of the security vulnerability Meltdown and Spectre, which could attack Intel, AMD and ARM CPU, is analyzed. The countermeasures and mitigation options are proposed.

        CPU; security vulnerability; Meltdown; Spectre

        TP309

        A

        張經(jīng)宇(1988—),山西忻州人,工程師,在讀博士,主要從事信息與通信工程領域的研究與維護維修工作。

        猜你喜歡
        指令內(nèi)容
        聽我指令:大催眠術
        內(nèi)容回顧溫故知新
        科學大眾(2022年11期)2022-06-21 09:20:52
        內(nèi)容回顧 溫故知新
        科學大眾(2021年21期)2022-01-18 05:53:48
        內(nèi)容回顧溫故知新
        科學大眾(2021年17期)2021-10-14 08:34:02
        ARINC661顯控指令快速驗證方法
        測控技術(2018年5期)2018-12-09 09:04:26
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        電子測試(2018年18期)2018-11-14 02:30:34
        殺毒軟件中指令虛擬機的脆弱性分析
        電信科學(2016年10期)2016-11-23 05:11:56
        主要內(nèi)容
        臺聲(2016年2期)2016-09-16 01:06:53
        一種基于滑窗的余度指令判別算法
        坐標系旋轉(zhuǎn)指令數(shù)控編程應用
        機電信息(2014年27期)2014-02-27 15:53:56
        亚洲精品国产成人久久av盗摄| 中文字幕在线亚洲日韩6页手机版| 亚洲欧美中文v日韩v在线| 日日噜噜夜夜久久密挑| 美腿丝袜在线一区二区| 人妻少妇不满足中文字幕| 久久亚洲黄色| 中文字幕一区二区三区97| 中文字幕色偷偷人妻久久一区| 尤物在线精品视频| 精品国产a∨无码一区二区三区 | 五月综合缴情婷婷六月| 狠狠躁夜夜躁人人爽天天| 日韩人妻免费一区二区三区| 国产免费av手机在线观看片| 亚洲av综合久久九九| 国产又黄又爽又无遮挡的视频| 在线免费观看毛视频亚洲精品 | 麻豆精品网站国产乱子伦| 日本高清免费播放一区二区| 草草影院ccyy国产日本欧美| 无码精品人妻一区二区三区影院| 久久99精品久久久66| 国产精品髙潮呻吟久久av | 国产在线观看午夜视频| 久久精品国产亚洲av无码娇色 | 亚洲欧美国产精品久久久| 漂亮人妻出轨中文字幕 | 99日本亚洲黄色三级高清网站| 青青草激情视频在线播放| 在线 | 一区二区三区四区| 精品国产AⅤ无码一区二区| 国产av一区麻豆精品久久| 丰满人妻被两个按摩师| 破了亲妺妺的处免费视频国产| 中文字幕乱码中文乱码毛片 | 日韩人妻有码中文字幕| 国产在线观看免费视频软件| 国产亚洲一区二区手机在线观看| 色婷婷精品综合久久狠狠| 三上悠亚亚洲精品一区|