17. Intel(R) TXT 概述

Intel 用於更安全計算的技術 Intel(R) 可信執行技術 (Intel(R) TXT) 定義了平臺級增強功能,為建立可信平臺提供了構建塊。

Intel TXT 以前的代號為 LaGrande Technology (LT)。

Intel TXT 簡介

  • 提供動態可信測量根 (DRTM)

  • 在發生不當關機時的資料保護

  • 啟動環境的測量和驗證

Intel TXT 是 vPro(TM) 品牌的一部分,也可用於一些非 vPro 系統。目前在基於 Q35、X38、Q45 和 Q43 Express 晶片組(例如 Dell Optiplex 755、HP dc7800 等)的桌上型電腦系統和基於 GM45、PM45 和 GS45 Express 晶片組的移動系統上可用。

有關更多資訊,請參閱 http://www.intel.com/technology/security/。該站點還提供了 Intel TXT MLE 開發人員手冊的連結,該手冊已針對新發布的平臺進行了更新。

Intel TXT 在過去幾年中曾在各種活動中展示過,其中一些是

17.1. 可信啟動專案概述

可信啟動 (tboot) 是一個開源的預核心/VMM 模組,它使用 Intel TXT 來執行 OS 核心/VMM 的測量和驗證啟動。

它託管在 SourceForge 上,網址為 http://sourceforge.net/projects/tboot。mercurial 原始碼儲存庫可在 http://www.bughost.org/ repos.hg/tboot.hg 上獲得。

Tboot 目前支援啟動 Xen(開源 VMM/hypervisor,自 v3.2 起支援 TXT)和現在的 Linux 核心。

17.2. Linux 的價值主張或“您應該關心什麼?”

雖然有許多產品和技術試圖測量或保護執行核心的完整性,但它們都假設核心一開始就是“好的”。完整性測量架構 (IMA) 和 Linux 完整性模組介面就是此類解決方案的示例。

要在不使用 Intel TXT 的情況下獲得對初始核心的信任,必須使用靜態信任根。這會將信任基於從系統重置開始的 BIOS,並需要測量從系統重置到核心啟動完成之間執行的所有程式碼,以及該程式碼使用的資料物件。對於 Linux 核心,這意味著所有 BIOS、任何選項 ROM、引導載入程式和引導配置。實際上,這是大量的程式碼/資料,其中大部分程式碼/資料可能會在引導之間發生更改(例如,更改 NIC 可能會更改選項 ROM)。如果沒有參考雜湊,這些測量更改很難評估或確認為良性。此過程也不提供 DMA 保護、記憶體配置/別名檢查和鎖定、崩潰保護或策略支援。

透過使用 Intel TXT 提供的基於硬體的信任根,可以緩解許多這些問題。具體來說:可以從信任鏈中刪除許多啟動前元件,DMA 保護提供給所有啟動元件,執行大量平臺配置檢查並鎖定值,為不當關機事件中的任何資料提供保護,並且支援基於策略的執行/驗證。與否則可能的情況相比,這提供了更穩定的測量以及更高的系統配置和初始狀態保證。由於 tboot 專案是開源的,因此幾乎所有信任鏈部分的原始碼都可用(SMM 和 Intel 提供的韌體除外)。

