摘 要:在分布式計算中,一個重要的問題是如何驗證遠程計算機系統的狀態。以可信計算聯盟(Trusted Computing Group)的可信平臺模塊為基礎,提出一種安全驗證遠程計算機系統狀態的方法,并在Windows系統上實現。通過該遠程證實系統,遠程的挑戰者能夠獲得證實系統(被驗證的系統)運行時的狀態。
關鍵詞:遠程證實; 安全芯片; 可信平臺模塊; 可信計算
中圖分類號:TP309文獻標志碼:A
文章編號:1001-3695(2007)06-0127-02
0 引言
在分布式計算環境中,一個基礎問題是如何驗證一個遠程計算機系統的狀態,以便能夠相信它按預期的方式運行。人們不能信任程序,因為它可以被竄改;同樣的原因也不能信任操作系統。這是一個安全根問題[1]。
Rick Kennel和Leah H.Jamieson通過讓證實系統運行特定的驗證程序,該程序采集證實系統上與平臺相關的特性,使其不能被有效地模擬,得出證實系統的真實性[2],但他們的方法沒有驗證證實平臺上的軟件狀態。CMU大學Arvind Seshadri實現了驗證嵌入設備的方法[3],他們讓嵌入設備運行特定的驗證程序,該程序經過優化而不能被惡意地修改而不被發覺,通過驗證程序采集的信息,驗證嵌入式設備的狀態。上述方法沒有使用額外的硬件,但不適合PC平臺。IBM的Reiner Sialer等基于TCG規范在Linux平臺下實現了平臺的完整性測量[4]。
可信計算組織(TCG)定義了一套標準[5],描述怎樣取得系統的完整性測量值以及將測量值保存到TPM(Trusted Platform Module, 也稱安全芯片)中的方法:當系統上電后,系統將控制權交給不變根(Boot Block),這個不變根計算BIOS的Hash值,用TPM保護計算后的Hash值作為BIOS的度量值。這個測量過程反復進行,直到OS啟動。不過TCG定義的可信啟動過程僅到Boot Loader。筆者在TCG標準之上,使用安全芯片,實現一種讓遠程挑戰者驗證系統運行狀態的方案。
1 問題定義、假設和威脅模型
本文的目標是讓遠程實體(挑戰者)能夠驗證在另一個系統上的程序(證實系統)的完整性。具體采用文件內容的Hash值表示文件的完整性值。對文件內容做Hash,并用Hash值驗證文件沒有被竄改。這是一種簡單、有效的方法。
1.1 完整性背景
系統的完整性測量不是一個新問題。Arbaugh[1]描述了一個安全啟動操作系統的架構,在這種方式下只有可信系統能夠啟動。Outgoing authentication[6]允許證實密碼協處理器中的軟件。這兩種方法都對客戶端環境要求太嚴格,前者只能啟動完全可信的組件,后者一次只能在密碼協處理器中實現一個應用。
隨后的研究集中在使用附加的硬件評估軟件的完整性。Hollingworth等人研究了獨立審計者(Independent auditors)[7];Dyer等人[8]和Molina等人[9]建議在主板上使用第二塊CPU監視(monitoring)和對OS控制。Dyer等人應用安全協處理器保護和監視客戶端系統和它的網絡訪問。Zhang等人[10]擴展這些思想,使用安全協處理器監視客戶系統內核的完整性。Molina等人研究了把安全協處理器作為一個獨立的審計者,它監視主機操作系統的完整性。
最近的研究集中在以安全的方式度量系統的完整性,并能夠讓遠程對方驗證,稱為認證啟動(Authenticated boot)。NGSCB[11,12]依賴特殊的硬件來區分標準操作系統和可信系統。Garfikel等人[13]建立一個可信的虛擬機。虛擬機監視器向遠方認證運行在虛擬機上的軟件。但以上的解決方法如果應用在PC上,就會既昂貴又要求太嚴。
1.2 假定和威脅模型
筆者假定代碼的測量足夠描述它的行為。代碼改變能夠反映在測量中,并且能夠在驗證中加以考慮。內核代碼加載和卸載改變也是如此。基于惡意的DMA傳輸的內核改變不予考慮,不過配置DMA的代碼被測量和評估。同時假定證實系統有一個有效的證書,它綁定證實系統的身份公鑰AIKpub。測量數據沒有機密性要求,因此不假定測量數據是機密的。最后,完整性測量值的解釋依賴挑戰者。
2 遠程證實構架
本文基于安全芯片的完遠程證實構架(圖1)由測量機制、完整性挑戰機制和完整性驗證機制三部分組成。測量代理、證實代理和安全芯片安裝在證實系統上。
(1)證實系統上的測量機制。決定測量什么、什么時候測量和怎樣安全地維護測量值。
(2)完整性挑戰機制。允許授權的挑戰者接收證實系統上的測量值,并驗證其新鮮性和完全性。
(3)完整性驗證機制。驗證測量值是完全的、是否竄改的、新鮮的以及驗證單個的測量項描述了代碼和配置文件。圖1 遠程證實示意圖
2.1 測量機制
測量代理測量文件的Hash值,并收集組成測量列表。它代表證實系統的完整性歷史。測量列表的修改是不能禁止的,但能夠檢測到。TPM提供一些保護數據的寄存器,稱為PCR。它的值只能被兩個函數改變:第一個是平臺啟動時,它使所有的PCRs歸零;第二個是TPM_Extend函數,它把一個160bits的數n和PCR的索引號i作為參數,然后累積n和PCR[i]到當前的內容,即PCR[i]:=SHA1(PCR[i]||n)。PCR的這種特性,使筆者采用PCR維護測量列表的完整性。在被測量文件破壞系統之前,測量該文件,同時也累積到PCR之中(TPM_Extend)。這樣,在被測量軟件取得系統控制權前,該軟件被記錄下來。如果是惡意程序取得系統控制后,它太晚而不能隱藏它的存在和其在證實系統上的Fingerprint。
2.2 完整性挑戰和驗證機制
完整性挑戰機制描述了挑戰方怎樣安全地獲得證實系統上的測量值。在獲得證實系統的測量值后,挑戰者只需從可信方獲取測量值進行比較,就能知道并證實系統是否被修改(是否被惡意攻擊)。
完整性挑戰機制必須能夠防止如下攻擊:
(1)重放攻擊。一個惡意的證實系統能夠重放系統被破壞前的證實信息(測量列表+TPM聚集值)。
(2)竄改。一個惡意的證實系統或者一個中間攻擊者能在傳輸測量列表和TPM聚集值給挑戰者之前或之中時,被竄改。
(3)偽造。一個惡意的證實系統或者一個中間攻擊者能夠用其他系統上的測量列表和TPM聚集值替換原始的測量列表和TPM聚集值。
為阻止這些攻擊,根據TPM的功能,筆者提出如下完整性挑戰協議:
(1)C:創建一個160bits的隨機數nonce
(2)C => AS : Req,nonce
(3a)AS : 加載AIKpriv到TPM中
(3b)AS : 檢索出Quote=sig{PCR; nonce} AIKpriv
(4a)AS : 檢索出測量列表ML
(4b)AS=> C: Res (Quote, ML)
(5a)C : 使用cert(AIKpub),驗證sig{PCR; nonce} AIKpriv的有效性
(5b)C : 使用PCR驗證nonce的新鮮性和測量列表ML的有效性
其中,C代表挑戰者,AS代表證實系統。步驟(1)和(2),C創建一個隨機的160bits nonce發送給AS,請求測量列表。步驟(3),AS加載AIK到TPM中,執行TPM的Quote命令,Quote使用AIK簽名選擇的PCR和C提供的nonce。步驟(4),AS檢索出測量列表ML,然后和Quote的結果返回給挑戰者C。步驟(5a),C使用可信的證書(AIKpub)驗證Quote簽名的有效性。步驟(5b),挑戰者C使用nonce驗證quote的新鮮性。然后驗證測量列表ML的有效性(沒有被竄改)。挑戰者使用AIK證書阻止偽造攻擊,使用TPM簽名PCR值阻止竄改攻擊,使用nonce阻止重放攻擊。在獲得真實的測量值后,挑戰者可以自己判斷系統的狀態。
3 實現
基于上述框架,筆者在Windows平臺上實現遠程證實模塊。在證實系統上,測量代理通過文件過濾驅動實現,測量列表保存在內核空間中。同時為保證證實系統上測量的可信性,首先修改BIOS,讓BIOS測量MBR和OS中一些關鍵模塊,這些模塊保證操作系統啟動到本文的測量代理啟動。沒有這些保證,測量代理本身就可能被竄改。測量代理啟動后首先測量自己,然后監控文件操作,進行測量,并把測量結果放入測量列表。測量代理也為本機上的其他軟件提供服務,它響應請求,返回簽名的測量列表。應用程序也可以調用測量代理的測量操作,把自己加入到測量列表中。
證實代理通過系統服務實現,它主要實現完整性挑戰協議的內容,并接收挑戰者的請求,執行TPM的Quote命令,檢索出測量列表,然后把結果返回給挑戰者。
該證實系統對系統的影響較小,其中BIOS度量自己和MBR只需3-5s,測量代理的測量速度為50Mbps,響應挑戰者時間為300ms。
4 結束語
本文基于可信平臺模塊設計并實現了一個在Windows平臺上的證實系統。利用它的遠程挑戰者可以獲得證實系統上的真實測量值,從而能夠得知系統是否被竄改、是否被攻擊。并且其對系統的性能影響也是很小的。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。