營銷優(yōu)化型網(wǎng)站怎么做企業(yè)培訓(xùn)計劃
本篇文章主要介紹基于TPM的Bitlocker全盤加密時,VMK密鑰的密封(Seal)流程,至于TPM、Bitlocker、密鑰保護(hù)器、VMK密鑰等這些東西是什么,這里不做解釋,需要自己腦補一下(╮(╯▽╰)╭)。
首先看看一張結(jié)構(gòu)圖(來自網(wǎng)絡(luò)),了解一下TPM加密的基本框架與流程:
同樣,基于TPM的安全啟動鏈也不做過多解釋,簡單說就是當(dāng)電腦通過TPM進(jìn)行全盤加密后,后期對電腦的改動影響系統(tǒng)啟動,PCR校驗不通過時,觸發(fā)輸入恢復(fù)密鑰的“藍(lán)屏”。
?在Windows中,用戶層與內(nèi)核層的交互通常使用DeviceIOControl這個API來進(jìn)行。同樣的,具備TPM芯片的電腦,在系統(tǒng)中存在一個\Device\TPM的設(shè)備以及對應(yīng)的TPM驅(qū)動程序,所以,當(dāng)對系統(tǒng)進(jìn)行基于TPM芯片的Bitlocker加密時,存在DeviceIOControl的交互,下面通過抓包來窺探這一過程。
“工欲善其事,必先利其器”,這里介紹一個抓包工具IRPMon,獲取不到的你可能需要一個“梯子”。
IRPMon安裝完成后,打開軟件,在菜單項中選擇“Action”->“Select drivers / devices...”,隨后彈出“Hook Drivers and Devices”對話框,在該對話框的右側(cè)樹形控件中,下拉尋找“\Driver\TPM”項,如下圖所示,右擊“\Driver\TPM”項,在右鍵菜單中選擇“Hooked”,同時選中“Data”選項,這樣在隨后的抓包中才能看到抓包的數(shù)據(jù)內(nèi)容。
右鍵菜單項?
最終配置?
啟用基于TPM的Bitlocker加密,之后便可以抓到一堆IRP通信的數(shù)據(jù)包,可以對抓取到的數(shù)據(jù)包做一些過濾,僅保留感興趣的數(shù)據(jù)。
設(shè)置過濾條件?
過濾后的數(shù)據(jù)詳情?
直接通過IRPMon查看抓取的數(shù)據(jù)比較麻煩,這里通過導(dǎo)出抓取的數(shù)據(jù),在編輯器gvim中查看。同時,IRPMon支持自己開發(fā)插件來解析抓取的數(shù)據(jù),如果有時間的話,可以自己開發(fā)一個插件,用來解析TPM的數(shù)據(jù)包。
在菜單項中,選擇“Action” -> “Save..”,在彈出的對話框中選擇文件格式為“JSON Array [*.json]”格式,最后將其按json格式保存到文件。
通過分析保存的json格式的文件,分析時,只關(guān)注“Major Function”的值為“DeviceIOControl”的數(shù)據(jù)包,并且“Data0”的數(shù)據(jù)為“0201”或“0202”開頭的數(shù)據(jù)包。在追蹤完一些文件句柄以及句柄關(guān)聯(lián)的數(shù)據(jù)后,最終確定該句柄(0xFFFFAF0BB990187B0)就是密封VMK密鑰時,與TPM設(shè)備通信的文件句柄。
?圖中的Data0字段后的十六進(jìn)制值是發(fā)送到TPM的數(shù)據(jù)包,可以通過在線工具tpmstream對Data0的數(shù)據(jù)進(jìn)行翻譯,轉(zhuǎn)換為按TPM協(xié)議結(jié)構(gòu)方式展示(這里需要將“0201”或“0202”修改為“8001”或“8002”才能正確展示),TPM通過協(xié)議可以參考這里和這里。
?通過對整個會話數(shù)據(jù)包的分析,得到與TPM交互的如下VMK密封創(chuàng)建過程,最后的TPM_CC_Create交互包含VMK明文密鑰以及加密后的信息,存儲在FVE metadata結(jié)構(gòu)中。
PCR校驗位圖解釋如下
這里的預(yù)期的Hash值計算公式如下
預(yù)期Hash = Hash(PCR0 || PCR2 || PCR4 || PCR11)
這里的PCR11之所以設(shè)定為0,來自微軟的解釋。
隨后,該預(yù)期Hash值存儲在加密后的磁盤上,位于FVE metadata中,解封VMK密鑰時用到此值
下圖是執(zhí)行TPM的TPM_CC_Create命令時包含的即將密封的VMK密鑰
通過該VMK密鑰,可實現(xiàn)提取TPM加密磁盤的恢復(fù)密鑰,這里通過我開發(fā)的恢復(fù)密鑰提取工具實現(xiàn)
下圖為TPM_CC_Create命令執(zhí)行后的Response結(jié)果,其中的一些數(shù)據(jù)最后保存在加密磁盤的FVE metadata數(shù)據(jù)中,在解封時用于解密VMK密鑰
TPM_CC_Create命令返回的Response部分?jǐn)?shù)據(jù)?
Response中數(shù)據(jù)存儲在磁盤中的FVE?