五、从安卓设备中物理提取数据

本章将尽可能涵盖使用免费和开源工具提取物理数据。本章涵盖的大部分材质将使用本书前面讨论的亚行方法。到本章结束时,读者应该熟悉以下概念:

  • 物理提取意味着什么
  • 从物理提取中可以得到什么数据
  • 使用ddnanddump命令提取物理数据
  • 随机存取存储器成像和分析
  • SD 卡采购
  • JTAG 和芯片关闭方法

物理提取概述

在数字取证中,物理提取是电子媒体的精确逐位图像,这个定义对于移动设备也是如此。在传统的计算机取证中,这通常涉及从嫌疑人的计算机中移除证据驱动器,并通过写阻止程序对其进行成像,而无需启动驱动器,从而生成包含嫌疑人驱动器的精确副本的图像文件。输出经常被称为一个 原始图像,或者简单地称为一个 bin (二进制)文件。物理提取不同于逻辑提取,因为它们是设备内存的精确拷贝,包括未分配空间、文件松弛、卷松弛等。

在移动取证中,结果是一样的;设备的精确逐位图像,但方法有些不同。例如,将闪存从设备中移除以进行镜像可能既耗时又昂贵,并且需要大量专业知识(尽管这可以在本章后面的片外部分中讨论)。此外,除了使用先进的联合测试行动小组 ( JTAG )或芯片关闭方法之外,为了访问数据,设备必须在一定程度上被引导(并且在许多情况下被写入)。最后,找到一个甚至可以解析最终图像文件的工具可能非常困难。硬盘镜像和文件系统早已有文献记载和研究,而移动镜像和文件系统变化频繁;在某些情况下,移动文件系统甚至是特定制造商独有的。在获取图像后知道如何处理它和首先获取图像一样具有挑战性!

第 4 章中讨论的从安卓设备中逻辑提取数据的许多技术在这里仍然适用。引导到自定义恢复仍然是最合理的过程;如果可能的话,应该尽量避免物理获取活动设备。

物理上可以获取哪些数据?

简短的回答是:一切。由于物理采集是设备的精确图像,设备上的每一位数据都在图像文件中。如前所述,通过物理提取,考官通常只受到他们找到相关数据的能力的限制。一般来说,这是由于移动取证领域缺乏良好的图像分析工具。更复杂的是,已知应用会对用户数据进行编码或混淆,因此在十六进制编辑器中简单浏览图像往往会错过有价值的证据。本章将展示挂载或查看物理提取的文件系统的各种方法,而第 7 章安卓应用的取证分析将重点分析来自特定应用的数据。

根访问

同样,正如在逻辑提取中一样,根访问将是物理提取的一个至关重要的方面。要手动对设备进行映像,我们必须从 ADB shell 在设备上执行命令,这些命令需要根权限。如果无法获得根访问权限,SD 卡通常仍然可以成像。除此之外,唯一的办法是 JTAG 或芯片关闭方法。

用 dd 物理提取数据

对于任何做过传统硬盘取证的考官来说dd命令应该是熟悉的。dd命令是一个 Linux 命令行实用程序,根据定义用于转换和复制文件,但在取证中经常用于创建整个驱动器的逐位映像。dd命令的许多变体也存在并被普遍使用,例如dcfldddc3ddddrescuedd_rescue。由于dd命令是为基于 Linux 的系统构建的,因此它经常包含在安卓平台上。这意味着创建设备映像的方法通常已经存在于设备上!

dd命令有多个可以设置的选项,这里只列出了个重要的法医选项。dd命令的格式如下:

dd if=/dev/block/mmcblk0 of=/sdcard/blk0.img bs=4096 conv=notrunc,noerror,sync
  • if:该选项指定要读取的输入文件的路径。
  • of:该选项指定要写入的输出文件的路径。
  • bs:该选项指定块大小。数据以指定的块大小读写,如果未指定,默认为 512 字节。
  • conv:该选项将转换选项指定为其属性:
    • notrunc:该选项不截断输出文件。
    • noerror:如果遇到错误,该选项继续成像。
    • sync:结合和noerror选项,该选项为有错误的块写入\x00。这对于维护图像中的文件偏移非常重要。

类型

不要混淆ifof标志,这可能会导致覆盖目标设备!

