熔毁_(安全漏洞)

**熔毁**（英語：Meltdown），也譯**崩潰**，編號 CVE-2017-5754，正式名稱爲「Rogue Data Cache Load」，常譯作「**惡意資料快取載入**」，是一個存在於英特爾大部分 x86/x86-64 微處理器、部分 IBM POWER 架構處理器以及部分 ARM 架構處理器中的關於推測執行機制的硬體設計缺陷及安全漏洞。該缺陷使得低權限的行程無論是否取得特權，均可以獲取受高權限保護的記憶體空間中的資料，漏洞利用是基於時間的旁路攻擊。2018 年 1 月，該缺陷隨另一個基於推測執行機制的重量級資訊安全漏洞、硬體缺陷「Spectre」（幽靈）在通用漏洞披露中公布。

由於英特爾處理器及 IBM POWER 處理器均在市場上佔據極大的份額（出現缺陷的 ARM 處理器在缺陷被發現時尚未正式面市），這種涉及資訊安全的硬體缺陷影響範圍甚廣，包括幾乎整個 x86、POWER 伺服器領域、幾乎整個小型主機及大型主機市場、個人電腦市場等都無一倖免，另外該缺陷的危險程度之高（無需特權即可存取敏感資料所在的記憶體空間），曾一度令資安人員及機構懷疑缺陷的真實性，而提前公佈這些缺陷還極有可能引發全球性的資安災難，因而選擇先與處理器廠商及核心客戶聯絡協商備妥修補方案再另行公佈。目前該硬體缺陷可通過軟體實作規避，包括 Linux 系、Android、OS X/macOS、Windows 等等都有相應的修復程式（像是 Linux 的核心頁表隔離技術），但是軟體規避將導致處理器效能的顯著下降。而從根本上修復該缺陷的方法（包括修復「幽靈」缺陷）是重新設計處理器的微架構，為此英特爾、IBM 及 ARM 都將新處理器微架構的推出時程大幅押後。

## 概述

熔毀缺陷是基於設計不良的數位電路設計中出現的競爭條件，再結合許多現代微處理器的非依序執行及推測執行特性而產生。

在具備非依序執行及推測執行特性的處理器上，處理器會檢測指令的相依性，對無相依性的指令會進行預先執行，或者當處理器執行某一指令出現異常而面臨停頓時，處理器會先執行與異常指令無相依性的指令以跳過停頓，這兩類指令執行方式的執行結果都會儲存到 CPU 快取上一段時間以備使用（超過時間即拋棄結果），這些預測執行的動作包括分支預測，預讀取，推測性記憶體存取，快取缺失的重疊 / 亂序處理（MSHR）等等。

某行程的某條指令需要其指定某個記憶體位址的資料進行運算，基於 CPU 快取的機制，該筆資料會先載入至 CPU 快取上，而這個過程對於指令而言是透明的，因此其它行程是無法直接從 CPU 快取上得知該筆資料的內容，而又因資料未載入至 CPU 暫存器上，需要該資料的指令仍無法得知資料內容，在這裏，基於分級保護域機制，CPU 將資料從 CPU 快取載入至 CPU 的暫存器前是需要經過資料權限檢查和記憶體位址合法性檢查，只有這些資料的存取權限被確認等於或低於該行程的權限、記憶體位址空間的存取權限符合該行程的權限時，方能被相應行程的指令存取，否則將資料丟棄並對該指令進行異常處理。但是，而從記憶體載入資料到 CPU 快取時，CPU 是既沒有對這些資料進行權限檢查也沒有進行記憶體位址的合法性檢查的，而沒有被命中的 CPU 快取的資料也不會馬上被清空。如果 CPU 快取的資料內容無法被得知，那麼這種機制的處理邏輯並不會有問題，然而如果有方法可以從其它途徑「偷看」CPU 快取的資料內容的話，那麼這種處理邏輯便存在缺陷。

