Andorid安全(七)之android取证工具介绍

  • A+
所属分类:移动安全

Andorid安全(七)之android取证工具介绍

在Andorid-APP 安全(六)中例举了多种手工取证方式(adb push、手动转储数据库、数据备份:NANDroid、adb backup、供应商取证等多种取证方式)。

在这个深度拥抱移动互联网的时代里,智能手机已经渗透到了生活的各个角落里并潜移默化地改变着人们的生活方式。自然地,只能手机保存了用户使用所留下的大量痕迹信息,也因此成为了取证调查人员需重点关注的证据源。

传统智能手机取证的关注对象大多集中在手机的内置存储器,并且相关的研究更侧重于探讨数据的获取方法,在数据分析方面较少有所提及。然而,随着手机内置存储器中数据的种类和数量不断增多,简单地罗列提取的数据已无法满足现实取证的需求,需要对数据进行进一步更深层次的研究。此外,处于保护用户数据隐私的目的,最新版本的手机应用程序逐渐开始对数据进行加密存储。收集内置存储器中获取到的数据基本是加密后的乱码信息,因而需要将只能手机取证的研究关注点适时地转向手机的ARM存储器。

脱离手工取证,本篇Andorid-APP 安全(七)简单介绍几种工具取证方式。

笔主并不是取证大师,只是在自己学习研究的道理上做了总结,欢迎指点交流。

 

手机取证可以说是成长和发展速度最快的数字取证学科,这得益于手机行业的快速增长,给取证行业的从业者提供了重要的基于以及许多挑战。

无论数字设备的类型是哪一种,数字取证调查的过程都会包括数据获取和数据分析两个阶段,具体是指将设备中的数据克隆或复制到外部存储器,接着用分析工具对从设备中获取到的数据进行分析,以此提取出有价值的信息。Android手机取证的研究工作也可分为这两个部分,即获取和分析设备中的数据。

数据取证的方法已相对成熟,主要有手工提取、逻辑提取和物理提取三种方式.每种方式需要使用到的技术和所能提取到的数据都是不尽相同的,调查取证人员需要根据具体实情进行恰当的选择。相同的是,三种方式都需要调查人员对取证调查活动所要涉及到的平台与工具有足够的了解。对Android基础等要有深入了解。之前文章有对Android基础的介绍,Android-APP 安全(五)之android取证-文件系统与数据结构https://www.secpulse.com/archives/100184.html。以及针对APP手工取证https://www.secpulse.com/archives/101931.html

Linux内存获取方法=========================

在对计算机系统进行取证调查时,具备获取和分析物理内存(RAM)数据的能力是至关重要的。因为,物理内存中不仅保存有最近运行程序、打开文件以及访问网络等操作所留下的痕迹信息,并且还能检索到一些只在内存中出现且未曾保存到硬盘上的数据信息,例如恶意代码入侵的痕迹信息以及磁盘加密文件的解密秘钥等易失性数据信息。于此类似的是,在进行Android手机取证调查时,同样需要具备获取和分析物理内存数据的能力。由于Android系统是基于Linux内核开发的,因为可以把Linux内存取证的研究思路借鉴到Android物理内存取证的研究中。

获取Linux内存镜像传统的方法是在dev/mem目录下使用dd命令获取物理内存的映射文件。


Android取证:使用ADBDD对文件系统做镜像

      关于adb结合dd的使用,网上已经有很多文章了,这里只做一个详细步骤的描述。已经看过相关文章的童鞋跳过~

     dd工具是取证中最常用的工具之一,以便为数据提取过程创建映像。 换句话说,它用于将指定的输入文件转换并复制为输出文件。 通常在分析期间,我们不允许与证据直接交互和更改。 因此,获得设备文件系统的映像,然后对其执行分析总是一个好的选择。

