解讀CPU漏洞:Meltdown和Spectre

雷鋒網 於 09/01/2018 發表 收藏文章
1月4日,國外安全研究機構公佈了兩組CPU漏洞,由於漏洞嚴重而且影響範圍廣泛,引起了全球的關注。

Meltdown(熔斷),應對漏洞CVE-2017-5754;

Spectre(幽靈),對應漏洞CVE-2017-5753/CVE-2017-5715。

利用Meltdown漏洞,低權限用户可以訪問內核的內容,獲取本地操作系統底層的信息;當用户通過瀏覽器訪問了包含Spectre惡意利用程序的網站時,用户的如帳號,密碼,郵箱等個人隱私信息可能會被泄漏;在雲服務場景中,利用Spectre可以突破用户間的隔離,竊取其他用户的數據。

Meltdown漏洞影響幾乎所有的Intel CPU和部分ARM CPU,而Spectre則影響所有的Intel CPU和AMD CPU,以及主流的ARM CPU。從個人電腦、服務器、雲計算機服務器到移動端的智能手機,都受到這兩組硬件漏洞的影響。


這兩組漏洞來源於芯片廠商為了提高CPU性能而引入的新特性。現代CPU為了提高處理性能,會採用亂序執行(Out-of-Order Execution)和預測執行(Speculative Prediction)。亂序執行是指CPU並不是嚴格按照指令的順序串行執行,而是根據相關性對指令進行分組並行執行,最後彙總處理各組指令執行的結果。預測執行是CPU根據當前掌握的信息預測某個條件判斷的結果,然後選擇對應的分支提前執行。

亂序執行和預測執行在遇到異常或發現分支預測錯誤時,CPU會丟棄之前執行的結果,將 CPU的狀態恢復到亂序執行或預測執行前的正確狀態,然後選擇對應正確的指令繼續執行。這種異常處理機制保證了程序能夠正確的執行,但是問題在於,CPU恢復狀態時並不會恢復CPU緩存的內容,而這兩組漏洞正是利用了這一設計上的缺陷進行測信道攻擊。
漏洞原理解析

Meltdown漏洞原理

亂序執行可以簡單的分為三個階段,如下圖所示:


每個階段執行的操作如下:
1)獲取指令,解碼後存放到執行緩衝區Reservations Stations

2)亂序執行指令,結果保存在一個結果序列中

3)退休期Retired Circle,重新排列結果序列及安全檢查(如地址訪問的權限檢查),提交結果到寄存器

結合Meltdown利用的代碼片段來看:


Meltdown漏洞的利用過程有4個步驟:

1) 指令獲取解碼

2) 亂序執行3條指令,指令2和指令3要等指令1中的讀取內存地址的內容完成後才開始執行,指令3會將要訪問的rbx數組元素所在的頁加載到CPU Cache中。

3) 對2)的結果進行重新排列,對1-3條指令進行安全檢測,發現訪問違例,會丟棄當前執行的所有結果,恢復CPU狀態到亂序執行之前的狀態,但是並不會恢復CPU Cache的狀態

4) 通過緩存測信道攻擊,可以知道哪一個數組元素被訪問過,也即對應的內存頁存放在CPU Cache中,從而推測出內核地址的內容

Spectre漏洞原理

與Meltdown類似,Spectre的原理是,當CPU發現分支預測錯誤時會丟棄分支執行的結果,恢復CPU的狀態,但是不會恢復CPU Cache的狀態,利用這一點可以突破進程間的訪問限制(如瀏覽器沙箱)獲取其他進程的數據。

Spectre的利用代碼片段:


具體攻擊過程可以分為三個階段:

1)訓練CPU的分支預測單元使其在運行利用代碼時會進行特定的預測執行

2)預測執行使得CPU將要訪問的地址的內容讀取到CPU Cache中

3) 通過緩存測信道攻擊,可以知道哪一個數組元素被訪問過,也即對應的內存頁存放在CPU Cache中,從而推測出地址的內容。

漏洞驗證

目前開源社區github已經放出來了漏洞的驗證代碼(PoC),如下:

https://github.com/Eugnis/spectre-attack
https://github.com/feruxmax/meltdown

https://github.com/gkaindl/meltdown-poc

https://github.com/turbo/KPTI-PoC-Collection

經過我們和其他安全研究人員實際驗證,漏洞可在Windows、Linux、Mac-OS等操作系統下,成功讀取任意指定內存地址的內容,如下圖所示:

Windows:


Ubuntu 16.04:


此外,有安全研究人員驗證了可以通過漏洞獲取到用户正在輸入的密碼,不過暫未放出相關代碼。如下圖所示:


漏洞修復進展

