共用方式為


硬體安全性可測試性規格

簡介

HSTI 可防止 Windows 裝置上的安全性功能設定錯誤。 對於客戶,HSTI 會盡最大努力保證他們購買的計算機預設是安全的。 針對 IHV 和 IBV,HSTI 可確保您的安全性承諾維持不變。 針對 OEM 和 ODM,可以輕鬆地確保您寄送的系統已安全地設定成現成,而且會保持安全,而不需要開發專屬解決方案。

HSTI 測試的結果將由 Windows 相容性測試取用,並可用來確認裝置已正確設定為啟用支援的安全性功能。 這些測試可用來識別欄位中不安全的工程裝置,例如,可能包含不安全的測試密鑰的工程裝置。 Windows OS 可能會使用這些測試的結果,在不安全的裝置上顯示浮水印(或類似的指標)。

注意

  需要平臺才能實作硬體介面,並共用本主題中所指定的檔和工具。

背景

讀者應瞭解 UEFI 的基本概念,並瞭解安全開機技術,包括 UEFI 規格的第 27 節「安全性」和 NIST SP 800-147。

此需求有三個層面:

  • 用於查詢硬體和韌體安全性狀態的平台獨立介面
  • 上述介面實作的設計和選擇性程式代碼檢閱
  • 共用檔案和工具

高階實作

The Bitfield

IHV 會定義位欄位元,代表平臺可測試的安全性功能。 此位欄位完全涵蓋任何 IHV、IBV 或 OEM HSTI 測試所傳回之 HSTI 物件可用的所有可定義位。 IHV 實作器必須設計位字段的定義,並提供適當的檔,讓 IBV 正確地傳回其 HSTI 測試的結果。

SecurityFeaturesRequired

只有在 IHV HSTI 物件中的欄位,而且是 IHV 定義必要安全性功能的位欄位時,SecurityFeaturesRequired 字段才會用於處理。

SecurityFeaturesImplemented

這是傳回 HSTI 對象的測試所實作的安全性功能的位欄位。

SecurityFeaturesVerified

這是傳回 HSTI 對象的測試所驗證的安全性功能位。

實作指導方針

IHV 會針對符合 Windows 相容性需求的平台開發參考安全性設計。 此外,IHV 和 IBV 也會實作程式設計測試,以驗證參考安全性實作的適當啟用,並透過硬體安全性測試介面報告結果。 這些測試會以已編譯的模組(非來源)的形式傳遞給 OEM 和 ODM,而且應該在不修改的情況下運作。 如果 OEM/ODM 偏離參考安全性設計,這些測試模組可能會回報失敗,OEM/ODM 必須連絡 Microsoft 以檢閱修改,並實作報告這些例外狀況的其他 HSTI 實例。 OEM 應該能夠運用這些安全性模組,而不需要修改,請遵循參考設計和檔。 想要新增其他安全性模組或修改任何安全性模組行為的 OEM 必須接受 Microsoft 的設計檢閱。

作為測試模組實作器實作的一部分,將包含結構。 此結構的原型包含在「原型」區段中。 IHV 會在安全性參考檢查清單中定義每個位的意義。 IHV 會進一步定義位欄位欄位中每個位的意義。 最後,IHV 會在 OEM 結構中包含「必要」位字段,而且針對所有需求,他們能夠以程式設計方式測試,他們會在「已實作」位字段中設定一點。

如果 IBV 和 OEM 在 [已實作] 欄位中設定位,如果他們已呈現一個設計,以程式檢查這些位對 Microsoft 所代表的安全性功能是否存在。 如果這些測試通過,他們可能會在各自的結構中設定 [已驗證] 字段。

IHV、IBV 和 OEM 的測試模組應在存在時執行。 SecurityFeaturesEnabled 欄位中某個位設定的 true 值表示通過的測試結果。 如果未執行測試或未通過,則代表位的值應設定為 0。

結果處理邏輯範例

此範例代表結果處理將使用的邏輯。 實作的位字段必須遵循 1 表示實作的格式,而 0 表示未實作。 如果實作某些專案,則為必要專案。 結果位字段必須遵循 0 表示失敗或測試不存在的格式,而 1 表示僅以肯定方式通過。