17.3. 它是如何工作的?

  • Tboot 是一個可執行檔案,由引導載入程式作為“核心”(引導載入程式執行的二進位制檔案)啟動。

  • 它執行確定平臺是否支援 Intel TXT 所需的所有工作,如果支援,則執行啟動動態信任根的 GETSEC[SENTER] 處理器指令。

    • 如果 tboot 確定系統不支援 Intel TXT 或配置不正確(例如,SINIT AC 模組不正確),它將直接啟動核心,而不對任何狀態進行任何更改。

    • Tboot 會將其進度的各種資訊輸出到終端、序列埠和/或記憶體日誌;輸出位置可以使用命令列開關進行配置。

  • GETSEC[SENTER] 指令會將控制權返回給 tboot,然後 tboot 會驗證環境的某些方面(例如,TPM NV 鎖定、e820 表沒有無效條目等)。

  • 它會將 AP 從 GETSEC[SENTER] 指令使其進入的特殊睡眠狀態中喚醒,並將它們置於等待 SIPI 狀態。

    • 由於處理器在 TXT 環境中不會響應 INIT 或 SIPI,因此有必要為 AP 建立一個小型 VT-x 客戶機。當它們在此客戶機中執行時,它們只會等待 INIT-SIPI-SIPI 序列,這將導致 VMEXIT,然後停用 VT 並跳轉到 SIPI 向量。這種方法似乎比必須將特殊程式碼插入核心的 MP 喚醒序列中更好。

  • 然後,Tboot 應用一個(可選的)使用者定義的啟動策略來驗證核心和 initrd。

    • 此策略植根於 TPM NV,並在 tboot 專案中進行了描述。tboot 專案還包含用於建立和配置策略的工具的程式碼。

    • 策略完全在使用者控制之下,如果不存在,則將啟動任何核心。

    • 策略操作是靈活的,可以包括在失敗時停止或簡單地記錄它們並繼續。

  • Tboot 會調整引導載入程式提供的 e820 表,以保留其在記憶體中的位置以及保留某些其他與 TXT 相關的區域。

  • 作為其啟動的一部分,tboot DMA 保護所有 RAM(使用 VT-d PMR)。因此,必須使用“intel_iommu=on”啟動核心,以便刪除此 Blanket 保護並使用 VT-d 的頁面級保護。

  • Tboot 將使用一些關於自身的資料填充共享頁面,並在傳遞控制權時將其傳遞給 Linux 核心。

    • 共享頁面的位置透過 boot_params 結構作為物理地址傳遞。

  • 核心將查詢 tboot 共享頁面地址,如果存在,則對映它。

  • 作為 TXT 提供的檢查/保護之一,它會在 DMA 保護的記憶體區域中複製 VT-d DMAR,並驗證它們的正確性。如果核心是用 tboot 啟動的,VT-d 程式碼將檢測到這一點,並使用此副本而不是 ACPI 表中的副本。

  • 此時,在關閉 (S<n>) 之前,tboot 和 TXT 都不會參與。

  • 為了在 TXT 啟動後將系統置於任何睡眠狀態,必須首先退出 TXT。這是為了防止試圖使系統崩潰以在重新啟動時獲得控制權並竊取留在記憶體中的資料的攻擊。

    • 核心將執行其所有睡眠準備,並使用將平臺置於所需睡眠狀態所需的 ACPI 資料填充共享頁面。

    • 然後,核心透過共享頁面中指定的向量跳轉到 tboot。

    • Tboot 將清理環境並停用 TXT,然後使用核心提供的 ACPI 資訊將平臺實際置於所需的睡眠狀態。

    • 在 S3 的情況下,tboot 也會將自身註冊為恢復向量。這是必要的,因為它必須在恢復時重新建立測量環境。一旦 TXT 環境恢復,它將恢復 TPM PCR,然後將控制權返回給核心的 S3 恢復向量。為了在 S3 中保持系統完整性,核心會為 tboot 提供一組記憶體範圍(e820 表中的 RAM 和 RESERVED_KERN,但不包括 BIOS 可能會在 S3 轉換期間更改的任何記憶體),tboot 將計算 MAC(訊息認證碼)並在 TPM 中密封。在恢復時,一旦重新建立測量環境,tboot 將重新計算 MAC 並針對密封值進行驗證。Tboot 的策略決定了驗證失敗時會發生什麼。請注意,具有新 MAC 程式碼的 tboot 的 c/s 194 支援此功能。

這幾乎是 TXT 支援的全部內容。

17.4. 配置系統

此程式碼適用於 32 位、32 位 PAE 和 64 位 (x86_64) 核心。

在 BIOS 中,使用者必須啟用:TPM、TXT、VT-x、VT-d。並非所有 BIOS 都允許單獨啟用/停用這些功能,並且找到它們的螢幕特定於 BIOS。

grub.conf 需要按如下方式修改

title Linux 2.6.29-tip w/ tboot
  root (hd0,0)
        kernel /tboot.gz logging=serial,vga,memory
        module /vmlinuz-2.6.29-tip intel_iommu=on ro
               root=LABEL=/ rhgb console=ttyS0,115200 3
        module /initrd-2.6.29-tip.img
        module /Q35_SINIT_17.BIN

用於啟用 Intel TXT 支援的核心選項位於“安全”頂級選單下,稱為“啟用 Intel(R) 可信執行技術 (TXT)”。它被認為是實驗性的,並且依賴於通用的 x86 支援(以允許在核心構建選項中實現最大的靈活性),因為 tboot 程式碼將檢測平臺是否實際支援 Intel TXT,從而檢測是否執行任何核心程式碼。

Q35_SINIT_17.BIN 檔案是 Intel TXT 稱為經過身份驗證的程式碼模組的檔案。它特定於系統中的晶片組,也可以在可信啟動站點上找到。它是由 Intel 簽名的(未加密)模組,用作 DRTM 過程的一部分,以驗證和配置系統。它已簽名,因為它在系統中以比任何其他宏程式碼更高的特權級別執行,並且其正確操作對於 DRTM 的建立至關重要。用於確定系統的正確 SINIT ACM 的過程記錄在 tboot SourceForge 站點上的 SINIT ACM 下載下的 SINIT-guide.txt 檔案中。