


盡管Meltdown和Spectre兩大CPU漏洞發(fā)生在2018年年初,但半年的時間并沒有讓其帶來的影響完全消除。自從1月份以來,新的CPU漏洞不斷被曝出,不論是英特爾、AMD、ARM、Power等無一幸免,"下一代Spectre"、"Meltdown-Spectre變種"等字眼不斷出現在各大科技媒體頭條。雖然各家廠商紛紛推出補丁來防止漏洞對于安全性的影響,然而用戶在使用補丁時,卻發(fā)現漏洞補丁帶來了應用性能的下降,有的應用性能甚至下降非常大。那么是否能有一種方法能打破性能和安全性之間的鴻溝,從而不必在性能和安全性之間二選一?
由于Meltdown和Spectre問題來源于CPU,最根本的解決辦法就是改變CPU從內存和磁盤讀取數據的方式,實現既不損失性能又有安全保障。但是這是一個很艱巨的任務,很難在短期內實現。
當前的最佳解決方案就是盡量做到CPU Offload,減少內核層和用戶層之間的溝通, 比如使用RDMA技術來Bypass CPU,使用NVMe over Fabric Offload來將CPU操作的內核拷貝跳過,使用GPU Direct RDMA技術跳過GPU內存和CPU內存的拷貝等。另外使用網卡硬件來做應用和應用之間的安全隔離來避免使用CPU來做軟件隔離,也是預防漏洞的有效方法之一。
以CPU Offload如 RDMA 和 DPDK的方案帶來的明顯價值是讓用戶不用在安全性和在應用性能之間做權衡。
查看更多>>亂序執(zhí)行(Out-of-order Execution)、推測執(zhí)行(Speculative Execution)和分支預測(Branch Prediction)三大CPU采用的技術是造成漏洞產生的根本原因。簡單理解,Meltdown破壞了位于用戶應用和操作系統之間的基本隔離,導致程序可能訪問其他程序和操作系統內存,從而產生敏感信息會被竊取的可能性。Spectre則是破壞了不同應用程序之間的隔離, 處理器會推測在未來有用的數據并執(zhí)行計算,當這些數據被需要時可立即使用。但是處理器沒有很好地將低權限的應用程序與訪問內核內存分開,這意味著攻擊者可以使用惡意應用程序來獲取應該被隔離的私有數據。
從對于業(yè)界應用的影響來看,英特爾確認性能損失取決于工作負載。比如常見的OLTP應用,為了提升效率,往往需要將資料緩存到內存中,所有的OLTP操作都是由內核來完成,如果不使用Meltdown和Spectre的補丁,應用很容易被黑客攻擊;如果使用補丁,根據第三方測試數據,應用性能可能會有8% 到19%的損失。對于一些內核層和用戶層很少通訊的應用來講,性能影響就會小些甚至不受影響。
由于預測執(zhí)行技術已經被廣泛用于各種CPU中,要想解決這個問題的最根本方法是有新的CPU體系架構。目前的補丁技術只能是使用軟件來降低黑客利用預測執(zhí)行來入侵內核內存,主要的補丁是將每個進程的內核地址和用戶地址共享映射表改為內核地址和用戶地址各有自己獨立的映射表PGD(Page Global Directory),這樣一來在用戶空間根本沒有內核空間的映射表,即使漏洞存在,黑客也不會從內核獲得數據。但是這樣的代價就是每次系統調用或者中斷發(fā)生時都需要切換映射表,這無疑會影響應用的性能。使用犧牲性能的方式來解決問題,無疑不是一個好的方案。
由于Meltdown和Spectre問題來源于CPU,最根本的解決辦法就是改變CPU從內存和磁盤讀取數據的方式,實現既不損失性能又有安全保障。但是這是一個很艱巨的任務,很難在短期內實現。當前的最佳解決方案就是盡量做到CPU Offload,減少內核層和用戶層之間的溝通, 比如使用RDMA技術來Bypass CPU,使用NVMe over Fabric Offload來將CPU操作的內核拷貝跳過,使用GPU Direct RDMA技術跳過GPU內存和CPU內存的拷貝等。另外使用網卡硬件來做應用和應用之間的安全隔離來避免使用CPU來做軟件隔離,也是預防漏洞的有效方法之一。
解決Meltdown和Spectre問題的關鍵就是減少CPU和應用的溝通,RDMA和智能網卡做的就是讓CPU盡量只做計算,所有通訊和安全的操作由網絡來做,從而切斷黑客訪問應用的途徑。此外,還包括DPDK技術,它們實際是把原來由內核操作的很多工作放到用戶態(tài)去做,這樣很多操作就跟內核態(tài)沒有關系了。通過在用戶態(tài)之間建立應用和應用之間隔離,避免和內核態(tài)之間的交互,來降低這些漏洞帶來的風險。現在RDMA技術已經被廣泛應用到了各種各樣的應用當中,從很多采用RDMA的應用來看,可以看到它被Meltdown和Spectre這兩個漏洞影響的機會非常小,而且對性能的影響非常低,甚至做到沒有影響。
所以,這在另一個層面又回到了卸載技術與加載技術的爭論。卸載技術尋求克服CPU的性能瓶頸,主要方式是對在集群內移動的數據執(zhí)行各種網絡功能以及復雜的通信操作,如協同操作和數據聚集操作。以Mellanox為代表的網絡廠商推出了卸載技術(如 RDMA 和 DPDK),將處理TCP/IP和存儲堆棧的重任轉移至網絡適配器,緩解主要系統處理器的壓力。這樣可以提升性能,并緩解了修補Spectre 和Meltdown 后通常造成的性能損失。