近日現代 CPU 的 Meltdown & Spectre 漏洞沸沸揚揚,最先是 Google 研究員發現能夠經過內存側信道時序攻擊來獲取隱私數據,後續 Chromium, Apple 以及 Mozilla 都發文討論了其對各個平臺的影響與應對方案。 網上討論該漏洞的文章也不少,筆者我的感受 This is how Meltdown works, Why Raspberry Pi Isn't Vulnerable to Spectre or Meltdown 講解的不錯,而本文則翻譯自 Meltdown in a nutshell 這個簡述;本文概括於 Linux 配置使用、內部原理與 Shell 編程系列。html
對於以下僞代碼:shell
x = read(memory_location_of_os_where_secret_lies) // 拋出異常
y = arr[x *4096] // 基於 x 讀取本地內存
複製代碼
應用程序會被編譯或者解釋爲 CPU 指令,第一行對於敏感內存的讀取最終會拋出異常,不過因爲 CPU 的推測執行(Speculative Execution)優化,第二行代碼會在 CPU 進行權限檢測前執行,即 y 的值實際上已經被讀取到了 CPU 緩存中。若是 x 的值是 s
,那麼內存 arr[s
* 4096] 即會被 CPU 讀取。CPU 發現進程無權讀取後,即會清除 x 與 y 的值,不過 CPU 爲了優化讀取速度,會將本次的讀取值緩存到 CPU 本地。攻擊者即利用這一特性發起了旁路攻擊,攻擊者使用相似暴力破解的方式,遍歷全部可能的 arr[x *4096] 地址;根據計時器來判斷哪一個地址的讀取速度最快,便可以獲取到 x 的值 s
。依次類推能夠得到 ‘e’, ‘c’,’r’,’e’,’t’ 等值。編程