Spectre漏洞

Spectre漏洞

Spectre漏洞是一個存在於分支預測實現中的硬體缺陷及安全漏洞,含有預測執行功能的現代微處理器均受其影響,漏洞利用是基於時間的旁路攻擊,允許惡意進程獲得其他程式在映射記憶體中的數據內容。

基本介紹

  • 中文名:幽靈漏洞
  • 別名:Spectre漏洞
簡介,歷史,原理,影響,防禦措施,微碼、固件更新,

簡介

Spectre是一系列的漏洞,基於攻擊行為類型,賦予了兩個通用漏洞披露ID,分別是CVE-2017-5753(bounds check bypass,邊界檢查繞過)和CVE-2017-5715(branch target injection,分支目標註入),於2018年1月隨同另一個也基於推測運行機制的、屬於重量級信息安全漏洞的硬體缺陷“Meltdown”(熔毀)一同公布。由於該缺陷是推測運行機制導致的,加上不同處理器架構對推測運行又有不同的實現方式,因此這個缺陷無法獲得根源上的修復而只能採取“見招拆招”式的方法防範,而且因機制所致,各種解決方案還有不可預料的性能下降。
CVE-2017-5753依賴於運行中的即時編譯(JIT)系統,用於Javascript的JIT引擎已被發現存在此漏洞。網站可以讀取瀏覽器中存儲的另一個網站的數據,或者瀏覽器本身的記憶體。對此Firefox57.0.4(部分)及Chrome 64通過為每個網站分配專用的瀏覽器進程來阻擋此類攻擊;作業系統則是通過改寫的編譯器重新編譯以阻擋利用該漏洞進行攻擊的行為。
針對CVE-2017-5715,除了軟體層面上進行修改以外,處理器也需要通過微碼更新來阻擋這類攻擊。

歷史

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

原理

Spectre漏洞是一個可以迫使用戶作業系統上的其他程式訪問其程式電腦存儲器空間中任意位置的漏洞。
Spectre漏洞不是單個易於修復的漏洞,而是一類潛在漏洞的總和。它們都利用了一種現代微處理器為降低記憶體延遲、加快執行速度的常用方法“預測執行”的副作用。具體而言,Spectre漏洞著重於分支預測,這是預測執行的一部分。與同時披露的相關漏洞“熔毀”不同,Spectre漏洞不依賴單個處理器存儲器管理及系統保護的特定功能,而是一個更為通用的漏洞。
白皮書的出發點是,對分支預測機制進行邊信道定時攻擊,它是現代微處理器亂序執行的一部分。雖然,處理器的文檔保證在架構級別,預測錯誤所導致的任何後果都會在得到正確結果之後取消,然而預測執行仍然有可能留下副作用,例如已載入的快取線。這些所謂的非功能性方面隨後便可影響計算環境。如果這種副作用(包括但不限於記憶體訪問時間)對惡意程式可見,並且能設法與受害進程所保存的敏感數據產生關係,則這些副作用可能會使敏感數據可被識別。即使在架構級別,正式的安全設計能正常工作,這種情況仍然會發生;這種情況下,用於代碼執行的、較低級的微架構最佳化仍然有可能泄漏對正常程式正確執行不是非常重要的某些信息。
Spectre漏洞論文展示了完成攻擊的四個基本步驟:
  1. 首先,論文闡述了在現代處理器中的,惡意程式可以通過程式內部的運行操縱分支預測邏輯,使得分支預測命中或者失敗的情況可以提前判斷。
  2. 隨後展示了,可以可靠地對快取命中和未命中間的差異進行計時,因此,本來應該是簡單的非功能差異,實際卻可作為秘密信道,從無關信息中提取進程的內部工作信息。
  3. 然後,論文以一個簡單的示例程式和一個在瀏覽器沙盒中運行的JavaScript片段為基礎,將結果與返回導向編程攻擊等原理進行綜合;在這兩種情況下,只需簡單使用由普通編譯器或現有瀏覽器中JavaScript引擎生成的代碼,利用其中條件分支的預測執行,受害者進程的整個地址空間(即運行中程式的內容)都將可讀。其基本思想是,在現有的代碼中尋找預測執行可能涉及到不可訪問數據的地方,操縱處理器,使得預測執行必須觸及該數據的實際內容,然後對處理器的副作用計時,這時預取機制已經載入完成了一條快取線,結果就是訪問這條快取線的數據速度會更快。
  4. 最後,本文將這種攻擊一般化到受害進程的任何非功能狀態上。緊接著討論了甚至像匯流排仲裁延遲這樣非常不明顯的非功能性效應。
Spectre漏洞和Meltdown漏洞之間的根本區別在於,後者依賴於現代英特爾處理器的特定功能:CPU可能會被誘使預測執行到受保護的系統數據中,被迫進入並處理相關的安全異常。Spectre中的統計學特徵更為明顯:盡最大努力以某種方式調教處理器的分支預測機制,並使用現有庫中可用(或不可用)的代碼來實現基本相同的事。
或者換句話說,正如Meltdown論文所說的那樣:“Meltdown在幾個方面與Spectre攻擊有所不同,其中值得注意的是,Spectre需要定製受害者進程的軟體環境,但適用的CPU更加廣泛,並且KAISER對其無效。

