版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國(guó)]-Spectre漏洞

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶(hù)提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

Spectre漏洞是一個(gè)存在于分支預(yù)測(cè)實(shí)現(xiàn)中的硬件缺陷及安全漏洞,含有預(yù)測(cè)執(zhí)行功能的現(xiàn)代微處理器均受其影響,漏洞利用是基于時(shí)間的旁路攻擊,允許惡意進(jìn)程獲得其他程序在映射內(nèi)存中的數(shù)據(jù)內(nèi)容。

簡(jiǎn)介Spectre是一系列的漏洞,基于攻擊行為類(lèi)型,賦予了兩個(gè)通用漏洞披露ID,分別是CVE-2017-5753(bounds check bypass,邊界檢查繞過(guò))和CVE-2017-5715(branch target injection,分支目標(biāo)注入),于2018年1月隨同另一個(gè)也基于推測(cè)運(yùn)行機(jī)制的、屬于重量級(jí)信息安全漏洞的硬件缺陷“Meltdown”(熔毀)一同公布。由于該缺陷是推測(cè)運(yùn)行機(jī)制導(dǎo)致的,加上不同處理器架構(gòu)對(duì)推測(cè)運(yùn)行又有不同的實(shí)現(xiàn)方式,因此這個(gè)缺陷無(wú)法獲得根源上的修復(fù)而只能采取“見(jiàn)招拆招”式的方法防范,而且因機(jī)制所致,各種解決方案還有不可預(yù)料的性能下降。

CVE-2017-5753依賴(lài)于運(yùn)行中的即時(shí)編譯(JIT)系統(tǒng),用于Javascript的JIT引擎已被發(fā)現(xiàn)存在此漏洞。網(wǎng)站可以讀取瀏覽器中存儲(chǔ)的另一個(gè)網(wǎng)站的數(shù)據(jù),或者瀏覽器本身的內(nèi)存。對(duì)此Firefox57.0.4(部分)及Chrome 64通過(guò)為每個(gè)網(wǎng)站分配專(zhuān)用的瀏覽器進(jìn)程來(lái)阻擋此類(lèi)攻擊;操作系統(tǒng)則是通過(guò)改寫(xiě)的編譯器重新編譯以阻擋利用該漏洞進(jìn)行攻擊的行為。

針對(duì)CVE-2017-5715,除了軟件層面上進(jìn)行修改以外,處理器也需要通過(guò)微碼更新來(lái)阻擋這類(lèi)攻擊。

歷史Spectre 漏洞由Google Project Zero的Jann Horn獨(dú)立發(fā)現(xiàn),Paul Kocher協(xié)同Daniel Genkin、Mike Hamburg、Moritz Lipp和Yuval Yarom也合作發(fā)現(xiàn)了此問(wèn)題。微軟漏洞研究(Microsoft Vulnerability Research)則將此問(wèn)題的波及范圍擴(kuò)展到了瀏覽器JavaScript的JIT引擎。2017年6月1日,受影響的硬件供應(yīng)商知悉此問(wèn)題。2018年1月3日,此漏洞與另一安全漏洞熔毀(Meltdown)被一同公布。

原理Spectre漏洞是一個(gè)可以迫使用戶(hù)操作系統(tǒng)上的其他程序訪(fǎng)問(wèn)其程序電腦存儲(chǔ)器空間中任意位置的漏洞。

Spectre漏洞不是單個(gè)易于修復(fù)的漏洞,而是一類(lèi)潛在漏洞的總和1。它們都利用了一種現(xiàn)代微處理器為降低內(nèi)存延遲、加快執(zhí)行速度的常用方法“預(yù)測(cè)執(zhí)行”的副作用。具體而言,Spectre漏洞著重于分支預(yù)測(cè),這是預(yù)測(cè)執(zhí)行的一部分。與同時(shí)披露的相關(guān)漏洞“熔毀”不同,Spectre漏洞不依賴(lài)單個(gè)處理器上存儲(chǔ)器管理及系統(tǒng)保護(hù)的特定功能,而是一個(gè)更為通用的漏洞。

白皮書(shū)的出發(fā)點(diǎn)是,對(duì)分支預(yù)測(cè)機(jī)制進(jìn)行邊信道定時(shí)攻擊,它是現(xiàn)代微處理器亂序執(zhí)行的一部分。雖然,處理器的文檔保證在架構(gòu)級(jí)別,預(yù)測(cè)錯(cuò)誤所導(dǎo)致的任何后果都會(huì)在得到正確結(jié)果之后取消,然而預(yù)測(cè)執(zhí)行仍然有可能留下副作用,例如已加載的緩存線(xiàn)。這些所謂的非功能性方面隨后便可影響計(jì)算環(huán)境。如果這種副作用(包括但不限于內(nèi)存訪(fǎng)問(wèn)時(shí)間)對(duì)惡意程序可見(jiàn),并且能設(shè)法與受害進(jìn)程所保存的敏感數(shù)據(jù)產(chǎn)生關(guān)系,則這些副作用可能會(huì)使敏感數(shù)據(jù)可被識(shí)別。即使在架構(gòu)級(jí)別,正式的安全設(shè)計(jì)能正常工作,這種情況仍然會(huì)發(fā)生;這種情況下,用于代碼執(zhí)行的、較低級(jí)的微架構(gòu)優(yōu)化仍然有可能泄漏對(duì)正常程序正確執(zhí)行不是非常重要的某些信息。

