Android内存取证报告
一概述
Android是谷歌公司开发的一款专门为移动设备打造的操作系统。2005年谷歌收购Android Inc公司后,于2007年研发了基于Linux的操作系统Android。2008年,T-Moblie与HTC公司共同研发了第一款手机----HTC G1.Android的发展速度非常惊人,据统计,Android系统手机市场占有率接近80%。 对许多人来说,手机已经成为常伴,不仅仅是因为其传统电话功能,而是因为它的智能特性。这些包括管理与一个日历应用程序时间表,浏览网页,或者使用基于位置的服务。总之,智能手机管理着大量的个人数据。
在这种背景下,在犯罪份子手中,智能手机很可能存储着关键信息。调查人员通过对手机的内存储数据进行证据采集。这个证据可以作为长久数据存储在SD卡存储或动态的存储在系统的运行内存。在SD卡存储数据可通过直接查看,或调取DB文件获取,同时也可能会被犯罪份子主动删除,在本文章中不作详细描述。运行内存中的数据可能含有用户的一些操作痕迹,比如应用的账户密码信息,对获取犯罪证据有直接意义。不过,此快动态内存信息会随着电池电源的关闭而消失,使其难以恢复。因此,调查人员需要适当的手段从一个移动智能手机设备恢复这些数据。这一取证也称作动态内存取证。 本文将主要分为3个部分进行论述:Android平台介绍、内存获取的2种方法。 二Android平台框架概述
图1 Android系统架构图如图1所示:
由底向上依次为Linux内核、核心类库和虚拟机、应用框架、应用。 1)Linux内核:Android依赖Linux 2.6版,提供核心系统服务:安全、内存管理、进程管理、网络组、驱动模型。内核部分还相当于一个介于硬件层和系统中其他软件组之间的一个抽象层次。
2)核心类库、虚拟机:Android的核心类库提供Java类库所提供的绝大部分功能。
每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一个设备上高效运行,Dalvik被改写过。 Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)——该格式经过优化,以降低内存耗用到最低。Java编译器将Java源文件转为class文件,class文件又被内置的dx工具转化为dex格式文件,这种文件在Dalvik虚拟机上注册并运行。
在一些底层功能——比如线程和低内存管理方面,Dalvik虚拟机是依赖Linux内核的。
3)应用框架:核心应用程序就是依赖框架层次API开发的,程序员们当然也可以充分使用这些API。应用架构设计的初衷是:简化组件复用机制;任何应用都能发布自己的功能,这些功能又可以被任何其他应用使用(当然要受来自框架的强制安全规范的约束)。和复用机制相同,框架允许组件的更换。
4)应用:Android将预装一组核心应用程序,包括email客户端、短信服务、日历日程、地图服务、浏览器、联系人和其他应用程序。所有应用程序都是Java编程语言编写的。
Android源码是开源的,通过AOSP(Android Open Source Project)许可下发布,可以在http://source.android.com/进行下载。包括内核和更高级别的组件。一些手机厂商提供自己的修改内核源代码下载。能够阅读源代码的Android和DalvikVM为相关项目的研究实现是至关重要的,因为它使我们深入了解在内存中的一些数据结构。 三内存获取及相应分析
现在,Android动态内存获取主要有两种方式,一种是针对特定的APP,通过Android SDK中的工具DDMS获取相应的运行内存;另一种是通过加载LIME模块在手机,获取整个运行内存的方法。
通过DDMS获取的内存,拥有特定的结构,配合Androdi SDK的工具MAT可进行字符串类的查找,归并,进行简单的分析;通过LIME模块dump的内存可用 Linux的分析工具Volatility组块进行分析。 下面分别对DDMS和LIME内存获取进行介绍 1)通过DDMS获取内存
在Adnroid2.3版本之后,Android开放了DDMS来获取内存的途径,不再由原来比较原始的使用-Kill命令。DDMS是Dalvik Debug Monitor Service的缩写,是Android SDK中很重要的一个工具,其目录地址为/androidsdk/tools/下。前面的知识已经介绍,每一个应用都 有一个Dalvik虚拟机实例,当启动DDMS时,一个虚拟机检测设备会在ADB和DDMS间启动,当有一个新的虚拟机实例建立时就会告知DDMS,一旦虚拟机运行,DDMS就会通过ADB获取虚拟机的进程ID。DDMS为每一个进程虚拟机实例分配一个调试端口,通常以8600,依次递增,当虚拟
机创建,就会连接此端口,将相应的信息告知DDMS。
图2是DDMS打开时正在运行的进程情况,选定一个进程点击“Dump.hprof”按钮就可获取其运行内存,一个.hprof文件
图2 我们通过MAT工具来进行分析。
MAT是Memory Analyzer Tool的缩写。其是一款内存分析工具,可内嵌在eclipse中,也可作为一个单独的工具使。在上面获取的.hprof文件还不能被MAT直接使用,因为这不是标准的Linux内存文件,需要进行转化,MAT才能进行识别。在Android SDK中提供了这样一种工具———hprof?conv。将.hprof文件放到此工具目录下,通过图3的命令就可得到标准hprof文件。
图3
MAT是一款内存分析工具,在内存泄漏方面有很强大功能,在这我们使用的是它 的字符串相关功能。MAT支持Open Query Language (OQL),可对字符特征直接查找。使用MAT的大体步骤如下: 1.打开MAT,载入内存文件.hprof 2.打开dominator tree
3.查找”class java.lang.String”
4.陈列出所有引用”class java.lang.String”的对象 5.将整个列表存储到一个txt-file文件中
这样,进程所有的字符串信息都存储在这个文件中,通过一定的特征查找,有可能会找到账户甚至明码信息。