晶片型微架構和推測性執行旁路攻擊弱點的風險降低指引

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

警告

本文參考 CentOS,這是即將結束生命週期 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用方式和規劃。

本文針對最新一類的晶片型微架構和推測性執行旁路攻擊弱點提供指引,這些弱點會影響許多新式處理器和作業系統。 其中包括 Intel、AMD 和 ARM。 您可以在下列資訊安全諮詢和 CVE 中找到這些晶片型弱點的特定詳細資料:

這些 CPU 弱點的揭露讓許多想更深入了解的客戶紛紛提出問題。

Microsoft 已在我們所有的雲端服務上部署防護功能。 執行 Azure 的基礎結構,以及將客戶的工作負載互相隔離這方面已受到保護。 這表示,使用相同基礎結構的潛在攻擊者不能利用這些漏洞來攻擊您的應用程式。

Azure 會盡可能使用記憶體保留維護,將客戶的影響降到最低,以及避免重新開機。 Azure 會在對主機進行全系統更新時,繼續使用這些方法,並且保護我們的客戶。

如何將安全性整合至 Azure 各個層面的詳細資訊位於 Azure 安全性文件網站。

注意

自從這份文件首次發行以來,已揭露此弱點類別的多個變體。 Microsoft 持續致力於保護客戶和提供指引。 我們會持續發行進一步的修正,而此頁面也會隨之更新。

在 VM 內執行未受信任程式碼的客戶需要閱讀下方有關所有弱點的更多指引,以採取行動作來防範這些弱點。

其他客戶應該從深度防禦觀點來評估這些弱點,並考慮所選設定的安全性和效能影響。

將作業系統維持在最新狀態

雖然無需更新作業系統,就能讓 Azure 上執行的應用程式與其他 Azure 客戶隔離,但最佳做法是讓軟體維持在最新狀態。 Windows 的最新安全性更新包含這些弱點的風險降低措施。 同樣地,Linux 散發套件已發行多個更新來解決這些弱點。 以下是更新作業系統的建議動作:

供應項目 建議的動作
Azure 雲端服務 啟用自動更新,或確定您執行最新的客體作業系統。
Azure Linux 虛擬機器 安裝來自作業系統提供者的更新。 如需詳細資訊,請參閱本文後面的 Linux
Azure Windows 虛擬機器 安裝最新的安全性彙總套件。
其他 Azure PaaS 服務 使用這些服務的客戶無需採取任何行動。 Azure 會自動將您的作業系統版本保持在最新狀態。

如果您執行的是不受信任的程式碼,則會提供其他指引

如果客戶允許不受信任的使用者執行任意程式碼,則可以建議他們在 Azure 虛擬機器或雲端服務內實作一些額外的安全性功能。 這些功能可抵禦多個推測性執行弱點描述的程序內洩漏向量。

建議使用更多安全性功能的案例:

  • 您允許不受信任的程式碼在 VM 內執行。
    • 例如,您允許其中一個客戶上傳二進位檔或指令碼,然後在您的應用程式內執行。
  • 您允許不受信任的使用者以低權限帳戶登入 VM。
    • 例如,您允許低權限的使用者透過遠端桌面或 SSH 登入您其中一個 VM。
  • 允許不受信任的使用者存取透過巢狀虛擬化實作的虛擬機器。
    • 例如,您控制 HYPER-V 主機,但將 VM 配置給不受信任的使用者。

如果客戶實作的案例並未包含不受信任的程式碼,則無須啟用這些額外的安全性功能。

啟用額外的安全性

如果您在 VM 或雲端服務內執行未受信任的程式碼,則可以啟用額外的安全性功能。 同時,確保作業系統為最新狀態,以便在 VM 或雲端服務內啟用安全性功能

Windows

目標作業系統必須是最新版本,才能啟用這些額外的安全性功能。 雖然許多風險降低搓施會預設為啟用,但此處描述的其他功能必須手動啟用,而這可能會對效能造成影響。

選項 1

步驟 1:遵循 KB4072698 中的指示,使用 SpeculationControl PowerShell 模組確認保護功能已啟用。

注意

