陳興蜀,王偉,金鑫
?
基于標(biāo)簽的vTPM私密信息保護(hù)方案
陳興蜀1,2,王偉1,3,金鑫1,3
(1. 四川大學(xué)網(wǎng)絡(luò)空間安全研究院,四川 成都 610065; 2. 四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,四川 成都 610065;3. 四川大學(xué)計(jì)算機(jī)學(xué)院,四川 成都 610065)
虛擬可信平臺模塊是可信計(jì)算技術(shù)虛擬化的重要組件。vTPM的私密信息存在被竊取、濫用的風(fēng)險(xiǎn),為此,提出一種基于標(biāo)簽的安全保護(hù)方案。首先,為每個(gè)虛擬機(jī)建立vTPM標(biāo)簽,標(biāo)簽包括簽名信息、加密信息、度量信息和狀態(tài)信息。然后,基于vTPM標(biāo)簽的狀態(tài)信息設(shè)計(jì)安全增強(qiáng)的vTPM動(dòng)態(tài)遷移協(xié)議,保障遷移前后vTPM私密信息的機(jī)密性、完整性以及虛擬機(jī)與vTPM實(shí)例關(guān)聯(lián)關(guān)系的一致性。實(shí)驗(yàn)表明,所提方案能夠有效保護(hù)vTPM的私密信息,并且給虛擬機(jī)動(dòng)態(tài)遷移帶來的性能開銷只有19.36%。
可信計(jì)算;虛擬可信平臺模塊;TPM2.0;動(dòng)態(tài)遷移
虛擬化平臺Xen、開源的系統(tǒng)虛擬化模塊(KVM, kernel-based virtual machine)都有虛擬可信平臺模塊(vTPM, virtual trusted platform module)的實(shí)現(xiàn)方案,兩者均涉及TPM(trusted platform module)非易失性信息的模擬。由于TPM的非易失性信息存儲了背書密鑰(EK, endorsement key)等非對稱密鑰、訪問口令等私密信息,因此本文將vTPM的非易失性信息稱為vTPM的私密信息。
vTPM私密信息面臨的威脅主要表現(xiàn)在其機(jī)密性、完整性以及vTPM和虛擬機(jī)(VM, virtual machine)之間的關(guān)聯(lián)關(guān)系上。文獻(xiàn)[1]在Xen上采用設(shè)備驅(qū)動(dòng)分離的方式實(shí)現(xiàn)vTPM,每個(gè)vTPM實(shí)例的私密信息存儲于根vTPM實(shí)例中,利用根vTPM實(shí)例的存儲密鑰對其進(jìn)行加密存儲。Hypervisor維護(hù)了vTPM和虛擬機(jī)的關(guān)聯(lián)列表,該vTPM-VM列表最終存放于domain0中,需要進(jìn)一步的安全防護(hù)。文獻(xiàn)[2]利用事務(wù)性同步擴(kuò)展技術(shù)(TSX, transactional synchronization extension)對vTPM的私密信息進(jìn)行安全防護(hù),利用硬件CPU相關(guān)的AES主密鑰進(jìn)行加解密,由于該密鑰不能被遷移,因此該方法不支持vTPM遷移。文獻(xiàn)[3]借助于Intel的軟件防護(hù)擴(kuò)展技術(shù)(SGX, software guard extension)將vTPM的代碼和數(shù)據(jù)存放到安全內(nèi)存enclave中,利用基于enclave身份的密封機(jī)制加密存儲vTPM私密信息,然而密封的數(shù)據(jù)不能被遷移到較新版本的應(yīng)用或安全區(qū)中,不存在一種vTPM版本更新機(jī)制。文獻(xiàn)[4]使用物理TPM2.0的可遷移密鑰加密存儲vTPM私密信息,基于可遷移密鑰的復(fù)制機(jī)制實(shí)現(xiàn)了vTPM的安全遷移,但無法識別虛擬機(jī)配置為“vm_1_uuid,vm_2_鏡像,vm_1_vTPM”下虛擬機(jī)1的vTPM私密信息被虛擬機(jī)2使用的情況。文獻(xiàn)[5]建立管理中心維護(hù)vTPM和虛擬機(jī)的關(guān)聯(lián)關(guān)系,建立vTPM實(shí)例文件的度量列表保證虛擬機(jī)關(guān)閉時(shí)vTPM私密信息的完整性,但無法保證虛擬機(jī)運(yùn)行時(shí)vTPM私密信息的完整性。以上文獻(xiàn)都沒有提及虛擬機(jī)動(dòng)態(tài)遷移中如何保護(hù)vTPM私密信息的安全。文獻(xiàn)[6]提出一種基于KVM的vTPM動(dòng)態(tài)遷移方案,但該方案只適用于配置共享存儲的情況,而且沒有關(guān)注遷移過程中vTPM的安全問題。文獻(xiàn)[7]利用SGX技術(shù)的遠(yuǎn)程認(rèn)證機(jī)制建立安全遷移信道,實(shí)現(xiàn)虛擬機(jī)(包括vTPM)的安全動(dòng)態(tài)遷移,但是需要修改vTPM的源碼結(jié)構(gòu),改變了原本遷移雙方的信息交互方式。文獻(xiàn)[8-9]在遷移協(xié)議中加入新的安全驗(yàn)證與密鑰生成機(jī)制,增強(qiáng)vTPM動(dòng)態(tài)遷移的安全。文獻(xiàn)[10]提出一種位于TPM和vTPM之間的密鑰層次來解決Xen上虛擬機(jī)遷移造成的vTPM密鑰失效的問題,該方案僅適用于暫停?遷移?重啟的遷移模式,這種遷移模式不是真正意義上的動(dòng)態(tài)遷移。
本文針對本地存儲和動(dòng)態(tài)遷移兩個(gè)階段提出一種新的vTPM私密信息保護(hù)方案,主要貢獻(xiàn)如下:1) 提出vTPM標(biāo)簽結(jié)構(gòu),利用物理TPM2.0保護(hù)vTPM私密信息的機(jī)密性、完整性以及vTPM和虛擬機(jī)的對應(yīng)關(guān)系;2) 基于vTPM標(biāo)簽的狀態(tài)屬性,在不改變遷移雙方信息交互方式的情況下,設(shè)計(jì)了安全增強(qiáng)的vTPM動(dòng)態(tài)遷移協(xié)議;3) 實(shí)現(xiàn)了原型系統(tǒng),并進(jìn)行了功能和性能測試。
KVM虛擬化平臺的TPM虛擬化技術(shù)主要有3類:TPM passthrough實(shí)現(xiàn)方式、基于libtpms[11]的全虛擬化TPM實(shí)現(xiàn)方式以及CUSE(character device in userspace)TPM[12]實(shí)現(xiàn)方式,其中,后兩者屬于全虛擬化TPM的實(shí)現(xiàn)方式。TPM passthrough實(shí)現(xiàn)方式允許虛擬機(jī)直接使用物理TPM,同一時(shí)刻物理TPM被單個(gè)虛擬機(jī)獨(dú)占。基于libtpms的全虛擬化TPM(如圖1(a)所示)在QEMU(quick emulator)內(nèi)部使用libtpms函數(shù)庫模擬物理TPM,可同時(shí)為每個(gè)虛擬機(jī)提供單獨(dú)的vTPM設(shè)備,與物理TPM完全脫離關(guān)系。CUSE TPM(如圖1(b)所示)是基于libtpms的全虛擬化TPM的變種,在QEMU外部使用libtpms函數(shù)庫來模擬物理TPM,在宿主機(jī)上創(chuàng)建用戶空間字符設(shè)備/dev/vtpm0,提供IOCTL訪問接口,在QEMU內(nèi)部的CUSE TPM驅(qū)動(dòng)利用該IOCTL訪問vTPM,與物理TPM完全脫離關(guān)系。
圖1 全虛擬化TPM
KVM虛擬化平臺的全虛擬化TPM有如下不足:1) 采用libtpms函數(shù)庫模擬物理TPM的全部功能,與物理TPM完全脫離關(guān)系;2) 將vTPM私密信息存儲在宿主機(jī)文件非易失存儲器(NVRAM, non-volatile RAM)中,沒有添加任何安全措施;3)通過QEMU的命令行參數(shù)加載對應(yīng)的vTPM實(shí)例,vTPM和VM之間的關(guān)聯(lián)關(guān)系薄弱。
TPM2.0中包含3個(gè)持久性密鑰層次[13],即背書層次(endorsement hierarchy)、存儲層次(storage hierarchy)和平臺層次(platform hierarchy),與一個(gè)臨時(shí)性密鑰,即層次?空層次(NULL hierarchy)。每個(gè)密鑰層次對應(yīng)一個(gè)私有種子,即大隨機(jī)數(shù)。背書私有種子(EPS, endorsement primary seed)產(chǎn)生背書密鑰(EK, endorsement keys),存儲私有種子(SPS, storage primary seed)產(chǎn)生存儲根密鑰(SRK, storage root keys),平臺私有種子(PPS, platform primary seed)由平臺固件使用,空私有種子(NS, NULL seed)是每次系統(tǒng)重啟時(shí)產(chǎn)生的隨機(jī)數(shù)。
本文將TPM2.0存儲根密鑰的兩個(gè)非對稱的不可遷移子密鑰——RSA_local和RSA_mig,分別用于本地存儲和動(dòng)態(tài)遷移過程中的vTPM私密信息保護(hù),如圖2所示。另外,RSA_mig需要被CA簽名,形成對應(yīng)的數(shù)字證書,用于vTPM動(dòng)態(tài)遷移安全增強(qiáng)。
圖2 TPM2.0密鑰層次結(jié)構(gòu)
文獻(xiàn)[2,14-16]在vTPM與虛擬機(jī)的關(guān)聯(lián)關(guān)系、vTPM與其可信計(jì)算基(TCB, trusted computing base)[17]的依賴關(guān)系、vTPM私密信息存儲、基于證書的信任鏈擴(kuò)展、vTPM的密鑰管理、vTPM的遷移等6個(gè)方面對vTPM的實(shí)現(xiàn)提出了安全要求。
結(jié)合上述文獻(xiàn)中的安全要求,本文認(rèn)為KVM下的vTPM私密信息保護(hù)應(yīng)該滿足以下3點(diǎn)設(shè)計(jì)原則需求:1) vTPM私密信息在本地存儲時(shí)的機(jī)密性、完整性由硬件TPM保證;2) vTPM和虛擬機(jī)保持一一對應(yīng)的強(qiáng)關(guān)聯(lián)關(guān)系;3) vTPM支持動(dòng)態(tài)遷移,并且遷移不會破壞以上兩種安全需求。
vTPM標(biāo)簽(vTPM_label)是本文提出的一種數(shù)據(jù)結(jié)構(gòu),是vTPM私密信息本地存儲保護(hù)方案和動(dòng)態(tài)遷移保護(hù)方案的核心元素。vTPM標(biāo)簽的結(jié)構(gòu)類似于數(shù)字證書,其完整性受硬件TPM2.0的簽名保護(hù)。vTPM標(biāo)簽結(jié)構(gòu)及大小如圖3所示。
圖3 vTPM標(biāo)簽結(jié)構(gòu)
vTPM標(biāo)簽主要內(nèi)容描述如下。
1) 狀態(tài)(status):vTPM標(biāo)簽有兩種存在狀態(tài),即本地狀態(tài)和遷移狀態(tài);2) 有效期(time):在時(shí)間段[start,end]內(nèi)vTPM標(biāo)簽是有效的,過期的vTPM標(biāo)簽需要被重新生成;3) 加密信息(secret):vTPM私密信息保護(hù)所使用key的密文,利用物理TPM的密鑰RSA_local對key進(jìn)行加密;4) UUID(universally unique identifier)的hash值(uuid_hash):UUID是虛擬機(jī)在云平臺中的唯一標(biāo)識,UUID的hash值建立了vTPM標(biāo)簽與虛擬機(jī)之間的一一對應(yīng)關(guān)系,同時(shí)secret字段建立了vTPM標(biāo)簽和vTPM之間的一一對應(yīng)關(guān)系,最終建立起vTPM和虛擬機(jī)之間的一一對應(yīng)關(guān)系;5) QEMU度量值(qemu_ digest):在KVM虛擬化平臺中,QEMU是虛擬機(jī)監(jiān)控器(VMM, virtual machine monitor)的一部分,同時(shí)也是vTPM實(shí)例的訪問者,該字段是對QEMU代碼段進(jìn)行散列運(yùn)算得到的值,作為vTPM實(shí)例的訪問者身份認(rèn)證的證據(jù),防止被篡改劫持的QEMU或其他惡意程序使用vTPM實(shí)例;6) 簽名算法(alg):標(biāo)簽簽名值的生成算法;7) 標(biāo)簽的簽名值(sig):由TPM2.0的密鑰RSA_local對以上字段進(jìn)行簽名得到的值,防止標(biāo)簽被惡意篡改。
vTPM標(biāo)簽存在兩種狀態(tài):本地狀態(tài)和遷移狀態(tài)。其中,遷移狀態(tài)是一種臨時(shí)狀態(tài),只出現(xiàn)在遷移的過程中。
本地狀態(tài)是指該vTPM標(biāo)簽的sig字段由本地TPM2.0的密鑰RSA_local生成,標(biāo)簽中的secret字段由本地TPM2.0密鑰RSA_local加密,即vTPM_label.sig=RSA_local.privsign(vTPM_label),vTPM_label.secret= RSA_local.pubencrypt(key)。
遷移狀態(tài)是指該vTPM標(biāo)簽的sig字段由遷移源主機(jī)TPM2.0的密鑰RSA_mig生成,標(biāo)簽中的secret字段由遷移目的主機(jī)TPM2.0的密鑰RSA _mig加密,即vTPM_label.sig=src.RSA_mig.privsign(vTPM_label),vTPM_label.secret=dst.RSA_mig. pubencrypt(key)。
其中,src、dst分別代表遷移源主機(jī)和遷移目的主機(jī),pub和priv分別表示公鑰和私鑰。由于vTPM標(biāo)簽兩種狀態(tài)之間可以轉(zhuǎn)換,此處給出vTPM標(biāo)簽狀態(tài)的轉(zhuǎn)換函數(shù)exchange(vTPM_label)的偽代碼,如算法1所示。
算法1 vTPM標(biāo)簽狀態(tài)的轉(zhuǎn)換函數(shù)exchange (vTPM_label)
輸入 vTPM_label
輸出 succ或者fail
if vTPM_label.status==本地狀態(tài) then:
if RSA_ local. pubverify(vTPM_label.sig) == succ then:
KEY = RSA_local. Pubdecrypt(vTPM_label. secret)
vTPM_label.secret = dst.RSA_mig.pubencrypt(KEY)
vTPM_label.sig = local.RSA_mig.privsign(vTPM _label)
vTPM_label.status = 遷移狀態(tài)
return succ
else if vTPM_label.status = 遷移狀態(tài) then
if src.RSA_mig. pubverify(vTPM_label.sig)== succ then
KEY = local RSA_mig.privdecrypt(vTPM_ label. secret)
vTPM_label.secret= RSA_local.pubencrypt(KEY)
vTPM_label.sig = RSA_local. privsign(vTPM _label)
vTPM_label.status = 本地狀態(tài)
return succ
return fail
由于一臺物理機(jī)可以運(yùn)行多個(gè)虛擬機(jī),如果每個(gè)虛擬機(jī)對應(yīng)一個(gè)vTPM實(shí)例,便會有多個(gè)vTPM標(biāo)簽需要管理。為了減小由vTPM標(biāo)簽存儲與管理帶來的復(fù)雜性和攻擊面,本文方案將vTPM標(biāo)簽存儲于對應(yīng)的虛擬機(jī)鏡像中,在減小管理復(fù)雜度的同時(shí)也增加了vTPM和VM之間的關(guān)聯(lián)強(qiáng)度。
QCOW2(QEMU copy on write version 2)[18]是QEMU模擬器官方支持的虛擬機(jī)鏡像文件格式。一個(gè)QCOW2文件被劃分為固定大小的塊,這些固定大小的塊被稱為cluster,每個(gè)cluster的大小必須在512 B~2 MB之間,而且必須是512 B的整數(shù)倍,默認(rèn)的cluster大小為64 kB。其中,QCOW2文件的第一個(gè)cluster用于存儲頭部信息和頭部擴(kuò)展信息,如圖4所示。QCOW2的頭部信息占據(jù)72 B,緊隨其后的是頭部擴(kuò)展信息。每個(gè)頭部拓展包含3個(gè)字段:type、length、data,其中,type字段和length字段各占據(jù)4 B,data字段的長度由length字段指定,type=0x00000000是頭部擴(kuò)展的結(jié)束標(biāo)志。本文構(gòu)造一個(gè)QCOW2的頭部擴(kuò)展{0x12345678, 368, vTPM標(biāo)簽+padding},用來存儲vTPM標(biāo)簽,因?yàn)轭^部擴(kuò)展是8 B對齊的,于是通過填充0x00擴(kuò)展vTPM標(biāo)簽為8 B的整數(shù)倍。
圖4 QCOW2的第一個(gè)cluster
3.3.1 總體設(shè)計(jì)
針對vTPM在本地存儲上的安全問題,本文設(shè)計(jì)了vTPM私密信息本地存儲保護(hù)方案。方案包括3個(gè)組件:本地存儲保護(hù)代理、vTPM標(biāo)簽、本地存儲保護(hù)內(nèi)核部分,如圖5所示。
本地存儲保護(hù)代理位于QEMU進(jìn)程空間內(nèi)部,針對vTPM私密信息的機(jī)密性、完整性進(jìn)行實(shí)時(shí)的保護(hù),最終將vTPM私密信息加密存儲在非易失性隨機(jī)訪問存儲(NVRAM, non-volatile RAM)文件中,所需要的key在虛擬機(jī)啟動(dòng)時(shí)向本地存儲保護(hù)內(nèi)核部分請求。
vTPM標(biāo)簽是上文所述的一種數(shù)據(jù)結(jié)構(gòu),受控于內(nèi)核中的vTPM標(biāo)簽管理子模塊。
本地存儲保護(hù)內(nèi)核部分包括4個(gè)子模塊:vTPM標(biāo)簽管理模塊、vTPM訪問控制模塊、對應(yīng)關(guān)系檢測模塊和TPM命令管理模塊。vTPM標(biāo)簽管理子模塊提供vTPM標(biāo)簽的生成、完整性和有效期驗(yàn)證、更新和銷毀等功能。vTPM訪問控制子模塊根據(jù)vTPM標(biāo)簽的qemu_digest字段檢測訪問者是否合法,因此,當(dāng)本地存儲保護(hù)代理請求key時(shí),它是第一個(gè)接收訪問請求的子模塊。對應(yīng)關(guān)系檢測子模塊根據(jù)vTPM標(biāo)簽中的“UUID”字段檢測訪問者是否為該標(biāo)簽對應(yīng)的虛擬機(jī)。TPM命令管理子模塊向vTPM標(biāo)簽管理子模塊提供TPM2.0的各種服務(wù),尤其是密鑰RSA_local和RSA_mig的加解密、簽名、驗(yàn)證等功能。
另外,tpm_crb(TPM2.0 command response buffer)[19]是TPM2.0在內(nèi)核中的驅(qū)動(dòng)程序。用戶層TCG軟件棧(TSS, TCG software stack)通過該驅(qū)動(dòng)操作TPM2.0,使TPM命令管理子模塊對tpm_crb驅(qū)動(dòng)向上層TSS提供的IOCTL接口進(jìn)行掛鉤,截取TSS發(fā)送給tpm_crb的TPM命令,按照一定的規(guī)則對部分TPM命令進(jìn)行過濾,防止管理員的誤操作,保護(hù)本文方案所使用的物理TPM密鑰的安全。
圖5 本地存儲保護(hù)方案
3.3.2 本地存儲保護(hù)代理
本地存儲保護(hù)代理包括兩個(gè)部分:完整性保護(hù)引擎和機(jī)密性保護(hù)引擎,如圖6所示。
完整性保護(hù)引擎可以有效地識別出虛擬機(jī)加載的vTPM私密信息是否被惡意篡改。該引擎擴(kuò)展vTPM私密信息的存儲結(jié)構(gòu),新添加一個(gè)hash[]數(shù)組,用于存儲對vTPM私密信息進(jìn)行散列計(jì)算得到的值,然后使用物理TPM的密鑰RSA_local對該數(shù)組進(jìn)行加密,防止其被惡意篡改。
機(jī)密性保護(hù)引擎將vTPM私密信息加密存儲在NVRAM中,防止信息泄露。因?yàn)関TPM私密信息是vTPM的非易失性信息,所以長度是有限的(本實(shí)驗(yàn)平臺上,其最大長度為0x4 000 B),再加上引擎使用AES加密算法,因此加解密過程帶來的性能消耗較小,實(shí)驗(yàn)證明平均一次加密耗時(shí)為0.1 ms左右。
在虛擬機(jī)整個(gè)生命周期內(nèi),vTPM對NVRAM的讀寫是有規(guī)律的。虛擬機(jī)啟動(dòng)時(shí)初始化vTPM,此時(shí)會讀取NVRAM一次,vTPM私密信息成功加載后,vTPM便不再讀取NVRAM,然而當(dāng)vTPM執(zhí)行TPM命令導(dǎo)致加載的vTPM私密信息發(fā)生變化時(shí),vTPM私密信息便會被覆蓋式地寫入NVRAM。結(jié)合對以上兩種引擎的分析可知,在虛擬機(jī)運(yùn)行中,頻繁的操作是添加hash和加密,如圖6所示,對于系統(tǒng)的性能影響較小。
圖6 本地存儲保護(hù)代理
3.3.3 vTPM訪問控制
vTPM訪問控制子模塊對訪問者身份進(jìn)行驗(yàn)證,如圖7所示。假設(shè)訪問者為進(jìn)程V,則主要步驟為:1) 獲取V的啟動(dòng)參數(shù)args,按照QEMU的參數(shù)格式解析V.args,找到鏡像文件路徑image_path;2) 獲取V打開的文件列表open_f_list,檢查image_path是否在open_f_list中,通過檢查則表示找到了鏡像文件image_path;3) 調(diào)用vTPM標(biāo)簽管理子模塊的功能,對image_path中的vTPM標(biāo)簽進(jìn)行完整性和有效期驗(yàn)證,然后提取qemu_digest字段;4) 度量V的代碼段得到V.hash;5) 對比V.hash和vTPM_label.qemu_digest,驗(yàn)證通過則交給子模塊對應(yīng)關(guān)系檢測,否則返回錯(cuò)誤值。
圖7 vTPM訪問控制
3.3.4 vTPM和虛擬機(jī)的一一對應(yīng)關(guān)系
對應(yīng)關(guān)系檢測子模塊驗(yàn)證vTPM和虛擬機(jī)的一一對應(yīng)關(guān)系,如圖8所示,該檢測的前提是訪問者通過了vTPM訪問控制子模塊的驗(yàn)證。假設(shè)訪問者為V,則主要步驟為:1) 獲取V的啟動(dòng)參數(shù)args,按照QEMU的參數(shù)格式解析V.args,找到虛擬機(jī)唯一標(biāo)識符——UUID;2) 調(diào)用vTPM標(biāo)簽管理子模塊的功能,對鏡像文件中的vTPM標(biāo)簽進(jìn)行完整性和有效期驗(yàn)證,然后提取uuid_hash字段;3) 對比hash(UUID)和vTPM_label.uuid_hash,驗(yàn)證通過則認(rèn)為對應(yīng)關(guān)系正確,否則返回錯(cuò)誤值。
圖8 對應(yīng)關(guān)系檢測
3.4.1 遷移流程
動(dòng)態(tài)遷移是虛擬化平臺的一項(xiàng)基本功能。為了保證動(dòng)態(tài)遷移不會破壞vTPM私密信息和易失性信息的安全需求,即機(jī)密性、完整性、vTPM和虛擬機(jī)的一一對應(yīng)關(guān)系,本文利用vTPM標(biāo)簽的狀態(tài)信息設(shè)計(jì)了動(dòng)態(tài)遷移保護(hù)方案,如圖9所示。相比本地存儲保護(hù)方案,本方案新增了動(dòng)態(tài)遷移保護(hù)代理子模塊和遷移管理子模塊。
遷移管理子模塊與本地存儲保護(hù)內(nèi)核部分進(jìn)行交互,利用算法1轉(zhuǎn)換vTPM標(biāo)簽的狀態(tài)。
圖9 vTPM動(dòng)態(tài)遷移框架
動(dòng)態(tài)遷移保護(hù)代理子模塊為虛擬機(jī)動(dòng)態(tài)遷移增加了3個(gè)新的階段,分別負(fù)責(zé)安全遷移vTPM的易失性信息、私密信息(NVRAM)和vTPM標(biāo)簽。1) 同步vTPM設(shè)備狀態(tài)(即vTPM易失性信息)階段,動(dòng)態(tài)遷移保護(hù)代理子模塊注冊vTPM設(shè)備為可遷移設(shè)備,從QEMU進(jìn)程空間中收集vTPM的易失性信息,封裝到數(shù)據(jù)結(jié)構(gòu)vTPM_status中,作為虛擬機(jī)設(shè)備狀態(tài)的一部分進(jìn)行遷移;2) vTPM標(biāo)簽拷貝階段,動(dòng)態(tài)遷移保護(hù)代理子模塊從虛擬機(jī)鏡像中收集vTPM標(biāo)簽,與遷移管理子模塊交互進(jìn)行vTPM標(biāo)簽狀態(tài)的轉(zhuǎn)換,然后封裝vTPM標(biāo)簽到數(shù)據(jù)結(jié)構(gòu)vTPM_label中,作為虛擬機(jī)鏡像的一部分進(jìn)行遷移;3) NVRAM拷貝階段,塊設(shè)備的遷移由QEMU的init_ blk_migration函數(shù)進(jìn)行初始化,該函數(shù)會檢查虛擬機(jī)所有的塊設(shè)備文件,包括vTPM的塊設(shè)備文件NVRAM,一旦vTPM被注冊為可遷移設(shè)備,NVRAM便和虛擬機(jī)鏡像文件采用相同的臟頁重傳機(jī)制進(jìn)行動(dòng)態(tài)遷移。
圖10 vTPM動(dòng)態(tài)遷移協(xié)議
3.4.2 遷移協(xié)議
利用vTPM標(biāo)簽的狀態(tài)信息,本文設(shè)計(jì)了安全的vTPM動(dòng)態(tài)遷移協(xié)議,如圖10所示。該協(xié)議借助于普通虛擬機(jī)動(dòng)態(tài)遷移的通道傳輸vTPM相關(guān)信息,不改變遷移源平臺和遷移目的平臺之間的信息交互方式。
本文對協(xié)議中涉及的操作原語定義如下。
update(secret, vTPM_label):更新vTPM標(biāo)簽的secret字段。
update(time,vTPM_label):更新vTPM標(biāo)簽的time字段,更新后的time.start為當(dāng)前時(shí)間。
request_cert(ip):向CA查詢某個(gè)IP對應(yīng)的數(shù)字證書,遷移源平臺IP為src.ip,遷移目的平臺IP為dst.ip。
exchange(vTPM_label):轉(zhuǎn)換vTPM標(biāo)簽的狀態(tài),偽代碼如算法1所示。
transfer(content):普通虛擬機(jī)動(dòng)態(tài)遷移使用的傳輸函數(shù),傳輸內(nèi)容為content。
encrypt(content,key):使用key加密內(nèi)容content。
decrypt(package,key):使用key解密內(nèi)容package。
store(vTPM_status):收集vTPM的易失性信息,存儲到數(shù)據(jù)結(jié)構(gòu)vTPM_status中。
load(vTPM_status):從數(shù)據(jù)結(jié)構(gòu)vTPM_status中提取vTPM的易失性信息,并加載到vTPM設(shè)備狀態(tài)中。
hash(content):生成content的hash值。
validate(vTPM_status, package):驗(yàn)證package中vTPM_status的hash值。
reload(NVRAM):重新加載NVRAM。
該協(xié)議運(yùn)行的前提是:1) 遷移源平臺和目的平臺分別向CA申請生成密鑰RSA_mig對應(yīng)的數(shù)字證書,以便在遷移過程中,遷移源平臺和目的平臺能夠向CA查詢對方的數(shù)字證書,進(jìn)行雙方身份的認(rèn)證;2) 遷移源平臺和目的平臺保持時(shí)間同步,用于防止舊的vTPM標(biāo)簽被重放。
協(xié)議運(yùn)行過程主要步驟如下。
1) 目的平臺啟動(dòng)空殼虛擬機(jī)和空殼vTPM,然后暫停虛擬機(jī)運(yùn)行,等待源端虛擬機(jī)的遷入,此時(shí)記錄當(dāng)前時(shí)間為1。
2) 源平臺向目的平臺發(fā)起遷移請求,雙方初始化遷移,建立連接。
3) 源平臺更新vTPM標(biāo)簽中的secret域,保證每次遷移過程中,加密使用的key值都是不同的,由于該key值被用于加密遷移過程中傳輸?shù)膙TPM相關(guān)信息,因此該操作可以防止舊的vTPM相關(guān)信息的重放。
4) 源平臺更新vTPM標(biāo)簽中的time域,保證每次遷移過程中都有time.start,這樣在目的平臺對vTPM標(biāo)簽的time.start進(jìn)行檢查,便可以防止舊的vTPM標(biāo)簽的重放。
5) 源平臺使用RSA_local.priv解密vTPM標(biāo)簽的secret域,得到key值。
6) 源平臺向CA查詢目的平臺的數(shù)字證書,CA返回目的平臺的數(shù)字證書,提取對應(yīng)目的平臺RSA_mig的公鑰dst.RSA_mig.pub。
7) 源平臺利用dst.RSA_mig.pub轉(zhuǎn)換vTPM標(biāo)簽為遷移狀態(tài)。
8) 源平臺利用臟頁重傳的機(jī)制,開始傳輸虛擬機(jī)的內(nèi)存、鏡像文件以及NVRAM,此時(shí)NVRAM中的信息處于加密狀態(tài)。
9) 源平臺向目的平臺傳輸vTPM標(biāo)簽。
10) 目的平臺檢查vTPM標(biāo)簽的time.start,防止舊的vTPM標(biāo)簽的重放。
11) 目的平臺向CA查詢源平臺的數(shù)字證書,CA返回源平臺的數(shù)字證書,提取對應(yīng)源平臺RSA_mig的公鑰src.RSA_mig.pub。
12) 目的平臺利用src.RSA_mig.pub轉(zhuǎn)換vTPM標(biāo)簽為本地狀態(tài)。
13) 目的平臺使用RSA_local.priv解密vTPM標(biāo)簽的secret域,得到key值。
14) 源平臺暫停虛擬機(jī)運(yùn)行,并開始傳輸虛擬機(jī)的設(shè)備狀態(tài)VM_device_status。
15) 源平臺收集vTPM的設(shè)備狀態(tài)(即vTPM易失性信息),存儲在數(shù)據(jù)結(jié)構(gòu)vTPM_status中,計(jì)算vTPM _ status的hash值,然后將vTPM _ status ||hash (vTPM_status)打包成package,使用key對其進(jìn)行加密。
16) 源平臺傳輸加密后的package。
17) 目的平臺使用key值解密package,得到vTPM_status,然后校驗(yàn)vTPM_status的hash值。
18) 目的平臺重新加載NVRAM,同步源平臺虛擬機(jī)暫停前對vTPM私密信息的所有修改。
19) 目的平臺加載vTPM_status,恢復(fù)vTPM的設(shè)備狀態(tài)。
20) 遷移結(jié)束,源平臺銷毀虛擬機(jī),目的平臺運(yùn)行虛擬機(jī)。
3.4.3 RSA_mig數(shù)字證書的生成
密鑰RSA_mig是TPM2.0的不可遷移密鑰,其工作原理和AIK密鑰類似。因此,本文借助AIK數(shù)字證書的生成協(xié)議[20]來生成密鑰RSA_mig的數(shù)字證書。
密鑰RSA_mig的數(shù)字證書只需要生成一次即可,因此,在部署整個(gè)系統(tǒng)之前便可以完成所有硬件TPM2.0芯片的RSA_mig數(shù)字證書的生成工作。
如圖11所示,CA指證書頒發(fā)機(jī)構(gòu),owner指硬件TPM2.0的授權(quán)者,RSA_mig證書的生成協(xié)議過程如下。
圖11 RSA_mig數(shù)字證書的生成
1) 使用TPM2_Create創(chuàng)建RSA_mig密鑰,使用TPM2_EvictControl將RSA_mig密鑰持久化存儲到TPM2.0芯片中。
2) 返回成功信息。
3) 使用TPM2_ReadPublic提取RSA_mig的公鑰。
4) TPM2.0芯片返回RSA_mig的公鑰。
5) 利用RSA_mig的公鑰信息,生成證書簽名請求文件RSA_mig.csr。
6) 使用TPM2_Sign生成RSA_mig.csr的簽名值,SRSA_mig=signRSA_mig(RSA_mig.csr)。
7) 返回簽名值SRSA_mig。
8) 填充RSA_mig.csr中的簽名值SRSA_mig,收集背書證書cred,生成對稱密鑰K和隨機(jī)數(shù)nonce。利用K加密需要發(fā)送給CA的信息,而K則由CA的公鑰pkCA進(jìn)行加密,即msg=(encK(RSA_ mig.csr,cred,Nonce),encpkCA(K))。
9) 發(fā)送msg。
10) 用CA私鑰解密并驗(yàn)證RSA_mig.csr和cred,簽發(fā)RSA_mig證書,生成對稱密鑰K′,使用K′加密傳輸?shù)男畔ⅲ鳮′則由EK的公鑰pkEK進(jìn)行加密,respCA=(encpkEK(K′), encK′(nonce, RSA _mig.cert));然后,CA將密鑰RSA_mig的數(shù)字證書加入自己的證書列表中。
11) 發(fā)送respCA。
12) 執(zhí)行TPM2_RSA_Decrypt,使用EK私鑰解密respCA得到K′。
13) 返回K′。
14) Owner利用K′解密驗(yàn)證Nonce,得到證書RSA_mig.cert。
表1 系統(tǒng)配置
本文基于KVM虛擬化平臺,通過qemu2.3.0、模擬TPM2.0功能的開源libtpms、支持libtpms的qemu-patch實(shí)現(xiàn)了基于libtpms的全虛擬化TPM2.0。以表1所列組件作為基礎(chǔ)的實(shí)驗(yàn)環(huán)境,設(shè)計(jì)并實(shí)現(xiàn)了vTPM私密信息保護(hù)方案,同時(shí)在控制節(jié)點(diǎn)上部署CA,并對本文方案進(jìn)行功能測試和性能測試。另外,動(dòng)態(tài)遷移是在沒有部署共享存儲系統(tǒng)的環(huán)境下進(jìn)行的。
針對vTPM私密信息完整性保護(hù)引擎、機(jī)密性保護(hù)引擎、vTPM和VM之間的一一對應(yīng)關(guān)系進(jìn)行功能測試。
在虛擬機(jī)內(nèi)執(zhí)行TPM命令“tpm2_ takeownership- oAAA-l BBB-e CCC”,如圖12(a)所示。在沒有vTPM私密信息機(jī)密性保護(hù)引擎的情況下,由于vTPM私密信息的明文存儲,通過分析NVRAM可以得到vTPM2.0的tpm owner授權(quán)信息。而圖12(b)顯示機(jī)密性保護(hù)引擎可以有效防止vTPM2.0私密信息泄露。
首先建立兩個(gè)虛擬機(jī)VM_1和VM_2以及對應(yīng)的vTPM_1和vTPM_2,VM_1和VM_2的UUID分別是UUID_1和UUID_2。然后,分別使用“VM_1的鏡像、vTPM_2、UUID_1”“VM_1的鏡像、vTPM_1、UUID_2”“VM_2的鏡像、vTPM_1、UUID_1”這3種組合來啟動(dòng)虛擬機(jī),結(jié)果如圖12(c)~圖12(e)所示。實(shí)驗(yàn)結(jié)果證明該方案可以有效保證vTPM、VM之間的一一對應(yīng)關(guān)系,同時(shí)圖12(c)也證明了完整性保護(hù)引擎可以有效識別出vTPM私密信息的不同。
圖12 功能測試
針對虛擬機(jī)的動(dòng)態(tài)遷移進(jìn)行性能測試,實(shí)驗(yàn)環(huán)境建立在沒有配置共享存儲的情況下。為了減小虛擬機(jī)鏡像傳輸帶來的影響,性能測試使用大小固定為4 GB的虛擬機(jī)鏡像。測試的虛擬機(jī)有3種:VM、vTPM-VM、添加vTPM私密信息保護(hù)方案的vTPM-VM(即圖13中SvTPM-VM),分別記錄動(dòng)態(tài)遷移的總用時(shí)、用戶可感知的停機(jī)時(shí)間的變化。本文設(shè)置5組不同的虛擬機(jī)內(nèi)存,在每組設(shè)置中對以上3種虛擬機(jī)分別執(zhí)行10次動(dòng)態(tài)遷移,計(jì)算每種虛擬機(jī)動(dòng)態(tài)遷移用時(shí)的平均值,結(jié)果如圖13所示。
本文提出的vTPM私密信息保護(hù)方案在VM動(dòng)態(tài)遷移過程中添加了3個(gè)新階段:NVRAM拷貝、vTPM標(biāo)簽拷貝、同步vTPM設(shè)備狀態(tài)(即vTPM易失性信息)。其中,NVRAM拷貝和vTPM標(biāo)簽拷貝這兩個(gè)階段處于虛擬機(jī)運(yùn)行階段,不會對用戶可感知的停機(jī)時(shí)間造成影響,但是會增加動(dòng)態(tài)遷移的總體用時(shí)。由圖13(a)可知,SvTPM-VM比vTPM-VM平均增加耗時(shí)2 373.67 ms,平均增長率為1.65%,該差異是新增vTPM標(biāo)簽拷貝階段的平均耗時(shí);vTPM-VM比VM平均增加耗時(shí)379.80 ms,平均增長率為0.27%,兩者總體用時(shí)非常接近,該差異是新增NVRAM拷貝階段的平均耗時(shí)。另外,同步vTPM設(shè)備狀態(tài)(即vTPM易失性信息)階段會增加用戶可感知的停機(jī)時(shí)間。由圖13(b)可知,SvTPM-VM比vTPM-VM平均增加耗時(shí)27.22 ms,平均增長率為19.36%,增加的耗時(shí)不會影響正常虛擬機(jī)用戶使用;vTPM-VM比VM平均增加耗時(shí)0.116 ms,平均增加率為0.41%,兩者非常接近。
圖13 性能測試
本文設(shè)計(jì)了一種數(shù)據(jù)結(jié)構(gòu)——vTPM標(biāo)簽,借助于物理TPM2.0的密碼算法,提出一種新的vTPM私密信息保護(hù)方案。該方案分為本地保護(hù)和動(dòng)態(tài)遷移保護(hù)兩個(gè)部分。本地保護(hù)方案使用vTPM標(biāo)簽的各個(gè)字段加密存儲vTPM的私密信息、校驗(yàn)其完整性、綁定虛擬機(jī)和vTPM的對應(yīng)關(guān)系,有效實(shí)現(xiàn)了3.1節(jié)提出的設(shè)計(jì)原則1)和設(shè)計(jì)原則2);動(dòng)態(tài)遷移保護(hù)方案使用vTPM標(biāo)簽的狀態(tài)屬性,在不影響正常虛擬機(jī)動(dòng)態(tài)遷移過程的情況下實(shí)現(xiàn)了vTPM的安全動(dòng)態(tài)遷移,實(shí)現(xiàn)了3.1節(jié)提出的設(shè)計(jì)原則3)。通過實(shí)驗(yàn)證明了所提方案能夠有效保護(hù)vTPM私密信息在本地存儲和動(dòng)態(tài)遷移過程中的安全屬性,同時(shí)不會帶來較大的性能消耗。
[1] BERGER S, CáCERES R, GOLDMAN K A, et al. vTPM: virtualizing the trusted platform module[C]//The 15th Conference on USENIX Security Symposium. 2006: 305-320.
[2] 嚴(yán)飛, 龔玉鳳, 于釗. 基于硬件事務(wù)內(nèi)存的vTPM安全保護(hù)方法: CN105678173[P]. 2016-06-15.
YAN F, GONG Y F, YU Z. vTPM security protection method based on hardware transaction memory[P]. CN105678173A, 2016-06-15.
[3] 嚴(yán)飛, 于釗, 張立強(qiáng), 等. vTSE:一種基于SGX的vTPM安全增強(qiáng)方案[J]. 工程科學(xué)與技術(shù), 2017, 49(2): 133-139.
YAN F, YU Z, ZHANG L Q, et al. vTSE: a solution of SGX-based vTPM secure enhancement[J]. Advanced Engineering Sciences, 2017, 49(2): 133-139.
[4] SHI Y, ZHAO B, YU Z, et al. A Security-improved scheme for virtual TPM based on KVM[J]. Wuhan University Journal of Natural Sciences, 2015, 20(6): 505-511.
[5] JIN X, CHEN X S, ZHAO C, et al. Trusted attestation architecture on an infrastructure-as-a-service[J]. Tsinghua Science and Technology, 2017, 22(5): 469-477.
[6] 黃宇晴, 趙波, 肖鈺, 等. 一種基于KVM的vTPM虛擬機(jī)動(dòng)態(tài)遷移方案[J]. 山東大學(xué)學(xué)報(bào)(理學(xué)版), 2017, 52(6): 69-75.
HUANG Y Q, ZHAO B, XIAO Y, et al. A vTPM-VM live migration scheme based on KVM[J]. Journal of Shandong University (Natural Science), 2017, 52(6): 69-75.
[7] 石源, 張煥國, 趙波, 等. 基于SGX的虛擬機(jī)動(dòng)態(tài)遷移安全增強(qiáng)方法[J]. 通信學(xué)報(bào), 2017, 38(9): 65-75.
SHI Y, ZHANG H G, ZHAO B, et al. Security-enhanced live migration based on SGX for virtual machine[J]. Journal on Communications, 2017, 38(9): 65-75.
[8] FAN P R, ZHAO B, SHI Y, et al. An improved vTPM-VM live migration protocol[J]. Wuhan University Journal of Natural Sciences, 2015, 20(6): 512-520.
[9] WAN X, ZHANG X F, CHEN L, et al. An improved vTPM migration protocol based trusted channel[C]//International Conference on Systems and Informatics. 2012: 871-875.
[10] DANEV B, MASTI R J, KARAME G O, et al. Enabling secure VM-VTPM migration in private clouds[C]//The 27th Annual Computer Security Applications Conference. 2011: 187-196.
[11] CHALLENER D, YODER K, CATHERMAN R, et al. A practical guide to trusted computing[M]. Beijing: China Machine Press, 2008.
[12] BERGER S, GOLDMAN K, PENDARAKIS D, et al. Scalable attestation: a step toward secure and trusted clouds[C]//IEEE International Conference on Cloud Engineering. 2015: 185-194.
[13] ARTHUR W, CHALLENER D, GOLDMAN K. A practical guide to TPM 2.0: using the trusted platform module in the new age of security[M]. Berkeley: Apress, 2015.
[14] CUCURULL J, GUASCH S. Virtual TPM for a secure cloud: fallacy or reality?[C]//The 13th Spanish Meeting on Cryptology and Information Security. Alicante. 2014: 197-202.
[15] 楊永嬌, 嚴(yán)飛, 毛軍鵬, 等. Ng-vTPM: 新一代TPM虛擬化框架設(shè)計(jì)[J]. 武漢大學(xué)學(xué)報(bào)(理學(xué)版), 2015, 61(2): 103-111.
YANG Y J, YAN F, MAO J P, et al. Ng-vTPM: a next generation virtualized TPM architecture[J]. Wuhan University Journal of Natural Sciences, 2015, 61(2): 103-111.
[16] 王麗娜, 高漢軍, 余榮威. 基于信任擴(kuò)展的可信虛擬執(zhí)行環(huán)境構(gòu)建方法研究[J]. 通信學(xué)報(bào), 2011, 32(9): 1-8.
WANG L N, GAO H J, YU R W. Research of constructing trusted virtual execution environment based on trust extension[J]. Journal on Communications, 2011, 32(9): 1-8.
[17] HOHMUTH M, PETER M, H¨ARTIG H, et al. Reducing TCB size by using untrusted components—small kernels versus virtual-machine monitors[C]//The 11th workshop on ACM SIGOPS European Workshop. 2004: 22.
[18] RAZAVI K, KIELMANN T. Scalable virtual machine deployment using VM image caches[C]//The International Conference on High Performance Computing, Networking, Storage and Analysis. 2013: 65.
[19] MAYES K, MARKANTONAKIS K. Smart cards, tokens, security and applications[M]. New York: Springer Publishing, 2010.
[20] TCG Infrastructure Working Group. A CMC profile for AIK certificate enrollment[M]. Beaverton, Oregon: TCG, 2011.
Label-based protection scheme of vTPM secret
CHEN Xingshu1,2, WANG Wei1,3, JIN Xin1,3
1. Cybersecurity Research Institute, Sichuan University, Chengdu 610065, China 2. College of Cybersecurity, Sichuan University, Chengdu 610065, China 3. College of Computer Science, Sichuan University, Chengdu 610065, China
The virtual trusted platform module (vTPM) played an important role in virtualization of trusted computing. According to security problems of existed vTPM, a protection scheme based on vTPM label was proposed. Firstly, a vTPM label was created for each virtual machine. This label had four main components, signature information, encryption information, measurement information and status information. Then, the security-enhanced vTPM dynamic migration protocol based on vTPM label status information was designed, to ensure the security of vTPM during live migration based on status information of vTPM label. Experiments show that the proposed scheme can protect vTPM secrets effectively and the increased performance cost during live migration is only 19.36%.
trusted computing, virtual trusted platform module, TPM2.0, live migration
TP309.2
A
10.11959/j.issn.1000-436x.2018242
陳興蜀(1968–),女,貴州六枝人,博士,四川大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)樵朴?jì)算與大數(shù)據(jù)安全、可信計(jì)算與信息保障。
王偉(1992–),男,山東聊城人,四川大學(xué)碩士生,主要研究方向?yàn)榭尚庞?jì)算、虛擬化安全。
金鑫(1976–),男,遼寧營口人,四川大學(xué)博士生,主要研究方向?yàn)榭尚庞?jì)算、虛擬化安全。
2018?03?13;
2018?05?17
陳興蜀,chenxsh@scu.edu.cn
國家自然科學(xué)基金資助項(xiàng)目(No.61802270, No.61802271)
The National Natural Science Foundation of China (No.61802270, No.61802271)