命令选项的完整列表可以在http://man7.org/linux/man-pages/man1/dd.1.html找到。

请注意,块大小与noerrorsync标志之间存在重要关联:如果遇到错误,将为读取的整个块写入\x00(由块大小决定)。因此,更小的块大小会导致在发生错误时丢失更少的数据。缺点是,通常,较小的块大小会导致传输速率较慢。考官将不得不决定是及时还是更准确的获取是首选。

如前一章所述,启动进入恢复模式进行成像过程是最合理的方法。

确定要成像的内容

当对计算机成像时,考官必须首先找到驱动装置的安装位置;例如/dev/sda。对安卓设备成像时也是如此。第一步是启动 ADB shell 并使用以下命令查看/proc/partitions文件:

cat /proc/partitions

输出将显示设备上的所有分区:

Determining what to image

在上一个截图所示的输出中,mmcblk0是设备上的整个闪存。为了对整个闪存进行成像,我们可以使用/dev/blk/mmcblk0作为dd命令的输入文件标志(if)。由p1 - p29指示的紧随其后的一切都是闪存的一个分区。大小以块为单位显示,在这种情况下,块大小为 1024 字节,内部存储总大小约为 32 GB。为了获得设备内存的完整图像,我们将运行dd命令,并将mmcblk0作为输入文件。

然而,我们从前面的章节中知道,这些分区中的大部分不太可能在法医学上有趣;我们很可能只对其中的几个感兴趣。要查看每个分区的对应名称,我们可以查看设备的by-name目录。这并不是说在每个设备上都存在,有时会在不同的路径上,但对于这个设备,它在/dev/block/msm_sdcc.1/by-name处被发现。通过导航到该目录并运行ls -al命令,我们可以看到每个块的符号链接位置,如下图所示:

Determining what to image

如果我们的调查只对userdata分区感兴趣,我们现在知道它是mmcblk0p28,并且可以将其用作dd命令的输入文件。

如果设备上不存在by-name目录,可能无法识别设备上的每个分区。但是,在 ADB shell 中使用mount命令仍然可以找到很多。请注意,以下截图来自不同的设备,该设备不包含目录,因此数据分区不是mmcblk0p28

Determining what to image

在这个设备上,数据分区是mmcblk0p34。如果mount命令不起作用,可以使用cat /proc/mounts命令找到相同的信息。根据设备识别分区的其他选项有cat /proc/mtdcat /proc/yaffs命令;这些可能适用于旧设备。较新的设备可能会在根目录(通常称为fstab.<device>)中包含一个fstab文件,该文件将列出可安装的分区。

写入 SD 卡

dd命令的输出文件可以写入设备的 SD 卡。只有当可疑 SD 卡可以被移除并用无菌 SD 替换以确保dd命令的输出不覆盖证据时,才应该这样做。显然,如果写入 SD 卡,请确保 SD 卡大于正在成像的分区。

在较新的设备上,/sdcard分区实际上是到/data/media的符号链接。在这种情况下,使用dd命令将/data分区复制到 SD 卡将不起作用,并且可能会损坏设备,因为输入文件实际上是写给自己的。

要确定 SD 卡象征性地链接到哪里,只需打开 ADB shell 并运行ls -al命令。如果 SD 卡分区未显示,SD 可能需要使用第 4 章从安卓设备中逻辑提取数据中显示的步骤以恢复模式安装。

在下面的例子中,/sdcard象征性地链接到/data/media。这表明dd命令的输出不应写入 SD 卡。

Writing to an SD card

在下面的例子中,/sdcard不是到/data的符号链接,因此dd命令的输出可以用来将/data分区图像写入 SD 卡:

Writing to an SD card

在旧设备上,SD 卡甚至可能没有符号链接。

在确定要读取的块和 SD 卡象征性链接的位置后,使用以下命令将/data分区映射到/sdcard:

dd if=/dev/block/mmcblk0p28 of=/sdcard/data.img bs=512 conv=notrunc,noerror,sync

Writing to an SD card

现在,SD 卡上有一个/data分区的图像。可以用 ADB pull命令拉到考官的机器上,也可以直接从 SD 卡上读取。

用网猫直接写考官的电脑