如果您先前已下載此模組,則必須安裝最新版本。

若要驗證這些弱點是否已啟用保護,請參閱了解 Get-SpeculationControlSettings PowerShell 指令碼輸出

如果未啟用保護,請連絡 Azure 支援,以在您的 Azure VM 上啟用其他控制。

步驟 2:若要啟用核心虛擬位址鏡像處理 (KVAS) 和分支目標注入 (BTI) OS 支援,請遵循 KB4072698 中的指示,以使用 Session Manager 登錄機碼來啟用保護。 需要重新開機。

步驟 3:針對使用巢狀虛擬化的部署 (僅限 D3 和 E3):這些指示在作為 Hyper-V 主機的 VM 內適用。

  1. 遵循 KB4072698 中的指示,使用 MinVmVersionForCpuBasedMitigations 登錄機碼來啟用保護。
  2. 遵循這裡的指示,將 Hypervisor 排程器類型設定為 Core

選項 2

停用 VM 上的超執行緒 - 在超執行緒 VM 上執行未受信任程式碼的客戶可以選擇停用超執行緒,或移至非超執行緒 VM 大小。 請參考本文件,以取得超執行緒 VM 大小的清單 (其中,vCPU 與核心的比率為 2:1)。 若要檢查 VM 是否已啟用超執行緒,請從 VM 內使用 Windows 命令列來參考下列指令碼。

輸入 wmic 以進入互動式介面。 然後輸入下列命令,以檢視 VM 上的實體和邏輯處理器數量。

CPU Get NumberOfCores,NumberOfLogicalProcessors /Format:List

如果邏輯處理器的數目超過實體處理器 (核心),表示已啟用超執行緒。 如果您執行超執行緒 VM,請連絡 Azure 支援以停用超執行緒。 停用超執行緒之後,支援人員會要求 VM 完整重新開機。 請參閱核心計數,以了解 VM 核心計數為何減少。

選項 3

針對 CVE-2022-23816CVE-2022-21123 (AMD CPU 分支類型混淆),請遵循上述「選項 1」和「選項 2」

Linux

若要在內部啟用一組額外安全性功能,目標作業系統必須完全是最新版本。 有些防護功能會預設為啟用。 下節會描述預設為關閉的功能,以及 (或) 相依於硬體支援 (微碼) 的功能。 啟用這些功能可能會對效能造成影響。 請參閱作業系統提供者的文件,以取得進一步的指示

步驟 1:停用 VM 上的超執行緒 - 在超執行緒 VM 上執行未受信任程式碼的客戶必須停用超執行緒,或移至非超執行緒 VM。 請參考本文件,以取得超執行緒 VM 大小的清單 (其中,vCPU 與核心的比率為 2:1)。 若要檢查您是否執行超執行緒 VM,請在 Linux VM 中執行 lscpu 命令。

若為 Thread(s) per core = 2,表示超執行緒已啟用。

若為 Thread(s) per core = 1,表示超執行緒已停用。

已啟用超執行緒的 VM 輸出範例:

CPU Architecture:      x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1

如果您執行超執行緒 VM,請連絡 Azure 支援以停用超執行緒。 停用超執行緒之後,支援人員會要求 VM 完整重新開機。 請參閱核心計數,以了解 VM 核心計數為何減少。

步驟 2:若要降低下列 CPU 型記憶體弱點的風險,請參閱作業系統提供者的文件:

核心計數

建立超執行緒 VM 時,Azure 會為每個核心配置 2 個執行緒,這些稱為 vCPU。 停用超執行緒時,Azure 會移除執行緒,並呈現單一執行緒核心 (實體核心)。 vCPU 與 CPU 的比率為 2:1,因此停用超執行緒之後,VM 中的 CPU 計數會減半。 例如,D8_v3 VM 是在 8 個 vCPU 上執行的超執行緒 VM (每一核心 2 個執行緒 x 4 個核心)。 停用超執行緒時,CPU 會降到 4 個實體核心,每一核心 1 個執行緒。

下一步

如需將安全性整合至 Azure 各個層面的詳細資訊,請參閱 Azure 安全性文件