◆南 江 于士超
?
TrueCrypt加密容器的取證方法研究
◆南 江1于士超2
(1.烏魯木齊市公安局網絡安全保衛支隊 新疆 830001;2.盤石軟件(上海)有限公司 上海 200333)
隨著信息化程度的提高,無論政府還是個人用戶均大力提高信息安全水平,尤其是棱鏡門極大地刺激了加密軟件的推廣,同時也對取證工作提出了更高的要求。本文針對代表性的開源加密軟件TrueCrypt進行了研究,深入分析了TrueCrypt的原理和TrueCrypt加密容器的結構,提出并實現了對于TrueCrypt加密容器的取證方法。
取證;加密算法;加密模式;Hash算法;隨機數生成
TrueCrypt作為加密軟件,效率高、易用、跨平臺。TrueCrypt應用非常廣泛,尤其用來加密敏感文件和重要互聯網金融信息比如比特幣錢包,“棱鏡門”主角前NSA(美國國家安全局)雇員愛德華 斯諾登(Edward Snowden)使用并支持此加密工具。因此對TrueCrypt加密容器的取證工作顯得非常有意義。
本文首先介紹了TrueCrypt的使用方法和原理,并通過分析TrueCrypt的源代碼找到TrueCrypt加密容器的結構。
TrueCrypt目前支持以下操作系統:
①Windows 7 (32-bit and 64-bit);
②Windows Vista (SP1 or later);
③Windows Vista x64 (64-bit) Edition (SP1 or later);
④Windows XP;
⑤Windows XP x64 (64-bit) Edition;
⑥Windows Server 2008 R2 (64-bit);
⑦Windows Server 2008;
⑧Windows Server 2008 x64 (64-bit);
⑨Windows Server 2003;
⑩Windows Server 2003 x64 (64-bit)。
本文以TrueCrypt 7.1a為例在Windows7(64-bit)上進行分析。
信息化給我們帶來了極大的便利的同時,也使機密文檔的安全成為重要課題,無論是個人還是機構的文檔都需要保護防止外泄。對于機密文檔的安全最有效的手段就是加密。TrueCrypt作為加密軟件具有占用資源少、加密效率高、安全性強、和實時性等優點。
通過TrueCrypt創建一個加密鏡像作為文件的容器。創建出來的加密鏡像以一個文件的形式存放在電腦上,可以隨意移動、拷貝到移動硬盤上或者上傳到網盤上。創建步驟如下:
(1)如圖1,打開TrueCrypt點擊“Create Volume”;

圖1創建加密鏡像
(2)如圖2,在彈出的對話框中選擇加密鏡像類型為“Create an encrypted file container”;

圖2選擇加密鏡像類型
(3)如圖3,選擇加密鏡像類型為“Standard TrueCrypt volume”;

圖3 選擇加密鏡像類型
(4)如圖4,選擇加密鏡像的存放位置和名稱;

圖4選擇加密鏡像的存放位置和名稱
(5)如圖5,選擇加密算法類型;

圖5選擇加密算法類型
(6)如圖6,選擇哈希算法類型;

圖6選擇哈希算法類型
(7)如圖7,設置加密容器大小;

圖7設置加密容器大小
(8)如圖8,設置密碼或者keyfile;


圖8設置密碼或者keyfile
(9)如圖9,選擇加密后的文件系統類型;

圖9選擇加密后的文件系統類型
(10)如圖10,選擇文件系統簇的大小;

圖10選擇文件系統簇的大小
(11)如圖11,隨機移動鼠標產生Random Pool的隨機值;

圖11隨機移動鼠標產生Random Pool的隨機值
(12)如圖12,點擊“Format”按鈕開始格式化,注意此時Header Key和Master Key已經生成;

圖12 開始格式化
(13)如圖13,加密鏡像創建成功。

圖13加密鏡像創建成功
創建出來的加密鏡像并不能直接使用,而是要掛載為加密卷之后才能使用,掛載的步驟如下:
(1)如圖14,選擇未被占用的盤符;

圖14選擇未被占用的盤符
(2)如圖15,選擇加密鏡像的位置;

圖15選擇加密鏡像的位置
(3)如圖16,輸入創建加密鏡像時候的密碼或者密鑰文件;

圖16輸入創建加密鏡像時候的密碼或者密鑰文件
(4)如圖17,成功掛載;

圖17成功掛載
(5)如圖18,在資源管理器中可以看到出現卷I。

圖18 在資源管理器中可以看到出現卷了l
TrueCrypt使用實時加密技術。如圖19,經過掛載的加密磁盤與正常的磁盤使用方法完全一致,比如拖拽操作。

圖19使用加密卷加密文件
當用戶使用完加密卷之后,可以將其卸載,步驟與加載加密卷相似。
(1)如圖20,選擇已經加載的加密卷,點擊“Dismount”按鈕;

圖20選擇已經加載的加密卷
(2)如圖21,卸載完成。

