熔燬 (安全漏洞)

漏洞圖標
熔燬（Meltdown），也譯崩潰，編號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漏洞的官方網站 date=20180103235911 -  Meltdown論文 date=20180104180746 -  Google Project Zero write-up date=20191001221349 -  網絡安全實踐指南—CPU熔斷和幽靈漏洞防範指引 date=20180117190932 

**參見**
 幽靈 (安全漏洞)（Spectre）- 內核頁表隔離- Row hammer- 奔騰浮點除法-{}-錯誤