計算所有結果之後,IHV Results 位字段將會是 NXORd,其 Required bitfield。 所有非 IHV 結果位字段都會以其各自的實作位字段進行 ANDed。 產生的位欄位全都是 ORd,以取得整體結果。 此作業的傳遞結果將會是包含全部1的位欄位元。

交付項目和擁有權

獨立硬體供應商 (IHV) 和獨立 BIOS 廠商 (IBV)

支援 連線 待命系統的晶片供應商和 IBV 必須實作平台獨立介面,以查詢其參考平臺的個別硬體和韌體安全性狀態。 這些實作必須以編譯的模組的形式傳遞。 建議您簽署這些模組,並在執行簽章檢查時執行。 目的是要查詢硬體和韌體設計及狀態,以報告平臺的適當安全性布建。

OEM 和 ODM

OEM 和 ODM 不得修改或竄改廠商提供給它們的 HSTI 測試。 OEM 和 ODM 必須保證其系統會通過 HSTI 測試作為 Windows 認證需求的元件:

Windows 硬件認證需求 - Windows 8.1 WHCR

  • System.Fundamentals.Firmware.UEFISecureBoot
  • System.Fundamentals.Firmware.CS.UEFISecureBoot。連線 edStandby

OEM 需要方法以提供相同或更好的安全性,OEM 可能會提供額外的安全性檢查,而不是修改。 OEM 安全性檢查至少必須完整涵蓋一個 IHV 或 IBV 安全性測試。 使用之前,OEM 必須提交至 Microsoft 的設計檢閱,且受限於與其他 HSTI 測試提供者相同的檔和工具披露需求。 在 Microsoft 核准時,OEM 可能包含延伸 IHV 和 IBV 測試的安全性測試。

請注意,在 HSTI 設計中不需要 OEM 證明。 HSTI 不是 OEM 的需求清單,它是保證對韌體、硬體和設定參數進行有效程式設計安全性測試的介面。

安全性狀態介面

介面是以 UEFI 2.4 版中定義的 EFI 配接器資訊通訊協議為基礎所建置。

平臺安全性狀態介面

摘要

平臺安全性資訊 - 傳回平臺與 Windows 硬體認證需求 System.Fundamentals.Firmware.CS.UEFISecureBoot、System.Fundamentals.Firmware.CS.UEFISecureBoot.連線edStandby 和 System.Fundamentals.Firmware.CS.UEFISecureBoot.Provisioning。

原型

InformationType

#define ADAPTER_INFO_PLATFORM_SECURITY_GUID \
     {0x6be272c7, 0x1320, 0x4ccd, { 0x90, 0x17, 0xd4, 0x61, 0x2c, 0x01, 0x2b, 0x25 }}

#define PLATFORM_SECURITY_VERSION_VNEXTCS   0x00000003

#define PLATFORM_SECURITY_ROLE_PLATFORM_REFERENCE   0x00000001  // IHV
#define PLATFORM_SECURITY_ROLE_PLATFORM_IBV 0x00000002
#define PLATFORM_SECURITY_ROLE_IMPLEMENTOR_OEM 0x00000003 
#define PLATFORM_SECURITY_ROLE_IMPLEMENTOR_ODM  0x00000004  
                        

對應的 InformationBlock:

typedef struct { 
    UINT32  Version,
    UINT32  Role,
    CHAR16  ImplementationID[256],
    UINT32  SecurityFeaturesSize,
    UINT8   SecurityFeaturesRequired[],     //Ignored for non-IHV
    UINT8   SecurityFeaturesImplemented[],
    UINT8   SecurityFeaturesVerified[],
    // CHAR16   ErrorString[];
} ADAPTER_INFO_PLATFORM_SECURITY;
                        
詞彙 描述

版本

傳回PLATFORM_SECURITY_VERSION_VNEXTCS

角色