默认情况下,dd工具在大多数基于Linux 的系统中,以及在 Android 设备中的/system/bin中都存在。如果它不存在于你的设备中,您可以安装 BusyBox,它将安装dd以及一些其他有用的二进制文件。你可以从 BusyBox 应用程序(https://play.google.com/store/apps/details?id=stericson.busybox)获取dd的二进制文件,或者你甚至可以自己交叉编译。

1.我们需要找到的第一个东西是不同的分区,它们存在于我们的Android设备上,就像我们之前做的一样。这可以通过查看/proc/mtd文件的内容来完成。

Andorid安全(七)之android取证工具介绍

  2.接下来,我们需要了解数据分区的位置,因为这里我们采集数据分区的备份。在这种情况下,它位于mtdblock6。这里,我们将启动dd,并将映像存储在sdcard中。稍后我们将使用adb pull命令拉取映像。adb pull命令只是简单地允许你将文件从设备拉取到本地系统

Andorid安全(七)之android取证工具介绍

    3.复制可能需要一些时间,一旦复制完成,我们可以推出adb shell,访问我们的终端,并键入以下代码:

    adb pull /mnt/sdcard/data.img data.img

    4.我们还可以使用netcat工具将映像直接保存到远程位置/系统。为此,我们首先需要将端口从设备转发到系统。

    adb forward tcp:5566 tcp:5566

    5.同时,我们需要在这里启动netcat工具,监听端口5566

    nc 127.0.0.1:5566 > data.img

    6.此后,我们必须执行adb shell进入设备,然后启动dd工具,并将输出转发到netcat。

    nc –l –p 5566 –e dd if=/dev/block/mtdblock6

    这将把映像保存到系统中,而不是保存在设备上的任何位置,然后再拉取它,如果你手机上没有dd二进制,你也可以安装BusyBox来获得dd二进制。

    开始取证之前应该确保的一件事是,检查设备是否被设置为在超级用户模式下操作,这通常需要设备的root。然而,我们遇到的所有设备并不都是root。在这些情况下,我们将使用我们的自定义恢映像来启动手机,然后root设备。

---------------------------------------------------------------------------------

目前取证调查人员主要采取手工提取、逻辑提取和物理提取三种取证方式来获取手机中的数据。数据提取与手机系统相互作用的层次关系如图:

Andorid安全(七)之android取证工具介绍


数据提取方式与手机系统相互作用的层次图

数据获取方法

1)手工提取:对于从手机中提取数据来说手工提取是一种简单的方法。取证调查人员使用手机键盘便可获取手机中的内存。这种方法的优点是,操作过程最为简单,它不需要提前训练取证调查人员如何检索手机内容。它适用于所有的手机型号,进行数据采集时不需要任何数据线。这种方法存在的缺点是,它不能保全数据的完整性。此外,它不能提取手机上的所有数据,如已被删除和隐藏的文件。另一个缺点是,如果设备处于关闭状态或用户设置有手机锁屏时,则无法执行手工提取。

2)逻辑提取:逻辑获取意味着检索的对象是驻留在手机存储器逻辑分区中的数据信息。因此,逻辑提取的方式不能恢复位于逻辑分区之外的数据,如系统未分配存储空间中标记为已删除的文件。但是,在权衡数据完整性和操作难度两个指标后,现有的手机取证调查过程大多采用的都是逻辑提取的方式。在提取过程中手机需要通过数据线和取证调查人员的电脑相连接,并在电脑上执行响应的操作命令来提取,这种提取方式也存在几个弱点,如无法恢复已删除的文件,物理损坏的手机也不能采用这种数据提取方式,并且不能绕过手机屏幕锁的限制。

3)物理提取:物理提取方式被定义为按物理地址位数顺序地复制手机内存芯片中每一个比特字节的信息,从而得到存储器整个物理地址空间完整的信息拷贝。可以通过软件的方式获取存储器的物理镜像,也可以通过硬件的方式卸载下手机的存储器芯片,再对芯片做物理镜像。相比操作难度和技术风险也最大。操作稍微不慎就有可能损坏物理芯片,造成不可挽回的后果。

Android收集取证的数据源=======================

Android手机包含非易失性和易失性两种类型的存储器,各自服务于不同的目的。非易失性内存主要指的是NAND闪存,也被称作机身内存。易失性内存主要指的是RAM内存,也被称作运行内存。

机身内存是非易失性存储器,即使关机或重启之后存储的数据依然存在。这类存储器主要用来存储系统文件、应用程序数据和用户的数据文件等静态类型的数据。最新的Android手机的机身内存不断增大,可提取的数据信息的类型和数量也在快速增多。机身内存中保存的数据类型总体可以分为手机基本信息、下载安装的应用程序数据以及用户存储的数据文件。并且,机身内存中的应用程序数据大多都是以SQLite数据库文件的形式保存的。很多新版本的手机应用程序为了保护用户的隐私,对应用程序数据进行了加密存储。