圖21卸載完成
源碼布局如下:
Project
|____ Common /* 公共數據 */
|____ Crypto /* 加密庫 */
|____ Driver /* 驅動代碼 */
|____ Format /* 應用程序:Format 格式化*/
|____ Mount /* 應用程序:Mount 裝載/卸載磁盤*/
|____ Platform /* 平臺相關代碼 */
|____ Setup /* 應用程序: 安裝代碼 */
對于取證工作來說,TrueCrypt源碼的兩部分需要研究,一部分是TrueCrypt Format,用來分析加密原理;另一部分是TrueCrypt Mount,用來分析解密取證方法。
TrueCrypt Format用來創建加密鏡像,會用到加密鏡像位置、加密算法、加密鏡像大小、加密鏡像密碼、加密鏡像格式化等幾個參數。
創建加密卷的函數原型如下:
int TCFormatVolume (volatile FORMAT_VOL_PARAMETERS *volParams);
typedef struct
{
BOOL bDevice;
BOOL hiddenVol;
char *volumePath;
unsigned __int64 size;
unsigned __int64 hiddenVolHostSize;
int ea;
int pkcs5;
uint32 headerFlags;
int fileSystem;
int clusterSize;
BOOL sparseFileSwitch;
BOOL quickFormat;
int sectorSize;
int *realClusterSize;
Password *password;
HWND hwndDlg;
} FORMAT_VOL_PARAMETERS;
每個參數含義如下表1:

表1 各參數類型及含義
在進行了一系列的參數設置后,即可完成加密鏡像的設置工作,下面就可以進行創建了,通過以上方式就可以實現自己的創建加密鏡像的方法。TrueCrypt對加密鏡像文件大小沒有限制,僅受加密卷所在的文件系統限制。例如,Fat32文件系統的磁盤內,可以創建的加密卷文件不能超過4G。
在加密鏡像創建完之后還無法直接使用,必須要掛載為虛擬磁盤才行,TrueCrypt Mount就是實現這個功能。其核心函數使用了加密鏡像、磁盤分區、用戶密碼等參數。
函數原型:
int MountVolume (HWND hwndDlg,
int driveNo,
char *volumePath,
Password *password,
BOOL cachePassword,
BOOL sharedAccess,
const MountOptions* mountOptions,
BOOL quiet,
BOOL bReportWrongPassword)
每個參數含義如下表2:

表2 各參數類型及含義
在掛載完成之后,“我的電腦”里會出現一個分區,對新加的這個分區的使用跟正常的分區沒有區別。
加密容器頭部大小為512字節,經過研究發現加密容器頭部格式固定(如表3):

表3 加密容器頭部格式
加密模式與加密算法不同,加密模式指的是如何使用加密算法對任意長度的文本進行加密的方法,TrueCrypt使用的是XTS模式,支持隨機讀寫,并行讀寫。
XTS可以描述為:

公式含義如下:
K1:加密算法密鑰;
K2:次密鑰;
i:數據單元里的加密塊序號;
n:數據單元序號在K1范圍內取值;
a:相對于多項式x,在伽羅瓦域(2128)中的本原元素,如2。
(1)TrueCrypt解密取證方法
經過以上的分析可以得知TrueCrypt加密之后的卷在已知密碼的情況下,可以通過分析卷首格式得到密鑰進而解密卷正文。流程如下圖22:

圖22 解密正文流程
①讀取容器文件頭
讀取鏡像文件頭512字節到內存中,前64字節為未加密的鹽,鹽用于導出密鑰;
②計算導出密鑰
根據用戶輸入的口令和讀取的鹽生成導出密鑰,但是頭部數據除了鹽之后均為加密數據,沒有任何加密算法和哈希算法的標識,因此需要順序遍歷導出密鑰過程中用到的所有算法;
③判斷是否是TrueCrypt加密卷
如果解密之后的數據前4個字符為“True”,并且CRC-32校驗正確,則認為是TrueCrypt加密卷否則直接返回;
④解密正文
用解密頭部得出的密鑰解密正文部分。
(2)TrueCrypt取證軟件
鑒于TrueCrypt的廣泛使用,其解析也成為研究熱點,很多取證軟件也加大了對TrueCrypt加密容器的支持,例如上海盤石軟件開發的計算機取證系統軟件(SafeAnalyzer)就可以將TrueCrypt容器的加密內容成功解密(如圖23)。

圖23 TrueCrypt取證軟件
本文主要介紹了TrueCrypt加密容器的解密及其取證方法,本方法前提是取得TrueCrypt加密容器密碼的前提下,如何獲取用戶TrueCrypt加密容器密碼還需要進一步調查。TrueCrypt可以在加密的卷中設置隱藏卷,對于隱藏卷解密的支持也需要進一步研究;TrueCrypt支持對系統盤進行加密,對已經加密的系統盤的解密方法也要求取證工作者解決;TrueCrypt作為開源軟件其開發工作已經于2014年5月終止,TrueCrypt官網建議用戶改用BitLocker加密數據,因此,BitLocker解密的支持也勢在必行。