針對這兩組漏洞,各家芯片廠商,操作系統廠商,瀏覽器廠商,以及雲服務廠商,都積極採取措施,發佈安全公告,並及時推出緩解措施和修復補丁。

芯片廠商

1. Intel

Intel已經確認自身CPU中存在相關問題,並正與包括AMD、ARM和多家操作系統廠商在內的許多其他科技公司緊密合作,制定行業範圍的方法,以便及時和建設性地解決這些漏洞。另外Intel認為有些媒體裏面的報道並不準確,這些問題不僅僅Intel,其他廠商的CPU中也存在相關問題。這些問題的修復對性能的影響和具體的工作場景相關,對一般用户而言,影響並不顯著,而且隨着時間的推移這些影響都會得到緩解。

Intel已經提供軟件和固件更新以解決這些漏洞,預計下週末之前會修復最近5年中90%的CPU。Intel的安全公告如下:

https://security-center.intel.com/advisory.aspx?intelid=INTEL-SA-00088&languageid=en-fr

https://newsroom.intel.com/news/intel-responds-to-security-research-findings/

https://newsroom.intel.com/news-releases/intel-issues-updates-protect-systems-security-exploits/

https://www.intel.com/content/www/us/en/architecture-and-technology/facts-about-side-channel-analysis-and-intel-products.html

2. ARM

ARM確認大部分處理器不受漏洞影響,但給出了一個受影響的處理器列表。ARM認為,利用這些漏洞進行攻擊需要在本地運行惡意軟件,用户及時更新軟件和不點擊來歷不明的鏈接會降低攻擊風險。針對linux上的程序,ARM提供了新編譯器,可用新編譯器重新編譯。另外發布了Linux ARM內核補丁,用於修補漏洞,相關頁面如下:

https://developer.arm.com/support/security-update/download-the-whitepaper

https://developer.arm.com/support/security-update

3. AMD

AMD針對每個漏洞做了回覆,第一個漏洞由軟件、操作系統廠商發佈補丁解決,性能影響非常輕微,其他兩個漏洞由於AMD CPU特殊的架構,都不受影響。具體如下:

https://www.amd.com/en/corporate/speculative-execution

操作系統

1. Windows


微軟已經發布了安全通告,修復了IE、Edge、Windows內核中相關問題,並針對普通用户、服務器用户、雲用户各自給出了防護指南。

微軟普通用户:https://support.microsoft.com/help/4073119

服務器用户:https://support.microsoft.com/help/4072698

雲用户:https://support.microsoft.com/help/4073235

微軟安全通告:https://support.microsoft.com/en-us/help/4073235/cloud-protections-speculative-execution-side-channel-vulnerabilities

2. Linux

Linux內核開發者Thomas Gleixner在2017年12月在Linux內核郵件列表中就新的KAISER隔離補丁發佈了説明。目前有人懷疑這批補丁可能正是為了解決Linux系統當中的Metldown與Spectre 漏洞。具體如下:

https://lkml.org/lkml/2017/12/4/709

3. RedHat

紅帽公司已經發布一項建議,其中列出受到影響的產品及其當前狀態。建議內容表明:對於正在運行受影響版本產品的紅帽客户,強烈建議用户儘快根據指導清單進行更新。所有受影響產品都應安裝修復補丁,藉以緩解CVE-2017-5753 (變種1)與 CVE-2017-5754 (變種3)漏洞。CVE-2017-5715 (變種2)可通過本地以及虛擬訪客邊界兩種方式被加以利用。具體如下:

https://access.redhat.com/security/vulnerabilities/speculativeexecution?sc_cid=701f2000000tsLNAAY&

4. Android

Android團隊於2018年1月更新了安全通告:CVE-2017-5715、CVE-2017-5753以及CVE-2017-5754為已經得到公開披露的一系列與處理器內推測執行相關的漏洞。Android尚未發現任何在基於ARM的Android設備之上重現上述漏洞以進行的未授權信息泄露行為。為了提供額外的保護措施,本公告當中包含的CVE-2017-13218更新減少了對高精度定時器的訪問,旨在限制旁路攻擊(例如CVE-2017-5715、CVE-2017-5753以及CVE-2017-5754)所有已知變種對ARM處理器的影響。具體如下:

https://source.android.com/security/bulletin/2018-01-01

瀏覽器

利用漏洞在瀏覽器中進行攻擊依賴於新特性SharedArrayBuffer和用於高精度時間計算的函數performance.now。各個瀏覽器表示都採取了以下兩個緩解措施:

l 移除瀏覽器中可用於攻擊的SharedArrayBuffer特性

l 降低用於高精度時間計算的函數performance.now的精確性

加上這兩個緩解措施後,JS版本的漏洞PoC代碼將無法觸發:


1. Microsoft Edge