运行内存是易失性存储器,手机重启后存储器中的数据就会消失,就像计算机的内存RAM一样。它主要保存系统和应用程序运行过程中的动态数据,其中包含了许多重要的信息,例如用户名、密码、加密秘钥、打开的文件、网络活动信息等应用程序数据等。存储器的内容会随着时间不断变化,并且以明文的形式呈现。

下面是整理出较为通用和规范的Android手机取证流程模型,如图

Andorid安全(七)之android取证工具介绍

手机机身内存中通常都存储有短信、通话记录和通讯录等手机基本信息及手机浏览器、高德地图和下载管理等应用程序的数据信息。随着机身内存容量的不断增大,用户也开始把与生活和工作相关的文档资料、音视频文件和照片(扫描件)等隐私数据存储到机身内存中。这些数据与用户的生活和工作行为息息相关,潜在着巨大的取证价值。

之前文章中有介绍手工取证,针对应用取证的工具推荐如下:

三方应用获取方法=========================

  随着手机端安装的第三方应用程序的种类和数量越来越丰富,近期的研究更侧重于提取和分析保存在Android手机文件系统层的第三方应用程序数据,这些应用程序的主要类别包括地理位置的定位、即使通讯、移动医疗、移动云存储等。Andriller 是由 Denis Sazonov 以 Python 编写的开源多平台取证工具,它有助于从设备中提取一些基本信息,并且有助于进行取证分析。分析完成后,将生成 HTML 格式的取证报告。


Android提取联系人、通话记录和短信:AFLogical

    我们从 GitHub 库https://github.com/viaforensics/android-forensics下载项目的源代码。下载后,我们可以将此项目导入我们的 Eclipse 工作区并进行构建。我们可以从我们现有的代码中访问File | New| Other | Android | Android Project,然后选择下载的源代码路径。

一旦我们将项目导入到我们的工作区,我们就可以在我们的设备上运行它,方法是右键单击项目并选择“运行为 Android 应用程序”。一旦我们运行它,我们将注意到,我们的设备上的AFLogical应用程序提供了选项来选择要提取什么信息。在以下屏幕截图中,你将看到 AFLogical 在设备上运行,并询问用户有关要提取的详细信息:

Andorid安全(七)之android取证工具介绍

我们将检查所有东西,然后单击Capture。AFLogical 将开始从不同来源捕获详细信息,并将捕获的详细信息保存在 SD 卡中的csv文件中。捕获过程完成后,我们会注意到一个警告框。

  我们现在可以查看我们的 SD 卡路径,我们可以找到保存的.csv文件。

Andorid安全(七)之android取证工具介绍

然后我们可以在任何.csv文件查看器中打开这些.csv文件来查看详细信息。因此,AFLogical 是一个快速有效的工具,用于从设备中提取一些信息,如联系人,通话记录和消息。


Android提取应用数据:Andriller

Andriller 是由 Denis Sazonov 以 Python 编写的开源多平台取证工具,它有助于从设备中提取一些基本信息,并且有助于进行取证分析。分析完成后,将生成 HTML 格式的取证报告。

为了下载它,我们可以访问官方网站http://android.saz.lt/cgi-bin/download.py并下载必要的包。如果我们在 Linux 或 Mac 环境中,我们可以简单地使用wget命令来下载并解压软件包。因为它只是一个 Python 文件,以及一些其他必要的二进制文件,所以没有必要安装它; 相反,我们可以直接开始使用它。

$ wgethttp://android.saz.lt/download/Andriller_multi.tar.gz

Saving to: 'Andriller_multi.tar.gz'

100%[=============================>] 1,065,574    114KB/s  in 9.2s

2013-12-27 04:23:22 (113 KB/s) - 'Andriller_multi.tar.gz'saved [1065574/1065574] 

$ tar -xvzf Andriller_multi.tar.gz

   一旦解压完成,我们可以访问 Andriller 文件夹,之后只需使用python andriller.py运行它。Andriller 的主要依赖之一是 Python 3.0。如果你使用 Python 2.7 ,它预装在大多数操作系统上,你可以从官方网站http://python.org/download/releases/3.0/或http://getpython3.com/下载 3.0 版本 。

