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

影響全球的 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)

分享創造快樂