懸在雲計算頭上的達摩克利斯之劍——對於Meltdown 、Spectre事件的進展與思考(上篇)
Intel處理器熔斷(Meltdown)和幽靈(Spectre)事件的影響還未完全褪去,AMD處理器存在12個危險漏洞的新聞又一次提醒我們:安全,永遠是懸在技術頭上的達摩克利斯之劍。
今天,我們邀請到AWS 首席雲計算技術顧問費良宏老師為大家分享他對於 Meltdown 、Spectre 事件的思考。
(因篇幅過長,本篇內容將分上、下兩篇)
一部 IT 的歷史簡直就是一部「牆頭變幻大王旗」的傳奇小說。若論起來近40年來始終屹立不倒、笑傲江湖的企業,Intel 當屬其中之一。在那本《矽谷百年史》書中,就不吝筆墨的描寫了「仙童的叛徒」戈登? 摩爾、羅伯特?諾伊斯以及安迪?格魯夫創業的傳奇故事。從1978年推出的8086處理器到今天握有x86處理器80%的市場份額,這一份驕傲何人能及?
電影《蜘蛛俠》裡面有一句經典台詞「With great power comes great responsibility」 。但這一次,Intel 卻因為自己的傲慢與失誤讓我們記住了這兩個關於CPU的硬體漏洞:Meltdown 和Spectre,也讓我們不得不重新審視一下這個老而彌新的話題——雲安全。
解釋起來這一次事件的主角Meltdown 、Spectre是比較麻煩的一件事,涉及到許多現CPU 體系方面的複雜概念。眾所周知CPU 的性能是推動整個 IT 行業發展的重要動力。53年以來,半導體行業的「摩爾定律」更多的得益於工藝上的創舉,並讓我們不斷地體驗到高性能的CPU所帶來的種種好處。但隨著半導體集成度的不斷提高,我們也非常擔心摩爾定律是否已經趨近物理上的極限?為了保持CPU的發展勢頭,現代的CPU處理器創造性地採用了一些新的技術,其中預測執行(Speculative Execution)技術、多分支預測(multiple branch prediction)、 數據流分析(data flow analysis)三項技術,一起構成了亂序執行(out-of-order execution)的技術基石。
在80386時代,指令是順序執行的。到了80486,引入了 流水線(Pipeline),將一條指令執行的步驟以流水線的方式解放出來,一下子CPU的吞吐量就因此提高了將近3倍!雖然性能有所提高,但此時CPU還是嚴格按照指令的順序串列執行的。但是人們還是不滿足,試圖解決流水線存在的空轉和分支的問題。於是在奔騰II(Pentium Pro)面世的時候,Intel在CPU中引入了亂序執行技術。指令的執行方式從程序流驅動變成了數據流驅動,也就是只要部件的輸入條件滿足就可以開始執行了。流水線的吞吐量由此而大幅提高。與此同時,預測執行技術也被引入進來。分支預測會判斷哪條分支最可能被執行,預測執行會直接取得那裡的指令並立即執行。這樣等分支結果出來後,實際上那裡的指令早就開始執行了,流水線上總是滿負荷運轉,從而榨乾了CPU的處理能力!
要注意的是,亂序執行和預測執行在遇到異常或發現分支預測錯誤的時候,CPU就會丟棄之前執行的結果,然後將 CPU的狀態恢復到亂序執行或預測執行前的正確狀態,並選擇對應正確的指令繼續執行。這種異常處理機制保證了程序能夠始終正確地執行。但是問題來了,CPU在恢復狀態的時候並不會恢復CPU緩存的內容,而我們今天介紹Meltdown 、Spectre這兩組漏洞正是利用了這一設計上的重大缺陷,允許程序竊取當前在計算機上處理的數據。 關於上面的原理可以歸納為以下幾點:
1、所有現代CPU在執行代碼之前預先從系統內存中獲取數據 。
2、預取數據放置在內部寄存器和CPU高速緩存中,讀取速度比系統內存快得多。
3、自1993年以來,幾乎所有的CPU都發布了預取數據,而且大多數預取的數據都是預測的。
4、現在,Meltdown和Spectre漏洞背後的根本問題是:可能會誘使CPU將任意數據預取到內部寄存器和緩存中,這是CPU和操作系統本來可以防止的。
5、通過稱為高速緩存定時側通道攻擊的先進技術,可以暴露預取數據。
6、攻擊可以使用這些漏洞來逐步讀取系統內存,而不在意任何保護機制。
通常情況下程序不允許從同一台計算上運行的其它程序中讀取數據,但惡意程序可以利用Meltdown和Spectre來獲取存儲在其它正在運行的程序內存中的機密信息。這可能包括存儲在密碼管理器或瀏覽器中的密碼、個人照片、電子郵件、即時消息甚至關鍵業務文檔。Meltdown和Spectre漏洞存在於在個人電腦、移動設備和雲計算環境中的伺服器上。 特別是在雲計算的環境中,這兩個漏洞的存在可能導致用戶數據被惡意程序所竊取。更進一步,在雲計算上Spectre比Meltdown影響更大。Meltdown可使未經授權的應用程序讀取特權內存,並獲取運行在同一雲伺服器上進程的敏感數據,而Spectre可讓惡意程序誘使虛擬機管理程序將數據傳輸到在其上運行的用戶系統。問題說到這裡是否感到一股寒意,而我們還可以繼續無視這個問題的存在嗎?
為什麼會起了這麼兩個名字Meltdown和Spectre?
Meltdown 的含義是熔斷,意指該漏洞融化了通常由硬體強制執行的安全邊界。Spectre的含義是幽靈、妖怪,名字的來源是基於這個漏洞根本原因—— 預測執行。由於漏洞很不容易修復,它將困擾我們很長一段時間。
· Meltdown打破了用戶應用程序與操作系統之間最基本的隔離。 這種攻擊允許程序訪問其它程序和操作系統的內存,並從而訪問其內容。
· 如果計算機具有易受攻擊的處理器並且未安裝必要的操作系統補丁,那麼就有可能泄漏敏感信息。無論是個人電腦,還是雲基礎設施,都會受此影響。
· 論文:https://arxiv.org/abs/1801.01207
· Spectre打破了不同應用程序之間的隔離。它允許攻擊者欺騙其它程序泄漏他們的秘密,即使該程序遵循了最佳的安全實踐。 事實上,所述最佳實踐的安全檢查實際上增加了攻擊的面積,並可能使應用程序更容易受到Spectre的影響。
· Spectre比Meltdown更難利用,但它也更難以解決。
· 論文:https://arxiv.org/abs/1801.01203
如何檢測Meltdown和Spectre 漏洞的存在?
針對計算機的安全漏洞,我們通常會使用為其提供一個公共的名稱,這個機制就是所謂的CVE (Common Vulnerabilities
& Exposures,公共漏洞和暴露)。簡單的說,CVE是由MITRE維護的信息安全漏洞名稱標準。有了這個標準名稱,我們就可以方便地在各種資料庫中找到對應的信息。到目前為止,這兩個漏洞被發現有三個已知的變體:· CVE-2017-5753
: 邊界檢查旁路,Spectre 漏洞· CVE
-2017-5715 : 分支目標註入,Spectre 漏洞· CVE-2017-5754
: 無管理數據緩存負載,Meltdown 漏洞
由於這次危機的影響實在太大,自2018年1月2日The Register首次面向公眾報道了這個事件之後不久,相應的針對這三個變體的檢測工具陸續公布出來。
spectre-meltdown-checker (https://github.com/speed47/spectre-meltdown-checker)是一個開源的漏洞檢測項目,通過運行它提供的一個腳本文件spectre-meltdown-checker.sh,就可以快速地檢測當前系統針對這三個變體的狀態。
使用步驟:
1、下載腳本curl -L https://meltdown.ovh -o spectre-meltdown-checker.sh或者wget https://meltdown.ovh -O spectre-meltdown-checker.sh2、修改腳本屬性chmod +x spectre-meltdown-checker.sh3、執行腳本sudo ./spectre-meltdown-checker.sh
輸出結果:
注意:如果出現STATUS :VULNERABLE 字樣,則證明系統存在風險。
此外,IAIK/meltdown(https://github.com/IAIK/meltdown)也是一個很有意思的項目。不僅可以驗證系統是否存在漏洞,還可以提供漏洞的很細節的演示。要注意的是,項目的代碼在運行前需要我們手工編譯一下。
修補以及緩解的措施
事實上,從根本上修補這兩個漏洞目前是無法實現的。只有寄希望下一代的Intel 採用全新的設計,甚至可能需要對微處理器體系結構進行重大改變才可能完全杜絕Spectre漏洞。
就目前而言,最有效的對策也只是針對具體的問題採用緩解的方案。而緩解方案的前提條件是:
1、操作系統和受影響的應用程序代碼必須打補丁。
2、為了完全防止Spectre,CPU微碼(microcode)或系統固件(firmware)需要更新。
3、操作系統的保護必須被激活。
4、在虛擬化環境中,為了防止所有已知的攻擊,上述所有條件對於宿主機和被託管的虛擬機都必須是有效。
需要注意的一點是,隨著研究的深入或許還會有新的變體被發現,特別是Spectre漏洞。由於Spectre是一整類的攻擊,所以一個補丁很可能無法完全解決。雖然這個漏洞的一些特殊案例已經在處理,Meltdown and Spectre https://spectreattack.com/。網站上也說:「Spectre不易修復,所以會長期困擾我們。」我們還需要持續地關注這個漏洞。
緩解措施對性能的影響
緩解措施對CPU性能的影響一直是這個事件中另一個值得討論的話題。關於這個問題,最標準的答案應該是性能的下降完全取決於其工作負載。對於這個問題,我們目前取得的共識包括:
· Spectre緩解的性能下降取決於正在使用的CPU系列:其分支預測器越先進,用於防禦攻擊的功能的影響就越大。
· Retpoline技術(Google
提出的針對Spectre的緩解技術,它涉及在編譯器編譯時讓間接分支跳轉到不同的目標,減少易受攻擊的亂序執行發生)在Skylake平台上不會產生緩解 ;但在Skylake上,其它的緩解技術對性能的影響較小。
· 在具有PCID(Intel 64架構下的進程上下文標識符)特性的平台上,Meltdown的影響會大大降低。
總體來看,Linux之父 Linus Torvalds認為性能的下降應該在5%左右 。而對於伺服器工作負載,下表提供了一種參考。
Databricks 對這個問題,尤其是在 AWS 上運行的Apache
Spark性能的影響也做了一些有益的測試。按照他們的測試,AWS上的EC2 實例的性能的影響約在2%-5%【「Whileit』s difficult to be conclusive given the lack of controlled experiments, wehave observed a small performance degradation (2 to 5%) from the hypervisorupdates on AWS.」】。推薦閱讀:
※BearyChat 技術棧是什麼?
※AWS為什麼在中國始終不能落地 ?
※在 AWS 上買了大型雲主機,試用完後忘刪除,今天發現產生 2500 刀費用,AWS 還沒從我信用卡扣款,我臨時把信用卡額度調為 0 了。之後會發生什麼?
※有沒有支持MATLAB的雲計算平台?
※安恆上阿里雲了,這事兒大家怎麼看?
TAG:雲計算 | AmazonWebServicesAWS | 雲安全 |