1. 程式人生 > >Trusted Execution Technology --- 基本原理

Trusted Execution Technology --- 基本原理

用途 證明 清理 進步 spl tac 廣泛 分頁 用處

1. Intel TXT 介紹

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

通常來講,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。

技術分享圖片

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做詳細介紹。若有問題,請留言,一起學習,一起進步,謝謝。

Trusted Execution Technology --- 基本原理