浅谈Android手机取证中的全磁盘加密(FDE)破解方法
2020-07-22史向东陈启玲
史向东 陈启玲
摘要:全磁盘加密对Android智能手机取证带来的影响非常明显,特别是对基于芯片的物理取证,取证人员利用常规取证方式只能获取到加密镜像,且直接破解难度大、耗时长。针对这一问题,本文通过深入研究Android手机FDE加密原理,结合带有官方签名的手机提权包,获取手机明文镜像,解决开启了FDE的Android手机取证难题。
关键词:Android手机取证;全磁盘加密;手机镜像
中图分类号:TP311 文献标识码:A
随着智能手机普及,借助手机进行犯罪的案件日渐上升,且越来越多的智能手机采用Android系统,因此针对Android手机的取证技术一直是电子取证工作中的重点关注内容。
2013年11月,FDE技术首次在Android 4.4中引入,并在Android 5.0中做了加密方式的更新。2015年5月,Google发布Android 6.0,强制要求开启FDE加密(SecurityWeek News,2015)。FDE加密方式的引入,导致司法领域对手机数据取证的难度增加,通过常规方法获取到的数字镜像,解析后呈现乱码状态,引发了电子数据取证界对Android加密方式的探讨。许多取证领域的专家学者和安全研究人员通过不同角度分析研究FDE技术,一定程度上解决了FDE取证难题。本文在综合分析Android手机FDE工作原理的基础上,也尝试性地提出通过官方签名包将手机提权,从而获取明文镜像的方法,解决对Android 5.0以后FDE加密手机的取证问题。
1研究综述
关于对FDE加密手机的取证,当前学术界主要基于两个层面进行研究,一方面是如何突破FDE技术,另一方面则是在突破以后如何进行明文数据获取。本文研究的重点在于FDE的突破。当前能够检索到的研究成果相对较少,主要集中在主机层面的FDE突破技术。2005年Dornseif、Becher和Klein通过FireWire从DMA中直接提取到RAM中磁盘加密密钥,实現FDE的破解(Becher M.Dornseif M and Klein C N,2005)0 2009年Halderman等人提出冷启动攻击(Cold Boot Attack),利用动态随机存储器(DRAM)的保持效应,提取计算机RAM中的密钥(Halderman J A,Schoen S D.Heninger N,et al.,2009)。针对主机FDE的研究日渐成熟,于是学者们提出将这些破密方法应用在手机上的假设,有了意外收获。2012年德国的Tilo Muller等人针对Android手机的FDE复现了通过冷启动攻击,获取内存数据,破解开机密码,最终得到明文数据的过程(Tilo M,Michael S and Freiling FC,2012)。由此得知,一些针对电脑FDE的攻击对于Android的FDE也同样适用。不过,真正意义上针对Android手机本身特陛分析,进而破解FDE的研究,还要属2016年安全研究员Gal Beniamini发现的基于高通骁龙处理器的漏洞。该漏洞可以提取KeyMaster的密钥,从而破解FDE(Smith,M.,2016)。以上提及的研究方法,对于解决FDE加密的破解研究具有一定的借鉴意义。
2FDE解决方案
2.1FDE工作原理
在Android 4.4以后,Android系统通过FDE技术来保护系统userdata分区。加密后,系统会在整个userdata分区尾部分配16KB的存储空间用于存放加密参数(Encryption Parameters),加密的DEK(Encrypted DEK (Device EncIyption Key))、Salt、Key-Master Key Blob等元素(图1)。该空间被称为“Crypto Footer”。其中,DEK是由系统用户的PIN或者密码来加密的。其本身是采用AES-CBC-ESSIV:SHA256算法随机生成的一个128位的主加密密钥。它会结合一个128位的salt和“KeyMaster Key Blob”加密数据块一同保护userdata分区。在“KeyMaster Key Blob”加密数据块中,还包含了解密DEK所需的2048位RSA密钥。通常,Android设备可大致分为两个区域,即“非安全世界”和“安全世界”。Android操作系统称为“非安全世界”,一个完全独立于Android操作系统的可信执行环境(Trusted Execution Environment, TEE)称为“安全世界”。只有运行在设备安全世界中的KeyMaster才能解密“KeyMaster Key Blob”加密数据块。
从上述的FDE加密原理得知,整个FDE解密过程中,如果能够通过解密数据块获取长RSA密钥,就有可以将DEK进行解密,从而达到userdate分区解决的目的。FDE加密与一般加密相似,加密过程中都会使用一个密钥文件作为媒介来加密数据。这里的密钥文件指的就是“default_pass-word”,它是固定写在“Crpto Footer”中的。当手机开机后,Android会去读取这个de-fault_password,并将它和存储的Salt进行scrypt处理后和KeyMaster Key Blob一起传给运行在处理器“安全世界”上的KeyMaster。KeyMaster会使用存储在其中带有的密钥来对数据块进行解密获得RSA密钥,然后使用scrypt处理过的default_password_salt和RSA密钥,来制造一个RSA签名,并将签名发回给Android。之后,Android会使用一系列算法来处理这个签名,并最终解密DEK,解锁设备,如图1所示。
2.2FDE破解思路
通过分析FDE的工作原理,不难发现用户设置的锁屏密码仅作用于设备本身,并不会对内部的加密性质造成影响。当用户正常启动手机至锁屏界面后,手机已经完成了整个用户数据的加密解密过程。基于这一情况,本文尝试性地考虑,先利用官方签名包获得手机root权限,再将手机重启,确保手机可以正常启动至锁屏界面,一旦成功进入该界面,说明userdata分区已解密,此时再通过ADB工具,输入dd命令就可能获取到明文镜像。
3实验与结果检验
本文以三星Galaxy S7 Edge作为测试设备,其出厂系统版本为Android 6.0,且未知手机锁屏密码。
首先,在手机Downloading模式下将官方签名包刷人手机,获得root权限。接着将手机重启,进入手机锁屏界面。之后,通过ADB命令找到并打开手机内的fstab.qcom文件,从forceen-crypt=footer参数可以看出手机强制加密,footer表明加密的信息存储在userdata的尾部。若出现的参数是encryptable=footer则说明手机默认是不加密的。
然后,通过输入“getpropl grep crypt”命令,判断手机的加密是否是FDE,得到结果如图2所示。由图中ro.crypto.state参数得知,该手机已加密。根据ro.crypto.type的参数值block,确认其加密方式是FDE,若值为file,则说明加密方式是FBE。此外,通过解析Android源码得知在同一部手机中只存在一种加密方式,进一步确定测试设备为FDE加密。
最后,重启手机,进人手机锁屏界面,通过dd命令获取到镜像。如果利用常见的电子取证分析软件将镜像包解析,可以发现此时获取得镜像是已解密后的数据。本文使用的是南京拓界信息技术有限公司的“响尾雀”手机极速取证系统的第三方数据解析功能,成功解析数据包,可以清晰看到解析后的相机数据已经是明文数据(图3)。
4结论及展望
由于用户设置的锁屏密码不会影响系统加密性质,当用户启动手机至锁屏界面时,用户数据已经完成了解密,因此通过刷写官方签名包,获取明文镜像的方法可以成功获取Android手机镜像。当前通过对三星S7、C8等机型测试,发现该方法可行,具有操作简单、灵活的优势,同时也受机型复杂,不易找到官方签名包的影响而具有局限性。