现在,一旦我们连接了设备,我们可以继续运行Andriller.py,以便从设备捕获信息,并创建日志文件和数据库。

$ python Andriller.py

一旦开始运行,我们会注意到,它会打印出设备的几个信息,如 IMEI 号码,内部版本号和安装的社交网络应用程序。这里,它检测到 WhatsApp应用程序以及与其相关联的电话号码,因此它将继续并拉取 WhatsApp 应用程序的所有数据库。

分析完成后,我们将看到类似以下屏幕截图的屏幕:

Andorid安全(七)之android取证工具介绍

如果我们分析这个应用程序的源代码,我们可以在Andriller.py的源代码中看到,它会检查设备中存在的不同包。我们还可以在这里添加我们自己的包并保存数据库,我们希望 Andriller 为我们寻找它。

如下面的截图所示,你可以手动添加更多要使用Andriller 备份的数据库。

Andorid安全(七)之android取证工具介绍

 

机身内存数据的获取========================

机身内存中存储的手机基本信息主要包括:手机短信、通讯录以及通话记录等。

手机基本信息和应用程序的数据主要存储在系统/data/data目录下各自相对应的子文件中。但是需要拥有系统root权限才能访问到/dat分区中的数据。处于对设备自身安全的考虑,默认情况下Android手机中的root权限是未被启用的。由于Android手机的应用数据都是以SQLite数据库文件的形式组织管理的,之前对于SQLite数据库文件的提权有详细讲解,可查看我之前文章。Andorid手工取证:https://www.secpulse.com/archives/101931.html

短信相关的数据存储在系统/data/data/com.android.provider.telephony/databases目录下的SQLite数据库文件mmssms.db中。

通讯录和通话记录数据存储在/data/data/com.android.provider.contacts/databases目录下的SQLite数据库文件contacts2.db中。

手机用户日常的通话记录数据存储在SQLite数据表calls中。

 

手机的应用程序数据与短信、通话记录和通讯录一样,也是以SQLite数据库文件的方式存储在手机特定的系统目录中。因此可以采用与前文相似的方法分析从机身内存中提取到的应用程序的数据。

如:Google手机浏览器的数据信息存储在系统目录/data/data/com.google.android/browser/databases下的两个SQLite数据库文件browse2.da和webview.db中。

Android运行内存的取证========================

现有的Android手机取证研究绝大多数都只把机身内存作为所关注的数据源,从中提取出手机的短信、通话记录以及应用程序数据等信息。但是,出去保护用户数据隐私的目的,最新版本的手机应用程序开始对数据进行加密存储,应用程序的SQLite数据库文件所保存的是加密后的乱码信息。故需要将关注点适时地转向运行内存数据。

内存取证的提前是要获取RAM存储器的镜像内容,为后续使用各种分析方法来得到系统相关的有价值信息提供必要准备。现有的Android手机运行内存数据获取方法主要包括基于硬件的获取方法和基于软件的获取方法两大类。其中,基于硬件的获取方法主要是利用物理内存的残存效应,即利用专门的硬件设备对拆卸下的RAM芯片制作镜像文件。但是,这种方法操作难度大、风险高并且对操作环境要求严苛,需要操作人员具备过硬的技术水平和丰富的实践尽管,稍有操作不慎就有可能损坏芯片,造成不可挽回的后果。相比之下,基于软件的获取方法操作难度小、风险低。因此现在研究领域主要采用的是基于软件方式的Android运行内存数据获取方法,但是其中能够真的获取到存储器完整镜像内容的工具只有LIME。

LiME

LiME(Linux Memory Extractor)是用来提取易失性内存的可加载内核模块, 支持Linux以及Android等操作系统。LiME是首个用于提取Android完整内存镜像的工具, 也是目前使用最为广泛的方法之一。LiME的工作原理如下:

1)分析内核结构体iomem_resource得到系统RAM的物理地址范围。

2)将步骤1)分析出的物理地址转换成内存页的虚拟地址。

3)读取每一个内存页中的数据并将数据写入设备的SD卡中, 或者通过TCP导出。

