首页 > 关于效率源 > 新闻和事件 > 技术视界
【技术视界】针对类TrueCrypt——虚拟磁盘加密容器文件删除恢复方法
2019年11月08日

1573193364947086472.jpg

随着互联网技术的高速发展,信息数据正呈量级增长,数据的存储方式也多种多样,对数据的存储安全提出了新的要求。随之而来的就是各种形式、各种加密算法的数据保护,在这些方法中,虚拟磁盘加密技术脱颖而出。

由于通过虚拟磁盘加密所产生的数据文件没有固定的特征,所以恢复删除的加密过的数据文件面临着新的挑战。本文提出一种针对没有固定特征的删除文件(通过虚拟磁盘加密的所产生)的恢复方法,该方法的主要目的是告诉大家一种虚拟磁盘加密文件的删除恢复方法和思路。

虚拟磁盘加密技术及其常见软件

虚拟磁盘加密技术即可不生成任何文件直接在硬盘上建立虚拟磁盘,也可生成一个容器文件(类似磁盘,指定大小,用于存放需加密的文件)。用户可以按照盘符进行访问,所有虚拟磁盘上的文件都被自动加密,需要通过密码或密钥文件来进行访问。

用户在使用时,必须知道密码或密钥文件,否则无法进入被虚拟磁盘技术加密的磁盘中进行操作。这种方式不仅对防止硬盘丢失情况下的数据保密有效,还对企图不经允许而打开计算机进行操作和信息查阅有效。

在已经打开计算机并进入了加密磁盘的情况下,任何接触到计算机的人或者在计算机上运行的软件,都可以对磁盘进行操作,本地桌面搜索工具也不例外,它可以直接对所有文件进行检索,并建立索引。

◆常见虚拟磁盘加密软件如下所示

C3.png

加密容器文件删除恢复难点

难点1:真加密
通过虚拟磁盘加密生成的容器文件是真加密,所有加密数据都是经过AES、Twofish、Serpent等加密算法的运算后的结果,目前无有效破解方法(穷举法除外)。

难点2:无明显特征
通过winhex等工具打开可以看到,通过虚拟磁盘加密生成的容器文件头尾及内部数据均无明显特征,对于该文件的删除恢复造成了极大的干扰。

经过统计分析后发现,该容器文件具有以下特征:
◆ 整扇区对齐,并且在磁盘中连续存放;
◆ 该文件中的字符内容分布均匀,即每个字符的总个数≈文件大小÷256;
◆ 没有任意字符连续出现3次及以上。

加密容器文件删除恢复过程

1.准备工作
为了更直观的描述容器文件删除恢复过程,特此说明环境及准备工作。(以下数据也是判断是否完成恢复删除容器文件的重要依据)

A. 文件系统NTFS,且找到其$BITMAP(说明:其他的系统也会有该功能的文件,在此仅以NTFS为例);
B. 以VeraCrypt作为加密工具,本次示例就以恢复该工具下产生的容器文件;
C. 容器文件大小设置为200M(容器在磁盘中的存储为200M连续空间);
D. 使用$BITMAP元文件来统一管理卷上簇的使用情况。每一个bit位代表一个簇的使用情况,位高低顺序为:低位在前,高位在后。如$BITMAP中第一个字节代表该分区前8簇,第一个字节的第0位为分区第一簇,第1位为分区第二簇...以此类推管理整个分区。使用的簇标记为1,未使用的簇标记为0。

2.制作加密删除文件

使用VeraCrypt工具制作容器文件,并向其中放入待加密文件。

①创建容器文件

1573193473761041919.jpg

②加载容器文件

1573193495949022765.jpg

③保存待加密文件

1573193520152074702.jpg

④确定该文件在磁盘中是否连续存储,且记录删除前在磁盘的偏移位置:0x174E628000

 

1573193570716054162.jpg

1573193571059074656.jpg

 

⑤删除前所在位图信息

1573193607122019236.png

⑥删除容器文件,下图可看出加密容器文件被删除之后通过winhex是不能恢复的

1573193646560017288.png

1573193646701072650.png

 

3.删除加密容器文件恢复步骤

通过$Bitmap进行定位恢复步骤2中所删除的无特定特征的容器文件,具体操作过程如下:

①根据$Bitmap的特性,若该文件被删除,那么在$Bitmap中的位图也被置为0;

由已知的容器文件大小可以计算出该容器文件在$Bitmap中所占用的字节数:

◆ 容器文件字节数(byte)=200M*1024*1024 = 209715200;
◆ 容器文件扇区数(个)=209715200/512 = 409600;
◆ 容器文件簇数(个)=409600/8 = 51200;
◆ $Bitmap中所占用的字节数(byte)=51200/ 8 = 6400(0x1900);

②从$Bitmap文件的开始位置进行检索0x00(被删除的容器文件会出现在位图为0x00的区域),检索到0x00之后,判断从当前位置起,0x00的个数是否大于等于步骤①中所求的$Bitmap中所占用的字节数;

若是则进入步骤③,否则继续步骤②;

③根据步骤②中找到的$Bitmap中的起始位置,计算对应的删除文件在磁盘中的偏移位置,在该例中$Bitmap中的偏移为0x2E9CC5:

磁盘中的偏移位置(byte)= 0x2E9CC5*8*8*0x200 = 0x174E628000

④根据步骤③中得到的文件偏移,跳转到该偏移去判断是否是被删除的容量文件,判断方法如下:(判断依据见准备工作中的B、C数据)

A. 由于数据文件是连续存储的,所以从偏移位置起,获取已知被删除文件大小的数据块(即本例中的200M);
B. 然后通过程序代码来统计该数据块中0x00~0xFF等256个字符分别出现的次数,并将其以图显示(横轴为字符,纵轴为次数)。若图像呈现为一条波动不大的直线,则跳转到步骤C;否则跳转到步骤②,寻找下一块数据;
C. 统计判断该数据块中的任意字符连续出现的次数,若存在连续出现3次及以上的,则表示该段数据不是虚拟磁盘技术加密的容器文件,跳转到步骤②,寻找下一块数据;否则,该数据块就是被删除的容器文件,恢复该数据块;
D. 若知道加密密码或密钥文件,则可用VeraCrypt软件加载步骤C中得到的容器文件,可进一步判断其是否准确,以及获取其中的加密内容。

要点总结

市面上目前未曾找到对于该加密容器文件删除恢复的有效方法,希望本文能够为从事数据取证的同行提供一些简单的思路。该方法仅针对在磁盘中连续存储的容器文件适用,其他情况的容器文件恢复方案需进一步深入分析,敬请期待。

如对文中的操作、描述有任何疑问,或者有任何取证恢复需求,欢迎拨打热线电话028-85211099或直接在微信公众号给我们留言,我们会尽快联系您。

本期投稿:刘涛
本期编辑:源妹