1. 程式人生 > >Trusted Execution Technology (TXT) --- 度量(Measurement)篇

Trusted Execution Technology (TXT) --- 度量(Measurement)篇

control pcr oca 特點 指令 ade 技術 private 技術分享

版權聲明:本文為博主原創文章,未經博主允許不得轉載。http://www.cnblogs.com/tsec/p/8413537.html

0. 導讀

TXT基本原理篇介紹了TXT安全度量的基本概念,包括靜態度量和動態度量。只有確保度量是真實的、準確的和受保護的,度量代碼和配置才有意義。那麽構成“安全”度量需要定義信任鏈(Chain of Trust),並確保:1. 度量是基於硬件的;2. 度量是免受篡改受保護的。對TXT而言,信任根(Root of Trust)就是CPU,信任根是啟動信任鏈的組件,信任鏈從一個可信組件(硬件信任根)開始去度量下一個組件,直到所有需要度量的組件度量完畢。度量值被擴展(extend)到相應的TPM PCRs中,以便用於後續創建啟動控制策略(LCP)以及安全啟動的可信證明。由於Intel TXT的基本原則之一是所有要執行的code,只有度量後才可以執行。因此,度量值有可能已經包含了惡意代碼,會使得PCR值與預期的“已知正確”的值不同,從而表明當前環境不可信,這就是度量的意義所在。

技術分享圖片

參考上面這張圖,我們來理一下TXT平臺啟動時會發生什麽。

1. TXT靜態度量序列

CPU Microcode

  1. 加載BIOS ACM到CPU internal安全內存中,與外界隔離;
  2. 驗證ACM的簽名是否有效;
  3. 若簽名可信,則度量BIOS ACM並Extend到PCR0中,從而啟用可信度量核根(Core Root of Trust Measurement, CRTM);
  4. 僅當上述操作執行通過,CPU Microcode才會
    • 通過啟用TPM Locality 3訪問和開放TXT private registers的訪問來打開ACM模式;
    • 執行BIOS ACM code;
    • 使用CPU internal 安全內存,然後驗證並確保ACM在執行前免受惡意代碼攻擊。

BIOS ACM

  1. 度量重要BIOS組件,並將度量值擴展到PCR0;
  2. ACM檢查內存中是否存在隱私信息,即檢查Secret Flag register位是否被置起,若被置起,則認定內存中還駐留Secret,會存在泄露風險,此時需要reset系統或清除內存和secret flag,然後驗證BIOS啟動代碼的完整性;
  3. 退出ACM模式,通過禁用Locality 3,來禁止訪問TXT private registers;
  4. 跳到BIOS啟動代碼。

BIOS

  1. 度量其余BIOS code,並將度量值Extend到PCR0;
  2. 配置平臺;
  3. 度量BIOS配置,並將度量值Extend到PCR1;
  4. 通過GETSEC指令再次執行BIOS ACM,以便進行安全檢查;
    • CPU Microcode加載ACM到internal 安全內存中,並執行相同的驗證,然後啟用ACM模式並執行請求的ACM函數,即內存安全檢查;
    • ACM完成檢查,退出ACM模式,返回BIOS。
  5. 結束平臺配置;
  6. 使用GETSEC指令再次調用BIOS ACM,鎖定BIOS配置;
    • CPU Microcode加載ACM到internal 安全內存中,並執行相同的驗證,然後啟用ACM模式並執行請求的ACM函數,即鎖定配置;
    • ACM完成檢查,退出ACM模式,返回BIOS。

鎖定配置後,BIOS可能執行其它Firmware,

  1. 度量任何Option ROM code,擴展度量值到PCR2;
  2. 執行Option ROM code for each device。

Option ROM on device

  1. 度量任何隱藏的Option ROM code,並擴展到PCR2;
  2. 配置並啟動device;
  3. 度量device 配置信息,擴展度量值到PCR3;
  4. 返回BIOS。

BIOS

  1. 選擇一個引導設備;
  2. 度量IPL(Initial Program Loader),尤其是主引導記錄(MBR),擴展度量值到PCR4;
  3. 執行IPL code。

IPL

  1. 度量IPL配置,擴展到PCR5;
  2. 加載並執行OS Loader。

此時,BIOS已使平臺準備好了IPL,OS Loader執行後,接著執行正常的引導過程。通常情況下,開啟Intel TXT的OS,加載的第一個模塊是TBoot,而非內核模塊。TBoot模塊的目的是以安全模式來初始化平臺並發起動態度量過程,即安全啟動。

2. 動態度量過程(安全啟動)

這是TXT技術的重要組成部分,它控制宿主OS如何進入安全執行模式並稱為可信的OS。安全模式特點如下:

  1. 宿主OS code已被度量過,且度量值是已知的好結果(依據宿主平臺建立的LCP),即宿主OS是可信的;
  2. 可信OS從一個確定的狀態開始執行,從實模式啟動,然後轉換到保護模式下;
  3. OS有Locality 2的訪問權限,此時動態PCR已經被重置位默認值,但DRTM PCR已擴展,
    • 使用SINIT ACM度量值擴展PCR17,該ACM即是動態可信度量根(Dynamic Root of Trust Measurement, DRTM);
    • 滿足LCP策略,並允許安全啟動;
    • 使用可信OS的度量值來extend PCR18。

為了進入安全模式以及啟動DRTM,OS所做的與BIOS所做的靜態度量原理是一致的。在宿主OS進入安全模式前,必須將平臺置於已知狀態,然後宿主OS調用GETSEC的SENTER指令,即執行SINIT ACM:

  1. 加載SINIT ACM到CPU安全內存;
  2. 驗證ACM與芯片組相匹配,即ACM的公鑰Hash值必須與硬編碼在芯片組裏的Hash值相匹配;
  3. 驗證ACM簽名,並執行度量;
  4. 重置PCR17~PCR20,開啟DRTM,擴展SINIT ACM度量值到PCR17;
  5. 若2和3所示檢查通過,CPU Microcode才會執行ACM,
    • 啟用ACM模式,如此可以訪問TPM Locality 3,並開啟TXT private register訪問權限;
    • 執行SINIT ACM code。

SINIT ACM

  1. 查看是否被撤回,判斷當前執行的SINIT ACM是為最新版本,且設置了撤回級別,即請求撤回存儲在TPM中的舊版本SINIT ACM;
  2. 驗證平臺已通過BIOS正確配置,表明OS有合適的條件來進行安全啟動;
  3. 度量可信OS code;
  4. 執行Launch Control Policy(LCP)引擎,驗證屬主LCP,以決定是否由可信OS來做一個安全啟動;
  5. 如果上述檢查失敗,則認為存在惡意攻擊,這將導致TXT平臺復位,並確保內存中不會駐留惡意代碼;
  6. 若上述檢查都通過,則ACM執行如下操作,
    • 用LCP擴展PCR17來允許安全啟動;
    • 用可信OS度量值擴展PCR18;
    • open Locality 2的訪問權限;
    • 退出ACM模式,並跳至可信OS的入口點。

隨後,可信OS將獲得控制權,能夠extend PCR17~PCR22。例如,OS可以度量額外需要執行的code到PCR19,度量可信OS配置到PCR20,地理位置擴展到PCR22等等。

3. 總結

以上就是TXT平臺的靜態引導過程和動態安全啟動的所用流程,是否對TXT平臺啟動時會發生什麽有了更清晰的認識呢。本文重在理清TXT啟動流程,對涉及到某些知識沒有詳細的描述,如啟動控制策略(LCP),這個以後會再介紹。若有問題,請留言,謝謝。

Trusted Execution Technology (TXT) --- 度量(Measurement)篇