如果图像无法写入 SD 卡,考官可以使用网猫 将图像直接写入他们的机器。netcat 工具是一个基于 Linux 的工具,用于通过网络连接传输数据。我们建议使用 Linux 或 Mac 电脑来使用内置的 netcat,尽管 Windows 版本确实存在。下面的例子是在苹果电脑上完成的。

在设备上安装网猫

很少有安装了网猫的安卓设备(如果有的话)来到 T2。要检查,只需打开 ADB 外壳并键入nc。如果它返回说nc is not found,netcat 将不得不手动安装在设备上。为安卓编译的 Netcat 在网上很多地方都能找到。我们已经分享了我们在使用的版本。

如果我们回顾上一节mount命令的结果,我们可以看到/dev分区被挂载为tmpfs。Linux 术语tmpfs意味着该分区是作为设备上的实际文件系统出现的,但实际上只存储在内存中。这意味着我们可以在这里push网猫而不需要对设备做任何永久性的改变,使用考官电脑上的以下命令:

adb push nc /dev/Examiner_Folder/nc

该命令应该已经在/dev中创建了Examiner_Folder,并且nc应该在其中。这可以通过在 ADB shell 中运行以下命令来验证:

ls /dev/Examiner_Folder

使用网猫

现在 netcat 二进制文件已经在设备上,我们需要给它从 ADB shell 执行的权限。这可以通过以下方式实现:

chomd +x /dev/Examiner_Folder/nc

我们需要打开两个终端窗口,其中一个打开亚行外壳。另一个将用于监听从设备发送的数据。

现在,我们需要从审查员的计算机通过 ADB 启用端口转发:

adb forward tcp:9999 tcp:9999

9999是我们选择用于 netcat 的端口;它可以是 Linux 或 Mac 系统上 1023 到 65535 之间的任意端口号(1023 及以下的端口号保留给系统进程,需要 root 权限才能使用)。Windows 将允许分配任何端口。

在带有 ADB shell 的终端窗口中,运行以下命令:

dd if=/dev/block/mmcblk0p34 bs=512 conv=notrunc,noerror,sync | /dev/Examiner_Folder/nc l p 9999

类型

mmcblk0p34是此设备上的用户数据分区,但是,整个闪存或任何其他分区也可以用此方法进行成像。在大多数情况下,最佳做法是对整个闪存进行成像,以便从设备获取所有可能的数据。一些商业取证工具可能还需要整个内存映像,并且可能无法正确处理单个分区的映像。

在另一个终端窗口中,运行:

nc 127.0.0.1 9999 > data_partition.img

data_partition.img文件现在应该在考官电脑的当前目录下创建。当数据传输完成后,两个终端中的 netcat 将终止并返回命令提示符。根据图像的大小,该过程可能需要很长时间。

用 nanddump 物理提取数据

在前面的所有示例中,分区都是 多媒体卡 ( MMC )块,这在较新的设备中很常见。然而,较旧的设备更有可能由 【存储技术设备】 ( MTD )块组成。我们在过去看到过dd命令无法正确成像 MTD 块的情况,尽管通常情况下,它工作正常。如果dd出现故障,有一个广泛分布的名为MTD-Utils的实用程序用于从 MTD 块中读写;nanddump命令是MTD-Utils的一部分,可以类似于dd使用,以便从 MTD 块中读取。在dd失败的情况下,nanddump总是成功的。

为安卓编译的nanddump版本可以在线上很多地方找到;我们使用了在找到的那个。

nanddump置于设备上的过程与之前用于 netcat 的过程相同:

adb push nanddump /dev/Examiner_Folder/nanddump
chmod +x /dev/Examiner_Folder/nanddump

就像dd一样,nanddump命令可以通过 netcat 写入 SD 卡或考官的电脑。在终端窗口中,运行以下命令:

adb forward tcp:9999 tcp:9999

从 ADB shell 中的单独终端窗口,运行以下命令:

/dev/Examiner_Folder/nanddump /dev/block/mmcblk0p34 | /dev/Examiner_Folder/nc l p 9999

在使用adb forward命令的第一个终端窗口中,运行以下命令:

nc 127.0.0.1 9999 > data_partition.img

验证完整的物理图像

验证图像文件是否与设备相同是传统数字取证的关键步骤。在安卓设备上,这可能有点棘手,如果不是不可能的话。创建的图像可以使用审查员通常使用的任何工具进行散列。可以使用以下命令通过 ADB shell 来验证设备上的内存,其中给定的路径是映像的块或分区:

