什麼是 Meltdown/Spectre?

Meltdown 和 Spectre 是影響大多數 PC 和智慧型手機的新處理器漏洞。使用者可以安裝修補程式,但它們會影響處理器效能。

學習目標

閱讀本文後,您將能夠:

  • 定義並區分 Meltdown 和 Spectre
  • 描述理論式執行的運作方式
  • 說明 Meltdown 修補程序對處理器速度的影響

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是 Meltdown/Spectre?

Meltdown 和 Spectre 是最近在 Intel、AMD、Apple 和 ARM 處理器晶片中發現的漏洞。這些漏洞由相關晶片的嚴重設計缺陷引起,由於發現了這個問題,開發人員不得不重新設計 Windows、Mac 和 Linux 作業系統軟體,以緩解漏洞並防止攻擊者對其進行利用。

這些漏洞由 Google Project Zero 的研究人員發現,該團隊致力於及時發現安全性漏洞,以免被攻擊者利用。截至目前,尚未發現有人利用 Meltdown 或 Spectre 漏洞。Apple、Intel 和 Microsoft 等主要技術公司的安全團隊以及開源 Linux 開發人員現在都投入了大量資源,試圖確保其處理器和作業系統的安全性,以免遭到惡意利用。

誰會受到 Meltdown 和 Spectre 漏洞的影響?

除了少數例外,所有 PC 和/或智慧型手機擁有者都面臨危險。根據 Google 提供的資訊,1995 年以後生產的所有裝有 Intel 處理器晶片的裝置都會受到影響。AMD 和 ARM 較難被利用,但它們同樣有風險。

如何防範 Meltdown/Spectre 漏洞?

除更換 PC 處理器以外,消除漏洞的唯一方法是修補作業系統。Apple 在 12 月初悄悄針對 OSX 推出了 Meltdown 修補程式,Microsoft 在 1 月 3 日發佈了 Windows 修補程式,而 Linux 開發人員仍在努力創建修補程式。

很遺憾,這些 Meltdown 修補程式有一個副作用:由於設計原因,電腦安裝帶修補程式的作業系統後,其處理速度會減緩。速度減緩會導致效能下降大約 5-30%,這在很大程度上取決於晶片的類型和所執行的任務。

Meltdown 和 Spectre 漏洞實際上是怎麼運作的?

Meltdown 和 Spectre 都是在執行稱為「核心代碼」的特殊低級代碼時產生的漏洞,核心代碼專門在稱為「理論式執行」的處理序期間執行。

什麼是理論式執行?

可以用一個比喻來簡單說明理論式執行。想像一個徒步旅行者在樹林裡迷了路,他遇到了一個岔路口,分別通向兩條大致平行的路。其中一條通往她家,另一條則不是。她沒有浪費時間等待其他遠足者給她指路,而是選擇了她認為最有可能通向家中的那條路。在途中某個地方,她遇到了一個路標,如果路標告知她走的是正確的路,那麼她會繼續沿著那條路回家。如果路標告訴她走錯了,她會迅速返回並改走另一條路,這並不比她一直呆在原地尋找方向更差。

理論式執行

許多現代處理器採用一種叫做「理論式執行」的類似技術:CPU 嘗試猜測下一步需要執行什麼代碼,在收到請求前即開始執行該代碼。如果事實證明不需要執行該代碼,則撤銷變更。這是為了節省時間並加快效能。

關於 Meltdown/Spectre 漏洞的報告表明,Intel CPU 可能在無需進行重要安全檢查的情況下,對代碼進行理論式執行。或許,可以編寫軟體來檢查處理器是否已執行通常會被這些安全檢查阻止的指令。

對理論式執行的不當處理會引起 CPU 漏洞,攻擊者可能利用該漏洞存取核心記憶體中的高度敏感性資料,例如密碼、加密金鑰、個人照片、電子郵件等。

那麼,什麼是核心?

核心是位於電腦作業系統核心的程式。它具有對作業系統的完全控制權,並負責管理從啟動到處理記憶體的所有流程。核心還負責將資料處理指令傳送到 CPU(中央處理器)。大多數 CPU 一直在核心模式和使用者模式之間來回切換。

核心模式和使用者模式有什麼區別?

在核心模式下,CPU 執行的代碼可以不受限制地存取電腦的硬體和記憶體。此模式通常專用於最低層級和最受信任的操作。若在 CPU 處於核心模式時發生崩潰,就可能是災難性的;它們可能會使整個作業系統崩潰。

在使用者模式下,正在執行的代碼無法存取硬體或參照記憶體,而是必須委託系統 API 進行存取(系統 API 可以執行擁有適當權限的使用者模式軟體能夠請求的某些核心模式功能)。使用者模式崩潰通常是孤立的,並且可以復原。大多數代碼在使用者模式下執行。

為什麼 Meltdown 修補程式會降低效能?

Meltdown 修補程式中的修復功能將核心的記憶體與使用者處理序進行更顯著的分離。這是透過稱為核心頁面表格隔離 (KPTI) 的方法完成的。KPTI 將核心模式操作移到與使用者模式操作完全分開的位址空間中。這意味著需要花費大量時間,在核心模式和使用者模式之間切換。

為對此進行說明,我們假設有一輛快餐車,只出售兩種東西:熱狗和冷檸檬水。快餐車內的員工可以輕鬆到達裝熱狗的蒸鍋和裝冷檸檬水的冷卻器,快速地為顧客服務。現在,假設健康檢查員來了,要求將冷熱食品存放在不同的場所。現在,員工仍然可以直接拿取熱狗,但必須走出快餐車,然後沿著街邊走到取檸檬水的地方。這樣,等候的佇列將移動得慢得多,當有顧客訂購大量檸檬水時尤為如此。KPTI 降低作業系統效能的原理與此類似。

Meltdown 和 Spectre 有什麼區別?

Meltdown 和 Spectre 都是因處理器處理理論式執行的方式而導致的漏洞,但它們的運作方式及其影響的處理器類型有所不同。

Meltdown 僅影響 Intel 和 Apple 處理器,並可能遭到利用,洩露處理器在理論式執行期間執行代碼時暴露的資訊。Meltdown 比 Spectre 更容易遭到利用,安全專家認為其具有更大的風險。值得慶倖的是,Meltdown 可以更容易和更直接地修補。

Spectre 會影響 Intel、Apple、ARM 和 AMD 處理器,攻擊者可以利用該漏洞,實際誘使處理器執行其不應執行的代碼。據 Google 的安全專家稱,Spectre 比 Meltdown 更難利用,但也更難緩解。

想要瞭解有關 Meltdown 和 Spectre 的更多資訊?

如果您想瞭解與它們相關的更多技術細節,可以查看完整的 Meltdown 論文Spectre 論文