Spectre漏洞論文展示了完成攻擊的四個(gè)基本步驟:

首先,論文闡述了在現(xiàn)代處理器中的,惡意程序可以通過(guò)程序內(nèi)部的運(yùn)行操縱分支預(yù)測(cè)邏輯,使得分支預(yù)測(cè)命中或者失敗的情況可以提前判斷。

隨后展示了,可以可靠地對(duì)緩存命中和未命中間的差異進(jìn)行計(jì)時(shí),因此,本來(lái)應(yīng)該是簡(jiǎn)單的非功能差異,實(shí)際卻可作為秘密信道,從無(wú)關(guān)信息中提取進(jìn)程的內(nèi)部工作信息。

然后,論文以一個(gè)簡(jiǎn)單的示例程序和一個(gè)在瀏覽器沙盒中運(yùn)行的JavaScript片段為基礎(chǔ),將結(jié)果與返回導(dǎo)向編程攻擊等原理進(jìn)行綜合;在這兩種情況下,只需簡(jiǎn)單使用由普通編譯器或現(xiàn)有瀏覽器中JavaScript引擎生成的代碼,利用其中條件分支的預(yù)測(cè)執(zhí)行,受害者進(jìn)程的整個(gè)地址空間(即運(yùn)行中程序的內(nèi)容)都將可讀。其基本思想是,在現(xiàn)有的代碼中尋找預(yù)測(cè)執(zhí)行可能涉及到不可訪(fǎng)問(wèn)數(shù)據(jù)的地方,操縱處理器,使得預(yù)測(cè)執(zhí)行必須觸及該數(shù)據(jù)的實(shí)際內(nèi)容,然后對(duì)處理器的副作用計(jì)時(shí),這時(shí)預(yù)取機(jī)制已經(jīng)加載完成了一條緩存線(xiàn),結(jié)果就是訪(fǎng)問(wèn)這條緩存線(xiàn)的數(shù)據(jù)速度會(huì)更快。

最后,本文將這種攻擊一般化到受害進(jìn)程的任何非功能狀態(tài)上。緊接著討論了甚至像總線(xiàn)仲裁延遲這樣非常不明顯的非功能性效應(yīng)。

Spectre漏洞和Meltdown漏洞之間的根本區(qū)別在于,后者依賴(lài)于現(xiàn)代英特爾處理器的特定功能:CPU可能會(huì)被誘使預(yù)測(cè)執(zhí)行到受保護(hù)的系統(tǒng)數(shù)據(jù)中,被迫進(jìn)入并處理相關(guān)的安全異常。Spectre中的統(tǒng)計(jì)學(xué)特征更為明顯:盡最大努力以某種方式調(diào)教處理器的分支預(yù)測(cè)機(jī)制,并使用現(xiàn)有庫(kù)中可用(或不可用)的代碼來(lái)實(shí)現(xiàn)基本相同的事。

或者換句話(huà)說(shuō),正如Meltdown論文所說(shuō)的那樣:“Meltdown在幾個(gè)方面與Spectre攻擊有所不同,其中值得注意的是,Spectre需要定制受害者進(jìn)程的軟件環(huán)境,但適用的CPU更加廣泛,并且KAISER對(duì)其無(wú)效2。

影響截至2018年,幾乎所有的計(jì)算機(jī)系統(tǒng)都受到Spectre漏洞的影響,包括臺(tái)式機(jī)、筆記本電腦和移動(dòng)設(shè)備。具體而言,Spectre漏洞已證明可以在Intel、AMD和ARM的處理器上工作。英特爾正式回應(yīng)了所報(bào)告的安全漏洞。根據(jù)AMD的一份聲明,Spectre漏洞第二個(gè)變種沒(méi)有發(fā)生在AMD處理器上,且由于AMD架構(gòu)之間存在差異,“風(fēng)險(xiǎn)接近于零”。

當(dāng)前,Spectre漏洞只會(huì)造成用戶(hù)級(jí)別的程序互相影響,但似乎這種攻擊方式可以進(jìn)一步開(kāi)發(fā)。雖然比熔毀更難正確使用,但由于它的一般性,Spectre漏洞可能會(huì)更加難以抵御。原來(lái)的白皮書(shū)甚至推測(cè),為了完全處理這個(gè)問(wèn)題,可能需要對(duì)微處理器體系結(jié)構(gòu)進(jìn)行重大改變。

而且,對(duì)于云提供商而言,Spectre漏洞比Meltdown漏洞影響更大。Meltdown漏洞可使未經(jīng)授權(quán)的應(yīng)用程序讀取特權(quán)內(nèi)存,并獲取運(yùn)行在同一云服務(wù)器上進(jìn)程的敏感數(shù)據(jù),而Spectre漏洞可讓惡意程序誘使虛擬機(jī)管理程序?qū)?shù)據(jù)傳輸?shù)皆谄渖线\(yùn)行的客戶(hù)系統(tǒng)。