md5sum /dev/block/mmcblk0

但是md5sum命令并不包含在所有安卓设备上。如果不包括在内,审查员可能能够在线找到为他们的设备编译的版本,并将其推送到设备的tmpfs分区中,如前面使用 netcat 和nanddump所示。

另一个问题是,如果图像是实时获取的,即不在上一章讨论的恢复模式下,MD5 哈希将不匹配几乎是确定的,因为设备上的数据不断变化(即使是 射频 ( 射频)屏蔽或处于飞机模式)。在这种情况下,检查人员必须记录设备在获得时是活动的,并解释哈希不应该匹配。

分析完整的物理图像

一旦使用所讨论的方法之一获得了图像,检查者可以想象手动浏览图像并提取每个分区,但是可能更愿意避免这样做。幸运的是,有各种各样的移动取证工具可以摄取物理图像,例如 Cellebrite、XRY、手机检测器和许多其他工具。不幸的是,这些都不是免费或开源的。到目前为止,最受欢迎的免费开源分析工具是布莱恩·开利的《尸检》。

尸检

侦探工具包最初是一套用于取证的基于 Linux 的命令行工具;最终,添加了一个名为“尸检”的基于浏览器的 GUI。最近,尸检已经作为一个独立的平台在 Windows 上发布,并包括对分析安卓图像的支持。3.1.1 版如下截图所示。加载和分析图像的完整过程将在第 8 章安卓应用的取证分析中介绍。

尸检可以在http://www.sleuthkit.org/下载。

加载图像后,展开图像将显示尸检发现的所有体积,如下图所示:

Autopsy

找到的卷比设备上的分区数量多得多。它们可能是工具造成的误报,也可能是设备磨损均衡的结果。

其中一个卷将是数据分区,如下所示:。

Autopsy

请注意,上面看到的媒体目录是 SD 卡,因为它象征性地链接到了data分区。data分区内的data文件夹将包含应用数据:

Autopsy

安装每个应用时,都会为其创建一个目录。上一张截图中文件夹图标上带有红十字的目录已被删除,这表明应用已从设备中删除。

最后,尸检很好地为检验人员自动提取了一些数据,但是与所有法医工具一样,这些信息应该手动验证,如第 7 章安卓应用的法医分析所示。

Autopsy

分析物理转储的问题

我们在许多法庭论坛和电子邮件列表中看到的最常见的问题是审查员获得了一个物理转储,然后无法将该转储加载到声称支持该设备的工具中。很多时候,这是因为考官没有说明带外 ( OOB )区域。

OOB 区,有时称为备用区,是闪存中为元数据保留的一小部分。元数据通常包括 纠错码 ( 纠错码)、关于坏块的信息以及在某些情况下关于文件系统的信息。这给审查人员带来了一个问题,因为大多数移动取证工具都不能说明 OOB 地区的情况;他们希望它不包含在图像中。当向工具呈现包含备用区域的图像时,工具经常不知道该做什么,并且不能正确解析数据。

工具无法说明 OOB 地区的原因是dd图像中包含的是而不是,这是大多数工具用来创建图像的。使用nanddump命令时,可能会包括 OOB 区域,但根据使用的二进制文件,可能会有一个选项将其排除。OOB 地区包括芯片关闭和 JTAG 图像。

要将图像正确加载到取证工具中,首先需要移除 OOB 区域。一般经验法则是,OOB 大小基于设备的页面大小;对于每 512 字节的页面大小,将有 16 字节的 OOB 区域。例如,页面大小为 2048 字节的设备在每页的末尾可能有 64 字节的 OOB 区域。然而,这完全取决于内存制造商。在尝试移除 OOB 区域之前,审查员应该找到特定存储芯片的数据表,以确认页面和 OOB 区域的大小。这通常可以通过在手机的电路板上找到存储芯片,并搜索芯片的型号来实现。

以下是 Python 脚本的一些示例代码,该脚本将从图像中移除 OOB 区域。就像上一章一样,我们并不自称是 Python 专家,我们确信有更好、更高效的方法可以做到这一点,但这一个确实有效:

