TrueCrypt加密容器的取证方法研究
2018-04-10于士超
◆南 江 于士超
TrueCrypt加密容器的取证方法研究
◆南 江1于士超2
(1.乌鲁木齐市公安局网络安全保卫支队 新疆 830001;2.盘石软件(上海)有限公司 上海 200333)
随着信息化程度的提高,无论政府还是个人用户均大力提高信息安全水平,尤其是棱镜门极大地刺激了加密软件的推广,同时也对取证工作提出了更高的要求。本文针对代表性的开源加密软件TrueCrypt进行了研究,深入分析了TrueCrypt的原理和TrueCrypt加密容器的结构,提出并实现了对于TrueCrypt加密容器的取证方法。
取证;加密算法;加密模式;Hash算法;随机数生成
0 引言
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)上进行分析。
1 TrueCrypt系统简介及使用方法
信息化给我们带来了极大的便利的同时,也使机密文档的安全成为重要课题,无论是个人还是机构的文档都需要保护防止外泄。对于机密文档的安全最有效的手段就是加密。TrueCrypt作为加密软件具有占用资源少、加密效率高、安全性强、和实时性等优点。
1.1创建加密镜像
通过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.2挂载加密镜像
创建出来的加密镜像并不能直接使用,而是要挂载为加密卷之后才能使用,挂载的步骤如下:
(1)如图14,选择未被占用的盘符;
图14选择未被占用的盘符
(2)如图15,选择加密镜像的位置;
图15选择加密镜像的位置
(3)如图16,输入创建加密镜像时候的密码或者密钥文件;
图16输入创建加密镜像时候的密码或者密钥文件
(4)如图17,成功挂载;
图17成功挂载
(5)如图18,在资源管理器中可以看到出现卷I。
图18 在资源管理器中可以看到出现卷了l
1.3使用加密卷加密文件
TrueCrypt使用实时加密技术。如图19,经过挂载的加密磁盘与正常的磁盘使用方法完全一致,比如拖拽操作。
图19使用加密卷加密文件
1.4卸载加密卷
当用户使用完加密卷之后,可以将其卸载,步骤与加载加密卷相似。
(1)如图20,选择已经加载的加密卷,点击“Dismount”按钮;
图20选择已经加载的加密卷
(2)如图21,卸载完成。
图21卸载完成
2 TrueCrypt源代码解析
源码布局如下:
Project
|____ Common /* 公共数据 */
|____ Crypto /* 加密库 */
|____ Driver /* 驱动代码 */
|____ Format /* 应用程序:Format 格式化*/
|____ Mount /* 应用程序:Mount 装载/卸载磁盘*/
|____ Platform /* 平台相关代码 */
|____ Setup /* 应用程序: 安装代码 */
对于取证工作来说,TrueCrypt源码的两部分需要研究,一部分是TrueCrypt Format,用来分析加密原理;另一部分是TrueCrypt Mount,用来分析解密取证方法。
2.1 TrueCrypt Format源码分析
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。
2.2 TrueCrypt Mount源码分析
在加密镜像创建完之后还无法直接使用,必须要挂载为虚拟磁盘才行,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 各参数类型及含义
在挂载完成之后,“我的电脑”里会出现一个分区,对新加的这个分区的使用跟正常的分区没有区别。
2.3 加密容器头部格式
加密容器头部大小为512字节,经过研究发现加密容器头部格式固定(如表3):
表3 加密容器头部格式
2.4 加解密模式
加密模式与加密算法不同,加密模式指的是如何使用加密算法对任意长度的文本进行加密的方法,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取证软件
3 结语
本文主要介绍了TrueCrypt加密容器的解密及其取证方法,本方法前提是取得TrueCrypt加密容器密码的前提下,如何获取用户TrueCrypt加密容器密码还需要进一步调查。TrueCrypt可以在加密的卷中设置隐藏卷,对于隐藏卷解密的支持也需要进一步研究;TrueCrypt支持对系统盘进行加密,对已经加密的系统盘的解密方法也要求取证工作者解决;TrueCrypt作为开源软件其开发工作已经于2014年5月终止,TrueCrypt官网建议用户改用BitLocker加密数据,因此,BitLocker解密的支持也势在必行。