這個介面發行者的角色。 IHD 和IBV等參考平台設計工具預計將分別傳回PLATFORM_SECURITY_ROLE_PLATFORM_REFERENCE和PLATFORM_SECURITY_ROLE_PLATFORM_IBV。 如果來自設計工具的測試模組無法完整驗證所有安全性功能,則平臺實作者、OEM 和 ODM 必須以實作者角色發佈此介面。

ImplementationID

人類可讀取的廠商、模型和此實作的版本。 例如“SiliconVendorX Chip1234 v1” 和 “BIOSvendorY BIOSz v2”。

SecurityFeaturesSize

SecurityFeaturesRequired 和 SecurityFeaturesEnabled 陣列的大小,以位元組為單位。 數位大小必須相同。

SecurityFeaturesRequired

對應至所有安全性功能的 IHV 定義位字段,必須實作,以符合 PLATFORM_SECURITY_VERSION 版本所定義的安全性需求。 例如,可能需要實作 7 個功能才能滿足 Version,可能會報告 0b011111111 值。

SecurityFeaturesImplemented

發行者定義的位欄位對應至本課程模組中實作程式設計測試的所有安全性功能。

SecurityFeaturesVerified

發行者定義的位欄位,對應到此實作已驗證實作的所有安全性功能。

ErrorString

以 Null 終止的字串,每行一次失敗一次(CR/LF 終止),其唯一標識符為 OEM/ODM 可用來找出檔,其中將說明補救失敗的步驟 - 建議使用檔的 URL。 例如,

0x4827 JTAG not disabled http://somewhere.net/docs/remediate4827.html \r\n0x2744 Platform Secure Boot key not provisioned http://somewhere.net/docs/remediate2744.html

記憶體管理考慮

為了 HSTI 模組之間的相容性目的,實作者應使用 AllocatePool() 而非 AllocatePages()。

HSTI 實作的設計檢閱

Microsoft 應對所有測試介面實作進行初步設計審查。 HSTI 設計考慮一節會提供設計檢閱中可能提出的問題範例。

選擇性程式代碼檢閱

HSTI 實作者可能會要求 Microsoft 執行的程式代碼檢閱。 程式代碼檢閱可以根據資源的優先順序和可用性來提供,而且不保證。 程式代碼檢閱將受限於保密協定。

檔與工具共用

晶片和韌體供應商應提供給 Microsoft 所有必要的安全性相關參考檔和工具提供給 OEM。 此檔和工具應該不晚於提供給 Windows OEM。 這應該包括但不限於與模糊、安裝和更新韌體、韌體和開機復原、硬體診斷、韌體診斷和開機診斷相關的所有檔和工具。 提供的檔和工具應該足以在實驗室環境中執行 HSTI 檢查。

HSTI 設計考慮

以下是 HSTI 實作者對其 HSTI 實作必須考慮的設計考慮說明清單。 這不是嚴格的需求清單,也不是詳盡的考慮清單。 身為 HSTI 實作者,您將撰寫測試來驗證您盡可能全面涵蓋的安全性功能。 使用 Microsoft 進行設計檢閱之前,建議您先檢閱這份清單以取得靈感,並考慮如果實作這些功能,Microsoft 可能會想要盡可能廣泛地測試這些功能。