LiME提取内存镜像基本工作流程如图1所示。

Andorid安全(七)之android取证工具介绍

LiME最大的优点是可以获取完整的内存镜像。然而LiME实际操作起来有很多的局限。

1)需要获取与取证目标Android版本一样的源代码进行LiME工具的交叉编译。

2)因为需要将LiME模块加载到取证目标操作系统中, 因此要求获取目标手机的Root权限并绕过手机屏幕锁, 以便能开启USB调试模式进行LiME模块加载和后续的镜像传输。

3)需要绕过Android的内核检查机制。

4)由于LiME需要加载进内核, 为了尽量减少对内存的覆盖, 从而保证证据的完整性, 该工具在提取镜像的过程中仅提供非常有限的用户与内核空间的交互接口。

以上局限导致LiME在实际应用中困难重重。

MEMGRAB

THING等人提出MEMGRAB方法, 通过系统调用Ptrace接口来跟踪进程, 控制进程的执行并访问进程的地址空间。PtraceLinux提供的用户态调试接口, 最初被用于断点调试和系统函数跟踪。Ptrace接口提供了一种让一个进程控制另一个进程的方法, 通过Ptrace接口可以获取运行进程的全部内存页面, 包括ART虚拟机的堆内存页面。具体工作原理如下:

1)使用PtracePTRACE_ATTACH,target_pid, 0, 0)跟踪目标进程。

2)通过Waitpid等待目标进程停止。

3)通过Procfs读取目标进程的虚拟内存。

4)通过PtracePTRACE_DETACH,target_pid, 0, 0)结束跟踪, 并重启被跟踪的进程。

MEMGRAB方法提取RAM镜像工作流程如图2所示。

Andorid安全(七)之android取证工具介绍

Android设备内存取证:RetroScope

Andorid安全(七)之android取证工具介绍

1)运行emulator-MAGIC模拟器。

2)开启另一个终端,执行命令:

开启终端,执行命令,以监视RetroScopeAPP的日志信息:

$ adb logcat |grep -E "RetroScope|ZMB" 

开启RetroScope APP,以进行安卓手机指定进程的内存取证工作,并根据监视得到的日志信息进行调试:

网上关于RetroScope工具的介绍很多,可以参考此链接进行安装测试:https://blog.csdn.net/rzwinters/article/details/76999398

---------------------------------------------------------------------------------------------------------------------------------



成功获取动态内存镜像之后, 下一步就可以从动态内存镜像中分析出有用的信息。动态内存中有大量的结构化和非结构化的各类数据, 通过动态内存分析可以分析出的有价值的数据一般包括进程列表、动态链接库、打开文件列表、网络连接、注册表等结构化数据, 以及加密密钥、账户密码、聊天记录片段、网页缓存片段、电子邮件缓存片段、图片文档片段等非结构化数据。目前动态内存镜像分析方法可分为两类, 一类是从系统的角度去分析全局信息, 如活动进程、进程地址空间、环境变量和系统信息、打开的文件、网络信息等, 这类方法一般要求有完整的动态内存镜像。另一类从具体的应用出发, 根据具体应用数据的结构特征在动态内存的碎片数据中查找一些敏感信息, 如账号密码、文字、图片等。这类方法针对性较强, 一般不需要完整的动态内存镜像, 有指定的进程的动态内存数据即可。这类分析方法也相对单一, 主要通过正则表达式来匹配敏感字段, 但是不同应用、相同应用不同的版本数据表达不尽相同, 往往需要针对性地编写查找规则。

携程APP是出行类应用中最受欢迎的应用之一, 下面以分析携程APP存储在动态内存中的账号密码为例展示动态内存镜像的内存分析过程:

1)在智能手机上执行携程APP账号登录操作;

2)登录成功后提取智能手机动态内存中携程APP进程的内存原始数据并存储至本地;

3)通过winhex查看内存镜像文件, 并通过匹配正则表达式找到用户名和密码的明文, 如图所示。

Andorid安全(七)之android取证工具介绍

存储在手机动态内存中的用户名[email protected]

Andorid安全(七)之android取证工具介绍

存储在手机动态内存中的密码“ abc123”


本文始发于微信公众号(LemonSec):Andorid安全(七)之android取证工具介绍

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: