歡迎光臨
每天分享高質量文章

影響全球的 CPU 漏洞深度解讀:熔斷與幽靈

來源:騰訊安全聯合實驗室


一 漏洞背景和影響


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)和預測執行(SpeculativePrediction)。亂序執行是指CPU並不是嚴格按照指令的順序序列執行,而是根據相關性對指令進行分組並行執行,最後彙總處理各組指令執行的結果。預測執行是CPU根據當前掌握的資訊預測某個條件判斷的結果,然後選擇對應的分支提前執行。


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


二 漏洞原理解析


1、Meltdown漏洞原理


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



每個階段執行的操作如下:


1)獲取指令,解碼後存放到執行緩衝區Reservations Stations

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

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


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


; rcx = kernel address

; rbx = probe array

1  mov al, byte [rcx]

2  shl rax, 0xc

3  mov rbx, qword [rbx + rax]


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


1)指令獲取解碼


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


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


4)透過快取測通道攻擊,可以知道哪一個陣列元素被訪問過,也即對應的記憶體頁存放在CPU Cache中,從而推測出核心地址的內容


2、Spectre漏洞原理


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


Spectre的利用程式碼片段:


if (x < array1_size) {

y = array2[array1[x] * 256];

// do something using Y that is

// observable when speculatively executed

}


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


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、晶片廠商


1.1 Intel


Intel已經確認自身CPU中存在相關問題,並正與包括AMD、ARM和多家作業系統廠商在內的許多其他科技公司緊密合作,制定行業範圍的方法,以便及時和建設性地解決這些漏洞。另外Intel認為有些媒體裡面的報道並不準確,這些問題不僅僅Intel,其他廠商的CPU中也存在相關問題。


這些問題的修複對效能的影響和具體的工作場景相關,對一般使用者而言,影響並不顯著,而且隨著時間的推移這些影響都會得到緩解。


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



1.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


1.3 AMD


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


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


2、作業系統


2.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.2 Linux


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

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


2.3 RedHat

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

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


2.4 安卓

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


3、瀏覽器

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


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

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


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



3.1 Microsoft Edge


微軟已經釋出了瀏覽器補丁:

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


3.2 FireFox


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


3.3 Chrome


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

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


4、雲服務廠商


4.1 Amazon


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

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


4.2 阿裡雲


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


4.3 騰訊雲


騰訊雲將於北京時間2018年1月10日凌晨01:00-05:00透過熱升級技術對硬體平臺和虛擬化平臺進行後端修複,期間客戶業務不會受到影響。對於極少量不支援熱升級方式的,騰訊雲另行安排時間手動重啟修複,這部分伺服器騰訊雲安全團隊將會另行進行通知,協商升級時間。


五  漏洞修複存在的問題


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


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


  • 更新可能會讓受影響的系統效能下滑30%

  • 更新可能會導致部分軟體(安全軟體等)不相容從而系統藍色畫面


出於相容性考慮,Windows Update並不會在所有的電腦環境中進行自動更新,而是在其認為軟體比較相容的情況下才會進行自動更新。另外,對於有需要更新的使用者,可以透過下載微軟相關補丁包,進行手動執行修複安全威脅。


根據我們的實際測試,效能問題對於普通使用者來說,影響並不大:只有在極端的測試下,才會出現明顯的效能問題;而正常的使用過程中一般不會出現。但是相容性問題確實比較嚴重:在有安全軟體,以及一些遊戲的電腦上,安裝補丁比較容易出現藍色畫面現象。這也使得我們和其他安全廠商採取了比較保守的策略,暫時不主動推送微軟的補丁,避免造成使用者電腦無法正常使用。


六 漏洞對普通使用者的影響


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


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


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


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


七 結語


這些漏洞未來一段時間內仍然是各界關註的重點,騰訊電腦管家安全團隊將對漏洞動態保持持續關註,同時對漏洞做更加深入的分析和研究,從而為廣大使用者提供更加準確的參考資訊,以及更加可靠的解決方案。



●本文編號520,以後想閱讀這篇文章直接輸入520即可

●輸入m獲取文章目錄

推薦↓↓↓

 

Python程式設計

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