BITLOCKER解密技术在取证中的研究与应用
2018-07-07◆吴彬郭帅
◆吴 彬 郭 帅
BITLOCKER解密技术在取证中的研究与应用
◆吴 彬1郭 帅2
(1.上海市公安局 上海 200025;2.盘石软件(上海)有限公司 上海 200333)
针对BitLocker加密技术对磁盘的数据保护使电子取证无法进行离线分析,使案件调查人员无法获取磁盘上的调查信息的问题,本文对BitLocker加密技术原理进行调查研究,提出了一种可以脱离Windows操作系统独立对BitLocker加密卷或磁盘镜像进行解密的离线解密方法以获取磁盘中存放的原始数据。本文分析了BitLocker加密技术的原理,并从物理磁盘中存放的数据中找出相应密码的存放位置以及加密算法标志,之后通过用户密码或恢复秘钥进行解密得到相应的全卷秘钥并对磁盘进行解密。实验证明了该种方法在电子取证中的可行性。
BitLocker;电子取证;数据安全;VMK秘钥;FVEK秘钥
0 引言
BitLocker驱动器加密功能是微软开发的最早应用在Vista系统上的一种磁盘加密技术,这种加密算法给用户数据的安全性和可靠性带来了有效的保障。微软在之后推出的新版本的操作系统中都对BitLocker功能以及安全性进行了改进,BitLocker已经成为了用户日常生活中常见的加密技术之一。BitLocker最初的设计是针对用户笔记本电脑丢失会造成机密信息泄露而设计的,这些重要信息的泄露往往会造成比笔记本丢失更大的损失[1]。当电脑丢失时,作案人员可以很轻松地把磁盘驱动器从笔记本电脑中取出,并把它作为辅助驱动器连接到第二台机器上,之后就可以使用管理员权限访问所有数据。为解决这样的问题,用户以前的常用做法是通过用户密码或者智能令牌运行一个低级别的磁盘加密驱动,但是这样的做法每次都需要用户进行更多地额外操作,大多数用户并没有选择这样的解决方案,因此大多数笔记本电脑的数据安全并没有得到保护。
BitLocker驱动器加密技术可以通过计算机的可信平台模块(Trusted Platform Module,TPM)、USB启动秘钥、用户密码或者系统恢复秘钥来正常引导启动系统以及解密磁盘数据。其主要功能涵盖了全盘数据加密、分区数据加密以及针对移动存储设备的BitLocker To Go功能。BitLocker强大的数据保护功能保证了在对用户体验基本没有影响的情况下解决了用户信息泄露的危险,但它同时也给计算机取证过程中带了巨大的麻烦。当磁盘从电脑中取出后,调查人员很难从磁盘或者镜像中获取原来存有的数据信息,针对这一情况本文提出了一种BitLocker加密卷的解密方法。
在文章的第一部分主要介绍了BitLocker的基本机制以及秘钥结构;之后在第二部分介绍了BitLocker的数据的加密解密原理;第三部分为该方法在实际取证过程中的应用与验证;最后是论文的工作总结与展望。
1 BITLOCKER驱动器加密机制
2014年5月,在加密软件中享誉盛名的TrueCrypt宣布停止更新运营,并在他的官网上告知用户TrueCrypt存在重大漏洞并不安全,同时建议TrueCrypt用户将加密数据迁移到BitLocker驱动加密系统[1]。BitLocker受到了公众的普遍认可,越来越多的用户开始使用BitLocker来保护自己的磁盘数据。BitLocker的加密使用AES128位秘钥或者AES256位秘钥对磁盘进行加密。在使用BitLocker对数据进行加密解密时是以扇区为基础单位的,因此每个扇区的加密解密都独立与其他扇区,更大程度地保障了数据的安全性。由于磁盘没有更多的空间存放额外的数据信息,通过扇区级的加密解密保障了密文的长度和明文的长度总是相等的。在本章节中,我们将详细介绍BitLocker的秘钥结构以及算法机制。
1.1 BitLocker的秘钥管理系统
BitLocker驱动器加密使用三级加密的方式对磁盘中的数据进行保护,底层的秘钥需要使用上层的秘钥进行加解密,在减少秘钥存放空间的前提下使数据的安全得到了更好的保障[3]。对扇区的数据加密时,BitLocker使用全卷加密秘钥(Full Volume Encryption Key,FVEK),FVEK又通过卷主密钥进行加密(Volume Master Key,VMK),VMK则可以通过用户的选择来使用各种不同的秘钥进行加密,包括PIN码、USB启动秘钥、用户密码以及恢复秘钥[2]。
(1)FVEK
图1 128位/256位AES秘钥结构图
FVEK是BitLocker的第一层秘钥,用来加密每个扇区中的数据,FVEK可以通过VMK加密并且以加密之后的形式存储在磁盘加密数据中。FVEK用于对所选择的磁盘中的静态数据进行加密,因此它是BitLocker驱动器加密算法中最核心的秘钥。FEVK的核心部分AES扩展秘钥的形式存储,根据用户的选择不同分为128位和256位两种,但无论是128位秘钥还是256位其实际长度都是256位。其存储格式如图1所示:当用户选择使用AES256位秘钥时,其长度为256位,所有的256都用来进行加密;而AES128位秘钥的长度仍然是256位,但仅有前128位被用来加密,后128位为空[4]。
图2 128位/256位FVEK秘钥结构图
如图2所示,AES秘钥和256位的Sector秘钥共同组成了512位的FEVK秘钥。Sector秘钥和AES秘钥的结构相同,当使用AES128位秘钥时,其前128位是秘钥部分,后128位为空;当使用AES256位秘钥时,整个256位的Sector秘钥都用来加密。
(2)VMK
在BitLocker驱动器加密的秘钥管理系统中,VMK是第二层秘钥,被用来加密FEVK。和FEVK一样,多个不同的VMK同样被存储在BitLocker的加密卷上。每一个不同的VMK都是由不同的方式进行加密的,通过这些不同方法可以允许用户通过不同的方式访问BitLocker加密卷。VMK的存储格式和FVEK相似,都采用256位大小。表1为不同VMK的存储值。
表1 VMK存储值
(3)解密秘钥
如表1中所示,BitLocker有多种解密秘钥,解密秘钥为BitLocker驱动器加密系统的第三层秘钥。在计算机取证工作中主要用的有恢复秘钥和用户密码,因此本文将主要介绍这两种解密秘钥,其他的将不再描述。
BitLocker驱动器加密系统提供了一个恢复秘钥用于解密BitLocker加密卷。恢复秘钥的文件是在BitLocker驱动器启动的时候由系统生成的,其格式与“289465-674003-028732-226457-071797-568612-278597-553146”相似,由48位数字组成,且这个数字能被11整除余0。恢复秘钥除以11之后得到一个16位的值,这个值构成了一个128位的秘钥。用户密码与恢复秘钥相似,同样可以计算得到一个128位的秘钥,在此不详细描述。
1.2 BitLocker的加密机制
BitLocker驱动器加密共有6种加密方法,其值如表2所示[4]。以最复杂的AES-CBC + diffuser模式举例,BitLocker加密卷从明文转换成密文的流程如图3所示:明文首先经过Sector Key进行异或操作,之后经过两次扩散,最后再通过AES算法进行加密,解密的过程是与之相反的一个逆过程。
表2 加密方法存储值
图3 BitLocker加密卷密文转化流程图
当明文被FVEK加密转换成密文之后,FVEK被VMK加密存储于加密卷之中,VMK又被用户采用的密码加密同样储存在磁盘中。因此,当VMK被破解时,系统就可以通过简单地更换一个新的VMK对FVEK进行加密就可以了,而不需要重新对数据解密之后再进行加密。
2 BitLocker加密卷的解密
对BitLocker加密卷的解密工作其实是一个加密的逆过程,首先使用相应的解密秘钥解密VMK,再使用解密后的VMK解密FVEK,最后使用解密后的FVEK解密磁盘数据。因此,想要解密BitLocker加密卷,首先要了解它的磁盘数据存储格式,这在本章的第一小节中将详细介绍,在本章的第二小节中将介绍本文提出的解密方法。
2.1 BitLocker加密卷结构
在BitLocker加密卷中,几乎所有的数据都是以密文的形式存储的,但卷头以及元数据块中的数据仍然以明文的格式存储,整个BitLocker的加密卷的结构如图4所示。
图4 BitLocker加密卷结构图
BitLocker加密卷的卷头部分为512字节,不同版本的BitLocker卷头格式基本相同,仅在扇区信息以及元数据块的信息上略有不同。以Windows 7版本为例,其卷头格式如表3所示(本文之后的格式举例均默认为Windows 7版本,不再做特殊说明)。
表3 BitLocker加密卷卷头
每一个BitLocker加密卷中存储着三个相同的元数据块,根据卷头中的元数据块偏移信息可以找到相应的元数据块,并从中读取信息。每个元数据块中包含有卷头、元数据头以及一组元数据条目。元数据块头的大小为64字节,其中存储了版本、大小、加密卷的大小以及一些偏移信息,其具体格式如表4所示。
表4 元数据块头
元数据的条目信息中包含了条目的大小以及条目的类型和值的类型两个重要的数据,条目信息的大小由数据的大小决定,其具体格式如表5所示。表6和表7分别为条目的类型以及值的类型。
表5 元数据条目
表6 元数据条目的类型
表7 元数据值的类型
2.2 BitLocker加密卷的解密方法
根据上文介绍的BitLocker加密卷存储结构,我们可以很轻易地找到存储在加密磁盘中经过加密的VMK和FVEK。因此,在接下来的工作中只需要考虑选用相应的解密秘钥对其进行解密即可,在本文中主要讨论恢复秘钥和用户密码两种。如上文中所述,恢复秘钥或者用户密码经过计算之后可以得到相应的key,即用来解密VMK的salt值。
解密VMK的具体步骤如下:
(1)计算得到相应的解密salt值;
(2)计算相应VMK的sha256初始;
(3)通过salt值和sha256值循环计算sha256值并将结果更新;
(4)重复(3)的步骤1048564(0x100000)次;
(5)更新计算得到的sha256值到last_sha256离散值中用来解密FVEK。
解密完VMK之后的步骤无论使用哪种解密秘钥都是相同的,即仅有唯一的last_sha256散列值用来解密FVEK。图5为BitLocker加密卷的解密流程图综上所述,BitLocker加密卷的解密流程如下:
(1)当解密BitLocker加密卷时,我们首先根据卷头的第4字节的BitLocker签名"-FVE-FS-"判断是否为BitLocker加密卷,如果不是则结束,是则进行下一步;
(2)当需要解密的卷是BitLocker加密卷时,对解密秘钥进行计算得到相应的salt值;
(3)通过salt值解密相应的VMK得到解密后的VMK;
(4)通过解密之后的VMK解密FVEK;
(5)最后通过解密之后的FVEK进行图3的逆过程解密加密磁盘数据。
图5 BitLocker加密卷解密流程图
3 解密实验
根据在计算机取证工作中的实际需求,本章节根据上文中描述的解密方法,使用用户密码和恢复秘钥对BitLocker加密卷进行解密,验证方法的可行性,步骤如下图6、7、8。
本文的实验环境为Windows 10操作系统,首先使用Windows的磁盘管理工具创建了一个大小为500MB的VHD文件,将其命名为test.VHD。附加VHD操作初始化磁盘并新建简单卷将其格式化为NTFS格式的磁盘,之后在其中存储了一张文件名为“花.JPG”的图片和一个文件名为“test.TXT”的文档用于验证实验正确性。
图6 仿真实验步骤图1
启用Windows自带的BitLocker驱动器加密系统对该磁盘进行加密,之后使用winhex软件对其创建了一个物理镜像文件test.RAW用于解密。
使用本文提出的方法对其进行解密,实验结果如图9所示,该方法能够成功解密BitLocker加密卷。
图7 仿真实验步骤图2
图8 仿真实验步骤图3
图9 仿真实验结果图
[1]Ferguson Niels. AES-CBC+ Elephant diffuser: A disk encryption algorithm for Windows Vista[C]// 2006.
[2]王蕾,陈松政,魏立峰等.Windows Vista全卷加密工具BitLocker的分析[C].西南地区网络与信息系统学术年会, 2009.
[3]高伟.磁盘数据安全保护技术研究[D].上海:上海交通大学,2008.
[4]Halboob W, Mahmod R. State of the Art in Trusted Computing Forensics[J]. Lecture Notes in Electrical Engineering,2012.