專利名稱::一種遠程動態(tài)驗證客戶端軟件完整性的方法
技術領域:
:本發(fā)明涉及一種遠程動態(tài)驗證客戶端軟件完整性的方法,屬于計算機信息安全領域。
背景技術:
:目前許多損害終端的攻擊方法是通過注入病毒、蠕蟲、間諜軟件、釣魚軟件等多種形式的惡意代碼而不是通過損害安全信道來實施的,因此通信端點的安全是一個不容忽視的問題。為此,許多網(wǎng)絡服務例如網(wǎng)上銀行在給客戶端提供服務之前,通常要遠程驗證客戶端相關軟件的完整性,以確保在為合法客戶服務,這個驗證過程稱為遠程證明或遠程驗證。遠程證明的驗證對象可以是應用軟件文件,也可以是該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)。研究和實驗結果證明基于純軟件的遠程證明方案存在安全漏洞,而且這些方案通?;谝恍┎粚嶋H的假設,例如文獻(PioneerVerifyingCodeIntegrityandEnforcingUntamperedCodeExecutiononLegacySystems;ArvindSeshadri,MarkLuk,ElaineShi,AdrianPerrig,LeendertvanDoom,PradeepKhosla;InProceedingsofthe20thACMSymposiumonOperatingSystemsPrinciples2005,SOSP2005,Brighton,UK,October23-26,2005(2005),pp.1-16)提出的Pioneer方案。軟硬件結合的方式是一個非常有效的措施,例如TCG(TrustedComputingGroup)組織提出的基于可信平臺模塊(TrustedPlatformModule,TPM)的遠程證明方案(簡稱為TCG遠程證明方法);在該方法中,可信計算平臺以TPM為信任根,借助其他可信度量模塊對系統(tǒng)平臺數(shù)據(jù)進行度量,然后安全地將系統(tǒng)運行情況記錄在TPM平臺配置寄存器(PlatformConfigurationRegist,PCR),同時在系統(tǒng)保存代表了被驗證的可信平臺的完整性度量歷史的度量存儲日志(StorageMeasurementLog,SML);遠程用戶根據(jù)SML和相關PCR值來判斷該運行環(huán)境是否可信;在TCG規(guī)范中,TPM使用身份證明密鑰AIK(AttestationIdentityKey)來證明自己的身份,凡是經(jīng)過AIK簽名的實體,都表明已經(jīng)經(jīng)過TPM的處理;為了防止重放、篡改、假冒等攻擊,TCG遠程證明方法要求被驗證的一方要使用AIK對數(shù)據(jù)進行簽名。雖然TCG遠程證明方法是一個非常有效措施,但是這種遠程證明方法需要對被驗證軟件所在的操作系統(tǒng)進行修改,因此可擴展性差,而且在實際部署過程中將受到許多限制。為了克服上述遠程證明方法的缺點,文獻(Remoteattestationonlegacyoperatingsystemswithtrustedplatformmodules;DriesSchellekens,Brechtffyseur,BartPreneel;ElectronicNotesinTheoreticalComputerScience,Volumel97,IssueLFebruary2008)提出了一種軟硬件結合的方法,但不需要對被驗證應用軟件所在的操作系統(tǒng)進行修改;該方法利用TPM提供的時間戳技術克服Pioneer方案中存在一些問題。時間戳服務是TPM1.2規(guī)范新增特性之一,需要指出的是TPM提供的時間戳所包含的不是實際格林威治時間,而是TPM滴答計數(shù)器的滴答數(shù),該計數(shù)器定期增加滴答數(shù)(也稱滴答值)。符合TPM1.2規(guī)范的TPM在計算機系統(tǒng)啟動后將開啟一個時間會話,同時初始化一個滴答計數(shù)器。一個滴答計數(shù)器帶有三個參數(shù)滴答值(TickCountValue,TCV),滴答值增長速率(TickIncrementRate,TIR)、時間會話隨機數(shù)(TickSessionNonce,TSN),其中TCV反映滴答計數(shù)器的當前值,在時間會話開啟時,TCV的值為O;TIR表示TCV值增長速率;TSN是由TPM產(chǎn)生的一個隨機數(shù),用于標識一個時間會話,TSN在整個時間會話中保持不變。TPM提供TPM_TickStampBIob命令,該命令能夠利用TPM內(nèi)部的簽名密鑰對一個數(shù)據(jù)塊摘要(記作blob)創(chuàng)建時間戳,記作TS=Sign(blobTCVTSN;key),其中符號I表示鏈接;Sign(string;key)表示用密鑰key對字符串string進行簽名。TSN可以用于判斷兩個由TPM_TickStampBlob產(chǎn)生的時間戳是否屬于同一時間會話。目前在公開發(fā)表文獻(包括專利)中,只有文獻(Remoteattestationonlegacyoperatingsystemswithtrustedplatformmodules;DriesSchellekens,Brechtffyseur,BartPreneel;ElectronicNotesinTheoreticalComputerScience,Volumel97,Issue1,F(xiàn)ebruary2008)將TPM時間戳技術應用于實現(xiàn)與操作系統(tǒng)無關的遠程證明,即不需要對被驗證文件所在的操作系統(tǒng)進行修改;雖然該文獻提出的方法解決了Pioneer方案中存在的一些問題,但是在該方法中,被驗證的軟件的可信基存在安全隱患。虛擬機技術應用整機虛擬化的概念,實現(xiàn)同一硬件平臺上多操作系統(tǒng)的并行運行。圖1給出Xen虛擬機組件框架,每個虛擬域運行一個操作系統(tǒng),虛擬機監(jiān)控器位于系統(tǒng)硬件平臺與虛擬域操作系統(tǒng)軟件之間,負責監(jiān)控下層硬件,并將硬件抽象成可管理調(diào)度的實體供上層計算域使用。虛擬域又分為特權虛擬域和客戶虛擬域兩類。Xen虛擬機啟動后,特權虛擬域是必須而且首先進入的操作系統(tǒng),然后再根據(jù)具體情況啟動客戶虛擬域;特權虛擬域具有最高的權限,特權虛擬域利用虛擬域管理工具管理客戶虛擬域,包括創(chuàng)建、刪除、訪問物理設備等。
發(fā)明內(nèi)容本發(fā)明提出一種不需要對被驗證的自包含可執(zhí)行軟件所在的操作系統(tǒng)進行修改的遠程動態(tài)驗證方法,該方法不但能夠?qū)Σ豢尚趴蛻籼摂M域的應用軟件進行遠程動態(tài)驗證,而且克服了基于純軟件的遠程驗證方法的缺點,同時避免對被驗證軟件所在的操作系統(tǒng)的修改。本方法將TCG遠程證明方法、Xen虛擬機安全隔離性質(zhì)以及安全芯片TPM的時間戳簽名功能進行有機結合,所采用的遠程動態(tài)驗證架構由完整性度量機制、報告機制和驗證機制三部分組成,其中完整性度量機制由安裝在網(wǎng)絡客戶端特權虛擬域的后端驗證代理模塊和安裝在網(wǎng)絡客戶端虛擬機監(jiān)控器的內(nèi)存度量模塊來完成,報告機制由安裝在網(wǎng)絡客戶端客戶虛擬域的前端驗證代理模塊來完成,驗證機制由安裝在網(wǎng)絡服務器的驗證模塊來完成。其中(1)前端驗證代理模塊負責在后端驗證代理模塊與網(wǎng)絡服務器驗證模塊之間傳遞信息,并負責獲取被驗證應用軟件的相關信息,然后發(fā)送給后端驗證代理模塊。(2)內(nèi)存度量模塊對后端驗證代理模塊指定的內(nèi)容進行完整性度量,然后將度量結果發(fā)送給后端驗證代理模塊。(3)后端驗證代理模塊根據(jù)TCG規(guī)范,利用TPM芯片對特權虛擬域和虛擬機監(jiān)控器的平臺信息進行簽名,并利用TPM芯片對相關信息生成時間戳。(4)驗證模塊對網(wǎng)絡客戶端的不可信客戶虛擬域的應用軟件進行遠程動態(tài)驗證。本發(fā)明的技術方案為一種遠程動態(tài)驗證客戶端軟件完整性的方法,方法組件包括網(wǎng)絡服務器中的驗證模塊、網(wǎng)絡客戶端特權虛擬域的后端驗證代理模塊、網(wǎng)絡客戶端虛擬機監(jiān)控器的內(nèi)存度量模塊、網(wǎng)絡客戶端客戶虛擬域的前端驗證代理模塊,當網(wǎng)絡客戶端客戶虛擬域的自包含可執(zhí)行軟件向網(wǎng)絡服務器發(fā)出服務請求時,網(wǎng)絡服務器對自包含可執(zhí)行軟件進行遠程驗證的具體步驟如下步驟1.1,網(wǎng)絡客戶端客戶虛擬域的自包含可執(zhí)行軟件向網(wǎng)絡服務器的服務程序發(fā)出服務請求;步驟1.2,網(wǎng)絡服務器驗證模塊截獲服務請求包(記作RequestPacket),獲取請求包中的源IP地址和源端口號;然后驗證模塊生成一個隨機數(shù)Nonce,并在客戶信息數(shù)據(jù)庫創(chuàng)建一條以源IP地址和源端口號為索引的記錄,將Nonce和RequestPacket存放在該記錄中;最后生成一個數(shù)據(jù)包發(fā)送給位于源IP地址的前端驗證代理模塊,該數(shù)據(jù)包包含有Nonce、RequestPacket禾口驗證內(nèi)容(記作VerifiedContent);其中VerifiedContent規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,還是對該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)進行度量,此外該驗證內(nèi)容還包括PCR標號,后端驗證代理模塊將這些PCR標號所對應的PCR內(nèi)容作為特權虛擬域和虛擬機監(jiān)控器的平臺信息;步驟1.3,前端驗證代理模塊從收到的數(shù)據(jù)包中獲取Nonce、RequestPacket,VerifiedContent;然后根據(jù)RequestPacket里的源IP地址和源端口號(用SAdd代表源IP地址和源端口號),獲取自包含可執(zhí)行軟件的進程號,如果VerifiedContentt規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,則根據(jù)該進程號獲取自包含可執(zhí)行軟件的全路徑信息,否則根據(jù)該進程號和驗證內(nèi)容獲取需要被度量的內(nèi)存地址范圍,無論是全路徑信息還是內(nèi)存地址范圍,都記作地址信息;最后前端驗證代理模塊將Nonce、SAdd,VerifiedContent、地址信息發(fā)送給后端驗證代理模塊;步驟1.4,后端驗證代理模塊收到前端驗證代理模塊的信息后,首先對Nonce和SAdd做哈希運算,結果記作D1,用變量Vpcr表示VerifiedContent中PCR標號所對應的TPM內(nèi)部PCR的值;然后再利用TPM設備對Dl和Vpcr進行簽名,簽名結果記作Quote;最后將Quote和AIK證書發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中AIK證書包含有網(wǎng)絡客戶端AIK公鑰PUK_AIK;步驟1.5,后端驗證代理模塊將Quote做為參數(shù),調(diào)用TPM的TPM_TickStampBlob命令生成一個時間戳,記作TSl=Sign(QuoteTCVlTSNl;SK_AIK),然后將TSl發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中符號II表示鏈接,Sign(string;key)表示用密鑰key對字符串string進行簽名,SK_AIK為客戶端AIK的私鑰,TCVl為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSm為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟1.6,如果地址信息是全路徑信息,則后端驗證代理模塊根據(jù)全路徑信息獲得自包含可執(zhí)行軟件文件,并對其進行哈希運算,結果記作M;如果地址信息是內(nèi)存地址范圍,則后端驗證代理模塊將地址信息發(fā)送給內(nèi)存度量模塊,內(nèi)存度量模塊根據(jù)接收到的信息生成度量值M并發(fā)給后端驗證代理模塊;后端驗證代理模塊對TSl和M做哈希運算,結果記作D2,然后將D2做為參數(shù),調(diào)用TPM_TickStampBlob命令生成一個時間戳,記作TS2=Sign(D2IITCV2||TSN2;SK_AIK),然后將TS2發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中TCV2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟1.7,驗證模塊首先驗證AIK證書的合法性,如果不合法,則進入步驟1.11,否則從收到的信息中取出PUK_AIK并解密Quote,獲得Dl和Vpcr,對所保存的Nonce和SAdd做哈希運算,如果哈希結果與Dl不相等,則進入步驟1.11,否則根據(jù)保存的客戶端平臺信息驗證Vpcr值是否合法,如果不合法,則進入步驟1.11,否則進入步驟1.8;步驟1.8,驗證模塊利用PUK_AIK解密TSl和TS2,獲得Dl、TCV1、TSm、D2、TCV2、TSN2;然后檢查TSm是否等于TSN2,如果不等于,則進入步驟1.11,否則進入步驟1.9;步驟1.9,驗證模塊計算(TCV2-TCV1),看值是否在預期的時間差范圍內(nèi),如果不在預期的時間差范圍內(nèi),則進入步驟1.11,否則進入步驟1.10;步驟1.10,驗證模塊對TSl和所保存的自包含可執(zhí)行軟件度量期望值進行哈希運算,如果結果與D2不相等,則進入步驟1.11,否則驗證模塊將自包含可執(zhí)行軟件的服務請求轉(zhuǎn)給服務程序,服務程序開始處理應用軟件的請求;步驟1.11,中斷與網(wǎng)絡客戶端的連接,并從客戶信息數(shù)據(jù)庫中刪除相關信息。其中步驟1.10完成之后,網(wǎng)絡服務器利用步驟1.2在客戶信息數(shù)據(jù)庫所建立的信息,隨時對自包含可執(zhí)行軟件進行遠程驗證,具體步驟如下步驟2.1,網(wǎng)絡服務器驗證模塊確定需要被驗證的軟件在客戶信息數(shù)據(jù)庫中所對應的記錄,然后生成一個隨機數(shù)Nonce,并用Nonce替代該記錄中的隨機數(shù),并從該記錄中的服務請求包(記作RequestPacket)中獲取源IP地址和源端口號,最后生成一個數(shù)據(jù)包發(fā)送給位于源IP地址的前端驗證代理模塊,該數(shù)據(jù)包包含有Nonce、RequestPacket、驗證內(nèi)容記作VerifiedContent);其中VerifiedContent規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,還是對該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)進行度量,此外該驗證內(nèi)容還包括PCR標號,后端驗證代理模塊將這些PCR標號所對應的PCR內(nèi)容作為特權虛擬域和虛擬機監(jiān)控器的平臺信息;步驟2.2,前端驗證代理模塊從收到的數(shù)據(jù)包中獲取Nonce、RequestPacket,VerifiedContent;然后根據(jù)RequestPacket里的源IP地址和源端口號(用SAdd代表源IP地址和源端口號),獲取自包含可執(zhí)行軟件的進程號,如果VerifiedContentt規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,則根據(jù)該進程號獲取自包含可執(zhí)行軟件的全路徑信息,否則根據(jù)該進程號和驗證內(nèi)容獲取需要被度量的內(nèi)存地址范圍,無論是全路徑信息還是內(nèi)存地址范圍,都記作地址信息;最后前端驗證代理模塊將Nonce、SAdd,VerifiedContent、地址信息發(fā)送給后端驗證代理模塊;步驟2.3,后端驗證代理模塊收到前端驗證代理模塊的信息后,首先對Nonce和SAdd做哈希運算,結果記作D1,用變量Vpcr表示VerifiedContent中PCR標號所對應的TPM內(nèi)部PCR的值;然后再利用TPM設備對Dl和Vpcr進行簽名,簽名結果記作Quote;最后將Quote和AIK證書發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中AIK證書包含有網(wǎng)絡客戶端AIK公鑰PUK_AIK;步驟2.4,后端驗證代理模塊將Quote做為參數(shù),調(diào)用TPM的TPM_TickStampBlob命令生成一個時間戳,記作TSl=Sign(QuoteTCVlTSNl;SK_AIK),然后將TSl發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中SK_AIK為客戶端AIK的私鑰,TCVl為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSm為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟2.5,如果地址信息是全路徑信息,則后端驗證代理模塊根據(jù)全路徑信息獲得自包含可執(zhí)行軟件文件,并對其進行哈希運算,結果記作M;如果地址信息是內(nèi)存地址范圍,則后端驗證代理模塊將地址信息發(fā)送給內(nèi)存度量模塊,內(nèi)存度量模塊根據(jù)接收到的信息生成度量值M并發(fā)給后端驗證代理模塊;后端驗證代理模塊對TSl和M做哈希運算,結果記作D2,然后將D2做為參數(shù),調(diào)用TPM_TickStampBlob命令生成一個時間戳,記作TS2=Sign(D2IITCV2||TSN2;SK_AIK),然后將TS2發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中TCV2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟2.6,驗證模塊首先驗證AIK證書的合法性,如果不合法,則進入步驟2.10,否則從收到的信息中取出PUK_AIK并解密Quote,獲得Dl和Vpcr,對所保存的Nonce和SAdd做哈希運算,如果哈希結果與Dl不相等,則進入步驟2.10,否則根據(jù)保存的客戶端平臺信息驗證Vpcr值是否合法,如果不合法,則進入步驟2.10,否則進入步驟2.7;步驟2.7,驗證模塊利用PUK_AIK解密TSl和TS2,獲得Dl、TCV1、TSm、D2、TCV2、TSN2;然后檢查TSm是否等于TSN2,如果不等于,則進入步驟2.10,否則進入步驟2.8;步驟2.8,驗證模塊計算(TCV2-TCV1),看值是否在預期的時間差范圍內(nèi),如果不在預期的時間差范圍內(nèi),則進入步驟2.10,否則進入步驟2.9;步驟2.9,驗證模塊對TSl和所保存的自包含可執(zhí)行軟件度量期望值進行哈希運算,如果結果與D2不相等,則進入步驟2.10,否則驗證模塊將自包含可執(zhí)行軟件的服務請求轉(zhuǎn)給服務程序,服務程序開始處理應用軟件的請求;步驟2.10,中斷與網(wǎng)絡客戶端的連接,并從客戶信息數(shù)據(jù)庫中刪除相關信息。此處要寫本發(fā)明的優(yōu)點本發(fā)明的優(yōu)點是網(wǎng)絡服務器不僅在自包含可執(zhí)行軟件第一次發(fā)出服務請求的時候,能夠驗證該軟件的完整性和真實性,而且在自包含可執(zhí)行軟件運行過程中,網(wǎng)絡服務器能夠隨時對該軟件的完整性和真實性進行遠程驗證;此外本方法不但克服了基于純軟件的遠程驗證方法的缺點,而且避免對被驗證軟件所在操作系統(tǒng)的修改。圖1為Xen虛擬機組件框架;圖2為本發(fā)明提供的網(wǎng)絡服務器對自包含可執(zhí)行軟件進行遠程驗證過程圖。具體實施例方式本發(fā)明提供的方法在硬件上要求網(wǎng)絡客戶端配有可信安全芯片TPM,而且客戶端BIOS支持TPM;在軟件上要求網(wǎng)絡客戶端安裝了Xen虛擬機和操作系統(tǒng)可信引導管理器,要求網(wǎng)絡客戶端特權虛擬域的操作系統(tǒng)帶有TPM驅(qū)動程序和可信度量???,要求網(wǎng)絡客戶端前端驗證代理模塊用于等待來自驗證模塊的消息的網(wǎng)絡端口號是公開的,要求網(wǎng)絡客戶端網(wǎng)絡客戶端特權虛擬域擁有AIK證書,該證書對應的私鑰保存在TPM中;網(wǎng)絡服務器維護一個客戶信息數(shù)據(jù)庫,而且網(wǎng)絡服務器擁有網(wǎng)絡客戶端平臺信息的期望值和自包含可執(zhí)行軟件完整性度量的期望值。本發(fā)明提供的方法的具體實施步驟如下步驟1,在網(wǎng)絡服務器上安裝驗證模塊;步驟2,在網(wǎng)絡客戶端虛擬機監(jiān)控器安裝內(nèi)存度量模塊;步驟3,在網(wǎng)絡客戶端特權虛擬域安裝后端驗證代理模塊;步驟4,在網(wǎng)絡客戶端的客戶虛擬域安裝前端驗證代理模塊;下面根據(jù)圖2詳述在網(wǎng)絡客戶端客戶虛擬域的自包含可執(zhí)行軟件向網(wǎng)絡服務器發(fā)出服務請求時,網(wǎng)絡服務器對自包含可執(zhí)行軟件進行遠程動態(tài)驗證的工作流程步驟1,網(wǎng)絡客戶端客戶虛擬域的自包含可執(zhí)行軟件向網(wǎng)絡服務器的服務程序發(fā)出服務請求。步驟2,網(wǎng)絡服務器驗證模塊截獲服務請求包(記作RequestPacket),獲取請求包中的源IP地址和源端口號;然后驗證模塊生成一個隨機數(shù)Nonce,并在客戶信息數(shù)據(jù)庫創(chuàng)建一條以源IP地址和源端口號為索引的記錄,將Nonce和RequestPacket存放在該記錄中;最后生成一個數(shù)據(jù)包發(fā)送給位于源IP地址的前端驗證代理模塊,該數(shù)據(jù)包包含有Nonce、RequestPacket禾口驗證內(nèi)容(記作VerifiedContent);其中VerifiedContent規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,還是對該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)進行度量,此外該驗證內(nèi)容還包括PCR標號,后端驗證代理模塊將這些PCR標號所對應的PCR內(nèi)容作為特權虛擬域和虛擬機監(jiān)控器的平臺信息。步驟3,前端驗證代理模塊從收到的數(shù)據(jù)包中獲取Nonce、RequestPacket,VerifiedContent;然后根據(jù)RequestPacket里的源IP地址和源端口號(用SAdd代表源IP地址和源端口號),獲取自包含可執(zhí)行軟件的進程號,如果VerifiedContentt規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,則根據(jù)該進程號獲取自包含可執(zhí)行軟件的全路徑信息,否則根據(jù)該進程號和驗證內(nèi)容獲取需要被度量的內(nèi)存地址范圍,無論是全路徑信息還是內(nèi)存地址范圍,都記作地址信息;最后前端驗證代理模塊將Nonce、SAdd,VerifiedContent、地址信息發(fā)送給后端驗證代理模塊。步驟4,后端驗證代理模塊收到前端驗證代理模塊的信息后,首先對Nonce和SAdd做哈希運算,結果記作Dl,用變量Vpcr表示VerifiedContent中PCR標號所對應的TPM內(nèi)部PCR的值;然后再利用TPM設備對Dl和Vpcr進行簽名,簽名結果記作Quote;最后將Quote和AIK證書發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中AIK證書包含有網(wǎng)絡客戶端AIK公鑰PUK_AIK。步驟5,后端驗證代理模塊將Quote做為參數(shù),調(diào)用TPM的TPM_TickStampBlob命令生成一個時間戳,記作TSl=Sign(QuoteTCVl||TSNl;SK_AIK),然后將TSl發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中SK_AIK為客戶端AIK的私鑰,TCVl為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSm為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù)。步驟6,如果地址信息是全路徑信息,則后端驗證代理模塊根據(jù)全路徑信息獲得自包含可執(zhí)行軟件文件,并對其進行哈希運算,結果記作M;如果地址信息是內(nèi)存地址范圍,則后端驗證代理模塊將地址信息發(fā)送給內(nèi)存度量模塊,內(nèi)存度量模塊根據(jù)接收到的信息生成度量值M并發(fā)給后端驗證代理模塊;后端驗證代理模塊對TSl和M做哈希運算,結果記作D2,然后將D2做為參數(shù),調(diào)用TPM_TickStampBlob命令生成一個時間戳,記作TS2=Sign(D2IITCV2||TSN2;SK_AIK),然后將TS2發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中TCV2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù)。步驟7,驗證模塊首先驗證AIK證書的合法性,如果不合法,則進入步驟1.11,否則從收到的信息中取出PUK_AIK并解密Quote,獲得Dl和Vpcr,對所保存的Nonce和SAdd做哈希運算,如果哈希結果與Dl不相等,則進入步驟11,否則根據(jù)保存的客戶端平臺信息驗證Vpcr值是否合法,如果不合法,則進入步驟11,否則進入步驟8。步驟8,驗證模塊利用PUK_AIK解密TSl和TS2,獲得Dl、TCVl、TSNl、D2、TCV2、TSN2;然后檢查TSm是否等于TSN2,如果不等于,則進入步驟11,否則進入步驟9。步驟9,驗證模塊計算(TCV2-TCV1),看值是否在預期的時間差范圍內(nèi),如果不在預期的時間差范圍內(nèi),則進入步驟11,否則進入步驟10。步驟10,驗證模塊對TSl和所保存的自包含可執(zhí)行軟件度量期望值進行哈希運算,如果結果與D2不相等,則進入步驟11,否則驗證模塊將自包含可執(zhí)行軟件的服務請求轉(zhuǎn)給服務程序,服務程序開始處理應用軟件的請求。步驟11,中斷與網(wǎng)絡客戶端的連接,并從客戶信息數(shù)據(jù)庫中刪除相關信息。下面詳述在自包含可執(zhí)行軟件運行過程中,網(wǎng)絡服務器對自包含可執(zhí)行軟件進行遠程驗證的工作流程步驟1,網(wǎng)絡服務器驗證模塊確定需要被驗證的軟件在客戶信息數(shù)據(jù)庫中所對應的記錄,然后生成一個隨機數(shù)Nonce,并用Nonce替代該記錄中的隨機數(shù),并從該記錄中的服務請求包(記作RequestPacket)中獲取源IP地址和源端口號,最后生成一個數(shù)據(jù)包發(fā)送給位于源IP地址的前端驗證代理模塊,該數(shù)據(jù)包包含有Nonce、RequestPacket、驗證內(nèi)容記作VerifiedContent);其中VerifiedContent規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,還是對該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)進行度量,此外該驗證內(nèi)容還包括PCR標號,后端驗證代理模塊將這些PCR標號所對應的PCR內(nèi)容作為特權虛擬域和虛擬機監(jiān)控器的平臺信息。步驟2,前端驗證代理模塊從收到的數(shù)據(jù)包中獲取Nonce、RequestPacket,VerifiedContent;然后根據(jù)RequestPacket里的源IP地址和源端口號(用SAdd代表源IP地址和源端口號),獲取自包含可執(zhí)行軟件的進程號,如果VerifiedContentt規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,則根據(jù)該進程號獲取自包含可執(zhí)行軟件的全路徑信息,否則根據(jù)該進程號和驗證內(nèi)容獲取需要被度量的內(nèi)存地址范圍,無論是全路徑信息還是內(nèi)存地址范圍,都記作地址信息;最后前端驗證代理模塊將Nonce、SAdd,VerifiedContent、地址信息發(fā)送給后端驗證代理模塊。步驟3,后端驗證代理模塊收到前端驗證代理模塊的信息后,首先對Nonce和SAdd做哈希運算,結果記作Dl,用變量Vpcr表示VerifiedContent中PCR標號所對應的TPM內(nèi)部PCR的值;然后再利用TPM設備對Dl和Vpcr進行簽名,簽名結果記作Quote;最后將Quote和AIK證書發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中AIK證書包含有網(wǎng)絡客戶端AIK公鑰PUK_AIK。步驟4,后端驗證代理模塊將Quote做為參數(shù),調(diào)用TPM的TPM_TickStampBlob命令生成一個時間戳,記作TSl=Sign(QuoteTCVl||TSNl;SK_AIK),然后將TSl發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中SK_AIK為客戶端AIK的私鑰,TCVl為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSm為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù)。步驟5,如果地址信息是全路徑信息,則后端驗證代理模塊根據(jù)全路徑信息獲得自包含可執(zhí)行軟件文件,并對其進行哈希運算,結果記作M;如果地址信息是內(nèi)存地址范圍,則后端驗證代理模塊將地址信息發(fā)送給內(nèi)存度量模塊,內(nèi)存度量模塊根據(jù)接收到的信息生成度量值M并發(fā)給后端驗證代理模塊;后端驗證代理模塊對TSl和M做哈希運算,結果記作D2,然后將D2做為參數(shù),調(diào)用TPM_TickStampBlob命令生成一個時間戳,記作TS2=Sign(D2IITCV2||TSN2;SK_AIK),然后將TS2發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中TCV2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù)。步驟6,驗證模塊首先驗證AIK證書的合法性,如果不合法,則進入步驟10,否則從收到的信息中取出PUK_AIK并解密Quote,獲得Dl和Vpcr,對所保存的Nonce和SAdd做哈希運算,如果哈希結果與Dl不相等,則進入步驟10,否則根據(jù)保存的客戶端平臺信息驗證Vpcr值是否合法,如果不合法,則進入步驟10,否則進入步驟7。步驟7,驗證模塊利用PUK_AIK解密TSl和TS2,獲得Dl、TCVl、TSNl、D2、TCV2、TSN2;然后檢查TSm是否等于TSN2,如果不等于,則進入步驟10,否則進入步驟8。步驟8,驗證模塊計算(TCV2-TCV1),看值是否在預期的時間差范圍內(nèi),如果不在預期的時間差范圍內(nèi),則進入步驟10,否則進入步驟9。步驟9,驗證模塊對TSl和所保存的自包含可執(zhí)行軟件度量期望值進行哈希運算,如果結果與D2不相等,則進入步驟10,否則驗證模塊將自包含可執(zhí)行軟件的服務請求轉(zhuǎn)給服務程序,服務程序開始處理應用軟件的請求。步驟10,中斷與網(wǎng)絡客戶端的連接,并從客戶信息數(shù)據(jù)庫中刪除相關信息。通過上述方法,網(wǎng)絡服務器不僅在自包含可執(zhí)行軟件第一次發(fā)出服務請求的時候,能夠驗證該軟件的完整性和真實性,而且在自包含可執(zhí)行軟件運行過程中,也可以隨時對該軟件的完整性和真實性進行遠程驗證。權利要求一種遠程動態(tài)驗證客戶端軟件完整性的方法,其特征在于方法組件包括網(wǎng)絡服務器中的驗證模塊、網(wǎng)絡客戶端特權虛擬域的后端驗證代理模塊、網(wǎng)絡客戶端虛擬機監(jiān)控器的內(nèi)存度量模塊、網(wǎng)絡客戶端客戶虛擬域的前端驗證代理模塊,當網(wǎng)絡客戶端客戶虛擬域的自包含可執(zhí)行軟件向網(wǎng)絡服務器發(fā)出服務請求時,網(wǎng)絡服務器對自包含可執(zhí)行軟件進行遠程驗證的具體步驟如下步驟1.1,網(wǎng)絡客戶端客戶虛擬域的自包含可執(zhí)行軟件向網(wǎng)絡服務器的服務程序發(fā)出服務請求;步驟1.2,網(wǎng)絡服務器驗證模塊截獲服務請求包RequestPacket,獲取請求包中的源IP地址和源端口號;然后驗證模塊生成一個隨機數(shù)Nonce,并在客戶信息數(shù)據(jù)庫創(chuàng)建一條以源IP地址和源端口號為索引的記錄,將Nonce和RequestPacket存放在該記錄中;最后生成一個數(shù)據(jù)包發(fā)送給位于源IP地址的前端驗證代理模塊,該數(shù)據(jù)包包含有Nonce、RequestPacket和驗證內(nèi)容VerifiedContent;其中VerifiedContent規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,還是對該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)進行度量,此外該驗證內(nèi)容還包括PCR標號,后端驗證代理模塊將這些PCR標號所對應的PCR內(nèi)容作為特權虛擬域和虛擬機監(jiān)控器的平臺信息;步驟1.3,前端驗證代理模塊從收到的數(shù)據(jù)包中獲取Nonce、RequestPacket、VerifiedContent;然后根據(jù)RequestPacket里的源IP地址和源端口號獲取自包含可執(zhí)行軟件的進程號,用SAdd代表源IP地址和源端口號;如果VerifiedContentt規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,則根據(jù)該進程號獲取自包含可執(zhí)行軟件的全路徑信息,否則根據(jù)該進程號和驗證內(nèi)容獲取需要被度量的內(nèi)存地址范圍,無論是全路徑信息還是內(nèi)存地址范圍,都記作地址信息;最后前端驗證代理模塊將Nonce、SAdd、VerifiedContent、地址信息發(fā)送給后端驗證代理模塊;步驟1.4,后端驗證代理模塊收到前端驗證代理模塊的信息后,首先對Nonce和SAdd做哈希運算,結果記作D1,用變量Vpcr表示VerifiedContent中PCR標號所對應的TPM內(nèi)部PCR的值;然后再利用TPM設備對D1和Vpcr進行簽名,簽名結果記作Quote;最后將Quote和AIK證書發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中AIK證書包含有網(wǎng)絡客戶端AIK公鑰PUK_AIK;步驟1.5,后端驗證代理模塊將Quote做為參數(shù),調(diào)用TPM的TPM_TickStampBlob命令生成一個時間戳,記作TS1=Sign(Quote||TCV1||TSN1;SK_AIK),然后將TS1發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中符號||表示鏈接,Sign(string;key)表示用密鑰key對字符串string進行簽名,SK_AIK為客戶端AIK的私鑰,TCV1為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN1為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟1.6,如果地址信息是全路徑信息,則后端驗證代理模塊根據(jù)全路徑信息獲得自包含可執(zhí)行軟件文件,并對其進行哈希運算,結果記作M;如果地址信息是內(nèi)存地址范圍,則后端驗證代理模塊將地址信息發(fā)送給內(nèi)存度量模塊,內(nèi)存度量模塊根據(jù)接收到的信息生成度量值M并發(fā)給后端驗證代理模塊;后端驗證代理模塊對TS1和M做哈希運算,結果記作D2,然后將D2做為參數(shù),調(diào)用TPM_TickStampBlob命令生成一個時間戳,記作TS2=Sign(D2||TCV2||TSN2;SK_AIK),然后將TS2發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中TCV2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟1.7,驗證模塊首先驗證AIK證書的合法性,如果不合法,則進入步驟1.11,否則從收到的信息中取出PUK_AIK并解密Quote,獲得D1和Vpcr,對所保存的Nonce和SAdd做哈希運算,如果哈希結果與D1不相等,則進入步驟1.11,否則根據(jù)保存的客戶端平臺信息驗證Vpcr值是否合法,如果不合法,則進入步驟1.11,否則進入步驟1.8;步驟1.8,驗證模塊利用PUK_AIK解密TS1和TS2,獲得D1、TCV1、TSN1、D2、TCV2、TSN2;然后檢查TSN1是否等于TSN2,如果不等于,則進入步驟1.11,否則進入步驟1.9;步驟1.9,驗證模塊計算TCV2-TCV1,看值是否在預期的時間差范圍內(nèi),如果不在預期的時間差范圍內(nèi),則進入步驟1.11,否則進入步驟1.10;步驟1.10,驗證模塊對TS1和所保存的自包含可執(zhí)行軟件度量期望值進行哈希運算,如果結果與D2不相等,則進入步驟1.11,否則驗證模塊將自包含可執(zhí)行軟件的服務請求轉(zhuǎn)給服務程序,服務程序開始處理應用軟件的請求;步驟1.11,中斷與網(wǎng)絡客戶端的連接,并從客戶信息數(shù)據(jù)庫中刪除相關信息。2.基于權利要求1所述的一種遠程動態(tài)驗證客戶端軟件完整性的方法,其特征在于步驟1.10完成之后,網(wǎng)絡服務器利用步驟1.2在客戶信息數(shù)據(jù)庫所建立的信息,隨時對自包含可執(zhí)行軟件進行遠程驗證,具體步驟如下步驟2.1,網(wǎng)絡服務器驗證模塊確定需要被驗證的軟件在客戶信息數(shù)據(jù)庫中所對應的記錄,然后生成一個隨機數(shù)Nonce,并用Nonce替代該記錄中的隨機數(shù),并從該記錄中的服務請求包RequestPacket中獲取源IP地址和源端口號,最后生成一個數(shù)據(jù)包發(fā)送給位于源IP地址的前端驗證代理模塊,該數(shù)據(jù)包包含有Nonce、RequestPacket、驗證內(nèi)容VerifiedContent;其中VerifiedContent規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,還是對該軟件運行時在程序代碼段、程序數(shù)據(jù)段、程序堆棧段等中的數(shù)據(jù)進行度量,此外該驗證內(nèi)容還包括PCR標號,后端驗證代理模塊將這些PCR標號所對應的PCR內(nèi)容作為特權虛擬域和虛擬機監(jiān)控器的平臺信息;步驟2.2,前端驗證代理模塊從收到的數(shù)據(jù)包中獲取Nonce、RequestPacket,VerifiedContent;然后根據(jù)RequestPacket里的源IP地址和源端口號,獲取自包含可執(zhí)行軟件的進程號,如果VerifiedContentt規(guī)定了是對自包含可執(zhí)行軟件文件本身進行度量,則根據(jù)該進程號獲取自包含可執(zhí)行軟件的全路徑信息,否則根據(jù)該進程號和驗證內(nèi)容獲取需要被度量的內(nèi)存地址范圍,無論是全路徑信息還是內(nèi)存地址范圍,都記作地址信息;最后前端驗證代理模塊將Nonce、SAdd、VerifiedContent、地址信息發(fā)送給后端驗證代理模塊;步驟2.3,后端驗證代理模塊收到前端驗證代理模塊的信息后,首先對Nonce和SAdd做哈希運算,結果記作D1,用變量Vpcr表示VerifiedContent中PCR標號所對應的TPM內(nèi)部PCR的值;然后再利用TPM設備對D1和Vpcr進行簽名,簽名結果記作Quote;最后將Quote和AIK證書發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中AIK證書包含有網(wǎng)絡客戶端AIK公鑰PUK_AIK;步驟2.4,后端驗證代理模塊將Quote做為參數(shù),調(diào)用TPM的TPM_TickStampBlob命令生成一個時間戳,記作TS1=Sign(QuoteTCV11|TSN1;SK_AIK),然后將TS1發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中SK_AIK為客戶端AIK的私鑰,TCV1為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSm為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟2.5,如果地址信息是全路徑信息,則后端驗證代理模塊根據(jù)全路徑信息獲得自包含可執(zhí)行軟件文件,并對其進行哈希運算,結果記作M;如果地址信息是內(nèi)存地址范圍,則后端驗證代理模塊將地址信息發(fā)送給內(nèi)存度量模塊,內(nèi)存度量模塊根據(jù)接收到的信息生成度量值M并發(fā)給后端驗證代理模塊;后端驗證代理模塊對TS1和M做哈希運算,結果記作D2,然后將D2做為參數(shù),調(diào)用TPM_TickStampBlob命令生成一個時間戳,記作TS2=Sign(D2||TCV2||TSN2;SK_AIK),然后將TS2發(fā)送給前端驗證代理模塊,前端驗證代理模塊再發(fā)給驗證模塊;其中TCV2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的當前滴答值,TSN2為用于產(chǎn)生時間戳的TPM滴答計數(shù)器的時間會話隨機數(shù);步驟2.6,驗證模塊首先驗證AIK證書的合法性,如果不合法,則進入步驟2.10,否則從收到的信息中取出PUK_AIK并解密Quote,獲得D1和Vpcr,對所保存的Nonce和SAdd做哈希運算,如果哈希結果與D1不相等,則進入步驟2.10,否則根據(jù)保存的客戶端平臺信息驗證Vpcr值是否合法,如果不合法,則進入步驟2.10,否則進入步驟2.7;步驟2.7,驗證模塊利用PUK_AIK解密TS1和TS2,獲得D1、TCV1、TSN1、D2、TCV2、TSN2;然后檢查TSm是否等于TSN2,如果不等于,則進入步驟2.10,否則進入步驟2.8;步驟2.8,驗證模塊計算TCV2-TCV1,看值是否在預期的時間差范圍內(nèi),如果不在預期的時間差范圍內(nèi),則進入步驟2.10,否則進入步驟2.9;步驟2.9,驗證模塊對TS1和所保存的自包含可執(zhí)行軟件度量期望值進行哈希運算,如果結果與D2不相等,則進入步驟2.10,否則驗證模塊將自包含可執(zhí)行軟件的服務請求轉(zhuǎn)給服務程序,服務程序開始處理應用軟件的請求;步驟2.10,中斷與網(wǎng)絡客戶端的連接,并從客戶信息數(shù)據(jù)庫中刪除相關信息。全文摘要本發(fā)明提供了一種遠程動態(tài)驗證客戶端軟件完整性的方法。本方法利用TCG遠程證明方法、Xen虛擬機安全隔離性質(zhì)以及可信平臺模塊(TPM)時間戳功能,實現(xiàn)了網(wǎng)絡服務器對網(wǎng)絡客戶端不可信客戶虛擬域的自包含可執(zhí)行軟件(Self-containedexecutables)的遠程動態(tài)驗證。本方法中,網(wǎng)絡客戶端配備安全芯片TPM,并安裝了Xen虛擬機系統(tǒng)。本方法所采用的遠程動態(tài)驗證架構由完整性度量機制、報告機制和驗證機制三部分組成,其中完整性度量機制由安裝在網(wǎng)絡客戶端特權虛擬域的后端驗證代理模塊和安裝在網(wǎng)絡客戶端虛擬機監(jiān)控器的內(nèi)存度量模塊來完成,報告機制由安裝在網(wǎng)絡客戶端客戶虛擬域的前端驗證代理模塊來完成,驗證機制由安裝在網(wǎng)絡服務器的驗證模塊來完成。文檔編號H04L29/06GK101834860SQ20101015283公開日2010年9月15日申請日期2010年4月22日優(yōu)先權日2010年4月22日發(fā)明者劉吉強,崇信毅,左向暉,常曉林,王紹創(chuàng),鞠頌,韓臻申請人:北京交通大學