Trusted Execution Technology (TXT) --- 基本原理篇

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

1. Intel TXT 介紹

TXT是Trusted Execution Technology的簡稱,便可信執行技術,TXT技術源自Intel。其主要目標是經過使用特定的Intel CPU、專用硬件以及相關固件,創建一個從一開機就可信的環境,進而爲系統軟件提供多種方法,來實現更安全的系統以及更好的數據完整性保護。ios

一般來說,Intel TXT是:算法

  1. 安全功能的集合;
  2. 驗證這些功能正在使用的一種方法;
  3. 安全度量(Measurement)和驗證系統配置與系統代碼的方法;
  4. 經過設置策略來創建基於度量的信任級別的方法;
  5. 爲可信操做系統提供額外安全功能的方法。

度量(Measurement)在Intel TXT技術中是必不可少的。TPM芯片是Intel TXT技術的基礎部件之一,它提供了安全度量軟件組件的方法,這些軟件組件包括Bios code、平臺配置、引導代碼、引導配置、系統代碼、系統設置等,從而爲平臺組件和系統軟件構建一系列憑證。TPM還提供了準確使用度量來做爲信任的證實以及保護這些度量的能力。安全

Intel TXT引入了兩個TCG概念 ------ 靜態信任鏈(Static Chain of Trust)和動態信任鏈(Dynamic Chain of Trust),以下圖所示。靜態信任鏈度量平臺配置,動態信任鏈度量系統軟件、軟件配置及策略。對於Intel TXT而言,信任根(Root of Trust)就是支持TXT技術的Intel CPU。數據結構

1.1 靜態信任鏈

 靜態信任鏈(Static Chain of Trust)在平臺開機後度量,由硬件發起,度量值由TPM來防禦免受篡改,代碼在執行前都要被度量。架構

  1. 靜態信任鏈由CPU中的uCode啓動,度量由芯片廠商提供的BIOS ACM,即認證代碼模塊(Authenticated Code Module),可用來執行特定安全功能,度量以前須要驗證該ACM的簽名和完整性;
  2. BIOS ACM先度量一部分BIOS code,即Start BIOS code,而後,Start BIOS再去度量其它BIOS code和configuration,直到BIOS code度量結束BIOS才真正開始執行;
  3. 度量值被存儲在TPM內特定的PCRs中,即平臺配置寄存器(Platform Configuration Register);
  4. BIOS在執行過程當中可調用BIOS ACM中的安全功能來進行安全檢查;
  5. BIOS在執行任何附加code以前,如Option ROM,都須要先度量後執行;
  6. 引導OS時,BIOS也度量主引導記錄(MBR)和OS Loader。

須要說明的是,靜態度量只在平臺開機後執行一次。學習

1.2 動態信任鏈

 動態信任鏈(Dynamic Chain of Trust)由OS的需求而來。編碼

  1. 開啓動態度量,經過特殊的CPU指令度量和驗證SINIT ACM;
  2. SINIT ACM執行安全檢查,包括確認BIOS已經經過安全檢查以及平臺配置已鎖定;
  3. SINIT ACM度量可信OS,即TBoot,並調用啓動控制策略(Launch Control Policy,LCP)引擎來判斷平臺配置和OS是否可信。

1.3 MLE

對於Intel TXT而言,可信OS指的是度量過的啓動環境,即Measured Launch Environment(MLE)。加密

 

2. TXT技術基本原理

Intel TXT依賴於一系列支持TXT技術的硬件、軟件與固件。如下圖所示,具備Intel TXT功能的平臺所需組件包括支持TXT與VT-x技術的CPU、Chipset、TPM芯片、ACMs、BIOS、MLE。spa

2.1 TXT平臺組件

2.1.1 CPU

CPU須要支持TXT和SMX技術,SMX包括一條安全指令GETSEC,可執行多種安全功能。GETSEC[ENTERACCS]和GETSEC[SENTER]指令提供:

  1. 安全驗證ACM,
  2. 若驗證經過,將ACM調入CPU 安全域內執行。

支持TXT技術的CPU也都支持虛擬化技術(VMX)。

2.1.2 Chipset

 爲支持TXT技術,Chipset須要包括:

  1. 專門的TXT寄存器
  2. 一個加強架構
  3. 對TPM的受控訪問