import sys
file_to_parse = open(sys.argv[1],'rb')
file_after_removal = open('file_out.bin','wb')
while file_to_parse:
  lines_out = file_to_parse.read(2048)
  if lines_out:
    file_after_removal.write(lines_out)
    file_to_parse.seek(64,1)
  if not lines_out:
    break
print 'Done'
file_to_parse.close()
file_after_removal.close()

这个文件,如果命名为OOB_Remover.py,将通过以下命令执行:

python OOB_Remover.py C:\Users\Android_Examiner\physicaldump.bin

没有 OOB 区域的输出文件将在执行脚本的目录中被命名为file_out.bin。无论如何都不会编辑或修改原件。

请注意,编写代码时假设页面大小为 2048,OOB 大小为 64;这两个数字必须根据拍摄图像的存储芯片的具体尺寸进行编辑。然后,输出应该能够加载到商业移动取证工具中。

对安卓 RAM 进行成像分析

拉安卓内存不适用的情况非常多,因为它需要根访问。大多数公共根进程涉及重启手机,这会擦除易失性内存,这意味着当考官获得根来镜像内存时,已经太晚了,因为内存已经被擦除了。由于这个原因,也可能是其他原因,在商业取证领域,对安卓内存成像和分析的支持并不多。然而,在某些情况下,成像内存是适用的,并可能被证明是无价的。如果一个设备在被扣押时已经根深蒂固,那么对内存进行成像应该是扣押过程中的一个强制性步骤。由于关闭手机电源会擦除内存,设备应处于飞机模式(任何其他网络连接,如无线网络和蓝牙被禁用),内存应立即成像,以避免设备电池没电,然后才能拔出内存。

谈到内存,主要的挑战是分析。RAM 完全是原始的、非结构化的数据;没有文件系统。当在十六进制编辑器中查看时,内存似乎只是一个巨大的数据块,几乎没有韵律或理由来帮助检查者弄清楚他们在看什么。现代设备通常有千兆字节的内存,这一事实加剧了这一困难。使用传统的取证工具和方法,可以很容易地在内存中搜索关键词,但这假设审查员确切知道他们在寻找什么。

RAM 里能找到什么?

任何写入闪存的数据都必须通过RAM,处理器没有其他方式与闪存通信。这意味着在设备上完成的几乎任何事情都可以在内存转储的内容中找到。根据设备的使用量,数据可能会无限期地保留在内存中,直到需要被覆盖。内存转储经常包含设备上键入的文本,包括用户名和密码,以及没有永久存储在设备上的应用数据。例如,脸书应用的旧版本将用户新闻提要的内容存储在其应用文件夹的数据库中;较新的版本不保存用户的新闻提要,但它存在于内存中。

用石灰成像内存

安卓 RAM 获取最常用的工具是 Linux 内存提取器 ( 莱姆),之前被称为 DMD。LiME 是免费的开源软件,但并不十分用户友好,因为它要求用户从源代码编译它,而这只能在 Linux 系统上完成。对于每个被检查的设备,编译过程也必须针对安卓的每个特定版本进行,这在一定程度上限制了它在该领域的可用性。这是必要的,因为 LiME 不是二进制的(就像我们以前使用的 netcat 和 nanddump 工具一样);相反,它是一个内核模块,必须专门为将要加载到其中的每个内核构建。

为了确保下载正确的内核源代码,我们需要确定设备的型号和软件版本,这可以通过滚动手机菜单到设置 | 关于手机来完成。或者,可以通过运行以下命令在 ADB shell 中找到此信息:

cat /system/build.prop

模型中的软件版本应该在文件顶部的前几行。

幸运的是,大多数安卓厂商确实发布了自己的内核源代码;一个快速谷歌搜索通常可以找到每个型号和软件版本的源代码。以下是少数主要制造商的开源发布站点:

类型

必须使用正确的模型和版本源。使用错误的内核源代码编译 LiME,至少在设备上不起作用。加载不兼容的内核模块也会导致设备崩溃。

要获取莱姆的源代码,导航至https://github.com/504ensicsLabs/LiME并选择下载 ZIP 选项,然后提取 ZIP。

网上有很多优秀的资源解释如何为特定的内核编译莱姆,以及如何创建一个自定义的Volatility插件来检查得到的内存转储,所以我们在这里就不详细介绍了。这里列出了其中的几个:

