Arm 機密計算架構

支援 Realm Management Extension (RME) 的 Arm 系統包含硬體,允許 VM 訪客以保護訪客的程式碼和資料免受虛擬機器監控程式侵害的方式執行。 它將舊的“兩個世界”模型(正常世界和安全世界)擴充套件到四個世界:正常世界、安全世界、根世界和 Realm 世界。 然後,Linux 也可以作為 Realm 世界中執行的監控程式的訪客執行。

在 Realm 世界中執行的監控程式稱為 Realm Management Monitor (RMM),它實現了 Realm Management Monitor 規範[1]。 該監控程式的作用有點像虛擬機器監控程式(例如,它在 EL2 中執行並管理 Realm 世界中執行的訪客的階段 2 頁表等),但是,大部分控制由在正常世界中執行的虛擬機器監控程式處理。 正常世界虛擬機器監控程式使用 RMM 規範定義的 Realm Management Interface (RMI) 來請求 RMM 執行操作(例如,對映記憶體或執行 vCPU)。

RMM 為訪客定義了一個環境,其中地址空間 (IPA) 分為兩部分。 下半部分受到保護 - 對映到這半部分的任何記憶體都無法被正常世界看到,並且 RMM 限制了正常世界可以對該記憶體執行的操作(例如,在沒有訪客合作的情況下,正常世界無法替換此區域中的頁面)。 上半部分是共享的,正常世界可以自由更改此區域中的頁面,並且也能夠在此區域中模擬 MMIO 裝置。

在 Realm 中執行的訪客還可以使用 Realm Services Interface (RSI) 與 RMM 通訊,以請求更改其環境或執行有關其環境的證明。 特別是,它可以請求受保護地址空間的區域在“RAM”和“EMPTY”之間轉換(任一方向)。 這允許 Realm 訪客放棄記憶體以返回到正常世界,或從正常世界請求新記憶體。 如果沒有 Realm 訪客的明確請求,RMM 將阻止正常世界進行這些更改。

Linux 作為 Realm 訪客

要將 Linux 作為訪客在 Realm 中執行,必須由 VMM 或在 Linux 之前在 Realm 中執行的引導載入程式提供以下內容

  • 在將控制權交給 Linux 之前,必須將描述給 Linux 的所有受保護 RAM(透過 DT 或 ACPI)標記為 RIPAS RAM。

  • MMIO 裝置必須是不受保護的(例如,由正常世界模擬)或標記為 RIPAS DEV。

  • 由正常世界模擬並在啟動早期使用的 MMIO 裝置(特別是 earlycon)必須在 IPA 的上半部分指定。 對於 earlycon,可以透過在命令列上指定地址來完成,例如,IPA 大小為 33 位,模擬 UART 的基地址為 0x1000000: earlycon=uart,mmio,0x101000000

  • Linux 將使用 bounce 緩衝區與不受保護的裝置進行通訊。 它會將一些受保護的記憶體轉換為 RIPAS EMPTY,並期望能夠訪問相同的 IPA 地址上的不受保護頁面,但設定了最高的有效 IPA 位。 期望 VMM 將從受保護的對映中刪除物理頁面,並將這些頁面作為不受保護的頁面提供。

參考

[1] https://developer.arm.com/documentation/den0137/