我正在運行虛擬機器/容器,我在多大程度上容易受到攻擊?

我正在運行虛擬機器/容器,我在多大程度上容易受到攻擊?

難道像VirtualBox這樣的虛擬機器有「幽靈」安全漏洞嗎?我認為虛擬機器可能會亂序執行,但在我看來不可能查看快取來讀取結果。

有沒有解釋如何讀取虛擬CPU的快取?

答案1

是的,Spectre 可以跨越主機/來賓、來賓/主機和來賓/來賓邊界,因為這是一個 CPU 等級的缺陷,這意味著潛在的敏感資訊可能會透過 CPU 核心上運行的任何內容外洩。

網路上的大多數新聞報導都談到雲端供應商受此打擊最嚴重,因為他們擁有大量虛擬化系統集群,可能會被濫用來洩露敏感資訊。

大多數大型供應商現在應該已盡最大努力修復這些缺陷,但這將是一個困擾我們一段時間的問題。

Security.SE 有一個規範問答關於這一點,它提到了虛擬機器:

我正在運行虛擬機器/容器,我在多大程度上容易受到攻擊?

按照史蒂芬·烏爾里希的回答

  • Meltdown 攻擊不會跨虛擬機,只會將核心記憶體洩漏到本地進程。
  • Spectre 可以跨虛擬機器工作。

另外,從史蒂芬又來了、Meltdown 和 Spectre 可以與容器搭配使用,因為容器依賴主機核心。

虛擬機器使用系統中的實際 CPU,並捕獲一些特權指令並能夠重新導向。它使用與主機相同的快取和指令。它本質上只是系統物理 CPU 中的另一層。

虛擬化速度之所以快,是因為它使用盡可能少的抽象的實體 CPU,並依賴 CPU 硬體提供隔離。像 qemu 可以做的事情模擬這會更安全,因為它不是硬體CPU,但它是很多速度較慢且與虛擬化不同。

來自Security.se 規範帖子再次:

Spectre 在不同的層級上工作,不允許從使用者空間存取核心空間資料。在這種攻擊中,攻擊者欺騙推測執行來預測錯誤地執行指令。簡而言之,預測器被強制預測特定的分支結果(如果 -> true),這會導致請求受害進程通常不會請求的越界記憶體訪問,從而導致不正確的推測執行。然後透過旁路,檢索該記憶體的值。這樣,屬於受害進程的記憶體就洩漏給了惡意進程。

因此,因為虛擬機器在實際的 CPU 硬體中運行,所以它所需要做的就是運行特定的循環來「訓練」推測執行引擎。然後,它可以使用精確的計時來觀察快取中是否有特定的存取模式,這些模式表明它正在尋求利用的主機或來賓(或其他虛擬機器)進程。

透過這種方式,這意味著機器在各個方向上都是可利用的。從主機到虛擬機器、從虛擬機器到主機、從虛擬機器到虛擬機器。

是的,這絕對不是一件容易的事情,而且是一件很難完成的事情,因為虛擬機的CPU 核心可能會隨主機的一時興起而改變,並且主機也可以愉快地在不同的核心上調度任務,但在很長一段時間內,足夠的資訊可能會被洩露,從而洩露某些重要係統或帳戶的密鑰。如果有足夠的時間和一些適當的隱密軟體,一切都可能開放。

如果您想要一個「安全」的虛擬機,那麼您必須保證其核心是隔離的。阻止這種攻擊的唯一真正方法是「強制」主機和虛擬機器僅使用某些核心,以便它們永遠不會在相同的硬體上運行,但這將導致成本的有效增加,因為您將無法給定主機上有盡可能多的虛擬機器。運行的虛擬機器數量永遠不會超過可用核心數,這是我希望在「低負載」伺服器上完成的事情,因為許多系統在其生命週期中 90% 的時間都處於閒置狀態。

答案2

gem5模擬器模擬CPU微架構,可用來研究Spectre

如果您有興趣純粹透過模擬來研究/重現漏洞,而不使用主機 CPU,我認為 QEMU 不夠詳細,無法觀察它們,因為它不會模擬 CPU 管道。

寶石5然而,它用於評估研究和開發中的系統性能,並且確實模擬了足夠的 CPU 內部結構,以便您在完全乾淨和受控的環境中觀察 Spectre。

帶有可視化效果的酷 x86_64 演示已發佈於:http://www.lowepower.com/jason/visualizing-spectre-with-gem5.html

gem5的缺點是它比QEMU慢很多,模擬也更詳細。

相關內容