矽供應商/廠商 (IHV) HSTI 檢查

  1. 您是否只使用 RSA 2048 和 SHA256 (或類似的加密強度)
  2. 韌體程式代碼必須存在於受保護的記憶體中
    1. 你保護尖刺嗎?
    2. 您是否針對 eMMC 磁碟分區實作唯讀直到重設
    3. 您是否支援已簽署的韌體檢查 - OEM 安裝的韌體是只讀的,或受安全韌體更新程序保護的韌體。
  3. 保護韌體更新程式
    1. 使用測試金鑰預設是否開啟安全韌體更新程式? (建議)
    2. 您是否檢查測試金鑰是否用於生產環境?
    3. 您是否允許復原至不安全的韌體版本? 如果是,則什麼是保護機制? 復原發生時是否清除 TPM?
  4. 您是否有後門可覆寫 SecureBoot
    1. 您的系統是否支援內嵌提示略過 Secureboot? 如果是,則會在 SecureBoot 啟用時將其停用?
    2. 您有製造後門嗎? 當您在生產系統中啟用 SecureBoot 且一律停用時,檢查是否要停用它們?
  5. [CS]開機完整性支援
    1. 您是否支持開機完整性,且預設為啟用?
    2. 平臺會使用 die ROM 或 One-Time 可程式化 (OTP) 記憶體來儲存初始開機程式代碼,並提供電源重設邏輯,以從死部 ROM 執行,或保護死機 SRAM 的安全。
  6. [CS]從內部和外部 DMA 保護
    1. 您只在開機期間所需的元件上保留內部 DMA 嗎? 並已針對所有其他元件停用。
    2. 您只在開機期間所需的元件上保留外部 DMA 嗎? 並已針對所有其他元件停用。
    3. 如果韌體有啟用和停用 DMA 保護的選項,則傳送設定預設必須啟用 DMA 保護
    4. 哪些總線/裝置(融合器、安全性引擎、TZ、視訊、快取、IMEM、核心記憶體)能夠存取不同的 NV 和揮發性儲存區域,以及如何保護它們?
    5. 您是否支援 MOR 位實作
  7. 保護外部硬體調試程式
    1. 您是否支援 JTAG? 當 SecureBoot 為 ON 時,是否為 JTAG OFF
    2. 您是否提供製造後門來停用 JTAG 保護? 您是否檢查此後門是否不存在於生產系統中?
    3. 啟用 JTAG 時是否清除 TPM?
    4. 您是否支援任何其他硬體調試程式? 並針對它進行相同的檢查。
  8. 您是否已正確布建每個裝置的唯一秘密?
  9. 您擁有的安全性融合為何(廠商特定)
    1. SOC SecureBoot fuse
    2. 每個裝置唯一的秘密,例如簽署或加密融合
    3. JTAG fuses
    4. SOC 應用程式處理器 SecureBoot fuse
    5. SOC MBA 處理器 SecureBoot fuse
    6. SOC 新式處理器 SecureBoot fuse
    7. 您平臺的任何其他 SOC 特定融合

IBV HSTI 檢查

  1. 您是否只使用 RSA 2048 和 SHA256 (或高於或低於此版本)
  2. 相容性支援模組 (CSM)
    1. 您是否提供啟用 CSM 的選項
    2. 啟用 SecureBoot 時,是否檢查封鎖載入 CSM
    3. [CS]您是否檢查 CSM 是否不存在於 CS 系統上永久存在
  3. 韌體程式代碼必須存在於受保護的記憶體中
    1. 你保護尖刺嗎?
    2. 您是否針對 eMMC 磁碟分區實作唯讀直到重設
    3. 您是否支援已簽署的韌體檢查 - OEM 安裝的韌體是只讀的,或受安全韌體更新程序保護的韌體。
  4. 保護韌體更新程式
    1. 使用測試金鑰預設是否開啟安全韌體更新程式?
    2. 您是否檢查測試金鑰是否用於生產環境?
    3. 您是否允許復原至不安全的韌體版本? 如果是,則什麼是保護機制? 復原發生時是否清除 TPM?
    4. 是否使用測試金鑰?
  5. 您是否有後門可覆寫 SecureBoot
    1. 您的系統是否支援內嵌提示略過 Secureboot? 如果是,則會在 SecureBoot 啟用時將其停用?
    2. 您有製造後門嗎? 當您在生產系統中啟用 SecureBoot 且一律停用時,檢查是否要停用它們?
  6. [CS]從內部和外部 DMA 保護
    1. 您只在開機期間所需的元件上保留內部 DMA 嗎? 並已針對所有其他元件停用。
    2. 您只在開機期間所需的元件上保留外部 DMA 嗎? 並已針對所有其他元件停用。
    3. 如果韌體有啟用和停用 DMA 保護的選項,則傳送設定預設必須啟用 DMA 保護
    4. 哪些總線/裝置(融合器、安全性引擎、TZ、視訊、快取、IMEM、核心記憶體)能夠存取不同的 NV 和揮發性儲存區域,以及如何保護它們?
    5. 您是否支援 MOR 位實作