根據訪問TXT寄存器的實體安全級別,Chipset執行TPM的locality,以及對TXT寄存器的不一樣訪問權限。

2.1.3 TPM

 Intel TXT技術普遍使用TPM芯片,TPM提供了一個安全存儲空間和使用度量值的機制。系統使用度量值的目的是報告和評估當前的平臺配置以及提供對敏感信息的長期保護。

2.1.4 BIOS

BIOS職責:

  1. 提供ACM,ACM由芯片組廠商製造並做爲BIOS鏡像的一部分提供給BIOS開發者;
  2. 配置TXT操做平臺;
  3. 使用ACM執行安全檢查和註冊;
  4. 使用處理器的GETSEC安全指令來鎖定平臺配置。

    一旦鎖定,BIOS和其它Firmware就不能再修改配置,BIOS在執行其它任何第三方代碼(Option Rom等)以前進行鎖定。

2.1.5 ACM

ACM是由芯片組廠商提供的代碼,由廠商簽名,並由GETSEC安全指令調用,而後在CPU內部的專用安全內存中以最高安全級別執行。

ACM須要與芯片組相匹配,類型可分爲:BIOS ACM和SINIT ACM。前者度量BIOS並執行多個基於BIOS的安全功能;後者用來執行系統軟件/操做系統的安全啓動。

BIOS ACM和SINIT ACM code都會被包含在BIOS binary中,另外,OS在安全啓動中可能選擇更新版的SINIT ACM。

ACM被認爲是Core Root of Trusted Measurement (CRTM),須要進行驗證和保護:

  1. 在執行ACM以前,CPU Microcode會先執行以下安全檢查:
    • ACM 必須匹配芯片組
    • ACM版本不能使早已被撤銷大的
    • ACM必須簽名
    • 簽名必須有效
  2. 在執行上述檢查以前,CPU會將ACM從Bios binary拷貝到CPU內的受保護內存中,目的是保證ACM不會被篡改;
  3. ACM由芯片廠商提供的私鑰所簽名,該私鑰被硬編碼到芯片組內,CPU microcode使用其自身包含的公鑰驗證ACM的簽名;
  4. 簽名使用密碼算法來驗證ACM沒有被篡改。

在上述檢查所有經過的狀況下,ACM才真正被執行。

2.2 TPM功能與接口

TPM芯片是TXT平臺中必不可少的組件,其主要提供以下安全功能:

  1. 非易失性存儲器
  2. 平臺配置寄存器(PCR)
  3. 身份認證密鑰
  4. 隨機數發生器
  5. SHA-1/RSA/密鑰生成器

TPM經過LPC(Low Pin Count)或SPI(Serial Peripheral Interface)總線鏈接到chipset,且僅能經過由chipset保護的MMIO寄存器訪問,意味着I/O設備沒法訪問TPM,但OS能夠控制哪一個處理器有權訪問TPM。一般,TPM經過Locality和控制協議來執行保護和訪問權限。

2.2.1 Locality

TPM有不一樣的特權級別,稱爲locality。每一個locality經過不一樣的4KB大小的頁面來訪問,容許硬件和軟件控制訪問每個locality。Chipset能夠決定哪些locality是活躍的(即對該頁面的讀寫操做是否將被忽略),系統軟件經過正常的內存管理和分頁功能來決定哪些進程能夠訪問這些頁面。Locality總共分爲5級(0 - 4):

  • Locality 0,老是對通常用途開放,能夠是Non-trusted operation;
  • Locality 1,OS (不做爲TXT的一部分);
  • Locality 2,MLE,即安全模式下的系統軟件,只有在OS完成安全啓動後,OS才能夠隨時關閉此訪問;
  • Locality 3,ACM,只有GETSEC調用的ACM纔有權訪問;
  • Locality 4,TXT hardware only。

注意:locality不分層級,不存在隸屬關係,Locality 4也不是一個超級用戶,不會訪問其它locality的資源。

2.2.2 控制協議