这些来源缺少的一点是,使用 ADB pull获取/proc/config.gz文件的步骤可能不适用于所有设备。如果文件不存在,可以在源代码中找到正确的配置文件,通常在/arch/arm/configs文件夹中。通常以处理器型号命名,例如apq8064_defconfig

带 mem 的成像内存

如前节所述,使用石灰不适合胆小的人;这是一个非常令人生畏的过程,充满了复杂因素。这个领域的考官似乎不太可能下载和编译内核源代码。 mem 工具是由詹姆斯·纳特尔开发的,用于解决这些问题。mem 不是需要在设备特定的基础上编译的内核模块,而是类似于本章前面使用的 netcat 和 nanddump 示例的二进制文件。mem 工具可在http://sourceforge.net/projects/androidforensics-mem/files/下载。

Mem 是一个可执行的二进制文件,需要推送到设备上,并使用之前为 netcat 和 nanddump 详细描述的确切过程来执行。为了读取内存而将某些东西推到内存中似乎是违背直觉的,但这是计算机取证中公认的必要条件。我们认为,覆盖一小部分内存比实际将其推送到设备并覆盖证据用户数据更好。

内存有能力读取整个内存,或针对特定的,法医感兴趣的进程(应用)。假设 mem 被推送到用于上述 netcat 的设备上的相同位置,运行 mem 的格式如下:

/dev/Examiner_Folder/mem <PID>

PID是要读取的进程的 ID;如果设置为 0,将对所有内存进行成像。要查看 ADB shell 中的进程列表,请使用以下命令:

ps

在下面的截图中,我们可以看到PID是输出的第二列:

Imaging RAM with mem

输出可能相当大,尽管通过简单阅读列表可以发现有趣的过程:

Imaging RAM with mem

在上面的截图中,我们可以看到 Kik、脸书、Calendar、Gmail 都在运行。读取整个输出的替代方法是使用grep搜索已知的应用。例如,要在输出中找到脸书,我们可以运行以下命令:

ps | grep facebook

其输出将只显示脸书的条目,如下所示:

Imaging RAM with mem

我们可以看到脸书的 PID 是2252。为了避免覆盖设备上的数据,mem 被编写为与 netcat 一起使用,正如本章中的使用 netcat 直接写入考官的计算机一节所示。因此,获取脸书使用的内存需要以下步骤:

  1. 在考官电脑的终端上,运行:

    ```py adb forward tcp:9999 tcp:9999

    ```

  2. 在 ADB 外壳内的终端窗口中,运行:

    ```py /dev/Examiner_Folder/mem 2252 | /dev/Examiner_Folder/nc –l –p 9999

    ```

  3. 在考官电脑的终端窗口运行:

    ```py nc 127.0.0.1 9999 > FB_RAM.bin

    ```

  4. mem 运行完毕后,考官电脑的工作目录中应该有一个名为FB_RAM.bin的文件。

来自 mem 的输出

如前所述,没有太多好的方法来检查内存,因为没有文件系统;输出只是一团数据。对于用 mem 获得的数据,这仍然是正确的;上面的脸书内存输出是一个 550 兆字节的非结构化数据块。下面的截图可以看作是一个例子:

Output from mem

我们建议使用字符串或其他一些搜索功能来缩小数据范围,以便找到有用的用户数据。该文件还可以加载到计算机取证工具,如包住或 FTK,以搜索关键词,雕刻工具可以用来定位图像。

但是,只要有足够的耐心和的奉献精神,就能找到有用的信息,比如来自用户新闻提要的这篇帖子:

Output from mem

最终,mem 开发人员希望开发一个波动性配置文件来帮助分析输出。

获取安卓 SD 卡

如上文和前几章所述,SD 卡可以指物理外部 SD 卡或闪存内的分区。可移动外部 SD 卡可以通过具有典型计算机取证工具的写阻止程序,或者使用上一节中显示的dd / nanddump技术,与设备分开成像,尽管前者通常更快,因为它不需要通过 netcat 写入数据。

对 SD 卡进行物理成像与上面讨论的物理成像非常相似;事实上,如果 SD 卡象征性地链接到/data分区,它将作为/data分区的一部分获得,如尸检截图所示。过程中唯一不同的是,如果 SD 卡正在成像,输出文件无法写入 SD 卡!这意味着使用前面介绍的 netcat 方法是对内部 SD 卡进行物理成像的最佳选择。