防御措施由于Spectre漏洞是一整類(lèi)的攻擊,所以一個(gè)補(bǔ)丁很可能無(wú)法完全解決。雖然這個(gè)漏洞的一些特殊案例已經(jīng)在處理,但專(zhuān)門(mén)介紹“Spectre”和“Meltdown”的網(wǎng)站也說(shuō):Spectre漏洞不易修復(fù),所以會(huì)長(zhǎng)期困擾我們。微軟 Windows系列操作系統(tǒng)于2018年初發(fā)布了系統(tǒng)補(bǔ)丁,英特爾公司于事件發(fā)生階段反復(fù)表示修復(fù)漏洞對(duì)性能影響不大,但微軟測(cè)試表明若安裝Windows 7、Windows 8 操作系統(tǒng)、并使用2015年或更早出廠(chǎng)的英特爾芯片,更新后速度會(huì)明顯變慢,慢到用戶(hù)能感受到差異,也有說(shuō)法是性能約下降30%,尤其是較舊的Haswell架構(gòu)及之前芯片。但若是安裝Windows 10并使用Skylake、Kaby Lake等之后更新版英特爾芯片,則性能下降狀況并不明顯。

盡管如此,已有幾個(gè)程序幫助保護(hù)家庭計(jì)算機(jī)和相關(guān)設(shè)備免于“Meltdown”和“Spectre”漏洞的攻擊。

嵌入在網(wǎng)站中的JavaScript也可用于攻擊。Chrome 64將默認(rèn)包含針對(duì)此攻擊的緩解措施,Chrome 63用戶(hù)可以通過(guò)啟用站點(diǎn)隔離功能(chrome://flags#enable-site-per-process)手動(dòng)緩解攻擊。在Firefox 57.0.4中,Mozilla正在降低JavaScript計(jì)時(shí)器的精度,以幫助防止計(jì)時(shí)攻擊,同時(shí)計(jì)劃用于將來(lái)版本的時(shí)間模糊技術(shù)也在工作中。此外,基于瀏覽器的漏洞利用可以通過(guò)禁用JavaScript(例如NoScript)防止。

2018年1月4日,Google在其安全博客上詳細(xì)介紹了新技術(shù)“Retpoline”,該技術(shù)能夠以微不足道的處理器開(kāi)銷(xiāo)克服Spectre漏洞。它涉及在編譯器編譯時(shí)讓間接分支跳轉(zhuǎn)到不同的目標(biāo),減少易受攻擊的亂序執(zhí)行發(fā)生。雖然這項(xiàng)技術(shù)面向x86指令集開(kāi)發(fā),Google工程師認(rèn)為該技術(shù)也可以用于其他處理器。

也有人提出,在有選擇性刷新轉(zhuǎn)譯后備緩沖器(TLB)功能的處理器上,可以減少修補(bǔ)漏洞造成的性能損失。該特性在Intel 64架構(gòu)下稱(chēng)為進(jìn)程上下文標(biāo)識(shí)符(PCID),而在Alpha下稱(chēng)為地址空間號(hào)碼(ASN)。這是因?yàn)?,選擇性刷新可隔離進(jìn)程,及對(duì)漏洞至關(guān)重要的轉(zhuǎn)譯后備緩沖器(TLB)行為,而不會(huì)不斷刷新整個(gè)TLB,這是性能損失的主要原因。

微碼、固件更新對(duì)于幽靈的變體2——分支目標(biāo)注入,除了軟件的規(guī)避阻擋措施外,還至少需要受影響的處理器獲得微碼更新或固件修復(fù)程序。受缺陷影響最大的英特爾已經(jīng)為新近出貨和一些較老的處理器推出微碼更新,但是該措施通常需要主板廠(chǎng)商的配合,以便將處理器廠(chǎng)商提供的微碼更新集成至其主板的BIOS/EFI固件上,因此會(huì)出現(xiàn)一些較老的、早已不享有保固服務(wù)的主板沒(méi)有獲得微碼更新的情況;而部分較老的處理器,也是未能獲得微碼更新。對(duì)于一些主板廠(chǎng)商未有發(fā)布帶微碼更新固件,但處理器廠(chǎng)商已經(jīng)推出微碼更新修復(fù)程序的,有的用戶(hù)會(huì)嘗試以自制主板固件的方式安裝微碼更新。

英特爾在其新出貨的處理器上內(nèi)置了對(duì)于阻擋利用該類(lèi)缺陷進(jìn)行攻擊的微碼更新,并在2018年下半年推出硬件層級(jí)上帶特權(quán)隔離措施和進(jìn)程隔離的處理器產(chǎn)品;ARM則是發(fā)布了針對(duì)受影響處理器核心的固件修復(fù)程序;AMD盡管宣稱(chēng)未受CVE-2017-5715的影響,但仍舊發(fā)布了相應(yīng)的微碼更新。

本詞條內(nèi)容貢獻(xiàn)者為:

吳晨濤 - 副研究員 - 上海交通大學(xué)