TPM的接口是基於消息的。就是說,一個實體建立請求消息並經過locality頁面發送到TPM,而後經過locality頁面讀取響應消息。協議容許實體創建安全會話,會話容許用戶對消息內容進行加密,尤爲是對驗證受權的方法進行加密。爲此,TPM使用HMAC來實現受權認證。

2.2.3 平臺配置寄存器(PCR)

在TPM中,平臺配置寄存器(Platform Configuration Register,PCR)可被做爲對象訪問,也是可信證實的基礎,一般用於啓動控制策略(LCP)。

TPM提供PCR來存儲度量值,每一個PCR都擁有一個20-byte的hash摘要。PCR的內容是基於「擴展」的,而非直接寫入,即TPM使用當前PCR的值,拼接須要擴展的數據,將二者的組合進行hash運算,產生的摘要就是新的PCR值。這意味着,PCR是惟一且不可欺騙的,將相同的度量值按照相同的順序擴展,才能夠計算出相同的PCR值。

TXT技術會使用到24個PCR,一些PCR是靜態的,只有在系統剛開機或重啓時纔會重置靜態PCR。其它動態PCR,在不重啓的狀況下,可經過特定的locality重置動態PCR。

2.3 TXT度量

Intel TXT幫助探測或阻止以下攻擊:

  1. 試圖插入不可信的VMM
  2. 危害內存中祕密的復位攻擊
  3. BIOS與Firmware的升級攻擊

2.3.1 安全度量

度量(Measure)是對任何可以載入內存的代碼或數據的Hash,產生固定長度的摘要。

  1. 度量是基於硬件的(硬件信任根),對TXT而言,信任根就是CPU
  2. 度量是免受篡改、受保護的

度量值(Measurement)被擴展(Extend)到TPM提供的一組PCRs中。這些PCRs不能被覆寫,只能被Extend,即便用現有的PCR值與新的度量值構成一個組合值後,再進行Hash,最後將hash值存儲到該PCR中。

2.3.2 靜態和動態度量

靜態度量在每次平臺啓動時只執行一次,16個靜態PCR:PCR0~PCR15。這些PCR僅在平臺開機或硬件重啓時才進行清除,也就是使全部組件(TPM、CPU、Chipset)返回到開機狀態的一個信號。

靜態PCR用來度量平臺配置:

  1. PCR0:CRTM、BIOS以及宿主平臺擴展項
  2. PCR1:宿主平臺配置
  3. PCR2:Option Rom代碼
  4. PCR3:Option Rom配置和數據
  5. PCR4:IPL代碼,一般使MBR
  6. PCR5:IPL配置和數據,被IPL code所使用
  7. PCR6:宿主遷移和喚醒事件
  8. PCR7:宿主平臺製造商控制
  9. PCR8~PCR15:爲OS保留,不被TXT使用

    PCR0是主要的CRTM PCR,且關乎PCR1~PCR7的完整性。CRTM表明可信度量根(Core Root of Trust Measurement),意味着它要被第一個度量併爲靜態PCR開啓度量鏈

動態度量是可以不用重啓平臺就可使PCR重置的度量,有8個動態PCR,使用以下:

  1. PCR16:爲調試保留
  2. PCR17:DRTM和啓動控制策略
  3. PCR18~PCR20:可信OS啓動代碼、配置、內核和其它代碼
  4. PCR21~PCR22:由可信OS定義
  5. PCR23:爲應用程序保留,可以被任意locality重置和擴展

PCR17~PCR20可依據一次成功的安全啓動進行重置,PCR20~PCR22可以經過安全模式下的可信OS進行重置。

總之,TXT提供了安全度量和報告各類平臺組件的方法,所以能夠檢測這些組件的變化。

2.4 啓動控制策略

Intel TXT包含一個啓動策略控制(Launch Control Policy,LCP)引擎,用於指定哪些是已知良好的平臺配置以及哪些系統軟件容許安全啓動。實際上存在兩個策略引擎,一個在BIOS ACM內部,當發生復位攻擊時,它會啓動用來驗證BIOS完整性的策略,另外一個在SINIT ACM內,負責啓動控制策略的強制執行。