sd 卡上能找到什么?

默认情况下,SD 卡通常用于存储大型文件,包括下载的项目和设备拍摄的图片。许多应用还会在 SD 卡上创建自己的目录,用于存储通过聊天应用发送或接收的图像等数据。在某些情况下,正如在第 8 章安卓取证工具概述中所看到的,甚至有应用会定期将其所有数据备份到 SD 卡。这对法医检查人员特别有用,因为他们可能由于安全设置或无法获得 root 用户身份而无法访问内部内存,但可能能够访问 SD 卡。

感兴趣的常见 SD 卡位置包括但不限于以下位置:

  • /DCIM:该位置包括在设备上拍摄的照片
  • /Pictures/Screenshots:此位置包含设备上拍摄的截图
  • /Download:此位置包含下载的文件
  • /Android/data:这是很多应用的存放位置
  • /AppName:这是很多应用的存放位置

类型

即使应用已被删除,/Android/data/AppName文件夹仍可能存在。文件夹的内容将被删除,但文件夹可能会保留;这表明该应用先前已安装在该设备上。

这些只是常见的默认位置。如果设备是根设备,用户可以将内部存储器中的任何数据放入 SD 卡。

SD 卡安全

在旧版本的安卓系统中,只需将手机插入电脑,就可以在逻辑上安装 SD 卡,并允许审查员访问其数据。在安卓的某些版本(可能是 3.0)中,这种情况发生了变化,尽管在我们检查的各种更改日志中找不到确切的版本。如果屏幕锁定正在使用,较新版本的安卓将不会自动允许从计算机访问 SD 卡,这意味着必须绕过屏幕锁定才能访问 SD 卡。一个明显的例外是,物理的外部 SD 卡仍然可以被移除,并使用传统的计算机取证方法进行分析。

SD 卡也可以加密,如果是内部 SD 卡,可以通过设备全磁盘加密,如果是外部 sd 卡,可以通过第三方应用。在某些情况下,激活全磁盘加密会使 SD 卡保持未加密状态,尽管这取决于设备制造商。

类型

安卓棒棒糖中的全磁盘加密也加密了 SD 卡。

先进的法医方法

除了前面章节中讨论的方法,还有更高级、更专业的方法可用。JTAG 方法和芯片关闭方法在许多常见情况下都是非常有用的工具,但是需要高级培训(并且在使用实时证据之前需要大量实践!).最后一种先进的方法是冷启动攻击来恢复加密密钥,这种方法更理论化。

JTAG

JTAG 是由电气和电子工程师协会 ( IEEE )开发的标准。在设备生产过程中,它用于通过专用接口与处理器进行通信,以进行测试。幸运的是,对于法医鉴定人员来说,它还允许他们直接与处理器通信,并检索闪存的完整物理图像。

要进行 JTAG 提取,必须将器件拆下来放到电路板上。电路板将包含多个分接头(设备电路板上的物理触点),尽管它们通常没有标记,并且通常比 JTAG 要求的分接头多得多。为了确定正确的敲击,考官必须在网上找到一个图钉(或者包含在他们选择的工具中),或者使用电子测试设备来确定每个敲击是什么。然后,检查人员必须将一根电线焊接到每个分接头上,或者使用市售的适配器(有时称为夹具),并通过提供的适配器连接到他们的 JTAG 盒,如下图所示:

JTAG