要利用熔毀缺陷，在指令處理期間，用異常的指令使得 CPU 進入對異常指令的異常處理當中，同時令 CPU 的推測執行去先執行一些非法指令，記憶體存取和權限檢查或記憶體位址合法性檢查兩種操作在這裏發生競爭冒險，因為受影響的處理器中的指令管線意味著在推測執行期間，來自未經授權位址的資料幾乎總是被臨時載入到 CPU 的快取中，即使原始讀取指令由於特權檢查而最終失敗並且從不產生可讀結果，這個時候再利用旁道攻擊，利用存取 CPU 快取及存取記憶體的時間差，重建目標資料。這樣未經授權的行程就可從對映到當前行程的記憶體空間的任何位址讀取資料。

由於許多作業系統將實體記憶體、核心行程和其他正在執行的使用者空間行程對映到每個行程的位址空間，並依靠特權檢查來防止未經授權的存取，因此，熔毁缺陷有效地允許執行在使用者空間的惡意行程在不需要權限提升的情況下，讀取任何物理核心或其他行程的對映的記憶體，不管它是否應該能夠這樣做。若要防範這個缺陷所造成的危害，需要避免使用記憶體對映方式或使用記憶體分頁隔離（均是基於軟體的解決方案，後者是將使用者空間的記憶體位址與核心空間的記憶體位址相隔離，但這將增加核心態與使用者態之間的上下文交換開銷），或避免潛在的競爭條件（修改 CPU 的微代碼和 / 或執行路徑）。

惡意程式利用熔毀缺陷進行攻擊活動時也無法被偵測感知，是該資安漏洞的一大危險之處。

## 受影響硬體

最初發現熔毀缺陷主要在英特爾的微處理器產品上出現，但後來發現一些 ARM 架構的處理器也有該缺陷並被 ARM 確認，隨後 IBM 的 POWER 架構的處理器也被發現有此缺陷也得到了 IBM 的確認。同為 x86 架構的 AMD 處理器則沒有被發現有熔毀缺陷。而英特爾在處理器缺陷被發現公佈數天後，才發表聲明確認，除了使用依序執行的產品以外全系列的英特爾微處理器都有熔毀缺陷，並且在聲明中指所有非依序執行的 x86 微處理器都有該缺陷以暗示競爭對手也受熔毀缺陷影響，不過另一家主要的 x86 微處理器供應商 AMD 則表示其處理器產品沒有熔毀缺陷，並指出「我們之所以認爲 AMD 的處理器不受缺陷影響，是因爲我們的分頁架構有特權級保護」。

同時期的另一個硬體缺陷 —— 幽靈，受影響的處理器產品遍及當今所有採用分支預測技術的處理器（包括英特爾、AMD、ARM、IBM POWER 等等），雖然相比熔燬缺陷更難利用（視不同 CPU 的微架構有所不同）

更爲具體的，有缺陷的 CPU 型號數量非常多，Google 的 Project Zero 報告指出，除了安騰以及 2013 年前的 Atom 系列，英特爾自 1995 年發表基於 P6 微架構的 Pentium Pro 開始所有具備非依序執行的 CPU 產品都有熔燬缺陷，P6 微架構是英特爾首款具備預測執行的 x86（IA-32）微架構，首發產品便是 Pentium Pro，而後續的英特爾 x86 微架構除 Netburst (Pentuim 4) 外都是以 P6 爲藍本。