微軟已經發布了瀏覽器補丁:

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV180002

2. FireFox

Mozilla從FireFox 57版本開始採取了這兩個緩解措施:

https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/

3. Chrome

Google從Chrome 64版本開始採取了這兩個緩解措施:

https://security.googleblog.com/2018/01/todays-cpu-vulnerability-what-you-need.html

雲服務廠商

1. Amazon



Amazon方面已經發布一項安全公告,指出:此項安全漏洞廣泛存在於過去20年推出的英特爾、AMD以及ARM等各類現代處理器架構當中,影響範圍涵蓋服務器、台式機以及移動設備。Amazon EC2體系中除極少數實例外,其餘皆受到嚴格保護。剩餘部分的修復工作將在接下來數小時內完成,並附有相關實例維護通知。雖然AWS所執行的更新能夠切實保護底層基礎設施,但為了充分解決此次問題,客户還應對實例中的操作系統進行修復。目前Amazon Linux更新已經開始發佈,具體如下:

https://aws.amazon.com/security/security-bulletins/AWS-2018-013/

2. 阿里雲

為解決處理器芯片的安全問題,阿里雲將在北京時間2018年1月12日凌晨1點進行虛擬化底層的升級更新。屆時,阿里雲將採用熱升級的方式,絕大多數客户不會受到影響。但個別客户可能需要手動重啟,阿里雲建議客户提前準備運營預案及數據備份。

3. 騰訊雲

騰訊雲將於北京時間2018年1月10日凌晨01:00-05:00通過熱升級技術對硬件平台和虛擬化平台進行後端修復,期間客户業務不會受到影響。對於極少量不支持熱升級方式的,騰訊雲另行安排時間手動重啟修復。

漏洞修復存在的問題

由於漏洞是芯片底層設計上的缺陷導致的,修復起來會非常複雜,同時難以完美修復。從目前的情況來看,漏洞很難通過CPU微碼修復,更多是依賴於OS級的修復程序。

修復程序本身也存在諸多問題。以Windows 10為例,微軟於北京時間1月4號凌晨緊急發佈了1月份系統安全更新,但補丁存在明顯的性能和兼容性的問題:

引用更新可能會讓受影響的系統性能下滑30%

更新可能會導致部分軟件(安全軟件等)不兼容從而系統藍屏

出於兼容性考慮,Windows Update並不會在所有的電腦環境中進行自動更新,而是在其認為軟件比較兼容的情況下 才會進行自動更新。另外,對於有需要更新的用户,可以通過下載微軟相關補丁包,進行手動運行修復安全威脅。
根據我們的實際測試,性能問題對於普通用户來説,影響並不大:只有在極端的測試下,才會出現明顯的性能問題;而正常的使用過程中一般不會出現。但是兼容性問題確實比較嚴重:在有安全軟件,以及一些遊戲的電腦上,安裝補丁比較容易出現藍屏現象。這也使得我們和其他安全廠商採取了比較保守的策略,暫時不主動推送微軟的補丁,避免造成用户電腦無法正常使用。

漏洞對普通用户的影響

雖然漏洞影響範圍廣泛,並引起全球關注,但受影響最大的主要是雲服務廠商,對於普通用户來説,大可不必過於恐慌。

首先,雖然漏洞細節以及PoC已經公開,但是並不能直接運用於攻擊。漏洞運用於真實攻擊還有許多細節問題需要解決,目前也沒有一個穩定通用,同時可以造成明顯嚴重後果(竊取賬號密碼等)的漏洞利用代碼;

其次,我們和其他安全廠商目前也還沒有監控到利用這些漏洞進行的真實攻擊,一旦出現真實攻擊,我們將第一時間跟進,確保用户安全;

另外,對於普通用户而言,漏洞可造成的主要危害在於用瀏覽器訪問了一個帶有漏洞利用代碼的網頁,導致敏感信息(賬號密碼等)泄露。只要養成良好的上網習慣,不輕易點擊陌生人發來的鏈接,基本不會受到漏洞影響;同時,瀏覽器針對漏洞發佈的補丁和緩解措施簡單有效,而且不會造成性能下降或兼容性問題,用户可以選擇將瀏覽器升級到最新版本,從而避免受到漏洞攻擊。

文章由騰訊安全聯合實驗室投稿,雷鋒網(公眾號:雷鋒網)宅客頻道(微信公眾號:letshome)編輯。


雷鋒網旗下宅客頻道關注先鋒科技領域,歡迎關注雷鋒網宅客頻道。

雷鋒網特約稿件,未經授權禁止轉載。詳情見轉載須知



資料來源:雷鋒網

留言


請按此登錄後留言。未成為會員? 立即註冊
    快捷鍵:←
    快捷鍵:→