影響

截至2018年,幾乎所有的計算機系統都受到Spectre漏洞的影響,包括台式機、筆記本電腦和移動設備。具體而言,Spectre漏洞已證明可以在IntelAMDARM的處理器上工作。英特爾正式回應了所報告的安全漏洞。根據AMD的一份聲明,Spectre漏洞第二個變種沒有發生在AMD處理器上,且由於AMD架構之間存在差異,“風險接近於零”。
當前,Spectre漏洞只會造成用戶級別的程式互相影響,但似乎這種攻擊方式可以進一步開發。雖然比熔毀更難正確使用,但由於它的一般性,Spectre漏洞可能會更加難以抵禦。原來的白皮書甚至推測,為了完全處理這個問題,可能需要對微處理器體系結構進行重大改變。
而且,對於雲提供商而言,Spectre漏洞比Meltdown漏洞影響更大。Meltdown漏洞可使未經授權的應用程式讀取特權記憶體,並獲取運行在同一雲伺服器上進程的敏感數據,而Spectre漏洞可讓惡意程式誘使虛擬機管理程式將數據傳輸到在其上運行的客戶系統。

防禦措施

由於Spectre漏洞是一整類的攻擊,所以一個補丁很可能無法完全解決。雖然這個漏洞的一些特殊案例已經在處理,但專門介紹“Spectre”和“Meltdown”的網站也說:Spectre漏洞不易修復,所以會長期困擾我們。微軟 Windows系列作業系統於2018年初發布了系統補丁,英特爾公司於事件發生階段反覆表示修復漏洞對性能影響不大,但微軟測試表明若安裝Windows 7、Windows 8 作業系統、並使用2015年或更早出廠的英特爾晶片,更新後速度會明顯變慢,慢到用戶能感受到差異,也有說法是性能約下降30%,尤其是較舊的Haswell架構及之前晶片。但若是安裝Windows 10並使用SkylakeKaby Lake等之後更新版英特爾晶片,則性能下降狀況並不明顯。
儘管如此,已有幾個程式幫助保護家庭計算機和相關設備免於“Meltdown”和“Spectre”漏洞的攻擊。
嵌入在網站中的JavaScript也可用於攻擊。Chrome 64將默認包含針對此攻擊的緩解措施,Chrome 63用戶可以通過啟用站點隔離功能(chrome://flags#enable-site-per-process)手動緩解攻擊。在Firefox 57.0.4中,Mozilla正在降低JavaScript計時器的精度,以幫助防止計時攻擊,同時計畫用於將來版本的時間模糊技術也在工作中。此外,基於瀏覽器的漏洞利用可以通過禁用JavaScript(例如NoScript)防止。
2018年1月4日,Google在其安全部落格上詳細介紹了新技術“Retpoline”,該技術能夠以微不足道的處理器開銷克服Spectre漏洞。它涉及在編譯器編譯時讓間接分支跳轉到不同的目標,減少易受攻擊的亂序執行發生。雖然這項技術面向x86指令集開發,Google工程師認為該技術也可以用於其他處理器。
也有人提出,在有選擇性刷新轉譯後備緩衝器(TLB)功能的處理器上,可以減少修補漏洞造成的性能損失。該特性在Intel 64架構下稱為進程上下文標識符(PCID),而在Alpha下稱為地址空間號碼(ASN)。這是因為,選擇性刷新可隔離進程,及對漏洞至關重要的轉譯後備緩衝器(TLB)行為,而不會不斷刷新整個TLB,這是性能損失的主要原因。

微碼、固件更新

對於幽靈的變體2——分支目標註入,除了軟體的規避阻擋措施外,還至少需要受影響的處理器獲得微碼更新或固件修復程式。受缺陷影響最大的英特爾已經為新近出貨和一些較老的處理器推出微碼更新,但是該措施通常需要主機板廠商的配合,以便將處理器廠商提供的微碼更新集成至其主機板的BIOS/EFI固件上,因此會出現一些較老的、早已不享有保固服務的主機板沒有獲得微碼更新的情況;而部分較老的處理器,也是未能獲得微碼更新。對於一些主機板廠商未有發布帶微碼更新固件,但處理器廠商已經推出微碼更新修復程式的,有的用戶會嘗試以自制主機板固件的方式安裝微碼更新。
英特爾在其新出貨的處理器上內置了對於阻擋利用該類缺陷進行攻擊的微碼更新,並在2018年下半年推出硬體層級上帶特權隔離措施和進程隔離的處理器產品;ARM則是發布了針對受影響處理器核心的固件修復程式;AMD儘管宣稱未受CVE-2017-5715的影響,但仍舊發布了相應的微碼更新。

相關詞條

熱門詞條

聯絡我們