而 ARM 表示它們的主要處理器 IP 核不受影響，具體受影響的 IP 核型號已經公佈。ARM Cortex-A75 除了有熔毀缺陷以外還受幽靈漏洞的影響，而其它型號則沒有熔毀缺陷。帶預測執行技術的 Cortex-R7、Cortex-R8、Cortex-A8、Cortex-A9、Cortex-A15、Cortex-A17、Cortex-A57、Cortex-A72 及 Cortex-A73 IP 核只受幽靈的影響。ARM 是在英特爾之後第二個被發現有熔毀缺陷的產品的，但與英特爾的不同，ARM 唯一有熔燬缺陷的 IP 核產品 Cortex-A75 尚未有實作商用。另外，不使用預測執行技術的 ARM 架構處理器，也是當前使用數量最多的 ARM 產品，不受任何影響，也沒有熔燬缺陷，這部分包括了大量使用在 Android 行動裝置上的 Cortex-A53 IP 核，以及即將有商用實作案的 Cortex-A55。僅使用 Cortex-A53、Cortex-A55 的處理器產品包括高通的驍龍 630、626/625、400 系列等、聯發科的 MT6795 等、樹莓派單板電腦使用的博通 SoC 等等。

IBM 的 POWER 架構是第三個被發現有熔燬缺陷、受幽靈的處理器微架構，紅帽公司在 2018 年 1 月 3 日公佈了受這些缺陷影響的處理器型號，涵蓋 Z 架構、POWER 架構（包括最新的 POWER8 及 POWER9）的產品，並發表了適用於這些指令集架構編譯版本的 RHEL 之修復程式；IBM 也立即公佈了受影響型號清單並發佈了相關的韌體修復程式和 AIX、z/OS 修復程式。

甲骨文公司表示 SPARC V9 的系統（T5、M5、M6、S7、M7、M8、M10、M12 處理器）沒有熔燬缺陷，但並未說明更老的、不再進行技術支援的處理器產品是否受這兩大硬體缺陷的衝擊。

## 漏洞修復

2018 年初，微軟發佈了 Windows 系統的安全性修正以修補漏洞。儘管 Intel 多次強調安全性修正並不會大幅影響處理器的效能，然而微軟的測試顯示了在安裝漏洞安全性修正的 Windows 7 與 Windows 8 環境下，2015 年（含）以前生產的 Intel 處理器會有效能下降，在某些測試下降幅甚至達到 30%。效能下降在較舊的微架構如 Haswell 上尤其明顯，在使用較新的微架構如 Skylake、Kaby Lake 的 Windows 10 系統上，降幅則較微小。

對於 Intel 的處置方式，Linux 之父林納斯・托瓦茲強烈表達了他的不滿，稱 Intel 的修正方案是「全然的垃圾」並說 Intel 正在做瘋狂的、毫無道理的事情。以下節錄他在一則郵件中對於 Intel 修補方式的回應。

> The patches do things like add the garbage MSR writes to the kernel
> 
> entry/exit points. That's insane. That says "we're trying to protect
> 
> the kernel". We already have retpoline there, with less overhead.
> 
> So somebody isn't telling the truth here. Somebody is pushing complete
> 
> garbage for unclear reasons. Sorry for having to point that out.
> 
> If this was about flushing the BTB at actual context switches between
> 
> different users, I'd believe you. But that's not at all what the
> 
> patches do.
> 
> As it is, the patches are COMPLETE AND UTTER GARBAGE.
> 
> They do literally insane things. They do things that do not make
> 
> sense. That makes all your arguments questionable and suspicious. The
> 
> patches do things that are not sane.
> 
> WHAT THE F\*CK IS GOING ON?
> 
> 

## 參考文獻

## 外部連結

* Meltdown 和 Spectre 漏洞的官方網站 （頁面存檔備份，存於網際網路檔案館）（英文）
* Meltdown 論文 （頁面存檔備份，存於網際網路檔案館）（英文）
* Google Project Zero write-up （頁面存檔備份，存於網際網路檔案館）
* 網路安全實踐指南 —CPU 熔毁和幽靈漏洞防範指引 （頁面存檔備份，存於網際網路檔案館）（簡體中文）

## 參見

* 幽靈 (安全漏洞)（Spectre）
* 核心頁表隔離
* Row hammer
* 奔騰浮點除錯誤