HTC Evo 在为 JTAG 勾搭前后(http://lowcostwin4n6.blogspot.com/提供)

JTAG 听起来可能很复杂(也许是这样),但它有许多有用的用途,这里列出了两个优点:

  1. 它不需要打开设备电源,因此:
    • 即使设备损坏也能成功
    • 不存在射频屏蔽问题
    • 不需要根、ADB 或 USB 调试
  2. 它可用于恢复设备 PINs 密码等:
    • 可以对整个闪存进行映像,并恢复/破解密码文件,如第 4 章所示

很多厂家制造 JTAG 工具;许多用于移动取证的常用工具可以在http://teeltech . com/mobile-device-forecast-tools/JTAG-equipment/上找到。网站上列出的 RIFF 盒子可能是最常用于移动取证的,因为它支持多种设备(包括 pin 输出)。

JTAG 并不总是成功的,甚至是可能的。虽然接口几乎总是在电路板上,但制造商可以选择在设备制造完成后将其禁用。

芯片关闭

芯片脱落包括加热设备的电路板,直到将元件固定在电路板上的焊料熔化,然后移除闪存芯片。然后可以使用商业工具读取存储芯片,得到完整的物理图像。像 JTAG 一样,芯片剥离技术源于商业电子生产过程。熔化焊料的过程(通常称为回流或返工)用于从电路板上放置和移除元件,用于获取存储器的读取器用于读取和写入存储器芯片,通常是批量读取和写入。

Chip-off

正在从损坏的手机上移除内存芯片(由 www . binary entel . com/services/JTAG-chip-off-forensics/chip-off _ forensics/)提供

芯片关闭具有与 JTAG 相同的好处:它不需要设备通电,并可用于从锁定的设备获取 PIN/密码;虽然获取个人识别码/密码通常是一个没有实际意义的问题,但芯片关闭通常被认为是一个破坏性的过程。虽然存储芯片可以在设备上更换,但这是一个技术要求很高的过程,需要进一步培训。但是,作为最后的手段,芯片关闭是一个很好的替代设备,否则将无法检查。

由于需要专门的返工站和商用内存读取器,芯片关闭比 JTAG 贵得多。有几十个可用的返工站,它们都提供基本相同的功能。内存阅读器的种类也很丰富,尽管我们在的这款价格合理的型号上取得了巨大的成功。返工站和阅读器不是与芯片关闭相关的唯一成本;大多数阅读器还需要一个特定的适配器来读取每个型号的芯片。

绕过安卓全磁盘加密

在进行任何进一步的之前,请注意这部分非常不切实际。然而,我们在这里提出它,希望一些有抱负的法医开发人员会看到它,并决定它是一个足够有价值的事业,使它更广泛地适用(也因为它真的很整洁)。

冷启动攻击已经被演示和使用了很多次,但直到最近都不能有效地用于对付安卓设备。冷启动攻击是基于 RAM 在较低温度下挥发性较低(数据保持时间较长)的想法,因此冻结设备可以让检查人员访问 RAM 并找到解密设备所需的密钥。最近,一组研究人员成功证明了这一点,他们的论文和研究可以在这里找到:https://www1.informatik.uni-erlangen.de/frost

请再次注意,这些技术仅针对一台设备(Galaxy Nexus)进行了验证,它们的工具是一个可加载的内核模块,非常像 LiME,并且依赖于必须为其所针对的每台设备创建的自定义恢复映像。

总结

本章讨论了用于对内部存储器或 SD 卡进行物理成像的几种技术,以及与之相关的一些常见问题:

|

技术

|

相关问题

| | --- | --- | | 截止日期(Deadline Date 的缩写) |

  • Usually pre-installed on the equipment.
  • May not work on MTD block
  • Unable to get out-of-band area.

| | nanddump |

  • It is not common on the equipment and must be pushed to the equipment.
  • Good coordination with MTD block
  • Out-of-band areas can be obtained, based on the options in the binary used.

|

此外,每种成像技术都可以用于将图像保存在设备上(通常保存在 SD 卡上),或者与 netcat 一起将文件写入检查者的计算机:

|

技术

|

特征

| | --- | --- | | 写入 SD 卡 |

  • Simple, no need to push additional binary files to the device.
  • Most examiners are familiar with it.
  • If the SD card is symbolically linked to the partition being imaged
  • The entire memory cannot be used if it is being imaged.

| | 使用 netcat |

  • It is usually necessary to push another binary file to the device.
  • Some are complicated, so we must follow the steps completely.
  • No matter what the work is imaging
  • Probably better than writing SD

更耗时 |

还演示了用于随机存取存储器成像的多种工具:

|

工具

|

特征

| | --- | --- | | 石灰 |

  • Must be compiled for each inspected device.
  • Very complicated process
  • Known and documented analytical procedures
  • Output is a dump of all memory.

| | Mem |

  • It can be used on any device without extra steps.
  • New tools, less widely used and recorded.
  • The output is a file for each process running on the device.

|

最后,我们在介绍性的层面上简要讨论了芯片关闭和 JTAG 技术。

下一章将演示如何从物理映像中恢复删除的数据,就像本章中创建的物理映像一样。