先來講一下TXT是如何防止復位攻擊的。當OS成功地執行安全啓動時,它會設置一個非易失性Secret標誌,用於代表內存中存在隱私和其它特權信息。當OS正常關機並退出安全環境時,它會重置該Secret標誌,且只能經過可信OS調用GETSEC指令的方式來重置。若是發生復位攻擊(Reset Attack),即在可信OS清除Secret標誌以前reset OS,此時BIOS ACM會首先確保BIOS會清理內存中的隱私數據,不然DRAM Controller將不可用,只有將CMOS移除纔可恢復。然而,BIOS ACM也不能盲目信任BIOS,由於BIOS可能被攻擊者插入惡意代碼,所以BIOS ACM有兩種方法來驗證BIOS是可信的:Autopromotion和Signed BIOS Policy。

  1.  Autopromotion:意味着BIOS ACM知道BIOS的度量值,會提醒用戶當前BIOS的度量值與移植良好的度量值不匹配,將由用戶決定當前BIOS是否可信。
  2. Signed BIOS Policy:由OEM提供一份已知良好的、由OEM簽名的BIOS度量值列表,若是當前BIOS度量值不與列表中的任意一個值相匹配,則認爲BIOS是不可信的。

上述兩種驗證BIOS完整性的方法將在之後的文章中詳細介紹。

對於LCP,有兩個策略制定者:平臺供應商(PS)策略和平臺屬主(PO)策略。PS策略是平臺出廠前由平臺供應商建立的,也被稱爲默認策略。這裏主要討論PO策略。LCP包含兩個元素:

  1. PCONF元素,即有效平臺定義。前文咱們知道TXT將平臺配置信息的度量值擴展到PCR0~PCR7中,PCONF策略元素就是基於這些靜態度量PCR建立而來的。策略屬主基於一個或多個相關PCR值建立一個複合Hash值,稱爲PCRInfo,PCONF元素能夠容納任何數量的PCRInfo。在安全啓動過程當中,LCP引擎將從指定的PCR值生成複合Hash值,並與策略中PCRInfo相比較。若匹配,則說明當前平臺是 可信的。
  2. MLE元素,即啓動度量環境,容許進行安全啓動的OS。與PCONF元素不一樣,MLE元素不使用動態的PCR17~PCR22,由於此時的動態PCR尚未被擴展,都是默認值。MLE元素只包含已知良好的TBoot度量值,將SINIT ACM度量過Tboot度量值與MLE元素中的良好度量值比較,若匹配,則將該度量值擴展到PCR18中,並執行安全啓動。

那麼如何保護LCP以防止篡改呢?這就有使用到TPM芯片提供的NVRAM。爲節省TPM NVRAM空間,LCP會被分解成若干個NV策略數據(用於建立PO策略索引),以及一個可選的策略數據結構(包含PCONF元素和MLE元素)。

3. 總結

Intel TXT符合TCG PC Client和Server規範。加密安全Hash算法生成平臺組件、平臺配置、系統軟件和軟件配置的惟一度量值。這些度量值被存貯在受TPM保護的PCR中,每一個PCR均可由多個度量值擴展,PCR日誌記錄了這個PCR擴展的每一個元素,利用該PCR中的值能夠用來驗證PCR日誌是否被篡改。

PCR0包含靜態可信度量根,以及BIOS code的度量。這些度量不能被篡改,由於它們都根植於硬件。PCR1~PCR7依賴於PCR0的有效性,也就是說,僅當PCR0的度量值是可信的,PCR1~PCR7纔是可信的。因此,在建立LCP的PCONF元素時,PCR0是必不可少的。PCR17包含動態可信度量根,以及策略的度量值,一樣是基於硬件的可信根。PCR18包含可信OS(TBoot)的度量值,且依賴於PCR17的有效性。

平臺屬主(PO)控制着有效的平臺配置,以及哪些OS被容許執行度量啓動。在MLE環境下,符合LCP的OS具備TPM Locality 2的訪問權限。度量啓動意味着OS的度量值已經擴展到動態PCR中。

[TSEC] 以上簡單介紹了TXT平臺所需組件以及基本原理,Launch Control Policy在TXT平臺上的做用是基於TXT度量結果作出信任決策,本文僅涉及LCP基礎知識,後續會對LCP作詳細介紹。如有問題,請留言,一塊兒學習,一塊兒進步,謝謝。

相關文章
相關標籤/搜索