Trusted Execution Technology (TXT) --- 度量(Measurement)篇
版權聲明:本文為博主原創文章,未經博主允許不得轉載。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
- 加載BIOS ACM到CPU internal安全內存中,與外界隔離;
- 驗證ACM的簽名是否有效;
- 若簽名可信,則度量BIOS ACM並Extend到PCR0中,從而啟用可信度量核根(Core Root of Trust Measurement, CRTM);
- 僅當上述操作執行通過,CPU Microcode才會
- 通過啟用TPM Locality 3訪問和開放TXT private registers的訪問來打開ACM模式;
- 執行BIOS ACM code;
- 使用CPU internal 安全內存,然後驗證並確保ACM在執行前免受惡意代碼攻擊。
BIOS ACM
- 度量重要BIOS組件,並將度量值擴展到PCR0;
- ACM檢查內存中是否存在隱私信息,即檢查Secret Flag register位是否被置起,若被置起,則認定內存中還駐留Secret,會存在泄露風險,此時需要reset系統或清除內存和secret flag,然後驗證BIOS啟動代碼的完整性;
- 退出ACM模式,通過禁用Locality 3,來禁止訪問TXT private registers;
- 跳到BIOS啟動代碼。
BIOS
- 度量其余BIOS code,並將度量值Extend到PCR0;
- 配置平臺;
- 度量BIOS配置,並將度量值Extend到PCR1;
- 通過GETSEC指令再次執行BIOS ACM,以便進行安全檢查;
- CPU Microcode加載ACM到internal 安全內存中,並執行相同的驗證,然後啟用ACM模式並執行請求的ACM函數,即內存安全檢查;
- ACM完成檢查,退出ACM模式,返回BIOS。
- 結束平臺配置;
- 使用GETSEC指令再次調用BIOS ACM,鎖定BIOS配置;
- CPU Microcode加載ACM到internal 安全內存中,並執行相同的驗證,然後啟用ACM模式並執行請求的ACM函數,即鎖定配置;
- ACM完成檢查,退出ACM模式,返回BIOS。
鎖定配置後,BIOS可能執行其它Firmware,
- 度量任何Option ROM code,擴展度量值到PCR2;
- 執行Option ROM code for each device。
Option ROM on device
- 度量任何隱藏的Option ROM code,並擴展到PCR2;
- 配置並啟動device;
- 度量device 配置信息,擴展度量值到PCR3;
- 返回BIOS。
BIOS
- 選擇一個引導設備;
- 度量IPL(Initial Program Loader),尤其是主引導記錄(MBR),擴展度量值到PCR4;
- 執行IPL code。
IPL
- 度量IPL配置,擴展到PCR5;
- 加載並執行OS Loader。
此時,BIOS已使平臺準備好了IPL,OS Loader執行後,接著執行正常的引導過程。通常情況下,開啟Intel TXT的OS,加載的第一個模塊是TBoot,而非內核模塊。TBoot模塊的目的是以安全模式來初始化平臺並發起動態度量過程,即安全啟動。
2. 動態度量過程(安全啟動)
這是TXT技術的重要組成部分,它控制宿主OS如何進入安全執行模式並稱為可信的OS。安全模式特點如下:
- 宿主OS code已被度量過,且度量值是已知的好結果(依據宿主平臺建立的LCP),即宿主OS是可信的;
- 可信OS從一個確定的狀態開始執行,從實模式啟動,然後轉換到保護模式下;
- 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:
- 加載SINIT ACM到CPU安全內存;
- 驗證ACM與芯片組相匹配,即ACM的公鑰Hash值必須與硬編碼在芯片組裏的Hash值相匹配;
- 驗證ACM簽名,並執行度量;
- 重置PCR17~PCR20,開啟DRTM,擴展SINIT ACM度量值到PCR17;
- 若2和3所示檢查通過,CPU Microcode才會執行ACM,
- 啟用ACM模式,如此可以訪問TPM Locality 3,並開啟TXT private register訪問權限;
- 執行SINIT ACM code。
SINIT ACM
- 查看是否被撤回,判斷當前執行的SINIT ACM是為最新版本,且設置了撤回級別,即請求撤回存儲在TPM中的舊版本SINIT ACM;
- 驗證平臺已通過BIOS正確配置,表明OS有合適的條件來進行安全啟動;
- 度量可信OS code;
- 執行Launch Control Policy(LCP)引擎,驗證屬主LCP,以決定是否由可信OS來做一個安全啟動;
- 如果上述檢查失敗,則認為存在惡意攻擊,這將導致TXT平臺復位,並確保內存中不會駐留惡意代碼;
- 若上述檢查都通過,則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)篇