移动取证实践指南第四版(二)
原文:
annas-archive.org/md5/6efd6e14f5596709cdc9a37a8f4a6218译者:飞龙
第九章:安卓法医设置和数据提取前的技术
在上一章中,我们介绍了安卓架构、安全特性、文件系统以及其他功能的基础知识。在开始检查之前,建立一个法医环境非常重要,因为这确保了数据的保护,同时你作为检查员能够控制工作站。本章将解释设置数字法医检查环境的过程,并阐述设置时需要考虑的事项。始终保持对法医环境的控制至关重要;这可以防止污染物的引入,从而影响法医调查。
本章将涵盖以下主题:
-
为安卓设置法医环境
-
将安卓设备连接到工作站
-
屏幕锁绕过技术
-
获得 root 权限
为安卓设置法医环境
作为一名法医检查员,在调查过程中你可能会遇到各种类型的手机。因此,有必要在此基础上设置一个基本环境,根据需求进行扩展。同时,始终保持对环境的完全控制也非常重要,以避免任何意外情况的发生。设置一个合适的实验室环境是法医过程中的一个重要环节。安卓法医设置通常包括以下步骤:
-
从一个全新或法医无菌的计算机环境开始。这意味着系统中不存在其他数据,或者数据以一种方式进行存储,避免污染当前的调查。
-
安装连接设备所需的基本软件。安卓法医工具和方法可以在 Windows、Linux 和 macOS 平台上运行。
-
获得对设备的访问权限。你必须能够启用设置或绕过它们,以便从安卓设备中提取数据。
-
使用本章和第九章中定义的方法,安卓数据提取技术,向设备发出命令。
以下章节提供了设置基本安卓法医工作站的指导。
安装软件
安卓软件开发工具包(SDK)帮助开发者构建、测试和调试在安卓上运行的应用程序。安卓 SDK 包括安卓 Studio,这是开发安卓应用的官方集成开发环境(IDE)。安卓 Studio 提供了有价值的文档和其他工具,在安卓设备调查过程中能提供很大的帮助。或者,你也可以仅下载平台工具,它们是安卓 SDK 的一部分,包含与安卓平台交互的工具,如 ADB、fastboot 等;这些将在以下章节中详细描述。
对 Android SDK 有良好的理解将帮助你掌握设备的细节及其数据。
Android Studio 包含软件库、API、工具、模拟器和其他参考材料。你可以从developer.android.com/studio/index.html免费下载。平台工具可以从developer.android.com/studio/releases/platform-tools下载。
在进行取证调查时,拥有这些工具可以帮助你连接到 Android 设备并访问其中的数据。Android SDK 更新非常频繁,因此确认你的工作站也保持更新非常重要。Android SDK 可以在 Windows、Linux 和 macOS 上运行。
安装 Android 平台工具
在对取证设备进行调查时,必须安装并正确配置 Android SDK 或 Android 平台工具。Windows 版的 Android Studio 大约是 718MB,相较于仅为 20MB 的 Android 平台工具软件来说较为庞大。
以下是在 Windows 10 机器上安装 Android 平台工具的逐步步骤:
- 在安装 Android Studio 或平台工具之前,请确保你的系统已安装Java 开发工具包(JDK),因为 Android SDK 依赖于 Java SE 开发工具包。
JDK 可以从www.oracle.com/technetwork/java/javase/downloads/index.html下载。
-
从
developer.android.com/studio/releases/platform-tools下载平台工具的最新版本。 -
右键点击并将 ZIP 文件解压到一个文件夹。安装位置由你选择,并且必须记住以便未来访问。在本示例中,我们将其解压到
C:\ folder。 -
打开目录(
C:\platform-tools),并注意到以下工具列出在其中:
Android 平台工具
这完成了基础的 Android 工具安装。如果你安装的是完整的 Android Studio 版本,你仍然应该能在新安装的 Android 目录下看到平台工具文件夹。
创建 Android 虚拟设备
使用 Android Studio,你可以创建一个Android 虚拟设备(AVD),也叫做模拟器,这通常在开发者创建新应用时使用;然而,从取证的角度来看,模拟器也具有重要意义。模拟器在理解应用程序如何在设备上运行和执行时非常有用。这在确认在取证调查过程中发现的某些结果时会有所帮助。
此外,在使用运行较旧平台的设备时,您可以为相同的平台设计仿真器。此外,在将取证工具安装到真实设备之前,可以使用仿真器来了解取证工具如何工作以及如何更改 Android 设备上的内容。要在 Windows 工作站上创建新的 AVD,请按照以下步骤操作:
- 打开 Android Studio 并导航到工具 | AVD 管理器。Android 虚拟设备管理器窗口如下图所示:
Android 虚拟设备管理器
- 点击“创建虚拟设备”以创建新的虚拟设备。在接下来的屏幕中,选择适当的硬件、系统映像、API 级别、AVD 名称等,并继续操作。例如,以下截图显示选择了 Android Pie:
虚拟设备配置
-
设备成功创建后,会显示一个确认消息。现在,选择 AVD 并点击播放按钮。
-
这应该会启动仿真器。请注意,这可能需要几分钟,甚至更长时间,具体取决于工作站的 CPU 和内存。仿真器确实会消耗系统大量资源。成功启动后,AVD 将运行,如下图所示:
Android 仿真器
从取证的角度来看,分析师和安全研究人员可以利用仿真器的功能来了解文件系统、数据存储等。通过仿真器工作时创建的数据存储在主目录下名为android的文件夹中。例如,在我们的示例中,我们之前创建的 Pixel_XL_API_28 仿真器的详细信息存储在C:\Users\Rohit\.android\avd\Pixel_XL_API_28.avd下。
在此目录下的各种文件中,以下是对取证分析师有兴趣的文件:
-
cache.img:这是/cache分区的磁盘映像(记得我们在第七章《理解 Android》中讨论了 Android 设备的/cache分区)。 -
sdcard.img:这是 SD 卡分区的磁盘映像。 -
Userdata-qemu.img:这是/data分区的磁盘映像。/data分区包含设备用户的宝贵信息。
现在我们已经了解了设置环境的步骤,接下来让我们将 Android 设备连接到取证工作站。
将 Android 设备连接到工作站
使用开源工具对 Android 设备进行取证采集时,需要将设备连接到取证工作站。任何设备的取证采集应在取证工作站上进行。取证工作站仅限于用于取证,不能用于个人用途。
请注意,每当设备插入计算机时,可能会对设备进行更改;你必须始终完全控制与 Android 设备的所有交互。
为了成功将设备连接到工作站,您需要执行以下步骤。请注意,写保护可能会阻止设备成功获取数据,因为可能需要向设备发送命令以提取信息。所有以下步骤应在测试设备上验证后,再尝试在真实证据上执行。
识别设备数据线
Android 设备的物理 USB 接口允许它连接到计算机以共享数据,如歌曲、视频和照片。此 USB 接口可能因制造商和设备型号不同而有所变化。例如,一些设备使用 mini-USB,而另一些则使用 micro-USB 和 USB Type C。此外,一些制造商使用自己的专有格式,如 EXT-USB、EXT micro-USB 等。在获取 Android 设备的第一步是确定所需的设备数据线类型。
有不同类型,如 mini-USB、micro-USB 以及其他专有格式。以下是最常用连接器类型的简要描述:
| 连接器类型 | 描述 |
|---|---|
| Mini - A USB | 它的大小大约为 7 x 3 毫米,长边的两个角被抬起。 |
| Micro - B USB | 它的大小大约为 6 x 1.5 毫米,两个角被切掉形成一个梯形。 |
| 同轴连接器 | 它有一个圆形孔,中间插着一个针。此类别有不同的尺寸,直径从 2 毫米到 5 毫米不等。广泛应用于诺基亚型号。 |
| D Sub-miniature | 它的形状为矩形,具有两个圆角。矩形的长度不同,但高度始终为 1.5 到 2 毫米。主要用于三星和 LG 设备。 |
接下来,我们来快速了解一下如何安装设备驱动程序。
安装设备驱动程序
为了正确识别设备,计算机可能需要安装某些驱动程序。如果没有必要的驱动程序,计算机可能无法识别并正常与连接的设备工作。问题在于,由于 Android 允许制造商进行修改和定制,因此没有通用的驱动程序适用于所有 Android 设备。每个制造商编写自己的专有驱动程序并通过互联网发布,因此,确定需要安装的特定设备驱动程序非常重要。当然,一些 Android 取证工具包(我们将在后续章节中讨论)确实提供了一些通用驱动程序或一组最广泛使用的驱动程序;但它们可能无法适用于所有型号的 Android 手机。
一些 Windows 操作系统在设备插入后能够自动检测并安装驱动程序,但大多数情况下它们会失败。所有制造商的设备驱动程序都可以在各自的官方网站上找到。
访问连接的设备
如果你还没有这样做,请直接使用 USB 电缆将解锁的 Android 设备连接到计算机。Android 设备将显示为一个新驱动器,你将能够访问外部存储上的文件。如果设备被锁定,则此时你将无法访问任何文件,可能需要使用“开启 USB 存储”选项,这个选项可以在手机上启用,如下图所示:
Android 4.1 版本中的 USB 大容量存储
对于一些 Android 手机(尤其是 HTC 手机),当设备通过 USB 电缆连接时,它可能会暴露出多个功能。例如,如下图所示,当 HTC 设备连接时,它会呈现一个包含四个选项的菜单。默认选择是仅充电。当选择磁盘驱动器选项时,它将作为磁盘驱动器挂载:
HTC 手机的 USB 选项
当设备作为磁盘驱动器挂载时,你将能够访问设备上存在的 SD 卡。从法医角度来看,SD 卡具有重要价值,因为它可能包含对调查重要的文件;然而,存储在/data/data下的核心应用数据将保留在设备上,并无法通过这些方法访问。
Android 调试桥
被认为是 Android 取证中最关键的组件之一,Android 调试桥(ADB)是一个命令行工具,允许你与 Android 设备进行通信并控制它。在接下来的章节中,我们将详细了解 ADB;现在,我们将专注于 ADB 的基本介绍。你可以在/platform-tools/下访问 ADB 工具。
在我们讨论任何关于 ADB 的内容之前,我们需要先了解USB 调试选项。
USB 调试
此选项的主要功能是启用 Android 设备与安装了 Android SDK 的工作站之间的通信。在 Samsung 手机上,你可以在“设置 | 开发者选项”中找到这个选项,如下图所示:
Samsung S8 设备中的 USB 调试选项
其他 Android 手机可能有不同的环境和配置特性。你可能需要通过访问构建模式来强制启用“开发者选项”。
然而,从 Android 4.2 开始,开发者选项菜单被隐藏,以确保用户不会意外启用它。要启用它,请进入设置 | 关于手机,然后连续点击“版本号”字段七次。完成此操作后,开发者选项将出现在设置菜单中。在 Android 4.2.2 之前,启用此选项是与设备通过 ADB 通信的唯一要求;然而,从 Android 4.2.2 开始,Google 引入了安全的 USB 调试选项。此功能仅允许用户明确授权的主机通过 ADB 连接设备。
因此,当你通过 USB 将设备连接到新工作站以访问 ADB 时,你需要首先解锁设备,并通过在确认窗口中按 OK 来授权访问,如下图所示。如果勾选了“始终允许来自此计算机的访问”,则以后设备将不会再提示授权:
安全的 USB 调试
当选择 USB 调试选项时,设备将运行 adb 守护进程 (adbd) 在后台,并持续寻找 USB 连接。该守护进程通常在一个没有特权的 shell 用户账户下运行,因此不会提供对完整数据的访问权限;然而,在 root 设备上,adbd 会以 root 账户运行,从而提供对所有数据的访问权限。除非所有其他取证方法都失败,否则不推荐将设备 root 以获取完全访问权限。如果你选择将 Android 设备 root,必须在尝试应用到真实证据之前对方法进行详细记录和测试。关于 root 的内容将在本章末尾讨论。
在安装了 Android SDK 的工作站上,adbd 将作为后台进程运行。同时,在同一工作站上,还会有一个客户端程序,可以通过在 shell 中输入 adb 命令来启动。当 adb 客户端启动时,它会首先检查是否已经有 adb 守护进程在运行。如果没有,它会启动一个新的进程来启动 adb 守护进程。adb 客户端程序通过端口 5037 与本地的 adbd 通信。
使用 adb 访问设备
一旦环境设置完成,且 Android 设备处于 USB 调试模式,使用 USB 电缆将 Android 设备连接到取证工作站并开始使用 adb。
检测连接的设备
以下 adb 命令提供了所有连接到取证工作站的设备列表。如果在发出命令时模拟器正在运行,它也会被列出。另外请记住,如果未安装必要的驱动程序,则该命令将显示空白消息。如果遇到这种情况,请从制造商处下载并安装必要的驱动程序:
我们现在已经获得了连接到工作站的设备列表。接下来,我们将查看如何停止本地 ADB 服务器。
杀死本地 ADB 服务器
以下命令用于终止本地的 adb 服务:
C:\android-sdk\platform-tools>adb.exe kill-server
在终止本地 adb 服务后,执行 adb devices 命令。你将看到服务器已启动,如以下截图所示:
现在我们将访问 Android 设备上的 ADB shell。
访问 adb shell
adb shell 命令允许你访问 Android 设备上的 shell,并与设备进行交互。
以下是访问 adb shell 并执行基本 ls 命令以查看当前目录内容的命令:
C:\android-sdk\platform-tools>adb.exe shell shell@android:/ $ ls
ls acct cache
config d
data default.prop dev
efs etc
factory fstab.smdk4x12 init
init.bt.rc init.goldfish.rc init.rc init.smdk4x12.rc init.smdk4x12.usb.rc
....
Android 模拟器可供你执行并理解 adb 命令,然后再在设备上使用它们。在第九章《Android 数据提取技术》中,我们将详细介绍如何利用 adb 安装应用程序、从设备中复制文件和文件夹、查看设备日志等。
基本 Linux 命令
现在我们将快速浏览一些常用的 Linux 命令及其在 Android 设备上的使用:
ls:ls命令(不带任何选项)列出当前目录中存在的文件和目录。使用-l选项时,该命令会显示文件和目录的详细信息,如大小、修改日期和时间、文件所有者及其权限等,如以下命令行输出所示:
shell@android:/ $ ls -l
ls -l
drwxr-xr-x root root 2015-01-17 10:13 acct
drwxrwx--- system cache 2014-05-31 14:55 cache
dr-x------ root root 2015-01-17 10:13 config
lrwxrwxrwx root root 2015-01-17 10:13 d -> /sys/kernel/debug
drwxrwx--x system system 2015-01-17 10:13 data
-rw-r--r-- root root 116 1970-01-01 05:30 default.prop
drwxr-xr-x root root 2015-01-17 10:13 dev
drwxrwx--x radio system 2013-08-13 09:34 efs
lrwxrwxrwx root root 2015-01-17 10:13 etc -> /system/etc
...
同样,以下是一些可以与 ls 命令一起使用的选项:
| 选项 | 描述 |
|---|---|
a | 列出隐藏文件 |
c | 按时间戳显示文件 |
d | 只显示目录 |
n | 显示长格式列表,包括 GID 和 UID 编号 |
R | 显示子目录 |
t | 根据时间戳显示文件 |
u | 显示文件访问时间 |
根据需求,调查员可以使用以下一个或多个选项来查看详细信息:
cat:cat命令用于读取一个或多个文件并将其内容输出到标准输出,示例如下所示:
shell@android:/ $ cat default.prop
cat default.prop
#
# ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=1
ro.allow.mock.location=0
ro.debuggable=0
persist.sys.usb.config=mtp
要将多个文件合并为一个文件,我们可以使用 > 运算符。要向现有文件追加内容,我们可以使用 >> 运算符。
cd:cd命令用于在不同目录之间切换。通常在从一个文件夹切换到另一个文件夹时使用。以下示例展示了用于切换到system文件夹的命令:
shell@android:/ $ cd /system
cd /system
shell@android:/system $
cp:cp命令可以用于将文件从一个位置复制到另一个位置。该命令的语法如下:
$ cp [options] <source><destination>
chmod:chmod命令用于更改文件系统对象(文件和目录)的访问权限。它还可以更改特殊模式标志。该命令的语法如下:
$ chmod [option] mode files
例如,chmod 777 命令为文件赋予所有人读取、写入和执行权限。
dd:dd命令用于复制文件,并根据操作数进行转换和格式化。在 Android 上,dd命令可以用来创建 Android 设备的逐位镜像。关于镜像的更多细节,请参阅 第四章,来自 iOS 备份的数据获取。以下是需要与此命令一起使用的语法:
dd if=/test/file of=/sdcard/sample.image
rm:rm命令可以用来删除文件或目录。以下是此命令的语法:
rm file_name
grep:grep命令用于在文件或输出中搜索特定的模式。该命令的语法如下:
grep [options] pattern [files]
pwd:pwd命令用于显示当前工作目录。例如,以下命令行输出显示当前工作目录为/system:
shell@android:/system $ pwd
pwd
/system
mkdir:mkdir命令用于创建新目录。以下是此命令的语法:
mkdir [options] directories
exit:exit命令用于退出当前所在的 shell。在 shell 中输入exit即可退出。
接下来,我们将看到如何在调查前高效地处理 Android 设备。
处理 Android 设备
在进行法医调查之前,正确处理 Android 设备是非常重要的任务。应小心确保我们的无意操作不会导致数据修改或其他不必要的事件。以下章节将重点介绍在法医调查的初期阶段处理设备时需要考虑的一些问题。
随着技术的进步,设备锁定 的概念在过去几年发生了显著变化。由于安全意识的普遍提高,大多数用户现在在其设备上启用了密码锁定机制。在我们研究一些绕过锁定 Android 设备的技术之前,重要的是当有机会时,我们不要错过禁用密码锁定的机会。
当第一次访问要分析的 Android 设备时,检查设备是否仍然处于活动状态(未锁定)。如果是,请更改设备设置,以便获得更多的设备访问权限。当设备仍然处于活动状态时,可以考虑执行以下任务:
-
启用 USB 调试:一旦启用了 USB 调试选项,就可以通过
adb连接获得更多对设备的访问权限。这对于从设备提取数据至关重要。启用 USB 调试的选项位置可能因设备而异,但通常位于设置中的开发者选项下。大多数物理获取 Android 设备的方法都需要启用 USB 调试。 -
启用保持唤醒设置:如果选中保持唤醒选项,并且设备正在充电,则设备永远不会锁定。如果设备锁定,数据采集过程可能会被中断。
-
增加屏幕超时:这是设备解锁后有效激活的时间。访问此设置的位置会根据设备型号有所不同。在三星 Galaxy S3 手机上,您可以通过导航至 设置 | 显示 | 屏幕超时 来访问此设置。
除此之外,如 第一章 中所述,移动法证简介,设备需要与网络隔离,以确保远程擦除选项无法在设备上生效。安卓设备管理器允许远程擦除或锁定手机。这可以通过登录到配置在手机上的 Google 账户来完成。更多的细节将在后续章节中提供。如果安卓设备未设置为允许远程擦除,则只能通过安卓设备管理器对设备进行锁定。此外,市场上还有一些 移动设备管理 (MDM) 软件产品,允许用户远程锁定或擦除安卓设备。某些产品可能不需要在设备上启用特定设置。
使用可用的远程擦除软件,可以删除所有数据,包括电子邮件、应用程序、照片、联系人以及其他文件,以及存储在 SD 卡上的文件。为了将设备与网络隔离,您可以将设备设置为飞行模式并禁用 Wi-Fi,作为额外的预防措施。启用飞行模式并禁用 Wi-Fi 是有效的,因为设备将无法通过蜂窝网络进行通信,并且无法通过 Wi-Fi 访问。移除手机的 SIM 卡也是一个选项,但这并不能有效阻止设备通过 Wi-Fi 或其他蜂窝网络进行通信。要将设备设置为飞行模式,请按住电源按钮并选择飞行模式。
当安卓设备未锁定时,可以执行所有这些步骤;然而,在调查过程中,我们常常会遇到被锁定的设备。因此,了解如何绕过锁定密码(如果已启用)变得尤为重要。
屏幕锁定绕过技术
由于用户意识的提高以及功能的简易性,使用密码选项来锁定安卓设备的数量呈指数增长。这意味着在法证调查过程中绕过设备屏幕锁定变得越来越重要。迄今为止讨论的屏幕锁定绕过技术的适用性取决于具体情况。需要注意的是,这些方法中的一些可能会导致我们对设备进行更改。请确保在非证据性质的安卓设备上测试并验证所有列出的步骤。您必须获得授权才能对设备进行必要的更改,记录所有采取的步骤,并能够在需要法庭证词时描述所采取的步骤。
当前,安卓提供三种类型的屏幕锁机制。尽管有些设备提供语音锁、面部识别锁和指纹锁等选项,但我们将仅讨论以下三种,因为这三种是所有安卓设备中最广泛使用的:
-
图案锁:用户在手机上设置一个图案或设计,必须画出相同的图案才能解锁设备。安卓是首个引入图案锁的智能手机操作系统。
-
PIN 码:这是最常见的锁定选项,许多手机都有此功能。PIN 码是一个四位数字,需要输入该数字才能解锁设备。
-
密码:这是一个由字母和数字组成的密码。与仅包含四位数字的 PIN 码不同,字母数字密码包括字母和数字。
以下部分详细介绍了几种技术,你可以用来绕过这些安卓锁屏机制。根据情况,这些技术可能帮助调查人员绕过屏幕锁。
使用 ADB 绕过屏幕锁
如果安卓设备上启用了 USB 调试,明智的做法是利用这一点,通过 USB 连接使用adb进行连接,正如本章前面部分所讨论的那样。你应该将设备连接到取证工作站并执行adb devices 命令。如果设备显示出来,则说明 USB 调试已启用。如果安卓设备被锁定,你必须尝试绕过屏幕锁。以下两种方法可能在启用 USB 调试时帮助你绕过屏幕锁。
删除 gesture.key 文件
删除gesture.key文件将删除设备上的图案锁;然而,需要注意的是,这会永久改变设备,因为图案锁已被移除。如果你正在进行秘密操作,这一点应考虑在内。以下是该过程的步骤:
-
使用 USB 线将设备连接到取证工作站(本示例中为 Windows 机器)。
-
打开命令提示符并执行以下指令:
adb.exe shell
cd /data/system rm gesture.key
- 重启设备。如果图案锁仍然出现,只需随便画一个图案,设备应该能够顺利解锁。
当设备已被 root 时,这种方法有效。在未 root 的设备上,此方法可能无法成功。未经适当授权,不应对安卓设备进行 root 操作,因为这会改变设备的原始状态。
更新 settings.db 文件
要更新settings.db文件,请按以下步骤操作:
-
使用 USB 线将设备连接到取证工作站。
-
打开命令提示符并执行以下指令:
/data/data/com.android.providers.settings/databases sqlite3 settings.db:
-
退出并重启设备。
-
安卓设备应处于解锁状态。如果未解锁,尝试按照之前的说明删除
gesture.key文件。
在接下来的部分,我们将查看恢复模式和 ADB 连接。
检查修改后的恢复模式和 ADB 连接
在 Android 中,恢复指的是存放恢复控制台的专用分区。恢复的两个主要功能是删除所有用户数据和安装更新。例如,当你恢复出厂设置时,恢复分区会启动并删除所有数据。同样,当需要安装更新时,也是通过恢复模式来完成的。
有许多热衷的 Android 用户通过修改的恢复模块安装自定义 ROM。这个修改过的恢复模块主要是为了简化安装自定义 ROM 的过程。恢复模式的访问方式因设备制造商而异;关于哪种方法适用于哪种制造商的设备的信息可以在互联网上轻松找到。通常,这可以通过同时按住不同的按钮来完成,比如音量键和电源键。进入恢复模式后,将设备连接到工作站并尝试访问 adb 连接。如果设备的恢复模式未被修改,你可能无法访问 adb 连接。设备的修改版恢复版本会为用户提供不同的选项,如下图所示:
接下来,我们将看到如何刷新恢复分区。
刷新新的恢复分区
有可用机制可以通过修改的镜像刷新 Android 设备的恢复分区。fastboot 工具可以方便地完成这一过程。Fastboot 是一个诊断协议,随 SDK 包提供,主要用于通过主机计算机的 USB 连接修改闪存文件系统。为此,你需要将设备启动到引导加载程序模式,在此模式下只执行最基本的硬件初始化。
一旦在设备上启用该协议,它将接受通过 USB 数据线发送的特定命令集。这些命令通过命令行发送。刷新或重写一个分区,使用保存在计算机上的二进制镜像文件就是一个允许的命令。一旦恢复分区被刷新,启动设备进入恢复模式,挂载 /data 和 /system 分区,并使用 adb 删除 gesture.key 文件。重启手机后,应该能够绕过屏幕锁;然而,这只有在设备的引导加载程序解锁的情况下才能生效。此外,刷新操作会永久改变设备。你也可以使用 fastboot boot 命令临时启动恢复镜像,在不永久改变恢复分区的情况下删除键文件。
使用自动化工具
市场上有几种自动化解决方案可以解锁安卓设备。像 Cellebrite 和 XRY 这样的商业工具能够绕过屏幕锁定,但大多数工具都要求启用 USB 调试。接下来,我们将探讨如何使用 UFED 用户锁定代码恢复工具解锁安卓设备。此工具仅适用于支持 USB OTG 的设备。此过程还需要 UFED 相机、500 号绕过锁定电缆和 501 号绕过锁定电缆。工具安装在工作站后,按照以下步骤解锁安卓设备:
- 在工作站上运行该工具并按
1,如下图所示:
UFED 用户锁定代码恢复工具
-
现在,将 500 号绕过锁定电缆的 A 端连接到工作站的 USB 端口。同时,将 500 号绕过锁定电缆的 B 端连接到 501 号 OTG 电缆,然后将另一端连接到设备。
-
连接后,工具会提示你选择恢复配置文件。选择
[1] 手动选择恢复配置文件。 -
现在,选择设备上使用的锁定类型和恢复配置文件,并按照屏幕上的指示进行操作。
-
接下来,确保设备屏幕上出现了数字键盘,并准备好接受 PIN 码。
-
关闭任何可能出现的消息窗口。按
1并按 Enter。现在,通过输入随机内容进行五次错误的登录尝试,然后点击设备底部的“忘记图案”。 -
按照屏幕上的指示操作,等待相机窗口打开,然后点击相机窗口。
-
使用光标选择设备屏幕上任意非空区域,将绿色方框覆盖其上——例如,选择屏幕上的任意数字。工具将使用此信息来检测设备是否已解锁。按 Enter 键开始过程。
-
工具将尝试多种组合来解锁设备。解锁成功后,它会提示你结束该过程。
现在我们将了解 Android 设备管理器以及如何使用它解锁设备。
使用 Android 设备管理器
大多数最新的安卓手机都配备了一项名为 Android 设备管理器的服务,该服务帮助设备拥有者定位丢失的手机。此服务还可以用来解锁设备;然而,只有在你知道配置在设备上的 Google 账户凭据时,才能实现此功能。如果你可以访问账户凭据,请按照以下步骤解锁设备:
-
在工作站上访问
google.com/android/devicemanager。 -
使用配置在设备上的 Google 账户登录。
-
选择需要解锁的设备并点击“锁定”,如下图所示:
Android 设备管理器
-
输入临时密码后,再次点击“锁定”。
-
成功后,在设备上输入临时密码以解锁设备。
这可以在不知道保存登录凭据的计算机(即嫌疑人的电脑)凭证的情况下完成。
使用“查找我的手机”绕过(仅限三星手机)
使用“查找我的手机”是一个值得尝试的技术,尤其是当你处理三星设备时;但是,它仅在设备所有者已登录三星账户并且你知道设备上配置的三星账户凭据时有效。
要开始此过程,请从网页浏览器访问“查找我的手机”服务,然后使用在设备上注册的三星账户凭据登录,如下所示:
- 点击位于左侧的“锁定我的屏幕”选项:
- 现在,输入任意临时 PIN,然后点击“锁定”按钮。(某些设备上可能会看到“解锁我的屏幕”选项,它也具有相同的功能)。现在,可以使用之前设置的临时 PIN 解锁手机。
接下来,让我们看一下污迹攻击。
污迹攻击
在少数情况下,污迹攻击可能用于推测触摸屏移动设备的密码。这种攻击依赖于识别用户手指留下的污迹。虽然这种方法可能提供绕过方式,但必须指出,由于大多数 Android 设备是触摸屏的,且使用设备时也会留下污迹,污迹攻击不太可能成功;然而,已经证明,在适当的光线下,留下的污迹是可以轻松检测到的,如以下截图所示。
通过分析污迹痕迹,我们可以辨识出用于解锁屏幕的图案。这种攻击在识别 Android 设备上的图案锁时更可能有效。在某些情况下,也可以通过屏幕的清洁程度来恢复 PIN 码。因此,在进行取证调查时,应小心首次处理设备时,确保屏幕未被触碰:
在适当光线下设备上可见的污迹
我们现在将讨论下一个方法,即忘记密码选项。
使用忘记密码/忘记图案选项
如果你知道设备上配置的主 Gmail 地址的用户名和密码,你可以更改 PIN、密码或解锁设备。在进行一定次数的解锁失败后,Android 会提供一个选项,叫做“忘记图案?”或“忘记密码?”,如下图所示:
Android 设备上的忘记图案选项
点击该链接并使用 Gmail 用户名和密码登录。这将允许你为设备创建新的图案锁或密码。
请注意,这只适用于运行 Android 4.4 或更早版本的设备。
通过启动安全模式绕过第三方锁屏
如果屏幕锁是第三方应用程序,而不是内置锁屏,可以通过进入安全模式并禁用它来绕过。要在 Android 4.1 或更高版本的设备上进入安全模式,按住 电源 按钮,直到出现电源选项菜单。然后,再按住 电源 按钮,你将被提示重新启动 Android 设备进入安全模式。点击 OK 按钮,如下图所示:
Android 中的安全模式
一旦进入安全模式,你可以禁用第三方锁屏应用,或者将其完全卸载。之后,重启设备,你应该能在没有任何锁屏的情况下访问设备。
使用 ADB 密钥绕过安全 USB 调试
如前所述,在使用 USB 调试时,如果选中了“始终允许来自此计算机的连接”选项,设备将不会在未来提示授权。这是通过将某些密钥,即 adbkey 和 adbkey.pub,存储在计算机上实现的。任何来自不信任计算机的 adb 连接尝试都会被拒绝。在这种情况下,可以从嫌疑人的计算机中提取 adbkey 和 adbkey.pub 文件,并将其复制到调查员的工作站。设备将认为它正在与已知的、授权的计算机通信。adbkey 和 adbkey.pub 文件可以在 Windows 计算机的 C:Users<username>.android 目录下找到。
在 Android 4.4.2 中绕过安全 USB 调试
如前文所述,Android 4.4.2 中引入的安全 USB 调试功能仅允许授权的工作站连接到设备;然而,正如 labs.mwrinfosecurity.com/ 所报道的,这一功能存在一个漏洞,允许用户绕过安全 USB 调试功能,并将设备连接到任何工作站。以下是绕过 Android 设备上安全 USB 调试功能的步骤:
-
在解锁的设备上,尝试使用
adb。设备将显示错误信息。 -
现在,导航到紧急拨号器或锁屏相机,并执行以下命令:
$ adb kill-server
$ adb shell
- 确认对话框将被触发,工作站现在可以在不解锁设备的情况下授权。确认对话框将显示在紧急拨号器上,如下图所示:
Android 4.2.2 中的安全 USB 调试
- 一旦通过
adb连接到设备,尝试使用以下命令绕过锁屏:
$ adb shell pm clear com.android.keyguard
接下来,我们来看一下如何通过崩溃锁屏界面来绕过屏幕锁定。
在 Android 5.x 中崩溃锁屏 UI
在运行 Android 5.0 至 5.1.1 的设备上,密码锁屏(而非 PIN 或图案锁)可以通过崩溃屏幕 UI 来绕过。通过执行以下步骤可以实现这一点,如 android.gadgethacks.com/ 中所解释:
-
在锁屏界面点击紧急呼叫选项,然后在拨号屏幕上输入任何随机内容(例如,10 个星号)。
-
双击该字段以高亮显示已输入的文本,如下图所示,并选择复制。现在,将其粘贴回同一字段:
崩溃的锁屏界面
-
重复此过程以添加更多字符。直到双击该字段时,字段不再高亮显示字符为止。
-
返回锁屏界面并打开相机快捷方式。然后,下拉通知屏幕并点击设置图标。接下来,系统会提示你输入密码。
-
按住输入框并选择粘贴,重复此过程多次。一旦足够的字符被粘贴到输入框中,锁屏界面将崩溃,从而让你能够访问设备。
现在,让我们来看看一些其他技巧。
其他技巧
上述所有技巧和现有的商业工具对于任何想要访问 Android 设备数据的取证检查员(像你一样)都非常有用;然而,也有可能出现这些技巧都无法奏效的情况。为了获取设备的完整物理镜像,当商业和开源解决方案失败时,可能需要使用芯片脱落(chip-off)和 JTAG 等技术。这里简要介绍了这些技术。
芯片脱落技术将内存芯片从电路中拆除并尝试读取,而 JTAG 技术则通过探测 JTAG 测试访问端口(TAPs)并将连接器焊接到 JTAG 端口上,从而读取设备内存中的数据。芯片脱落技术更具破坏性,因为一旦芯片从设备中拆除,恢复设备的原始功能状态就变得非常困难。此外,需要专业技术人员通过去焊芯片从电路板上小心移除芯片。拆除芯片所需的高温也可能损坏或摧毁芯片上存储的数据,这意味着当数据无法通过开源或商业工具恢复,或设备已损坏到无法修复的程度时,才应使用此技术。使用 JTAG 技术时,JTAG 端口帮助你访问内存芯片,从而无需拆除芯片即可提取设备数据的物理镜像。要关闭设备的屏幕锁定,你可以识别出锁定代码在物理内存转储中的存储位置,关闭锁定,并将该数据复制回设备。商业工具,如 Cellebrite Physical Analyzer,可以接受来自芯片脱落和 JTAG 获取的.bin文件,并为你破解锁定代码。一旦代码被手动移除或破解,你就可以使用常规技术分析设备。
芯片脱落和 JTAG 技术都需要大量的研究和经验,才能在真实设备上尝试。关于设备的 JTAG 和芯片脱落的宝贵资源可以在forensicswiki.xyz/page/Main_Page找到。
在本节中,我们探讨了绕过 Android 设备屏幕锁的各种方式。现在我们将了解 Android root 权限到底是什么。
获取 root 访问权限
作为一名移动设备取证检查员,了解所有与设备调整和修改相关的内容至关重要。这将帮助你更详细地理解设备的内部工作原理,并了解你在调查过程中可能遇到的许多问题。Root Android 手机已经成为一种普遍现象,你可能会在取证检查中遇到 root 手机。在适用的情况下,你可能还需要 root 设备以便获取取证数据。这意味着,了解 root 设备的详细情况及其与其他手机的区别非常重要。以下章节将介绍 Android root 及其他相关概念。
什么是 root?
类 Unix 操作系统中的默认管理员账户叫做 root。在 Linux 中,root 用户有权启动/停止任何系统服务,编辑/删除任何文件,改变其他用户的权限等等。我们已经了解到 Android 使用的是 Linux 内核,因此大多数 Linux 的概念同样适用于 Android;然而,大多数 Android 手机默认不允许你以 root 用户身份登录。
获取 Android 手机的 root 权限就是为了访问设备,执行设备上通常不允许的操作。制造商希望设备按一定方式工作,以供普通用户使用。Root 设备可能会使保修失效,因为使用 root 会使系统暴露于漏洞之中,并赋予用户超级用户权限。
想象一个恶意应用程序获得了 Android 系统的 root 访问权限。请记住,在 Android 中,每个应用程序都被视为一个独立的用户,并且会被分配一个 UID。这意味着应用程序只能访问有限的资源,并且强制执行应用程序隔离的概念。实际上,root Android 设备使得超级用户权限成为可能,并提供对 Android 设备的开放访问。
超级用户权限类似于 Windows 计算机上的管理员权限,能够执行普通用户无法完成的操作。在移动设备中,这种超级用户访问权限是设计上禁用的,但 root 手机则可以让你获得这一特权。
理解 root 过程
尽管硬件制造商尽力通过足够的限制来阻止访问 root,黑客们总是能找到不同的方式来获取 root 权限。Root 过程因底层设备制造商而异;然而,root 任何设备通常涉及利用设备固件中的安全漏洞,然后将su(超级用户)二进制文件复制到当前进程路径中的一个位置(/system/xbin/su),并使用chmod命令授予其可执行权限。
为了简单起见,可以想象一台安卓设备有三到四个分区,这些分区运行的程序并不完全与安卓相关(安卓只是其中之一)。
引导加载程序位于第一个分区,是手机开机时首先运行的程序。这个引导加载程序的主要任务是启动其他分区并加载安卓分区,通常被称为 ROM。要查看引导加载程序菜单,需要按特定的组合键,比如同时按住电源键并按音量加键。这个菜单提供了进入其他分区的选项,比如恢复分区。
恢复分区负责安装手机的升级,这些升级会直接写入安卓 ROM 分区。这是你在设备上安装任何官方更新时所看到的模式。设备制造商会确保只有官方更新可以通过恢复分区安装。这意味着,绕过这一限制可以让你安装/刷入任何解锁的安卓 ROM。修改版恢复程序不仅允许更简便的 root 过程,还提供了在正常恢复模式下看不到的各种选项。以下截图展示了正常恢复模式:
正常的安卓系统恢复模式
以下截图展示了修改版恢复模式:
修改版恢复模式
在安卓世界中,最常用的恢复程序是 Clockwork 恢复,也叫ClockworkMod。大多数 root 方法都是通过刷入修改版恢复到恢复分区开始的。之后,你可以发布更新,这个更新可以让设备获取 root 权限;然而,你不需要手动执行所有操作,因为市面上已有大多数型号的手机都可以通过软件一键 root。
从安卓 7.x 开始,谷歌开始严格执行验证启动。验证启动确保设备上的软件在启动到正常模式之前没有被修改。这一机制通过每个阶段验证下一个阶段的完整性和真实性后再执行。如果某个分区或段落被修改,完整性检查将失败,手机可能无法正常启动。有关验证启动的更多信息,可以参考source.android.com/security/verifiedboot/verified-boot。
这也意味着,root 这类安卓设备将变得极为困难,因为 root 涉及到对安卓操作系统的修改。Marshmallow 是第一个提供系统完整性警告的安卓版本,但自安卓 7.x 版本起,这一功能已经成为强制性要求。
对安卓设备进行 root
现在我们来看一下获取 Android 设备 root 权限的不同方法。影响你选择方法的主要因素是底层的引导加载程序是锁定还是解锁。对于解锁的引导加载程序,获取 root 权限非常容易,而对于锁定的引导加载程序,获取 root 权限则不那么简单,这意味着解锁 Android 手机的引导加载程序通常是获取 root 权限和刷入自定义 ROM 的第一步。可以通过 fastboot 模式(在前面章节中有讨论)或遵循特定厂商的引导加载程序解锁程序来完成。一旦设备的引导加载程序被解锁,下一步就是复制 su 二进制文件并授予执行权限。可以通过多种方式完成此操作。
以下是如何获取三星 Galaxy S7(国际版 SM-G930F/FD/X、韩国版 SM-G930K/L/S 和加拿大版 SM-G930W8 Exynos 型号)的 root 权限:
-
确保在开发者选项中启用了 OEM 解锁。
-
下载 ODIN(可通过
build.nethunter.com/samsung-tools/Odin_3.12.3.zip获取),并将压缩包内容提取到你选择的目录中。 -
下载 TWRP 镜像(可通过
twrp.me/samsung/samsunggalaxys7.html获取)。 -
重启设备进入下载模式。为此,在设备重启时按住音量下 + Home 按钮。当你看到下载模式警告屏幕时,按音量上继续。
启动 Odin 并将 TWRP 镜像放入 AP 插槽;不要忘记禁用自动重启。开始刷入恢复模式。
-
要退出下载模式,请按住音量下 + Home + 电源;当屏幕变黑时,立即将音量下改为音量上。
-
通过右滑允许系统修改。
-
下载 SuperSU(可通过
download.chainfire.eu/supersu获取)。 -
通过 MTP 将包含 SuperSU 的压缩包传输到设备,并通过相应的 TWRP 选项进行安装。
Root(获取 root 权限)是一个高度依赖设备的过程,因此取证调查员在将这些技术应用到任何 Android 设备之前需要小心。Root 设备有其优点和缺点。以下是获取 root 权限的优点:
-
Root 允许对设备上的软件进行最深层次的修改——例如,你可以超频或降频设备的 CPU。
-
它允许绕过运营商、制造商等对设备的限制。
-
对于极端自定义,可以下载并安装新的自定义 ROM。
以下是获取 root 权限的缺点:
-
获取 root 权限必须小心谨慎,因为错误可能导致手机软件无法修复的损坏,将设备变成一个毫无用处的“砖头”。
-
Root 可能会使设备的保修失效。
-
Root 操作会导致设备暴露于恶意软件和其他攻击中。能够访问整个 Android 系统的恶意软件可能会造成严重破坏。
一旦设备被 root,像 Superuser 应用程序 这样的应用程序就可以提供或拒绝 root 权限。这个应用程序帮助你在设备上授予和管理超级用户权限,如下图所示:
请求 root 权限的应用程序
现在我们来看 root 访问。
Root 访问 - ADB shell
普通的 Android 手机不允许你访问设备上的某些目录和文件。例如,尝试访问一个未 root 的 Android 设备上的 /data/data 文件夹,你将看到如下信息:
没有 root 权限时的权限拒绝
在已 root 的手机上,你可以通过执行以下命令以 root 身份运行 adb shell:
C:\android-sdk\platform-tools>adb.exe root
下图显示了前面命令的输出:
在已 root 设备上成功执行的 shell 命令
因此,root 手机可以让你访问本来无法访问的文件夹和数据。还要注意,# 表示 root 或超级用户权限,而 $ 则表示普通用户,如前面的命令行所示。
Android 7.0(Nougat)及更高版本支持 基于文件的加密(FBE),允许使用不同的密钥加密不同的文件。对于像你这样的取证调查员来说,重要的是要注意,对于启用了 FBE 的设备,无法应用永久的 root 权限来进行采集。因此,建议使用自定义恢复方法,因为恢复分区是以 root 权限运行的。
总结
在本章中,我们学习了如何在对 Android 设备进行调查之前,设置一个合适的取证工作站。首先,从一个已安装了必要基本软件和设备驱动程序的无菌取证工作站开始。如果取证采集方法要求解锁 Android 设备,则需要确定最佳的方法来访问设备。如果设备启用了 USB 调试功能,那么绕过屏幕锁定就非常简单。我们学习了各种屏幕锁定绕过技巧,并帮助你根据不同情况确定使用哪种方法。根据取证采集方法和调查范围,对设备进行 root 应该能提供对设备文件的完全访问权限。我们还学习了 root 操作,以及它如何用于获取对设备文件系统的完全访问权限并执行通常不允许的操作。
现在我们已经覆盖了访问 Android 设备的基本概念,接下来将介绍采集技术,并描述如何使用每种方法在 第九章 中提取数据,Android 数据提取技术。
第十章:Android 数据提取技术
使用第八章中解释的任何屏幕锁绕过技术,Android 取证设置和数据提取前的技巧,检查员可以尝试访问被锁定的设备。一旦设备可访问,下一步是提取设备上的信息。可以通过应用各种数据提取技术来实现这一目标。
本章将帮助你识别 Android 设备上敏感位置,并解释可以应用于设备的各种逻辑和物理提取技术,以提取必要的信息。
本章将涵盖以下主题:
-
理解数据提取技术
-
手动数据提取
-
逻辑数据提取
-
物理数据提取,包括对 Android 设备和 SD 卡进行成像、JTAG 和芯片拆卸技术
理解数据提取技术
存储在 Android 设备上的数据可能是民事、刑事或企业公司内部调查的一部分。在处理涉及 Android 设备的调查时,作为取证检查员,你需要注意在取证过程中需要处理的问题;这包括确定是否允许 root 访问(通过同意或法律授权),以及在调查过程中可以提取和分析哪些数据。例如,在涉及跟踪的刑事案件中,法院可能只允许提取和分析嫌疑人 Android 设备上的短信、通话记录和照片。在这种情况下,最合理的做法可能是逻辑提取仅这些特定项目。然而,最好是从设备中获取完整的物理数据提取,并仅检查法院允许的区域。你永远无法预料调查会引导到哪里,因此最好是立即从设备中提取尽可能多的数据,而不是等到同意范围发生变化后才后悔没有获取完整的镜像。Android 设备的数据提取技术可以分为三种类型:
-
手动数据提取
-
逻辑数据提取
-
物理数据提取
如第一章《移动取证介绍》中所述,手动提取是指通过正常浏览设备并捕获任何有价值的信息,而逻辑提取是指访问文件系统,物理提取则是提取设备的逐位镜像。每种类型的提取方法将在以下章节中详细描述。
某些方法可能需要对设备进行 root 权限才能完全访问数据。每种方法的含义不同,它们的成功率将取决于所使用的工具和方法,以及设备的品牌和型号。
手动数据提取
这种提取方法涉及你利用移动设备的正常用户界面来访问设备内存中的内容。你将通过访问不同的菜单来正常浏览设备,查看如通话记录、短信和即时消息聊天等详细信息。每个屏幕的内容通过拍照捕捉,并可以作为证据呈现。
这种类型检查的主要缺点是只能检查操作系统(UI 模式)下可以访问的文件。在手动检查设备时必须小心,因为很容易按错按钮并删除或添加数据。手动提取应该作为最后的手段,用于验证通过其他方法提取的发现。在某些情况下,你可能需要将手动检查作为第一步。这可能包括生死攸关的紧急情况或失踪人员案件,在这些情况下,快速扫描设备可能会帮助警方找到该个人。
逻辑数据提取
逻辑数据提取技术通过与操作系统交互并访问文件系统来提取设备上的数据。这些技术非常重要,因为它们提供了有价值的数据,适用于大多数设备,并且易于使用。再次强调,提取数据时,root 概念就会浮现。逻辑技术实际上并不要求获得 root 权限来进行数据提取。然而,设备上的 root 权限使你能够访问设备上所有的文件。这意味着某些数据可能在没有 root 的设备上提取,而 root 权限则会打开设备并提供对设备上所有文件的访问。因此,拥有设备的 root 权限将极大地影响可以通过逻辑技术提取的数据的数量和种类。以下部分将解释可以用于从 Android 设备中逻辑提取数据的各种技术。
ADB 数据提取
如前所述,adb是一个命令行工具,帮助你与设备进行通信以检索信息。通过adb,你可以提取设备上所有文件的数据,或者仅提取你感兴趣的相关文件。这是逻辑提取中最广泛使用的技术。
要通过adb访问 Android 设备,必须启用 USB 调试选项。从 Android 4.2.2 开始,由于安全的 USB 调试,连接到设备的主机也需要进行授权。如果设备已锁定且未启用 USB 调试,请尝试使用第八章中解释的技术绕过屏幕锁,Android 取证设置与数据提取前技术。
作为取证检查员,了解数据在 Android 设备上的存储方式,以及了解重要和敏感信息的存储位置非常重要,以便能够相应地提取数据。应用程序数据通常包含大量可能与调查相关的用户数据。所有与感兴趣的应用程序相关的文件都应检查其相关性,正如在第十章,Android 数据分析与恢复中所解释的那样。应用程序数据可以存储在以下位置之一:
-
共享偏好设置:以键值对的形式,以轻量级的 XML 格式存储数据。共享偏好设置文件存储在应用程序
/data目录下的shared_pref文件夹中。 -
内部存储:用于存储私密数据,保存在设备的内部存储中。保存到内部存储的文件是私有的,无法被其他应用程序访问。
-
外部存储:用于存储设备外部存储中的公共数据,通常不强制实施安全机制。这些数据可在
/sdcard目录下找到。 -
SQLite 数据库:这些数据存储在
/data/data/PackageName/数据库中。通常以.db文件扩展名存储。可以使用 SQLite 浏览器(sourceforge.net/projects/sqlitebrowser/)或通过执行必要的 SQLite 命令在相应的文件上查看 SQLite 文件中的数据。
每个 Android 应用程序都会使用上述一种或多种数据存储选项在设备上存储数据。因此,通讯录应用程序会将有关联系人详细信息的所有信息存储在其包名下的 /data/data 文件夹中。请注意,/data/data 是设备内部存储的一部分,所有应用程序通常都安装在此位置。某些应用程序数据会存储在 SD 卡和 /data/data 分区中。通过使用 adb,我们可以通过 adb pull 命令提取此分区中的数据进行进一步分析。再次强调,这个目录只有在设备已经 root 的情况下才能访问。
在 Android 7.0(Nougat)中,推出了一种名为设备加密存储的新存储类型,允许应用程序将某些类型的数据存储在该存储中。因此,您将注意到在 /data 文件夹下出现了新的文件路径,如 misc_de、misc_ce、system_de 和 system_ce。从取证角度来看,这是一个非常重要的变化,因为这也意味着,在运行 Android Nougat 的设备上,/data/data 不是唯一存储工件的位置,例如,
旧设备上的 SMS 数据位置:/data/com.android.providers.telephony/databases/smsmms.db,以及 Nougat 设备上的 SMS 数据位置:/user_de/0/com.android.providers.telephony/databases/smsmms.db。
在 root 手机上,可以执行adb pull命令从 Dropbox 应用的databases文件夹中提取数据,命令如下:
adb pull 命令
同样地,在 root 手机上,可以以这种方式提取整个/data文件夹。如下所示,可以将 Android 设备上完整的/data目录复制到本地机器目录中。整个data目录在 97 秒内提取完成。提取时间会根据/data文件夹中存储的数据量有所不同:
提取到法证工作站的/data目录
在非 root 设备上,执行pull命令从/data目录提取文件不会成功,如下所示,因为 shell 用户没有权限访问这些文件:
在非 root 设备上执行 ADB pull 命令
通过前述过程从 root 手机复制的数据保持其目录结构,从而允许调查人员浏览必要的文件以访问信息。通过分析相应应用程序的数据,法证专家可以收集关键信息,这些信息可能会影响调查结果。请注意,在法证工作站本地查看文件夹会改变内容的日期和时间。因此,你应该保留原始输出的副本,以便进行日期/时间比较。
使用 SQLite 浏览器查看数据
SQLite 浏览器是一个可以帮助分析提取数据的工具。SQLite 浏览器允许你查看扩展名为.sqlite、.sqlite3、.sqlitedb、.db和.db3的数据库文件。使用 SQLite 浏览器的主要优势是它以表格形式展示数据。
转到“文件 | 打开数据库”以使用 SQLite 浏览器打开.db文件。如下所示,SQLite 浏览器有三个主要标签页:数据库结构、浏览数据和执行 SQL。浏览数据标签页允许你查看.db文件中不同表格的内容。
在我们的分析过程中,我们将主要使用这个标签页。或者,像 Oxygen Forensic SQLite Viewer 这样的工具也可以用于同样的目的。从数据库文件中恢复已删除的数据是可能的,并将在第十章中进行解释,Android 数据分析 与恢复:
SQLite 浏览器
以下部分将重点介绍如何识别重要数据并手动从 Android 手机中提取各种细节。有关如何访问 Android 终端的内容,已在前面的章节中讲解。在接下来的部分中,我们将直接开始从中获取设备信息。
提取设备信息
了解你的 Android 设备的详细信息,如型号、版本等,将有助于你的调查。例如,当设备受到物理损坏,无法检查设备信息时,可以通过在/system文件夹下执行以下命令来获取设备的详细信息:
# cat build.prop
如下图所示:
build.prop 文件
提取设备信息后,我们将提取通话记录。
提取通话记录
在调查过程中,通常需要访问电话的通话记录以确认某些事件。关于通话记录的信息存储在contacts2.db文件中,该文件位于/data/data/com.android.providers.contacts/databases/。如前所述,提取到法证工作站本地文件夹后,可以使用 SQLite 浏览器查看该文件中存在的数据。接下来,看看如何通过以下步骤提取通话记录:
- 如下图所示,通过使用
adb pull命令,可以将必要的.db文件提取到法证工作站的文件夹中:
复制到本地文件夹的 contacts2.db 文件
- 请注意,用于拨打电话的应用程序可以在各自的应用程序文件夹中存储通话记录详细信息。所有通讯应用程序都必须检查其通话记录,方法如下:
C:\android-sdk-windows\platform-tools>adb.exe pull
/data/data/com.android.providers.contacts C:temp
这将产生以下输出:
- 现在,使用 SQLite 浏览器打开
contacts2.db文件(通过导航到 文件 | 打开数据库),并浏览不同表中存在的数据。contacts2.db文件中的 calls 表提供有关通话历史的信息。以下截图显示了通话历史,包括姓名、号码、时长和日期:
在运行 Android 7.0(Nougat)的设备上,通话记录数据已被移出contacts2.db文件。在这些设备上,通话记录数据可以在/data/com.android.providers.contacts/databases/calllog.db中访问
提取 SMS/MMS
在调查过程中,可能会被要求检索某个移动设备发送和接收的短信。因此,了解这些信息的存储位置以及如何访问数据非常重要。mmssms.db文件位于/data/data/com.android.providers.telephony/databases,其中包含必要的详细信息。与通话记录一样,必须确保能够发送消息的应用程序被检查,以获取相关的消息日志,方法是使用以下命令:
adb.exe pull /data/data/com.android.providers.telephony C:\temp
这将产生以下输出:
提取 SMS 数据
电话号码可以在地址列下看到,相关的短信内容可以在正文列下看到,如下图所示:
contacts2.db 文件中的 calls 表
我们现在将提取浏览器历史记录信息。
提取浏览器历史记录信息
提取浏览器历史记录信息是法医检查员常常需要执行的一项任务。除了默认的 Android 浏览器,Android 手机上还可以使用不同的浏览器应用程序,例如 Firefox Mobile 和 Google Chrome。所有这些浏览器都会将浏览器历史记录以 SQLite .db格式存储。以我们的示例为例,我们从默认的 Android 浏览器将数据提取到我们的法医工作站。该数据位于/data/data/com.android.browser。名为browser2.db的文件包含浏览器历史记录详细信息。以下截图显示了浏览器数据,如 Oxygen Forensic SQLite Viewer 所呈现的。请注意,试用版将隐藏某些信息:
Oxygen Forensic SQLite Viewer 中的 browser2.db 文件
请注意,如果使用浏览器的隐身模式,前述行为可能会发生变化。
如果使用浏览器的隐身模式,前面章节中提到的几个细节将不会存储在设备上。接下来,我们将分析社交网络和即时通讯聊天记录。
社交网络/即时通讯聊天记录分析
社交网络和即时通讯应用程序(如 Facebook、Twitter 和 WhatsApp)透露的敏感数据可能对案件调查有帮助。分析过程与其他 Android 应用程序相似。将数据下载到法医工作站,分析.db文件,查看是否能够挖掘到任何敏感信息。例如,让我们来看一下 Facebook 应用程序,尝试查看可以提取哪些数据。
首先,我们提取/data/data/com.facebook.katana文件夹,并进入databases文件夹。该文件夹下的fb.db文件包含与用户账户相关的信息。friends_data表包含用户朋友的姓名、电话号码、电子邮件地址和出生日期等信息,如下图所示。类似地,可以分析其他文件,以查看是否能够提取到任何敏感信息:
SQLite 浏览器中的 fb.db 文件
同样,通过分析/data/data文件夹中的数据,可以获取关于地理位置、日历事件、用户笔记等信息。
ADB 备份提取
从 Android 4.0 开始,谷歌实现了adb backup功能,允许用户使用adb工具将应用程序数据备份到计算机中。此过程不需要 root 权限,因此在取证过程中非常有用。主要的缺点是它不能备份设备上安装的所有应用程序。备份功能是应用程序依赖的,因为应用程序的所有者可以选择是否允许备份。默认情况下,允许备份,但开发者如果愿意可以禁用此功能。因此,大多数第三方应用程序都启用了此功能,adb backup命令也适用于这些应用程序。以下是adb backup命令的语法:
adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|nosystem] [<packages...>]
让我们详细讨论一下:
-
-f:用于选择备份文件的存储位置。如果未指定,默认将备份文件存储为当前工作目录中的backup.ab。 -
[-apk|noapk]:用于选择是否备份.apk文件。默认值为-noapk。 -
[-obb|-noobb]:用于选择是否备份.obb(APK 扩展)文件。默认为-noobb。 -
[-shared|-noshared]:用于选择是否备份来自共享存储和 SD 卡的数据。默认值为-noshared。 -
[-all]:包含所有启用了备份的应用程序。 -
[-system|-nosystem]:用于选择是否包括系统应用程序。默认为-system。 -
[<packages>]:用于列出要备份的特定包名。
一旦设备连接到工作站并且adb可以访问它,运行adb backup -shared -all命令,如下图所示:
adb 备份命令
一旦命令执行,用户需要在设备上批准权限,如下图所示。因此,如果设备处于屏幕锁定状态,将无法进行备份:
设备上的备份权限
Android 备份文件以.ab文件格式存储,默认情况下,它存储在 Android SDK 的platform-tools文件夹中。有一些免费的工具,例如 Android Backup Extractor,可以将.ab文件转换为.tar文件,从而可以查看。Android Backup Extractor 可以从sourceforge.net/projects/adbextractor/下载。该工具是一个基于 Java 的应用程序,因此在使用前请确保工作站上已安装 Java。要将备份文件转换为.tar格式,请执行以下命令:
java -jar abe.jar unpack backup.ab backup.tar
这将自动创建一个 .tar 扩展名的文件,之后可以使用诸如 WinRAR 或 7Zip 等归档工具轻松查看该文件。然而,请注意,如果在备份创建时设备上已输入密码,则该文件将被加密,因此,您需要在之前的命令中提供密码作为参数。备份文件包含两个主要文件夹——apps 和 shared。apps 文件夹包含所有备份中应用程序在 /data/data 下的信息。shared 文件夹包含 SD 卡上的所有数据。
ADB dumpsys 提取
adb dumpsys 命令允许您收集关于系统上运行的服务和应用程序的信息。adb shell dumpsys 命令提供所有系统服务的诊断输出。执行 dumpsys 命令不需要 root 权限,只需启用 USB 调试,和其他任何 adb 命令一样。如下所示的截图,通过运行 adb.exe shell service list 命令,您可以查看可以与 dumpsys 一起使用的所有服务列表:
dumpsys 服务列表命令
在某些场景下,分析特定的 dumpsys 服务,如 Wi-Fi、用户和通知等,可能会非常有帮助。以下是一些在法医分析中运行 dumpsys 命令可能有用的有趣情况:
dumpsys iphonesubinfo 服务可用于获取设备 ID 或 IMEI 号码的信息,如下图所示:
显示 IMEI 号码的 dumpsys 命令
dumpsys wifi 服务提供关于用户访问的 Wi-Fi 点的信息。它显示已保存连接的 SSID。此信息可用于将用户定位到特定位置。以下是 adb dumpsys 命令,提供该信息:
显示最后连接 Wi-Fi 详情的 dumpsys 命令
dumpsys usagestats 服务提供关于最近使用的应用程序的信息,以及其使用日期。例如,以下截图显示,2016 年 2 月 1 日没有使用应用程序,但在 2016 年 1 月 31 日使用了 Google Chrome 浏览器,并尝试备份手机数据:
显示最近使用的应用程序的 dumpsys 命令
注意,对于 Date 20160201, android: 0,表示没有使用任何应用程序。但是对于 Date: 20160131, android: 1 times,确认使用了一个应用程序,后续章节提供了更多关于使用了哪个应用程序的细节等。根据正在调查的情况,取证分析师需要弄清楚任何 dumpsys 命令是否有用。在设备扣押后立即运行 dumpsys 命令可能会极大地帮助之后的工作。通过运行 adb shell dumpsys 命令,可以记录所有 dumpsys 服务信息。
使用内容提供者
在 Android 中,一般情况下,一个应用程序的数据不能被另一个应用程序访问。但是,Android 提供了一种机制,通过这种机制可以与其他应用程序共享数据。这正是通过内容提供者实现的。内容提供者以一个或多个表格的形式向外部应用程序呈现数据。这些表格与关系数据库中的表格没有什么不同。应用程序可以通过 URI 地址方案使用它们来共享数据。其他应用程序使用提供者客户端对象访问提供者。在应用程序安装期间,用户决定是否允许应用程序访问所请求的数据(内容提供者)。例如,联系人、短信/彩信和日历就是内容提供者的例子。
因此,利用这一点,我们可以创建一个应用程序,可以从所有可用的内容提供者中获取所有信息。这正是大多数商业取证工具的工作原理。这种方法的优点是可以在已获取 root 权限和未获取 root 权限的设备上使用。在我们的示例中,我们使用 AFLogical,它利用内容提供者机制来获取信息。这个工具提取数据并将其保存到 SD 卡中的 CSV 格式中。以下步骤使用 AFLogical 开源版 1.5.2 从 Android 设备中提取信息:
- 从
github.com/nowsecure/android-forensics/downloads下载 AFLogical OSE 1.5.2。
AFLogical LE 版本能够提取大量信息,并要求通过法律执法或政府机构的电子邮件地址进行注册。AFLogical OSE 可以提取所有可用的 MMS、SMS、联系人和通话日志。
-
确保启用 USB 调试模式并将设备连接到工作站。
-
通过执行
adb.exe devices命令验证设备是否被识别:
识别已连接的设备
- 将 AFLogical OSE 应用程序保存在主目录中,并执行
adb.exe install AFLogical-OSE_1.5.2.apk命令将其安装到设备上:
安装 AFLogical 应用程序
- 安装应用后,你可以直接从设备运行它,并点击应用底部的捕获按钮,如下图所示:
AFLogical OSE 应用
- 应用开始从相应的内容提供者提取数据,一旦过程完成,系统将显示一条消息,如下图所示:
提取完成后显示的消息
- 提取的数据被保存在设备的 SD 卡中的名为
forensics的目录下。提取的信息以 CSV 文件的形式存储,如下图所示。CSV 文件可以使用任何编辑器查看:
使用 AFLogical OSE 提取的文件
- 同一目录下的
info.xml文件提供了设备的相关信息,包括 IMEI 号码、IMSI 号码、Android 版本、已安装应用的信息等。
然而,请注意,设备上必须允许安装第三方应用(通过选择“未知来源”选项)才能使其正常工作。其他可以在调查过程中帮助逻辑提取数据的工具将在第十一章中介绍,Android 应用分析、恶意软件及逆向工程。
本节介绍了各种逻辑采集技术。接下来我们将探讨物理数据提取技术。
物理数据提取
物理提取指的是获取设备的精确逐位图像的过程。需要理解的是,逐位图像与复制粘贴设备内容不同。如果我们复制粘贴设备的内容,它只会复制可见文件、隐藏文件和系统相关文件等。此方法被视为逻辑图像。通过这种方法,已删除的文件和无法访问的文件不会被 copy 命令复制。已删除的文件可以通过某些技术恢复(视情况而定),我们将在后续章节中看到。与逻辑提取不同,物理提取是设备内存的精确副本,包括更多的信息,如空闲空间和未分配空间。
通过物理技术提取 Android 数据通常使用 dd 命令,而其他高级技术如 JTAG 和芯片脱离技术也可用,但通常难以实施,并且需要极高的精度和经验才能在调查过程中对真实设备进行尝试。和其他任何技术一样,如果操作不当,设备上的数据可能会被破坏或无法恢复,从而使其在法庭上无法作为证据使用。JTAG 和芯片脱离技术将在后续章节中详细介绍。然而,使用 dd 命令提取数据需要 root 权限。以下章节概述了可以用来进行物理提取的各种技术。
对 Android 手机进行成像
获取设备镜像是移动设备取证中最重要的步骤之一。在可能的情况下,在对设备进行任何提取数据的操作之前,必须先获取 Android 设备的物理镜像。在取证中,这一过程通常被称为设备成像。物理镜像、取证镜像和原始镜像这几个术语通常用来指通过该过程获取的镜像。我们首先回顾一下如何在台式计算机上进行成像,因为这有助于我们关联并理解在成像 Android 设备时遇到的问题。假设从嫌疑人处扣押了一台未开机的台式计算机,并送去进行取证检查。在这种情况下,典型的取证检查员会拆下硬盘,将其连接到写保护器,并使用可用的工具获取逐位的取证镜像。然后,在数据取证成像的过程中,原始硬盘将被安全保护。
对于 Android 设备,所有包含数据的区域无法轻易移除。此外,如果在接收到设备进行检查时其仍处于活动状态,那么无法在不对设备做出任何更改的情况下进行分析,因为任何交互都会改变设备的状态。
一个 Android 设备可能有两个文件存储区域:内部存储和外部存储。内部存储是指内置的非易失性存储器。外部存储是指可移动的存储介质,例如 micro SD 卡。然而,需要注意的是,一些设备没有可移动的存储介质,如 SD 卡,但它们会将可用的永久存储空间分为内部存储和外部存储。因此,外部存储并不总是可拆卸的。当存在可移动的 SD 卡时,必须获取该内存卡的法医镜像。如在第七章《理解 Android》中所讨论,这些可移动卡通常使用 FAT32 文件系统进行格式化。一些移动设备获取方法会通过 Android 设备获取 SD 卡。尽管这种方法有用,但由于 USB 手机数据线的速度限制,过程会较慢。
默认情况下,Android 系统不提供访问内部目录和系统相关文件的权限。这种受限访问是为了确保设备的安全。例如,/data/data文件夹在未 root 的设备上是无法访问的。这个文件夹对我们尤其重要,因为它存储了大部分用户创建的数据,许多应用程序也会将宝贵的数据写入此文件夹。因此,为了获取设备的镜像,我们需要对 Android 设备进行 root 操作。root 设备可以赋予我们超级用户权限,访问所有数据。需要注意的是,本书一直强调,所有操作都应具有法医科学的依据,并尽量避免修改设备。root 一个 Android 设备会对其进行更改,因此应在你未曾调查过的设备上进行测试。root 操作在 Android 设备中是常见的,但获取 root 权限可能会导致设备被改变,甚至更糟的是,数据被清除。一些 Android 设备,如 Nexus 4 和 5,可能会在允许 root 权限之前强制清除数据分区。这意味着不需要对设备进行 root 操作来获取访问权限,因为在此过程中所有用户数据都会丢失。只需记住,虽然 root 操作可以提供更多数据访问权限,但它也可能清除数据或破坏手机。因此,在继续进行 root 操作之前,必须确保你获得了相应的同意或法律权利。由于 root 技术在第八章《Android 法医设置与数据提取前的技术》中已有讨论,我们将假设设备已经 root,继续进行示例操作。
以下是获取 root 过的 Android 设备法医镜像的逐步过程:
- 将安卓设备连接到工作站,并通过执行
adb devices命令来验证设备是否已被识别,如下所示:
识别已连接的设备
-
一旦
adb访问准备好,可以通过以下步骤从 Android 设备获取分区信息:-
使用
dd命令:dd命令可以用来创建设备的原始镜像。此命令通过复制低级数据,帮助我们逐位创建 Android 设备的镜像。 -
插入新 SD 卡:将一张新的 SD 卡插入设备,以将镜像文件复制到此卡中。确保该 SD 卡已被清空,不包含任何其他数据。你还可能需要验证驱动器上没有额外的数据。
-
执行命令:Android 设备的文件系统存储在
/dev分区内的不同位置。对三星 Galaxy S3 手机执行简单的mount命令返回以下输出:
-
Android 设备上的 mount 命令输出
- 从前面的输出中,我们可以识别出
/system、/data和/cache分区挂载的位置。虽然成像所有文件很重要,但大部分数据都存在于/data和/system分区。当时间允许时,应获取所有分区以确保完整性。一旦完成,执行以下命令来创建设备的镜像:
dd if=/dev/block/mmcblk0p12 of=/sdcard/tmp.image
在前面的示例中,使用了三星 Galaxy S3 的数据分区(其中if是输入文件,of是输出文件)。
上述命令将创建mmcblk0p12文件(数据分区)的逐位镜像,并将镜像文件复制到 SD 卡。一旦完成,可以使用可用的取证软件分析dd镜像文件。
你必须确保 SD 卡有足够的存储空间来容纳数据分区镜像。对于 root 设备,还可以使用其他方法获取数据。
如果无法将镜像直接写入 SD 卡,可以使用netcat命令将输出直接写入计算机。netcat 工具是一个基于 Linux 的工具,用于通过网络连接传输数据。Android 设备通常没有预装netcat。让我们在接下来的步骤中看看如何使用此命令:
-
要检查是否安装了
netcat,只需打开 ADB shell 并输入nc。如果提示找不到 nc,则需要手动在设备上安装netcat。你可以在sourceforge.net/projects/androidforensics-netcat/files/下载为 Android 编译的netcat。 -
使用以下命令将
netcat推送到设备:
adb push nc /dev/Case_Folder/nc
该命令应在/dev目录下创建Case_Folder,并将nc放入其中。
- 现在,我们需要授权 ADB shell 执行此操作。可以按如下方式进行:
chomd +x /dev/Case_Folder/nc
- 打开两个终端窗口,其中一个窗口中打开 ADB shell,另一个窗口用于监听设备发送的数据。现在,我们需要从计算机启用 ADB 端口转发:
adb forward tcp:9999 tcp:9999
9999是我们为netcat选择的端口;它可以是 Linux 或 Mac 系统中1023和65535之间的任何任意端口号(1023及以下端口保留给系统进程,且需要 root 权限才能使用)。在另一个终端窗口中,运行以下命令:
nc 127.0.0.1 9999 > data_partition.img
data_partition.img文件现在应已在计算机的当前目录中创建。当数据传输完成时,netcat将在两个终端中终止并返回命令提示符。根据镜像大小,过程可能需要较长时间。
镜像存储卡(SD 卡)
有许多工具可以对存储卡进行镜像。以下示例使用WinHex来创建 SD 卡的原始磁盘镜像。以下是使用 WinHex 对存储卡进行镜像的逐步过程:
-
连接存储卡:从存储插槽中取出 SD 卡,并使用卡读卡器将存储卡连接到取证工作站。
-
写保护卡:使用 WinHex 打开磁盘。导航至选项 | 编辑模式,并选择只读模式(=写保护模式),如下截图所示。这是为了确保设备是写保护的,无法在其上写入数据:
WinHex 的编辑模式视图(左)和启用只读模式的视图(右)
-
计算哈希值:计算存储卡的哈希值,以确保在整个调查过程中没有任何修改。导航至工具 | 计算哈希并选择任何哈希算法。
-
创建磁盘镜像:导航至文件 | 创建磁盘镜像,如下截图所示。选择原始镜像选项(
.dd)来创建镜像。这完成了存储卡的镜像:
WinHex 磁盘镜像选项
一旦通过前述方法获取了取证镜像,就需要对其进行分析以提取相关信息。市面上有几款商业工具,如 Cellebrite 和 XRY,可以分析镜像文件。Android 镜像的分析将在第十章《Android 数据分析与恢复》中详细介绍。
联合测试行动组
联合测试行动组(JTAG)涉及使用高级数据采集方法,通过连接设备的特定端口并指示处理器转移设备上存储的数据。通过这种方法,可以获取设备的完整物理镜像。通常建议首先尝试前述其他技术,因为它们实施简单且需要的努力较少。在尝试 JTAG 之前,分析人员必须具备经验并经过适当培训,因为如果操作不当,设备可能会受到损坏。
JTAG 过程通常包括以下取证步骤:
-
在 JTAG 中,设备的 测试访问端口(TAPs)用于访问设备的 CPU。识别 TAPs 是最主要也是最重要的步骤。通过识别 TAPs,并追踪连接到 CPU 的线路,可以找出每个功能对应的焊盘。尽管设备制造商会提供关于特定设备 JTAG 原理图的文档,但这些文档并未公开发布供大家查看。关于 Android 设备 JTAG 的一个很好的网站是
forensicswiki.xyz/wiki/index.php?title=JTAG_Forensics。 -
然后,将引线焊接到适当的连接器引脚上,另一端连接到可以控制 CPU 的设备,如下图所示(由 Jim Swauger 在
www.binaryintel.com/services/jtag-chip-off-forensics/jtag-forensics/发布)。对于某些设备,可以使用 JTAG 工具板来避免焊接。使用工具板或 JTAG 适配器可以避免焊接,因为它可以将 TAPs 连接到 CPU:
JTAG 设置
-
完成前述步骤后,必须施加电源以启动 CPU。施加的电压应根据硬件制造商发布的规格来决定。请勿施加超过规格中给定数值的电压。
-
在施加电源后,可以提取 NAND 闪存的完整二进制内存转储。
-
使用本书中学习到的取证技术和工具分析提取的数据。在采集过程中将得到一个原始的
.bin文件;大多数取证工具支持此图像格式的导入和分析。
JTAG 听起来可能很复杂(也许确实是),但它有许多有用的用途,下面列出了三项优点:
-
这种技术的主要优点是,即使设备没有开机,它也能正常工作。
-
它不需要 root 权限、ADB 或 USB 调试。
-
该技术可用于恢复设备的 PIN 码/密码,因此可以对整个闪存进行成像,并恢复/破解密码文件。
还需要理解的是,JTAG 技术不应导致设备功能丧失。如果设备重新组装正确,它应该能够正常运行。尽管 JTAG 技术在提取数据时非常有效,但只有经验丰富且具备资质的人员才能尝试。任何在焊接 JTAG 焊盘或施加错误电压时的失误,都可能严重损坏设备。
芯片拆卸技术
正如其名所示,Chip-off 是一种技术,其中 NAND 闪存芯片从设备中移除并进行检查以提取信息。因此,即使设备被密码保护且未启用 USB 调试,这种技术也能奏效。与 JTAG 技术不同,JTAG 技术在检查后设备能正常运行,而 Chip-off 技术通常会导致设备的毁坏,也就是说,在检查后将 NAND 闪存重新连接到设备上变得更加困难。将 NAND 闪存重新连接到设备的过程称为重新焊接(re-balling),这需要培训和实践。
Chip-off 技术通常包括以下法医步骤:
-
设备上的所有芯片都必须进行研究,以确定哪个芯片包含用户数据。
-
一旦确定,NAND 闪存会从设备中物理移除。这可以通过加热来解焊芯片完成:
Chip-off 技术
来源:www.binaryintel.com/services/jt…
-
这是一个非常精细的过程,必须小心谨慎地进行,因为这可能会导致损坏 NAND 闪存。
-
然后对芯片进行清洁和修复,确保连接器完好并能正常工作。
-
使用专门的硬件设备适配器,现在可以读取芯片。通过将芯片插入支持特定 NAND 闪存芯片的硬件设备来完成这一过程。在这个过程中,原始数据从芯片中获取,形成
.bin文件。 -
获取的数据现在可以使用法医技术和之前描述的工具进行分析。
Chip-off 技术在设备严重损坏、锁定或无法访问时最为有用。然而,应用这种技术不仅需要专业知识,还需要昂贵的设备和工具。在移除过程中总有损坏 NAND 闪存的风险,因此建议首先尝试逻辑技术以提取任何数据。
虽然进行前面讨论的任何技术时必须获得 root 权限,但在此需要指出的是,在写这本书时,所有这些技术对于启用了全盘加密(FDE)的设备都无法奏效。正如在第七章《理解 Android》中讨论的那样,Google 从 Android 6.0 开始就要求大多数设备启用 FDE。虽然有一些技术已被展示并发布用于解密全盘加密,但它们是特定设备的,且不具备广泛适用性。
总结
本章介绍了各种手动、逻辑和物理数据提取技术。我们学习了在调查过程中何时以及如何应用这些技术。逻辑技术通过使用诸如 ADB 等工具与设备交互来提取数据。另一方面,物理技术则访问更大范围的数据;它们比较复杂,执行起来需要大量的专业知识。对设备进行成像会生成设备的逐位图像,之后通过工具进行分析。成像是确保设备上的数据不会被修改的主要步骤之一。Android 7.0 及以上版本为取证调查人员带来了新的挑战,因为这些版本引入了新的安全特性和文件路径,可能会限制数据的获取。掌握这些知识后,你可以执行设备数据提取,从 Android 设备中提取相关数据。
在下一章,我们将学习如何从图像文件中提取相关数据,如通话记录、短信和浏览历史。我们还将介绍数据恢复技术,使用这些技术我们可以恢复从设备中删除的数据。
第十一章:安卓数据分析与恢复
在上一章中,我们介绍了各种逻辑和物理数据提取技术。在物理提取中,会获取到安卓设备的逐位图像,其中包含了宝贵的信息。在本章中,我们将学习如何从图像文件中分析并提取相关数据,如通话记录和短信。尽管数据提取和分析技术能够提供各种细节的信息,但并非所有技术都能提供关于已删除数据的信息。数据恢复是移动取证中的一个关键环节,因为它有助于揭示已删除的项目。
本章旨在介绍可以被取证分析师用于从安卓设备中恢复数据的各种技术。
本章将涵盖以下两个主要内容:
-
使用 Autopsy 工具分析并提取安卓图像文件中的数据
-
了解从 SD 卡和内存中恢复已删除文件的技术
使用 Autopsy 工具分析并提取安卓图像文件中的数据
安卓图像一词指的是通过执行任何物理数据提取技术所获得的物理图像(也称为取证图像或原始图像)。使用第九章中解释的安卓数据提取技术,你可以对整个/data/data块或任何与调查相关的特定块进行成像。一旦获取到图像,像你这样的调查员可以手动浏览文件内容,或者利用现有工具解析内容。商业工具,如 Cellebrite 和 XRY,能够深入数据并呈现出全面的内容图像。Autopsy 是取证领域中广泛使用的开源工具之一,能够出色地分析安卓图像。
Autopsy 平台
Autopsy 是一个取证平台,作为 Sleuth Kit 的图形界面(GUI)。它是免费的,你可以在www.sleuthkit.org/下载。Sleuth Kit 是一个包含 Unix 和 Windows 工具及实用程序的集合,用于执行取证分析。Autopsy 通过对给定卷进行取证分析来显示结果,从而帮助调查员集中注意数据的相关部分。Autopsy 是免费的且具有可扩展性,拥有多个可以插件化的模块。Autopsy 可以用来加载和分析通过物理提取获得的安卓图像。
向 Autopsy 中添加图像
下载并安装 Autopsy 后,请按照以下步骤将图像添加到 Autopsy 中:
- 打开 Autopsy 工具并选择“创建新案件”选项,如下图所示:
在 Autopsy 中创建新案件
- 输入所有必要的案件详细信息,包括案件名称、数据存储位置等,如下图所示:
在 Autopsy 中输入案件信息
-
输入案件编号和检查员详细信息,然后点击完成。
-
现在,点击添加数据源按钮,添加要分析的镜像文件,并点击下一步:
在 Autopsy 中输入数据源信息
- 在下一个屏幕上,您可以配置需要在镜像上运行的模块,如下图所示。建议选择最近活动、Exif 解析器、关键字搜索和 Android 分析器模块。在下一步中,点击完成:
在 Autopsy 中配置模块
完成此操作后,工具通常需要几分钟时间来解析镜像,具体取决于镜像的大小。在此期间,如果工具遇到任何错误或警告信息,您可能会看到相关提示。然而,与其他工具相比,Autopsy 提供了最快的访问速度,能够更快速地获取工件和文件系统。
使用 Autopsy 分析镜像
加载镜像后,展开“数据源”下的文件,以查看镜像中的数据。例如,以下截图显示了/data/ 文件夹的内容:
在 Autopsy 中分析镜像
在上述示例中,仅对设备的/data部分进行了镜像。如果对整个设备进行了镜像,那么工具会显示更多的卷。根据调查的具体细节,必须分析相关部分。在下面的示例中,通过检查com.android.browser下的文件夹,我们可以提取出用户访问过的各种网站的列表及其访问日期:
在 Autopsy 中分析浏览详情
通过分析各种部分下的数据,可以挖掘出有价值的数据,如短信、浏览历史、聊天记录、通话历史、图片、视频和位置信息。在下一节中,我们将研究如何从 SD 卡和内部存储中恢复数据。
理解从 SD 卡和内部存储恢复已删除文件的技巧
数据恢复是法医分析中最重要和最强大的方面之一。恢复已删除数据的能力对于破解许多民事和刑事案件至关重要。从普通用户的角度来看,恢复已删除的数据通常是指操作系统内置的解决方案,如 Windows 中的回收站。虽然确实可以从这些位置恢复数据,但由于用户意识的提高,这些选项通常不起作用。例如,在桌面计算机上,人们现在使用Shift + Delete作为完全删除文件的方式。
数据恢复是指在设备无法正常访问时,从设备中恢复已删除数据的过程。考虑到一个手机被从恐怖分子手中扣押的情境,知道恐怖分子删除了哪些内容岂不是至关重要吗?访问任何已删除的短信、图片、拨打的电话号码、应用程序数据等都可能至关重要,因为它们常常揭示敏感信息。在 Android 系统中,如果设备文件正确获取,通常可以恢复大多数已删除的数据。然而,如果在处理设备时没有采取适当的措施,已删除的数据可能永远丢失。为了确保已删除的数据不会被覆盖,建议牢记以下几点:
-
在扣押手机后,不要进行任何操作。已删除的数据会存在于设备中,直到有其他即将到来的数据需要占用空间。因此,必须避免对手机进行任何活动,以防数据被覆盖。
-
即使手机未被使用,并且没有任何来自我们端的干预,数据仍然可能被覆盖。例如,收到一条短信会自动占用空间,这可能会覆盖被标记为删除的数据。为了防止这种情况发生,你应该遵循前几章描述的法医处理方法。最简单的解决方案是将设备设置为飞行模式,或禁用设备上的所有连接选项。这样可以防止任何新消息的传输。
所有 Android 文件系统都有包含文件层次结构、文件名等信息的元数据。删除操作并不会真正删除这些数据,而是移除文件系统的元数据。当短信或任何其他文件从设备中删除时,它们只是对用户不可见,但文件仍然存在于设备上。本质上,这些文件只是被标记为删除,直到被覆盖,才会从文件系统中完全移除。从 Android 设备中恢复已删除的数据有两种情况:恢复从 SD 卡中删除的数据,如图片、视频、应用程序数据等,以及恢复从设备内存中删除的数据。以下章节将介绍从 SD 卡和 Android 设备内部存储中恢复已删除数据的技术。
从外部 SD 卡恢复已删除的数据
SD 卡上的数据可以向法医调查员透露大量信息。SD 卡能够存储手机相机拍摄的图片和视频、语音录音、应用程序数据、缓存文件等。基本上,任何可以存储在计算机硬盘上的内容,都可以存储在 SD 卡上,只要有足够的空间。
从外部 SD 卡恢复已删除的数据是一个直接的过程。SD 卡可以作为外部大容量存储设备挂载,并通过标准的数字取证方法进行法证获取,如第九章《安卓数据提取技术》中所述。如前几章所提到,安卓设备中的 SD 卡通常使用 FAT32 文件系统。主要原因是 FAT32 文件系统在大多数操作系统中得到了广泛支持,包括 Windows、Linux 和 macOS X。FAT32 格式化驱动器的最大文件大小约为 4GB。随着如今高分辨率格式的普及,这一限制经常被达到。除此之外,FAT32 只能用于小于 32GB 的分区。因此,exFAT 文件系统由于解决了这些问题,现在被一些设备所采用。
如果外部 SD 卡可以作为驱动器挂载,恢复已删除的数据是非常简单的。因此,如果 SD 卡是可拆卸的,可以使用写保护器将其连接到工作站进行获取。然而,最新的安卓设备通常不会作为大容量存储设备挂载。这是因为这些设备使用媒体传输协议(MTP)或图片传输协议(PTP)协议,而不是 USB 大容量存储。USB 大容量存储的问题在于,计算机需要对存储设备具有独占访问权限。换句话说,外部存储设备在连接到工作站时,必须与安卓操作系统完全断开。这给移动应用带来了其他一些复杂问题。当安卓设备使用 MTP 时,它在计算机上显示为媒体设备,而不是可移动存储,如下图所示:
使用 MTP 连接安卓设备
但是,普通的数据恢复工具需要一个挂载的驱动器才能执行扫描。因此,大多数最新的使用 MTP/PTP 协议的设备不会被视为挂载驱动器,因此适用于计算机的传统数据恢复工具无法在它们上工作。
因此,当设备使用 MTP/PTP 且未作为驱动器挂载时,可以通过某些特定的安卓数据恢复工具进行恢复,这些工具需要开启 USB 调试选项。市面上几乎所有的安卓数据恢复工具都需要你启用 USB 调试,这样设备和 SD 卡才能在开始数据恢复之前被识别。
你必须明白,Android 设备可能会使用 SD 卡上的空间来缓存应用程序数据;因此,在移除 SD 卡之前,确保尽可能多地从设备中获取数据非常重要。一些旧设备在通过 USB 连接时会自动将设备挂载为驱动器。对于数据提取、数据恢复等操作,最佳的法医实践是不直接在设备上进行操作。因此,需要对 SD 卡进行物理镜像,并在镜像文件上进行所有必要的分析。建议通过设备和单独获取 SD 卡,以确保所有数据都被提取。为了获得 SD 卡的镜像,如果设备由于可能有证据在内存中运行无法关闭,可以使用 dd 通过 adb 在设备运行时获取 SD 卡的镜像。如果将 SD 卡取出并通过读卡器连接到工作站,它将作为外部大容量存储显示,之后可以使用之前章节中描述的标准法医技术对其进行镜像。
获取镜像后,可以使用任何标准法医工具进行分析,例如 FTK Imager。FTK Imager 是一个简单的工具,可以用来创建和分析磁盘镜像。它可以在accessdata.com/product-download/ftk-imager-version-3.2.0下载。
以下是使用 FTK Imager 从 SD 卡镜像恢复已删除文件的分步过程:
- 启动 FTK Imager,点击“文件”,然后在菜单中点击“添加证据项...”:
在 FTK Imager 中添加证据
- 在“选择源”对话框中选择图像文件作为证据类型,然后点击“下一步”:
在 FTK Imager 中选择文件类型
- 在“选择文件”对话框中,定位到
SDCARD.ddSD 卡镜像文件所在的位置,选择该文件,然后点击“完成”:
在 FTK Imager 中选择分析的镜像文件
- SD 卡镜像的内容随后显示在“视图”窗格中。你可以通过点击“+”号浏览文件夹。当文件夹被高亮显示时,右侧窗格将显示其中的内容。当选择某个文件时,它的内容将在底部窗格中显示。如以下截图所示,已删除的文件也会在图标上显示红色叉标记:
在 FTK Imager 中,已删除的文件会显示带有红色叉标记的图标
- 要将已删除的文件复制到工作站,右键点击标记的文件并选择“导出文件...”,如下所示:
在 FTK Imager 中恢复已删除的图片
还建议检查设备是否安装了任何备份应用程序或文件。安卓的初始版本并未包含供用户备份个人数据的机制。因此,许多备份应用程序被广泛使用。通过这些应用,用户可以将数据备份到 SD 卡或云端。例如,超级备份应用包含备份通话记录、联系人、短信等选项,如下图所示:
超级备份安卓应用
一旦检测到备份应用程序,您必须尝试确定数据存储位置。通常,备份文件夹的路径是内部 SD 卡。文件夹路径也可以在备份应用的设置中找到。备份中保存的数据可能包含重要信息,因此,在设备上寻找任何第三方备份应用将非常有帮助。
从内部存储器恢复已删除数据
恢复从安卓设备内部存储器中删除的文件(如短信、联系人和应用数据)并不是所有分析工具都支持的,可能需要手动恢复。与某些包含常见文件系统的媒体(如 SD 卡)不同,文件系统可能无法被取证工具识别和挂载。此外,除非手机已经 root,否则无法访问安卓手机的内部存储原始分区。建议在 root 过程开始前和结束后对设备进行镜像。以下是您在尝试从安卓设备的内部存储器恢复数据时可能遇到的一些其他问题:
-
若要访问内部存储器,您可以尝试对手机进行 root 操作。然而,root 过程可能涉及将一些数据写入
/data分区,这一过程可能会覆盖设备中有价值的数据。 -
与 SD 卡不同,这里的内部文件系统不是 FAT32(该格式被大多数取证工具广泛支持)。内部文件系统可能是 YAFFS2(用于较老设备)、EXT3、EXT4、RFS 或专为安卓系统设计的专有格式。因此,许多为 Windows 文件系统设计的恢复工具将无法使用。
-
安卓设备上的应用数据通常以 SQLite 格式存储。虽然大多数取证工具提供对数据库文件的访问,但可能需要导出并在本地浏览器中查看。您必须检查原始数据,以确保删除的数据没有被取证工具忽视。
讨论的原因使得从内部存储恢复已删除的数据变得困难,但并非不可能。Android 设备的内部存储包含了大部分用户数据和可能与调查相关的关键数据。如前所述,必须对设备进行 root 权限处理才能访问原始分区。市面上的大多数 Android 恢复工具并未强调它们仅能在已 root 的手机上工作。现在,让我们来看看如何从 Android 手机恢复已删除的数据。
通过解析 SQLite 文件恢复已删除文件
Android 使用 SQLite 文件来存储大部分数据。与短信、电子邮件以及某些应用数据相关的数据存储在 SQLite 文件中。SQLite 数据库可以在数据库本身内存储已删除的数据。用户标记为删除的文件将不再出现在活动的 SQLite 数据库文件中。因此,可以恢复已删除的数据,如短信和联系人。在 SQLite 页面内有两个区域可能包含已删除的数据——未分配块和空闲块。
大多数用于恢复已删除数据的商业工具扫描 SQLite 页面中的未分配块和空闲块。解析已删除数据可以使用现有的取证工具,如Oxygen Forensics SQLite Viewer。可以使用 SQLite Viewer 的试用版本来实现这一目的,但有一定的限制,限制了你能恢复的数据量。你也可以编写自己的脚本来解析文件中的已删除内容,为此你需要对 SQLite 文件格式有良好的理解。www.sqlite.org/fileformat.html 页面是一个不错的起点。如果你不想从头开始并希望重用现有的脚本,可以尝试使用现有的开源 Python 脚本(az4n6.blogspot.in/2013/11/python-parser-to-recover-deleted-sqlite.html)来解析 SQLite 文件中的已删除记录。
在我们的示例中,我们将从 Android 设备恢复已删除的短信。恢复已删除的短信是 Android 手机取证分析中经常要求的一部分,主要是因为短信包含的数据能够揭示大量信息。恢复 Android 设备上已删除短信的方法有很多。首先,我们需要了解这些短信存储在设备的哪个位置。在第九章,Android 数据提取技术中,我们解释了 Android 设备中存储用户数据的重要位置。这里是一个简要回顾:
-
每个应用程序都会将其数据存储在
/data/data文件夹下(同样,这需要 root 权限才能获取数据)。 -
位于
/data/data/com.android.providers.telephony/databases位置的文件包含有关短信/MMS 的详细信息。
在上述位置,短信被存储在一个名为mmssms.db的 SQLite 数据库文件中。通过检查此文件可以恢复已删除的短信。以下是使用mmssms.db文件恢复已删除短信的步骤:
- 在 Android 设备上,启用 USB 调试模式并将设备连接到取证工作站。使用
adb命令行工具,通过发出以下命令提取位于/data/data/路径下的数据库文件夹:
adb.exe pull /data/data/com.android.providers.telephony/databases C:\temp
输出结果如下所示:
ADB 拉取命令
一旦文件提取到本地计算机,使用 Oxygen Forensics SQLite Viewer 工具打开mmssms.db文件。
-
点击名为
sms的表格,并在工具的 Tables 数据标签下观察当前消息。 -
查看已删除数据的一种方式是点击包含已删除数据的块标签,如下图所示:
恢复已删除的短信
类似地,存储在 Android 设备上的其他数据,若以 SQLite 文件形式存储,也可以通过解析删除内容来恢复。当上述方法无法访问已删除数据时,应查看文件的原始十六进制文件,寻找标记为已删除的数据,这些数据可以手动雕刻并报告。
使用文件雕刻技术恢复文件
文件雕刻是一种极其有用的取证方法,因为它允许恢复已删除或隐藏的数据进行分析。简而言之,文件雕刻是指在没有文件系统元数据的情况下,从文件碎片中重新组装计算机文件的过程。在文件雕刻中,指定的文件类型会在二进制数据中进行搜索和提取,以创建分区或整个磁盘的取证镜像。文件雕刻通过仅依赖文件结构和内容,而不依赖任何匹配的文件系统元数据,从驱动器的未分配空间中恢复文件。未分配空间是指驱动器上不再包含任何文件信息的部分,这些信息由文件系统结构(如文件表)表示。
文件可以通过扫描磁盘的原始字节并重新组装它们来恢复或重建。这可以通过检查文件的头部(前几个字节)和尾部(最后几个字节)来完成。
文件雕刻方法根据所使用的底层技术进行分类。头尾雕刻方法依赖于通过文件的头部和尾部信息来恢复文件。例如,对于 JPEG 文件,它们以0xffd8开头,以0xffd9结尾。
文件头和文件尾的位置被识别出来,两个端点之间的所有内容都被切割。同样,基于文件结构的切割方法利用文件的内部布局来重建文件。然而,传统的文件切割技术,如我们已经解释过的技术,在数据碎片化的情况下可能无法有效工作。为了解决这个问题,新的技术,如智能切割,利用一些流行文件系统的碎片特征来恢复数据。
一旦手机镜像制作完成,可以使用像Scalpel这样的工具进行分析。Scalpel 是一个强大的开源工具,用于切割文件。该工具分析块数据库存储,识别已删除的文件并恢复它们。Scalpel 是与文件系统无关的,已知可以在多种文件系统上工作,包括 FAT、NTFS、EXT2、EXT3、HFS 等。关于 Scalpel 的更多信息可以在 github.com/sleuthkit/scalpel找到。以下步骤说明如何在 Ubuntu 工作站上使用 Scalpel:
-
使用命令
sudo apt-get install scalpel在 Ubuntu 工作站上安装 Scalpel。 -
/etc/scalpel目录下的scalpel.conf文件包含关于支持的文件类型的信息,如下图所示:
Scalpel 配置文件
该文件需要修改,以提到与 Android 相关的文件。可以从 www.nowsecure.com/tools-and-trainings/#viaforensics下载示例的scalpel.conf文件。你也可以取消注释相关文件并保存conf文件,选择你想要的文件类型。完成后,替换掉原始的conf文件,使用下载的文件。
- Scalpel 需要与前述配置文件一起在正在检查的
dd镜像上运行。你可以通过输入配置文件和dd文件,使用以下命令运行该工具:
$ scalpel -c /home/unigeek/Desktop/scalpel-android.conf /home/unigeek/Desktop/userdata.dd -o /home/unigeek/Desktop/rohit
一旦运行这个命令,工具就会开始切割文件并根据需要构建它们,如下图所示:
在dd文件上运行 Scalpel 工具
- 在前述命令中指定的
output文件夹现在包含基于文件类型的文件夹列表,如下图所示。每个文件夹内的内容是根据文件夹名称恢复的。例如,jpg 2-0包含与.jpg扩展名相关的恢复文件:
运行 Scalpel 工具后的输出文件夹
- 如前述截图所示,每个文件夹包含来自 Android 设备的恢复数据,如图片、PDF 文件、ZIP 文件等。虽然一些图片被完全恢复,但也有一些没有完全恢复,如下图所示:
使用 Scalpel 工具恢复的数据
如DiskDigger等应用程序可以安装在 Android 设备上,从设备的内部存储和 SD 卡中恢复不同类型的文件。DiskDigger 支持 JPG 文件、MP3 和 WAV 音频、MP4 和 3GP 视频、原始相机格式、Microsoft Office 文件(DOC、XLS 和 PPT)等文件。然而,正如前面所提到的,应用程序需要在 Android 设备上获得 root 权限才能从内部存储中恢复内容。您应当清楚地记录这些更改。DiskDigger Android 应用程序提供两种模式:基础扫描模式和完整扫描模式。
完整扫描模式仅适用于已获取 root 权限的设备,而基础扫描模式适用于任何设备。如以下截图所示,在已 root 的手机上,应用程序会自动定位并显示可用的分区:
DiskDigger 应用程序
选择内存分区后,工具会提示您选择要恢复的文件类型。请继续选择感兴趣的文件类型:
DiskDigger 应用的文件选择界面
扫描开始后,DiskDigger 应用程序将自动显示可恢复的文件。恢复的文件可以保存到应用程序中或直接保存到设备上。因此,文件修复技术在从设备内存中恢复重要已删除文件时起着至关重要的作用。
使用 Google 账户恢复联系人
您还可以通过设备上配置的 Google 账户使用联系人应用恢复设备上的联系人。如果设备用户以前使用 Android 中的“同步设置”选项同步了联系人,这种方式将有效。该选项将联系人及其他信息同步并存储在云端。作为一名具有法律授权或适当许可的法医专家,如果您能访问设备上配置的 Google 账户,则可以恢复已删除的联系人。访问账户后,执行以下步骤恢复数据:
-
使用已配置的 Google 账户登录到 Android 设备上的 Google 联系人应用程序。以下示例是在运行 Android Pie 版本的 OnePlus 5 设备上进行的尝试。
-
点击设置,然后查找恢复选项,如下图所示:
联系人应用中的恢复菜单
- 点击“恢复”,然后将显示以下界面:
恢复联系人对话框
如您所见,您可以将联系人列表恢复到备份创建时的历史状态。您还可以在“设置”菜单下使用“撤销更改”选项将联系人恢复到过去 30 天内的任何状态:
恢复 Google 账户中的已删除联系人
因此,使用前面提到的任何一种技术,像你这样的法医检查员可以尝试轻松恢复已删除的数据。
总结
在本章中,我们学习了从安卓设备恢复已删除数据的各种技术。这个过程依赖于多个因素,特别依赖于对内部存储和 SD 卡中数据的访问。我们探讨了从 SD 卡和内部存储中恢复已删除数据的不同技术。虽然从外部存储(如 SD 卡)中恢复已删除项较为简单,但从内部存储中恢复已删除项则需要相当大的努力。我们还学习了 SQLite 文件解析和文件雕刻技术,利用这些技术可以从安卓设备中提取已删除的数据。掌握了这些知识,你现在可以在法医调查过程中进行数据恢复。
下一章将讨论安卓应用和恶意软件的法医分析,以及安卓应用的逆向工程。
第十二章:Android 应用分析、恶意软件和逆向工程
第三方应用是智能手机用户常用的应用。Android 用户从 Google Play 等应用商店下载并安装多个应用。在取证调查过程中,对这些应用进行分析,提取有价值的数据并检测恶意软件,通常是非常有帮助的。例如,一款照片保管箱应用可能会锁定设备上存储的敏感图片。因此,了解如何识别照片保管箱应用的密码将具有重要意义。
此外,像 Facebook、WhatsApp、Skype 等应用现在也广泛使用,它们常常是破案的重要数据来源。因此,了解这些应用存储的数据类型及其数据存储位置非常重要。虽然我们在前几章中讨论的数据提取和数据恢复技巧可以帮助我们访问有价值的数据,但应用分析可以帮助我们获取应用程序的具体信息,例如偏好设置和权限。
本章我们将讨论以下主题:
-
分析广泛使用的 Android 应用以获取有价值的数据
-
逆向工程 Android 应用的技巧
-
Android 恶意软件
分析广泛使用的 Android 应用以获取有价值的数据
在 Android 系统中,用户与之互动的所有内容都是应用程序。虽然一些应用是由设备制造商预装的,但其他应用则是由用户下载并安装的。例如,诸如联系人、通话、短信等日常功能,都是通过各自的应用程序执行的。因此,Android 应用分析在调查过程中至关重要。一些第三方应用,如 WhatsApp、Facebook、Skype、Chrome 浏览器等,广泛使用,并且它们处理了大量有价值的信息。根据应用类型,这些应用大多数会将敏感信息存储在设备的内部存储或 SD 卡上。分析这些应用可能会提供有关用户位置、与他人通信等信息。使用我们之前描述的取证技巧,可以访问这些应用存储的数据。然而,作为一名取证检查员,你需要培养将可用数据转化为有用数据的必要技能。这在你全面理解应用程序如何处理数据时才能实现。
如前面章节所述,所有应用程序默认将其数据存储在/data/data文件夹中。应用程序还可以根据需要通过安装时请求权限,将某些数据存储在 SD 卡上。可以通过检查/data/data文件夹的内容来收集设备上应用程序的信息,但这并不简单,因为需要分析此路径下每个单独的应用程序文件夹。作为替代方法,您可以检查位于/data/system下的packages.list文件。该文件包含所有应用程序的信息,包括它们的包名和数据路径。
可以使用以下命令来执行此操作:
# cat packages.list
以下是前面命令的输出:
packages.list 文件内容
现在,让我们特别看看一些广泛使用并处理有价值数据的第三方应用程序。
以下应用程序仅用于让您熟悉可以提取的数据类型及其可能的存储位置。在执行这些操作之前,您需要获得适当的权限,并且应遵守法律规定。正如我们在第八章《Android 法医设置与数据提取前的技巧》中解释的那样,以下技巧仅在设备已获得 root 权限后有效。
Facebook Android 应用分析
Facebook Android 应用是最广泛使用的社交网络应用之一。它将信息存储在/data/data文件夹中,位于com.facebook.katana包下。以下详细信息概述了可以通过不同文件收集的信息类型:
-
Facebook 联系人:用户的 Facebook 联系人信息可以通过分析
contacts_db2数据库来获取,该数据库位于以下路径:-
路径:
/data/data/com.facebook.katana/databases/contacts_db2。 -
contacts_db2数据库(SQLite 文件)包含一个名为 contacts 的表,该表包含用户的大部分信息,如名字、姓氏、显示名和显示图片的 URL。
-
-
Facebook 通知:用户的通知信息可以通过分析
notification_db数据库来收集,该数据库位于以下路径:-
路径:
/data/data/com.facebook.katana/databases/notifications_db。 -
gql_notifications表位于上述路径下,包含用户信息。seen_state列确认通知是否已被查看。updated列指示通知更新时间。gql_payload列包含通知及发送者信息。
-
-
Facebook 消息:Facebook 消息对多种案件可能至关重要,可以通过分析
threads_db2数据库查看:- 路径:
/data/data/com.facebook.katana/databases/threads_db2
- 路径:
-
新闻源视频:
/video-cache文件夹包含已从用户新闻源下载的视频。请注意,这些视频不是用户发布的视频,而是出现在他们新闻源中的视频:- 路径:
/data/data/com.facebook.katana/files/video-cache
- 路径:
-
新闻源图片:
/images文件夹包含出现在用户个人资料中的各种图片,例如来自他们新闻源的图片和联系人个人资料图片。此文件夹内有多个目录,图片可能以.jpg以外的格式存储,如.cnt: -
路径:
/data/data/com.facebook.katana/cache/images -
新闻源数据:
newfeed_db数据库包含显示给用户的新闻源数据。如下所示,分析此数据库可以提供有价值的信息,例如某个特定故事何时被设备加载(fetched_at列),某个故事是否已被用户查看(seen_state列),以及该故事的相关文件存储在设备上的位置(cache_file_path列): -
路径:
/data/data/com.facebook.katana/databases/newsfeed_db:
在 SQLite 浏览器中分析的 Facebook newsfeed.db 文件
在上面的截图中,fetched_at 指定了此信息被获取的日期和时间。请注意,应用程序使用 Linux 纪元时间,也称为 Unix 时间或 Posix 时间,来存储这些信息。此格式通常被多个应用程序使用,因此值得注意。Linux 纪元时间以自 1970 年 1 月 1 日午夜以来的秒数(或毫秒数)表示。有几个在线网站,例如 www.epochconverter.com/,可以方便地将 Linux 纪元时间转换为常规格式。例如,以下截图显示了 Linux 纪元时间 1,577,881,839 转换为常规格式:
时间格式示例
现在我们已经分析了 Facebook 应用程序,让我们对下一个应用程序,即 WhatsApp 进行类似的分析。
WhatsApp 安卓应用分析
WhatsApp 是全球最受欢迎的聊天(音频和视频)消息服务,全球超过十亿人使用。它将其信息存储在 /data/data 文件夹下,包名为 com.whatsapp。以下是从取证角度来看感兴趣的重要文件概览:
-
用户的个人资料图片: 用户的个人资料图片以
me.jpg文件名保存,并位于以下路径下:- 路径:
/data/data/com.whatsapp/me.jpg
- 路径:
-
用户的电话号码(与 WhatsApp 关联): 主文件夹下的
me文件包含与用户 WhatsApp 账户关联的电话号码。请注意,这可能是也可能不是与 SIM 卡关联的电话号码:- 路径:
/data/data/com.whatsapp/me
- 路径:
-
联系人头像:
/avatars目录包含用户联系人(使用 WhatsApp 的用户)的头像缩略图:- 路径:
/data/data/com.whatsapp/files/Avatars
- 路径:
-
聊天消息:所有与消息相关的信息,包括聊天和发件人详细信息,都存储在
msgstore.db文件中,该文件位于以下位置:- 路径:
/data/data/com.whatsapp/databases/msgstore.db
- 路径:
-
WhatsApp 文件:与 WhatsApp 共享的大部分文件,如图像、视频和语音消息,存储在 SD 卡中的以下位置:
- 路径:
/sdcard/WhatsApp/Media
- 路径:
发送和接收的文件分别存储在各自的文件夹中。
接下来,我们将查看另一款用于远程通信的应用程序,它专注于提供视频聊天和语音通话服务:Skype。
Skype Android 应用分析
Skype 是一款提供视频聊天和语音通话服务的应用程序。该应用程序的数据存储在/data/data文件夹下,包名为com.skype.raider。以下是通过分析 Skype 应用程序可以提取的一些重要数据:
-
用户名和 IP 地址:
shared.xml文件位于以下路径中,包含有关用户名和最后一次连接 Skype 的 IP 地址的信息:- 路径:
/data/data/com.skype.raider/files/shared.xml
- 路径:
-
头像:用户的头像存储在
/thumbnails目录中,其路径如下:- 路径:
/data/data/com.skype.raider/files/<username>/thumbnails/
- 路径:
-
通话记录:Skype 的通话记录信息存储在
main.db文件中,分析此文件可以获取大量信息:-
路径:
/data/data/com.skype.raider/files/<username>/main.db/ -
例如,
duration表提供了通话时长的信息,start_timestamp字段显示了通话的开始时间,creation_timestamp字段表示通话的发起时间(包括未接来电)。type列指示通话是接听(值=1)还是拨出(值=2)。
-
-
聊天消息:
main.db文件中的messages表包含所有聊天消息。author和from_dispname列提供了写消息的人信息。timestamp列显示了消息的日期/时间。body_xml列包含消息的内容:- 路径:
/data/data/com.skype.raider/files/<username>/main.db/
- 路径:
-
传输的文件:
Transfers表包含有关已传输文件的信息,如文件名、文件大小及其在设备上的位置:-
路径:
/data/data/com.skype.raider/files/<username>/main.db/ -
接收到的实际图像或文件将存储在 SD 卡中。如果下载了文件,它将位于 SD 卡根目录下的
Downloads文件夹中。
-
-
群聊:
ChatMembers表格显示了参与某个聊天的用户列表。adder列显示了发起对话的用户:- 路径:
/data/data/com.skype.raider/files/<username>/main.db/
- 路径:
现在,我们将对 Gmail 应用程序进行分析。
Gmail Android 应用程序分析
Gmail 是 Google 提供的广泛使用的电子邮件服务。应用数据保存在/data/data文件夹中,包名为com.google.android.gm。通过分析 Gmail 应用程序,可以提取以下重要数据:
-
账户详情:
/shared_prefs下的 XML 文件确认了电子邮件账户的详情。与当前电子邮件关联的其他账户的详情可以通过分析Gmail.xml文件来识别:- 路径:
/data/data/com.google.android.gm/cache/<username>@gmail.com
- 路径:
-
附件:最近在发送和接收电子邮件中使用的附件会保存到
/cache目录。这非常有价值,因为它让我们能够访问那些已经从电子邮件服务中删除的项目。每一行还包含一个messages_conversation值,可以与电子邮件附件的conversations表格进行对比。filename列标识了设备上文件所在的路径。以下是该文件夹的准确路径:- 路径:
/data/data/com.google.android.gm/cache/<username>@gmail.com:
- 路径:
Gmail 缓存目录下的附件列表
-
电子邮件主题:通过分析
mailstore.<username>@gmail.com.db文件中的conversations表格,可以恢复此电子邮件的主题:- 路径:
/data/data/com.google.android.gm/databases/mailstore.<username>@gmail.com.db
- 路径:
-
搜索历史:应用内进行的任何文本搜索都会保存在
suggestions.db文件中,文件位于以下位置:- 路径:
/data/data/com.google.android.gm/databases/suggestions.db
- 路径:
让我们通过对 Google Chrome 应用程序进行最后分析来总结本节内容。
Google Chrome Android 应用程序分析
Google Chrome 是 Google Pixel 及许多其他设备上的默认浏览器,广泛用于上网浏览。应用数据位于/data/data文件夹中,包名为com.android.chrome。通过分析 Gmail 应用程序,可以提取以下重要数据:
-
个人资料照片:用户的个人资料照片以
Google Profile Picture.png文件名存储在以下位置:- 路径:
/data/data/com.android.chrome/app_chrome/Default/ Google Profile Picture.png
- 路径:
-
书签:
Bookmarks文件包含了所有与账户同步的书签信息。通过分析此文件,可以收集到站点名称、网址以及书签添加时间等详情:- 路径:
/data/data/com.android.chrome/app_chrome/Default/Bookmarks
- 路径:
-
浏览历史:
History.db文件包含了用户在多个表中存储的网页历史。例如,如下图所示,keyword_search_terms表包含了使用 Chrome 浏览器进行的搜索信息:
Google Chrome 浏览历史
-
-
segments表包含了用户访问过的部分网站(并非所有网站)。值得注意的是,Chrome 不仅存储属于设备的数据,还存储账户相关的数据。换句话说,通过相同账户在其他设备上访问过的网站信息也会被存储在设备上;例如,URLs表包含了 Google 账户在多个设备上访问的浏览历史。 -
路径:
/data/data/com.android.chrome/app_chrome/Default/History。
-
-
登录数据:
Login Data数据库包含了浏览器保存的不同网站的登录信息。网站的 URL,以及用户名和密码,都会存储在相应的表格中:- 路径:
/data/data/com.android.chrome/app_chrome/Default/Login Data
- 路径:
-
常访问的网站:
Top Sites数据库包含了一个常访问网站的列表:- 路径:
/data/data/com.android.chrome/app_chrome/Default/Top Sites
- 路径:
-
其他数据:其他信息,例如用户在不同网站表单填写时输入的电话号码或电子邮件地址,会存储在
Web Data数据库中。这个数据库中任何存在的表格都包含了自动填充数据:- 路径:
/data/data/com.android.chrome/app_chrome/Default/Web Data
- 路径:
现在我们已经分析了不同的第三方应用,接下来我们将看看可以用来逆向工程安卓应用的技巧。
逆向工程安卓应用的技巧
你可能需要处理一些应用,它们会成为访问所需信息的障碍。例如,考虑一下手机相册被 AppLock 应用锁定的情况。在这种情况下,为了访问相册中存储的照片和视频,你首先需要输入 AppLock 的密码。因此,了解 AppLock 应用如何在设备上存储密码会是一个有趣的话题。你可能会查看 SQLite 数据库文件。然而,如果这些文件被加密,那么甚至很难知道它是一个密码。逆向工程应用在这种情况下会非常有帮助,尤其是在你想更好地理解应用如何存储数据时。
简单来说,逆向工程是从可执行文件中提取源代码的过程。逆向工程安卓应用的目的是为了理解应用的功能、数据存储、所采用的安全机制等等。在我们学习如何逆向工程安卓应用之前,先简单回顾一下安卓应用的基本知识:
-
所有安装在 Android 设备上的应用程序都使用 Java 编程语言编写。
-
当一个 Java 程序被编译时,我们会得到字节码。这些字节码会被传送到 dex 编译器,转换成 Dalvik 字节码。
-
因此,类文件通过 dx 工具转换为 dex 文件。Android 使用一种叫做Dalvik 虚拟机(DVM)的技术来运行其应用程序。
-
JVM 的字节码由一个或多个类文件组成,具体取决于应用程序中 Java 文件的数量。不管怎样,Dalvik 字节码只由一个 dex 文件组成。
因此,dex 文件、XML 文件以及运行应用程序所需的其他资源都被打包到 Android 包文件(APK 文件)中。这些 APK 文件实际上是 ZIP 文件内的项目集合。因此,如果你将 APK 扩展名文件重命名为.zip文件,你就可以看到文件的内容。然而,在此之前,你需要访问已安装在手机上的应用的 APK 文件。以下是如何访问对应应用 APK 文件的方法。
从 Android 设备中提取 APK 文件
手机预装的应用存储在/system/app目录下。用户下载的第三方应用则存储在/data/app文件夹中。以下方法可以帮助你访问设备上的 APK 文件,适用于已 root 和未 root 的设备:
- 通过执行
# adb.exe shell pm list packages命令来识别应用的包名。
以下是前述命令的输出:
设备上存在的包名列表
如前面的命令行输出所示,显示了包名列表。尝试找到该应用程序与包名的匹配项。通常,包名与应用名密切相关。或者,你也可以使用 Android Market 或 Google Play 轻松识别包名。Google Play 中应用的 URL 包含包名,如下图所示:
Google Play 商店中的 Facebook 应用
- 通过执行
adb shell pm path命令,识别所需包的 APK 文件完整路径,如下所示:
确定 APK 的完整路径名
- 使用
adb pull命令将 APK 文件从 Android 设备拉取到取证工作站:
adp pull 命令
现在,让我们分析 APK 文件的内容。Android 包是 Android 应用程序的资源和可执行文件的容器。它是一个压缩文件,包含以下文件:
-
AndroidManifest.xml:此文件包含关于权限等信息。 -
classes.dex:这是通过 dex 编译器将类文件转换成的 dex 文件。 -
Res:应用程序的资源文件,例如图像文件、音频文件等,存储在此目录中。 -
Lib:此目录包含应用程序可能使用的本地库。 -
META-INF:此目录包含应用程序签名的信息以及所有其他文件的签名校验和。
一旦获得 APK 文件,您可以继续对 Android 应用进行逆向工程。
逆向工程 Android 应用的步骤
APK 文件可以通过不同的方式进行逆向工程,以获取原始代码。以下是一种方法,它使用 dex2jar 和 JD-GUI 工具来访问应用程序代码。以我们的示例为例,我们将分析 com.twitter.android-1.apk 文件。以下是成功逆向工程 APK 文件的步骤:
- 将 APK 扩展名更改为 ZIP 以查看文件内容。将
com.twitter.android-1.apk文件重命名为twitter.android-1.zip,并使用任何文件压缩工具提取此文件的内容。以下截图显示了从原始文件twitter.android-1.zip中提取的文件:
APK 文件提取的内容
-
我们之前讨论过的
classes.dex文件可以在提取 APK 文件内容后访问。这个 dex 文件需要转换为 Java 类文件,可以使用dex2jar工具来完成此操作。 -
从
github.com/pxb1988/dex2jar下载dex2jar工具,将classes.dex文件放入dex2jar工具目录中,并执行以下命令:
C:\Users\Rohit\Desktop\Training\Android\dex2jar-0.0.9.15>d2j- dex2jar.bat classes.dex dex2jar classes.dex -> classes-dex2jar.jar
- 当上述命令成功运行后,它将在同一目录下创建一个新的
classes-dex2jar.jar文件,如下图所示:
dex2jar 工具创建的 classes-dex2jar.jar 文件
- 要查看此 JAR 文件的内容,您可以使用 JD-GUI 等工具。如以下截图所示,可以查看 Android 应用程序中存在的文件及其对应的代码:
JD-GUI 工具
一旦我们获取到代码,分析应用程序如何存储值、权限以及其他有助于绕过某些限制的信息就变得容易了。当设备中发现恶意软件时,逆向工程和分析应用程序的方法可能非常有用,因为它将显示恶意软件正在访问哪些内容,并提供有关数据发送位置的线索。以下章节将详细讨论 Android 恶意软件。
Android 恶意软件
随着 Android 市场份额的不断增加,针对 Android 用户的攻击或恶意软件也在增加。移动恶意软件是一个广泛的术语,指的是执行非预期操作的软件,包括特洛伊木马、间谍软件、广告软件、勒索软件等。根据 pandasecurity 的数据,Android 设备感染恶意软件的概率是 iOS 设备的 50 倍 (www.pandasecurity.com/mediacenter/mobile-security/android-more-infected-than-ios/)。根据 Cybersecurity Hub 的新闻报道,2019 年,著名的 Agent Smith 恶意软件就感染了近 2500 万部 Android 设备 (www.cshub.com/malware/articles/incident-of-the-week-malware-infects-25m-android-phones)。
这种情况的主要原因之一是,与由 Apple 严密控制的 App Store 不同,Google 的 Play Store 是一个开放生态系统,没有任何详细的前期安全审查。恶意软件开发者可以轻松地将他们的应用上传到 Play Store,从而分发他们的应用。Google 目前拥有一款名为 Google Bouncer 的恶意软件检测软件,它会自动扫描上传的应用程序是否含有恶意软件,但攻击者已经找到几种方法可以绕过检测。此外,Android 官方允许我们加载通过互联网下载的应用(侧载),而 iOS 则不允许加载未签名的应用。
例如,如以下截图所示,当在 Android 设备上选择“未知来源”选项时,它允许用户安装从任何网站下载的应用:
Android 中的侧载选项
托管 Android 应用的第三方应用商店已知是恶意软件的温床。这促使 Google 从 Android 4.2 开始推出 验证应用 功能,它会在 Android 设备上本地扫描应用,查找恶意活动,例如短信滥用。如以下截图所示,验证应用功能可能会警告用户,或者在某些情况下甚至会阻止安装。然而,这是一个自愿服务,因此用户可以选择禁用此功能:
Android 中的验证应用功能
从 Android Oreo 开始,Google 推出了一个名为 Play Protect 的新功能,它是验证应用功能的改进版。Play Protect 的主要任务是阻止或警告用户已安装在 Android 设备上的恶意或有害应用。例如,如以下截图所示,Play Protect 功能在应用安装过程中可能会显示警告信息:
Play Protect 功能
接下来,让我们来看看恶意软件的类型。
Android 恶意软件的类型
有多种类型的恶意软件可以感染 Android 设备。以下是一些最常见的类型:
-
银行木马:它可以伪装成虚假的银行应用程序,以窃取用户输入的银行凭据,或窃取用户账户中的任何其他敏感个人信息。银行木马可以拦截或修改银行交易,并执行发送、删除和拦截短信消息以及键盘记录等危险操作。
-
间谍软件:间谍软件监视、记录并将目标设备的重要信息发送到攻击者的服务器。这些信息可能包括短信消息、录音电话、截屏、键盘记录、电子邮件或任何可能对攻击者感兴趣的应用程序数据。例如,Kaspersky Lab 专家在 2018 年初发现的 BusyGasper 间谍软件,不仅具有收集来自 WhatsApp、Viber 和 Facebook 等热门通讯应用的信息的常见间谍软件功能,还具有设备传感器监听器,包括运动检测器。
-
广告软件:广告软件是另一种在 Android 设备上非常常见的恶意或不需要的应用程序类型。它相对容易检测,因为受害者会在设备屏幕上收到持续的弹出窗口和广告。这些不受欢迎的程序并不总是无害,因为弹出窗口可能导致下载其他恶意软件,包括前述的间谍软件和银行木马。
-
勒索软件:勒索软件主要攻击目标是基于 Windows 的桌面计算机和服务器,但也存在于移动平台上,尤其是在 Android 上。通常情况下,它只会锁定设备屏幕并附上勒索通知,但有时也会加密用户的数据。
-
加密货币挖矿恶意软件:由于加密货币如今极为流行,因此这种类型的恶意程序甚至在移动平台(如 Android)上也有。此类应用程序的目标是利用受害者设备的计算能力进行加密货币挖掘。有时,这种类型的恶意软件甚至会使智能手机硬件面临风险。
高级恶意软件还能够对设备进行 Root 操作并安装新的应用程序。例如,2016 年 2 月发现的 Android Mazar 恶意软件通过短信传播,能够在手机上获得管理员权限,从而可以抹掉手机、打电话或读取短信。
完整的 Android 恶意软件家族列表及其功能可以在forensics.spreitzenbarth.de/android-malware/找到。
一旦恶意软件侵入设备,它可以执行以下危险操作之一:
-
发送和阅读您的短信消息
-
窃取敏感数据,如图片、视频和信用卡号码
-
操纵设备上存在的文件或数据
-
向高费率号码发送短信
-
感染您的浏览器并窃取其输入的任何数据
-
抹掉设备上的所有数据
-
锁定设备,直到支付赎金
-
持续展示广告
现在我们已经了解了不同类型的恶意软件,接下来我们将看看恶意软件是如何在您的设备中传播的。
安卓恶意软件是如何传播的?
安卓设备可以通过多种方式感染恶意软件。以下是一些可能的传播方式:
-
重新包装合法应用:这是攻击者使用的最常见方法。首先,攻击者下载一个合法的应用并进行反编译。然后,他们添加恶意代码并重新打包应用。这个新的恶意应用现在功能和合法应用相同,但在后台执行恶意活动。这类应用通常出现在第三方安卓应用商店,并被许多人下载。
-
利用安卓漏洞:在这种情况下,攻击者利用安卓平台中发现的漏洞或缺陷,安装他们的恶意应用程序或执行任何不必要的操作。例如,2015 年发现的安装程序劫持问题,攻击者利用这一漏洞,在安装过程中将安卓应用程序替换为恶意软件。
-
蓝牙和 MMS 传播:恶意软件也可以通过蓝牙和 MMS 传播。当设备处于可发现模式时,受害者会收到恶意软件,例如当设备可以被其他蓝牙设备看到时。在 MMS 的情况下,恶意软件会作为附件发送,就像计算机病毒通过电子邮件附件发送一样。然而,在这两种方法中,用户至少需要同意一次运行文件。
-
应用下载恶意更新:在这种情况下,原本安装的应用不包含任何恶意代码,但应用程序中的某个功能会在运行时下载恶意命令。这可以通过隐秘更新或用户更新进行。例如,Plankton 恶意软件使用隐秘更新,直接从远程服务器下载 JAR 文件,并且不需要任何用户权限。在用户更新的情况下,用户必须允许应用下载新版本的应用。
-
远程安装:攻击者可能会破坏用户设备帐户的凭证,从而远程在设备上安装应用程序。这通常发生在有针对性的场景中,且相比前面描述的两种方法,发生的频率较低。
现在我们已经看过了安卓恶意软件传播的可能方式,接下来让我们尝试识别设备中是否存在恶意软件。
识别安卓恶意软件
从取证的角度来看,在进行任何分析之前,首先要识别设备上是否存在恶意软件。这是因为恶意软件可能会改变设备的状态或设备上的内容,从而使分析或结果变得不一致。市场上有一些工具可以分析物理提取数据,识别恶意软件。例如,Cellebrite UFED Physical Analyzer 配备了 BitDefender 的反恶意软件技术,可以扫描恶意软件。如下图所示,一旦物理镜像加载到工具中,就可以扫描文件中的恶意软件:
在 UFED Physical Analyzer 中扫描恶意软件
一旦扫描开始,BitDefender 软件会尝试解包 .apk 文件,并寻找感染或恶意文件。这个过程是自动的,工具会指示出恶意应用程序,如下图所示:
UFED Physical Analyzer 中的恶意软件扫描结果
该工具仅指出设备上存在恶意内容。取证调查员需要手动确认这是否是一个有效的问题,通过分析相关应用程序来确认。这正是我们在前面讨论过的逆向工程技能派上用场的时候。一旦应用程序被逆向工程并且获得了代码,建议你查看 AndroidManifest.xml 文件,了解应用程序的权限。这将有助于理解应用程序将数据存储在哪里、它尝试访问哪些资源等。例如,手电筒应用程序不需要读写你 SD 卡的数据,或者拨打电话的权限:
AndroidManifest.xml 文件中的权限
另外,你也可以将 .apk 文件上传到 VirusTotal,这是一个免费的服务,用于分析可疑文件中的恶意软件。VirusTotal 会通过 55 个杀毒引擎扫描你的文件。需要特别注意的是,如果 .apk 文件中的细节被混淆,工具可能无法识别出有效的恶意软件。因此,作为一名取证调查员,掌握逆向工程的技能,分析可疑应用程序的代码,识别恶意行为是非常重要的。
在一些调查中,设备上存在的恶意软件的性质可能会帮助得出某些关键结论,这些结论可能会影响案件的结果。例如,考虑一起涉及向其他员工发送辱骂性信息的公司内部调查。如果能在发送信息的设备上识别到恶意软件,将有助于解决此案件。
总结
Android 应用分析帮助取证调查员在设备的相关位置寻找有价值的数据。逆向工程 Android 应用是从 APK 文件中提取源代码的过程。使用某些工具,如 dex2jar,可以对 Android 应用进行逆向工程,以了解其功能和数据存储、识别恶意软件等。在本章中,我们对不同的 Android 应用进行了分析,现在能够从中提取数据。我们还学习了不同类型的 Android 恶意软件及其识别方法。像 UFED Physical Analyzer 这样的工具配备了 BitDefender 软件,可以自动扫描恶意软件。
下一章将介绍如何对 Windows Phone 设备进行取证分析。
第三部分:Windows 取证与第三方应用
本节将讲解如何对 Windows 手机进行取证——从了解 Windows 手机操作系统到从设备中提取数据。最后一章将介绍如何对一些最常用的第三方应用程序(如 Facebook、WhatsApp 等)进行取证。我们将探讨这些应用程序中数据的组织方式,并介绍一些可以直接应用的提取数据的技术。
本节包括以下章节:
-
第十二章,Windows 手机取证
-
第十三章,解析第三方应用程序文件
第十三章:Windows Phone 取证
尽管如今 Windows Phone 的使用并不广泛,但在取证调查中仍然可能遇到这些设备。这些设备是市场上最为经济实惠的,因此,了解如何获取、分析和解码 Windows Phone 上的数据非常重要。定位并解释这些设备上存在的数字证据需要对 Windows Phone 操作系统有专门的了解,而且并非总是可行。商用取证工具和开源工具对从 Windows 设备中获取用户数据的支持非常有限。由于 Windows Phone 在移动市场中占比不大,大多数取证从业者对其数据格式、嵌入式数据库以及设备上存在的其他证据不太熟悉。本章概述了 Windows Phone 取证,描述了获取和检查 Windows 移动设备数据的各种方法。
本章将覆盖以下主题:
-
Windows Phone 操作系统
-
Windows 10 Mobile 安全模型
-
Windows Phone 文件系统
-
数据采集
-
商用取证工具采集方法
-
在不使用商用工具的情况下提取数据
-
关键证据项目的检查
Windows Phone 操作系统
Windows Phone 是由微软开发的专有移动操作系统。它作为 Windows Mobile 的继任者推出,但不提供与旧平台的向后兼容性。Windows Phone 于 2010 年 10 月发布,版本为 Windows Phone 7。此后,Windows Phone 操作系统的版本历史继续推出 Windows Phone 7.5、Windows Phone 7.8、Windows Phone 8.1 和 Windows Phone 10。
尽管微软宣称已停止开发这一移动操作系统(不包括安全补丁),但作为移动取证检查员,您仍然可能会遇到它。
以下各节将提供更多关于 Windows Phone、其功能及其底层安全模型的详细信息。
与 Android 和 iOS 设备不同,Windows Phone 引入了全新的界面,采用了所谓的磁贴(tiles)来代替图标,如下图所示。这些磁贴可以由用户设计和更新:
Windows Phone 主屏幕
类似于其他移动平台,Windows Phone 允许安装第三方应用。这些应用可以从由微软管理的 Windows Phone 市场下载。与 iOS 和 Android 设备上的应用数量相比,Windows Phone 显得逊色很多。然而,应用仍然是可用的,您应该在 Windows Phone 设备上看到它们。
Windows Phone 引入了新功能,使其与 Windows Mobile 相比更接近其他智能手机:
-
Cortana:这是设备的个人助手。它首次出现在 Windows 8.1 中,并且在 Windows 10 设备中依然存在。Cortana 通过使用 Bing 回答问题、设置提醒、发送短信等功能来帮助用户,从而为用户提供更好、更便捷的使用体验。Cortana 做的每一项操作都会在设备上留下痕迹。
-
钱包:这个功能存储信用卡账户、登机牌、票证、优惠券等。
-
地理围栏和高级位置设置:这些为用户提供额外的保护,因为手机可以检测到何时处于可信区域之外,并可能会自动锁定。
-
附加功能:这些功能包括动态磁贴、增强的颜色以及安静时间。
其他与 Windows Phone 相关的常见应用程序包括 OneDrive(前身为 SkyDrive)、OneNote 和 Office 365 同步。OneDrive 使用户可以从任何设备访问所有文档和文件。OneNote 本质上是相同的,但它充当笔记本或日记。Office 365 使用户可以在多个设备间持续访问他们的电子邮件、日历、联系人等。
数据同步功能的引入使得我们作为法医检查员的工作变得更加困难。我们的任务是确定证据是如何被放置到设备上的。是否有可能明确地说明一个物品是如何放置到设备上的?坦率地说,这取决于情况。没有人愿意听到这个回答,但确实有很多因素需要考虑。是什么应用程序?设备上运行的是什么操作系统?这个物品是什么?例如,让我们考虑一下 OneDrive。如果设备中包含来自 OneDrive 的文档,原始作者应当包含在元数据中。结合检查内容是否与设备共享,可能会揭示出这个物品是如何创建的。然而,在检查日历条目时,如果设备上安装了 Office 365,可能无法确定用户是在手机、PC 还是笔记本上创建了该条目。同步是即时的,并且表示物品创建位置的状态标志并不总是存在。如果这个物品确实是调查中的致命证据,你需要运用你的技能来发现支持你结论的其他物品。需要深入挖掘数据。现在我们已经了解了 Windows Phone 的细节和特点,接下来我们来看看它的安全模型,看看它是如何保持数据安全的。
Windows 10 Mobile 安全模型
Windows Phone 的安全模型旨在确保设备上的用户数据安全可靠。以下部分简要介绍了 Windows Phone 安全模型所基于的概念。
Chambers
Windows Phone 在最小权限和隔离的原则基础上构建。这一原则自 Windows Phone 7 开始便得到贯彻。为实现这一目标,Windows Phone 引入了区域的概念。每个区域都有一个隔离边界,进程可以在其中运行。根据特定区域的安全策略,运行在该区域的进程拥有访问操作系统资源和功能的特权(www.msec.be/mobcom/ws2013/presentations/david_hernie.pdf)。安全区域共有四种类型。以下是每种类型的简要描述:
-
可信计算基(TCB):此进程拥有对大多数 Windows Phone 资源的无限制访问权限。该区域拥有修改策略和强制执行安全模型的特权。内核在此区域运行。
-
提升权限区域(ERC):此区域的权限低于 TCB 区域。它拥有访问所有资源的特权,除了安全策略外。此区域主要用于提供其他应用程序功能的服务和用户模式驱动程序。
-
标准权限区域(SRC):这是预装应用程序的默认区域,例如 Microsoft Outlook Mobile 2010。
-
最小权限区域(LPC):这是通过 Marketplace Hub(也称为 Windows Phone Marketplace)下载和安装的所有应用程序的默认区域。
接下来,我们将讨论加密。
加密
Windows Phone 8 引入了 BitLocker 技术,通过 AES 128 位加密加密设备上存储的所有用户数据。用户只需轻轻一 flip 开关即可启用此功能,设备上存储的所有数据将被加密。此外,用户还可以加密他们的 SD 卡(假设设备有 SD 卡),并为其设备设置密码或 PIN。如果启用了所有这些锁定和加密,除非密码被恢复,否则访问此设备上的数据几乎是不可能的。
基于能力的模型
能力被定义为与安全性、隐私和成本相关的设备资源(如相机、位置信息、麦克风等)。LPC 默认具有一组最小的访问权限。然而,在安装过程中可以通过请求更多能力来扩展此权限。能力是在应用程序安装过程中授予的,且在运行时不能修改或提升。因此,通常很难通过侧加载应用程序或强制自定义启动代码来获得取证访问权限,因为这通常在启动前会被拒绝。
要在 Windows Phone 上安装应用,你需要使用 Windows Live ID 登录到 Marketplace。在安装过程中,应用会要求用户在使用某些功能之前先获得许可,以下截图展示了一个例子:
Windows 应用请求用户权限(i-msdn.sec.s-msft.com/dynimg/IC75…)
这与 Android 中的权限模型类似。它让用户在安装应用之前,可以自由了解应用的所有功能。所有功能的列表包含在WMAppManifest.xml应用清单文件中,用户可以通过 Visual Studio 或其他在docs.microsoft.com/en-us/previous-versions/windows/apps/ff769509(v=vs.105)定义的方法访问该文件。
应用沙箱
Windows Phone 上的应用在沙箱环境中运行。这意味着每个应用在 Windows Phone 上都运行在自己的“房间”中。应用程序彼此隔离,无法访问其他应用的数据。如果某个应用需要将信息保存到设备上,它可以通过隔离存储来实现,而此存储不能被其他应用访问。此外,安装在 Windows Phone 上的第三方应用不能在后台运行;也就是说,当用户切换到另一个应用时,之前使用的应用会被关闭(尽管应用状态会被保留)。这确保了应用在用户不使用时不能进行例如互联网通信等活动。这些限制也使 Windows Phone 更不容易受到恶意软件的侵害,但你永远不应假设任何设备都是完全安全的。恶意软件在这些设备上运行会更具挑战性。
到目前为止,我们已经看过四种安全沙箱,现已知 Windows Phone 8 使用 BitLocker 技术进行加密。我们了解了在安装应用时授予的不同功能,并看到了每个应用是如何相互隔离的。接下来,我们将讨论 Windows Phone 的一个重要方面,即其文件系统。
Windows Phone 文件系统
Windows Phone 文件系统或多或少与 Windows 7、Windows 8 和 Windows 10 中使用的文件系统相似。从根目录开始,你可以访问设备上的不同文件和文件夹。从取证的角度来看,以下是一些可以提供有价值数据的文件夹。所有列出的目录都位于根目录中:
-
应用数据:此目录包含手机上应用的数据,如 Outlook、地图和 Internet Explorer。
-
应用程序:此目录包含用户安装的应用。每个应用分配或使用的隔离存储也位于此文件夹中。
-
我的文档:此目录包含不同的 Office 文档,例如 Word、Excel 或 PowerPoint 文件。该目录还包括配置文件和多媒体文件,如音乐或视频。
-
Windows:此目录包含与 Windows Phone 操作系统相关的文件。
这里使用的获取方法将决定你对设备的文件系统访问权限。例如,物理映像可能会提供访问多个分区的权限,这些分区可以从数据转储中恢复。下面的屏幕截图显示了一台包含 27 个分区的 Windows Phone 10 设备。第 26 个分区(MainOS)和第 27 个分区(Data)包含相关数据:
Windows Phone 10 分区
虽然大多数证据会存在于数据分区中,但最佳实践是尽可能同时捕获并分析两个分区。
上面屏幕截图中的 MainOS 分区(第 26 个分区)包含来自 Windows Phone 的系统数据。与所有 Windows 调查一样,系统数据包含与调查相关的证据。
在此示例中,第 27 个分区包含用户或数据分区。根据设备的不同,分区编号可能会有所不同。在我们的示例中,数据分区显示为第 27 个分区,如下图所示。在这里,使用移动取证工具恢复了 SMS、电子邮件、应用数据、联系人、通话记录和互联网历史。这些方法将在本章后面进行讨论:
Windows Phone 10 数据分区
Windows Phone 还维护着 Windows 注册表,这是一个存储操作系统环境变量的数据库。Windows 注册表本质上是一个目录,用于存储 Microsoft 操作系统的设置和选项,Windows Phone 也不例外。在检查 Windows Phone 时,你会看到 NTUSER.dat、SAM、SYSTEM、SOFTWARE、SECURITY 和 DEFAULT 注册表区。尽管这些注册表区可能是手机特有的,但它们可以像传统 Windows 注册表区一样进行检查。
Cynthia Murphy 的论文中包含了一个详细的案例调查。这涉及到一起家庭入侵和性侵犯罪案件,并详细描述了取证界的杰出人士如何努力发现有助于解决调查的证据。有时,移动设备是与案件相关的最重要证据。欲了解更多信息,请参考 www.sans.org/reading-room/whitepapers/forensics/windows-phone-8-forensic-artifacts-35787。现在我们已经了解了文件和文件夹结构,接下来我们将学习如何利用这些知识进行数据获取。
数据获取
从 Windows Phone 采集数据对于法医检查人员来说是具有挑战性的,因为前几章中定义的物理、文件系统和逻辑方法并不得到广泛支持。除此之外,手机可能需要在特定的电池电量(%)状态下,商业工具才能识别并采集该设备。这通常是采集 Windows Phone 过程中最难的步骤之一。
商业工具在进行数据采集时常用的一种技术是安装一个应用程序或代理在设备上,从而实现双向通信,以便将命令发送到设备以提取数据。这可能会导致设备上某些变化;然而,只要检查人员遵循标准协议并验证所用工具的有效性,这种方法仍然是法医上可行的。这些协议包括适当的测试,确保用户数据未被更改(如果更改了,则记录所发生的情况)、在测试设备上验证方法,并记录采集过程中所采取的所有步骤。为了使这种采集方法有效,应用程序需要以 SRC 的权限进行安装。这可能需要你将制造商的 DLL 文件(具有更高权限)复制到用户应用中。这使得应用程序能够访问通常仅限于本地应用的方法和资源。此外,设备必须解锁,否则这些方法可能无法工作。
大多数检查人员依赖法医工具和方法来采集移动设备数据。同样,这些方法在 Windows Phone 上的支持并不多。请记住,要在 Windows Phone 上部署并运行应用程序,设备和开发者必须都经过微软注册并解锁。这个限制可以通过使用 Windows Phone 8 至 10 设备的公共越狱来绕过。
长期以来,JTAG 和芯片拆卸采集是获取大多数 Windows Phone 数据的唯一选择。2015 年 1 月,一切发生了变化:Cellebrite 实施了一个采集模块,使得移动法医检查人员能够从大多数 Lumia 设备的物理层提取数据。
后来,Windows Phone Internals 项目提供了一种方法,可以解锁某些 Lumia 设备的启动加载程序,包括 520、521、525、620、625、720、820、920、925、928、1020 和 1320。这使得对这些设备的物理采集成为可能。你可以在www.wpinternals.net/了解更多关于该项目的信息。现在,我们将看看一些用于采集方法的商业工具。
商业法医工具采集方法
有一些商业工具可以支持 Windows Phone 设备的获取。Cellebrite UFED 支持使用物理、文件系统和逻辑方法获取 Windows Phone 设备。要确定你正在检查的设备是否被工具支持,可以下载并使用 UFED Phone Detective 移动应用程序,该应用程序在 App Store 和 Google Play 上均可免费下载:
正在搜索支持的 Lumia 设备
这些获取方法中,有些更为强大,能够获取完整的物理数据并绕过某些设备的锁码。然而,一些设备的支持仅限于提取设备中的联系人和照片。重要的是,检查员需要意识到,必须按照工具的指示采取特定步骤。获取这些设备并不容易,通常你会发现工具无法成功完成操作。
当工具似乎失败时,尝试使用 UFED 提供的智能手机/PDA 选项来获取设备。为此,请按照以下步骤操作:
-
启动 UFED4PC 并选择移动设备。
-
选择手动浏览。
-
选择智能手机。
-
选择你正在尝试获取的 Windows 设备。
-
尝试所有提供的方法,顺序是:物理、文件系统和逻辑(在可能的情况下,按此顺序进行):
提取方法
- 按照所有剩余的步骤操作,并尝试所有提供的获取方法,直到成功为止。
Cellebrite 可能会提醒你获取不成功,原因有多种。当这种情况发生时,尝试所有选项,确保已经尝试过所有可用的商业选项。以下是一个在 UFED4PC 中尝试获取设备的例子:
-
启动 UFED4PC。
-
选择你的设备的制造商和型号。
-
选择物理、文件系统或逻辑获取方法(提供的选项会根据设备型号不同而有所变化)。
在这个例子中,只有逻辑获取是支持的。提供了两种方法。第一种方法使用电缆,第二种方法使用蓝牙。在这个例子中,要求使用专用的 UFED 电缆。我首先选择了 UFED 电缆,因为蓝牙需要在配对过程中对手机进行额外的更改:
UFED4PC 逻辑提取选项
尝试使用 USB 电缆 100 获取设备时,只能访问多媒体文件。
然后,尝试相同的获取方法,但选择蓝牙。按照给定的说明将设备与取证工作站配对:
UFED4PC 提取选项(蓝牙)
通过这种获取方法,我们能够获取到联系人。请注意,目前没有提供获取短信、彩信、电子邮件、即时消息、日历、通话记录、应用数据等的方法。建议你重复前一截图中列出的通用方法,使用 UFED4PC 中的智能手机选项。到目前为止,我们已经看过了一些使用商业工具的获取方法。现在,让我们学习如何在没有这些工具的情况下提取数据。
在没有商业工具的情况下提取数据
在某些情况下,获取 Windows Phone 设备的物理数据仅能通过提前的方法,例如 JTAG 和芯片移除。但得益于名为 Heathcliff 的安全研究人员,使用他名为WPinternals的工具,现在可以在有限的手机型号和操作系统版本上进行物理获取,具体可以参见www.wpinternals.net。
该工具支持以下 Lumia 手机型号:520、521、525、620、625、720、820、920、925、928、1020 和 1320。
关于操作系统版本,支持以下版本:
-
8.10.12393.890
-
8.10.12397.895
-
8.10.14219.341
-
8.10.14226.359
-
8.10.14234.375
-
8.10.15116.125
-
8.10.15148.160
-
10.0.10512.1000
-
10.0.10536.1004
-
10.0.10549.4
-
10.0.10581.0
-
10.0.10586.11
-
10.0.10586.36
这种方法是实验性的,可能会导致设备变砖!尽管设备变砖的几率相对较低,我们建议你将其作为最后的选择。
获取过程的第一步将是下载一个 Windows 全闪存更新(FFU)文件和你正在使用的手机型号的紧急文件:
下载 FFU 文件
如果下载的 FFU 包含不支持的操作系统版本,WPinternals 将下载另一个 FFU 以获取附加文件:
获取附加文件
在解锁过程中,手机可能会重启几次,但这是正常的行为:
扫描闪存配置文件
一旦找到配置文件,工具就会闪存解锁的引导加载程序:
闪存解锁的引导加载程序
如果设备已成功闪存,它会进入大容量存储模式:
大容量存储模式
现在,设备可以轻松成像,例如,使用 FTK Imager:
FTK Imager 中的 Windows Phone
现在,我们将学习如何从 SD 卡提取数据。
SD 卡数据提取方法
Windows 手机可能包含可拆卸的 SD 卡。这些卡可能会通过密钥进行保护,防止 SD 卡被拆卸并使用,或通过其他设备(手机、相机、电脑等)访问。这与用户加密 SD 卡时创建的密钥不同。可以对用户加密的 SD 卡进行暴力破解和字典攻击,以尝试访问数据。在检查 Windows 手机时,最好研究设备,看看在获取设备数据时,SD 卡的安全性是否会成为一个因素。如果是这样,只需按照前面的步骤操作,通过手机在取证提取过程中获取 SD 卡数据。请参阅以下图表。
对于 SD 卡可以移除的设备,你需要考虑两种情况。如果设备已开机,你是否应该按原样获取手机和 SD 卡的数据?如果设备已关机,你是否应该移除 SD 卡并使用 FTK Imager 获取设备数据?答案是,视情况而定。在取证中,我们经常使用这个说法,但它依然成立。如果你保持设备开机,它必须与网络隔离,以确保不会被远程访问并立即获取,否则电池会耗尽,设备最终可能会关机。如果设备关机并且你移除了 SD 卡,你必须确保卡片仍然与设备本身绑定,并从外部和内部同时获取数据,以确保捕获所有数据。在正常情况下,以下图表建议了处理 Windows 手机中 SD 卡的推荐步骤:
大多数商业取证工具都会提供从 SD 卡提取数据的功能。通常,手机提取过程仅会提取存储在 SD 卡上的数据。当没有针对特定 Windows 手机的支持时,通常会发生这种情况。如果工具无法识别 SD 卡且数据无法提取,很可能是因为 SD 卡已经被用户加密,并且设备的密码与 SD 卡的密码不同。遇到这种情况时,尝试破解密码并重新获取设备。请注意,破解 SD 卡的密码并不总是可能的,但尝试暴力破解和字典攻击就像对待标准硬盘或外部设备一样,仍然值得一试。
在获取从 Windows 手机移除的 SD 卡时,FTK Imager 是一个免费的可靠选项,可以创建一个具有法证完整性的映像,供多种工具进行检查。要创建 SD 卡映像,请按照以下步骤操作:
-
从设备中取出 SD 卡,并确保记录卡片和手机上的所有标识符,以确保它们不会永久分离。
-
将 SD 卡插入写保护器,并将其插入你的取证工作站。
-
启动 FTK Imager。
-
选择文件,然后点击创建磁盘映像。
-
选择物理驱动器:
FTK Imager – 创建磁盘映像
- 使用下拉列表选择正确的设备。
查看设备的型号和大小,确保获取的是正确的设备。
-
选择完成。
-
点击添加并选择镜像类型。在此示例中,将使用 Raw (dd)格式,因为它支持大多数商业和开源分析方法:
FTK Imager – 选择镜像类型
-
输入相关案件信息并选择下一步。此步骤可以跳过。
-
选择图片保存位置:
FTK Imager – 保存您的镜像文件
- 选择完成,然后选择开始。建议在创建镜像后验证其内容。
完成后,您的结果将显示出来。接下来的部分我们将介绍如何分析 SD 卡数据。
关键取证数据供检查
在本节中,我们将向您介绍一些最常见的 Windows Phone 取证数据的位置,包括联系人、短信、通话和互联网历史记录。
提取联系人和短信
Windows Phone 7 到 10 中的所有联系人以及收发短信(SMS)都存储在名为store.vol的文件中,该文件位于 \Application Data\Microsoft\Outlook\Stores\DeviceStore(Windows 7)和Users\WPCOMMSERVICES\APPDATA\Local\Unistore(Windows 8-10)目录下。以下是 Windows 10 中store.vol文件的示例:
Windows Phone 中的 store.vol 文件
现在,让我们学习如何提取通话历史。
提取通话历史
通话历史数据目前可以从Phone文件中提取。需要注意的是,该文件没有扩展名,并且位于\Users\WPCOMMSERVICES\APPDATA\Local\UserData\。以下是 Windows 10 中Phone文件的示例:
Windows Phone 中的 Phone 文件
以类似的方式,我们将在接下来的部分中提取互联网历史记录。
提取互联网历史
互联网历史记录可以从位于\Users\DefApps\APPDATA\Local\Microsoft\Windows\WebCache\的WebCacheV01.dat文件中提取。以下是 Windows 10 中WebCacheV01.dat文件的示例:
Windows Phone 中的 WebCacheV01.dat 文件
这些文件可以手动检查,例如使用十六进制查看器,或使用移动取证工具自动解析。以下是使用 Magnet AXIOM 解析的WebCacheV01.dat文件:
使用 Magnet AXIOM 解析的 WebCacheV01.dat 文件
到此为止,我们已经讲解了如何从 Windows Phone 中提取短信、联系人、通话和互联网历史记录。
总结
从 Windows Phone 设备获取数据具有挑战性,因为这些设备是安全的,商业取证工具和开源方法并不能为像你这样的取证专家提供简便的解决方案。多种工具、芯片拆卸、JTAG 以及本书中定义的方法是一些可以访问 Windows Phone 设备上用户数据的方法。通常,你会发现 Windows Phone 设备需要多种提取方法才能获取可访问的数据。最大的挑战是如何获得设备的访问权限以提取数据。一旦数据可用,所有提取的信息都可以由你进行分析。
在这一章中,我们介绍了 Windows Phone 设备的接口、重要特性和安全模型。然后,我们查看了 Windows 文件系统中的不同分区和文件夹结构。Windows Phone 注册表类似于 Microsoft 操作系统中的注册表。我们展示了如何使用或不使用商业工具提取数据,并查看了一些常见的 Windows Phone 取证数据。凭借这些知识,你现在可以使用多种提取方法从 Windows Phone 提取用户数据。
下一章将引导你解析第三方应用程序文件。
第十四章:解析第三方应用程序文件
第三方应用程序已经在智能手机社区掀起了风潮。大多数智能手机用户的设备上都安装了不止一个依赖于聊天、游戏、导航或分享图片的应用程序。根据www.statista.com/statistics/276623/number-of-apps-available-in-leading-app-stores/,全球几乎有 500 万个适用于各种智能手机的应用程序。苹果的 App Store 提供约 180 万个应用程序,Google Play 提供 247 万个应用程序,亚马逊提供 60 万个应用程序,Windows 提供 67 万个应用程序。预计到 2020 年,这一数字将呈指数增长。
本章的目标是向您介绍在 Android、iOS 设备和 Windows Phone 上常见的各种应用程序。每个应用程序因版本和设备的不同而有所变化,但它们的基本结构是相似的。我们将探讨数据是如何存储的,以及为何偏好文件对您的调查至关重要。
本章将详细介绍以下内容:
-
不同的第三方应用程序
-
iOS 设备上应用程序的存储方式
-
Android 设备上应用程序的存储方式
-
Windows Phone 应用程序存储
-
如何使用商业和开源解决方案解析应用程序数据
第三方应用程序简介
第三方应用程序是移动设备调查的重要组成部分;关键证据往往存在于应用程序内部。这要求您了解应用程序数据在设备上的存储位置、该平台如何保存应用程序数据,以及哪种工具最有助于发现证据。在任何智能手机上检查第三方应用程序时,手动解析通常是一个关键因素。虽然一些商业工具,如 Belkasoft Evidence Center 或 Magnet AXIOM,以支持应用程序解析而著名,但没有任何工具是完美的,几乎不可能让工具跟上每个应用程序频繁更新的步伐。
通常,您会发现,市面上大多数商业工具都支持解析最流行的应用程序。例如,当 Facebook 收购 WhatsApp 时,Belkasoft、Cellebrite、Magnet Forensics 和 Oxygen Forensics 等公司开始支持该应用程序。Facebook 非常受欢迎,但由于内置的安全功能,数据并不总是能够被提取或解析——这正是所有应用程序不同之处。我们最好的建议是进行多次测试!您可以下载一个应用程序,填充数据,并检查结果,看看您对证据的看法与实际证据的差异。这种实践将帮助您了解更新如何改变证据的痕迹,证据位置如何变化,以及如何手动提取您的工具无法捕捉到的证据。此外,逆向工程应用程序并分析其代码将帮助您识别数据存储的位置及其存储方式。
大多数应用不需要数据计划就可以使用;它们可以完全通过 Wi-Fi 网络运行,这意味着即使一个人旅行到一个通常其设备无法使用的地区,应用仍然可以正常运行。例如,当我旅行时,我依赖 Skype、Viber 和 WhatsApp 与家人和朋友通话和发短信。使用这些应用,只需要我的智能手机连接到 Wi-Fi。
我们已经在本书中介绍了一些第三方应用提取和分析的技巧。此外,我们还讨论了需要检查的文件,以了解和分析应用数据,具体内容见第五章,《iOS 数据分析与恢复》;第十章,《Android 数据分析与恢复》;第十一章,《Android 应用分析、恶意软件与逆向工程》;和第十二章,《Windows Phone 法医分析》。本章将深入探讨这些应用及相关文件,并为分析这些数据做好准备。每个应用都有其特定的用途。大多数工具都支持每个类别中最受欢迎的应用。其余的就交给你了。下图展示了 Oxygen Forensic Detective 工具所呈现的应用。正如预期的那样,这些并不是设备上所有的应用,而只是工具能够解析的部分应用:
Oxygen Forensic Detective 在苹果设备上解析的应用示例
在接下来的部分,我们将分析一些广泛使用的聊天应用。
聊天应用
聊天应用是市场上最常见的应用之一。这些应用提供了用户在网络服务提供商提供的标准服务之外进行聊天或通话的功能。这些应用可能比其他应用更安全。所谓“安全”是指这些应用可能提供加密、私人资料、私人群聊等功能。此外,这些应用使用户能够在无需数据计划的情况下进行消息传递或通话,因为 Wi-Fi 提供了他们所需的所有访问权限。Facebook Messenger、WhatsApp、Skype、Tango 和 Snapchat 是一些比较受欢迎的应用。
从聊天应用程序中解析证据并非总是简单的。通常需要多种工具和方法才能提取其中的所有数据。商业工具可能只解析部分数据,这会迫使你学习如何检查和恢复所有数据,否则可能会错过证据。在下图中,Oxygen Forensic Detective 正在用于解析安卓设备上 Tango 应用的聊天消息。请注意,消息中并没有显示表格中的图片。然而,这张图片可以被拼接回消息中(注意截图中箭头指向的是图片所属的消息),以便提供一个关于对话中分享内容的整体图像。这是一个手动过程,并非工具自动执行:
将应用程序聊天日志拼接回来的示例
接下来,我们将看看 GPS 应用程序。
GPS 应用程序
大多数用户会从标准的手机应用扩展到 GPS 支持。包括获取路线指引和获取感兴趣区域的地图。常见的 GPS 应用包括 Waze 和 Google Maps。Waze 不仅仅提供路线指引,还会提醒用户沿途的道路危害、交通状况以及警察的存在:
Waze 应用程序
其他存储位置信息的应用程序包括 Twitter、Instagram、Facebook 和 Foursquare。这些应用程序允许用户在创建帖子或分享图片或视频时,提醒朋友和关注者自己所在的位置。所有这些交易都在应用程序内进行跟踪。了解这一点对于揭示你的取证工具未报告的额外证据至关重要。
在检查 GPS 应用程序的位置信息时,最好假设你需要手动检查与该应用程序关联的数据库和偏好设置文件。我们建议使用你的取证工具对设备上的数据进行初步筛查,然后深入分析证据,相关内容将在本章稍后讨论。以下截图显示了 Waze 被 UFED Physical Analyzer 解析的示例。在这里,我们可以看到用户有 5 个收藏位置、74 个已映射位置和 70 条最近的路线指引。所有这些信息必须手动验证,如果与调查相关。这是因为工具无法判断用户是手动输入地址,还是系统推荐的,或者用户是否真的去了该位置。将用户与特定位置关联的技能是你所必需的,这比单靠取证工具要复杂:
UFED Physical Analyzer 中的 Waze 应用程序
我们现在将分析一些流行的安全消息应用程序。
安全应用程序
如果数据是安全且自毁的,那它曾经存在过吗?忽略数据保存的说法,去寻找那些数据,因为这些应用常常做出不真实的声明。尽管这些应用设计时考虑到了安全性,但更新发布得很快,质量保证检查可能不足以捕捉所有问题。有时,你会发现应用中有加密或不存在的数据库,但文件中包含日志、写前日志或共享内存文件,这些文件包含本应加密的聊天部分。除此之外,用户还可以保存共享的媒体文件、截屏对话,还能做更多的事情。通常,你可能会发现共享的图片、音频和视频文件,原本应该是加密的。
一些流行的安全消息应用包括 Telegram、Wickr 和 Signal。其中一些应用是加密的,无法恢复任何内容。然而,这一切都取决于设备、智能手机上运行的操作系统以及应用的版本。这些应用的安全级别是公开宣传的,但同样,需要保持一定的怀疑态度。你应该始终假设应用中可能存在漏洞,可能会提供法医取证的访问权限。深入挖掘这些证据!
财务应用
使用财务信息的应用,如信用卡信息和个人银行信息,必须进行加密并确保安全。iOS 设备没有 Apple ID 和密码是无法安装这些应用的。即使你拥有用户的 Apple ID 和密码,提取的数据仍然应该是加密的。一些财务应用的例子包括 Google Pay、Microsoft Wallet、PayPal、Apple Pay 和应用内购买。当你检查设备时,可能会看到该应用已安装并带有相关的应用元数据,但账户信息和交易将无法访问。
社交网络应用
社交网络应用的商业支持非常强大,因为它们是应用商店中下载最多的应用。这些应用允许用户发布动态、共享位置、公开和私下聊天,基本上是记录他们的生活。常见的社交网络应用包括 Facebook、Twitter 和 Instagram。通常,用户会启用像 Instagram 这样的应用,以便访问 Facebook 和 Twitter,从而使发布过程更加无缝。因此,在检查设备时,用户可能会发现多个相同的文件或对话副本,因为应用间的共享。
在使用商业工具检查这些应用程序时,通常会解析聊天记录和联系人,这意味着其他数据可能被忽略。再次强调,你必须查看数据转储,确保没有遗漏任何内容。作为示例,我们将来看一下 Twitter。这个应用程序存储了大量的信息,可能需要不止一个工具来解析。此外,用户可能需要手动检查数据库文件,以确保所有证据都已恢复。
让我们来看一下工具能提取的内容。正如本书中多次提到的,首先从工具告诉你已安装的内容开始,然后制定关键词和方法,深入文件系统。我们可以在以下截图中看到 Twitter 的用户账户信息,以及该数据提取的文件路径:
Magnet AXIOM 解析的 Twitter
接下来的逻辑步骤是查看工具能告诉你关于应用程序及其使用方式的信息。Magnet AXIOM 提供了以下关于 Twitter 账户使用的信息。请注意,公共推文和私人消息(DM)都已恢复:
Magnet AXIOM 解析的 Twitter 使用情况
在检查工具解析的内容后,应检查数据库文件以确保没有遗漏任何数据。这并不总是简单的,因为每个账户和功能可能都有独特的数据库。我们所说的功能是指,联系人可能存储在一个数据库中,而聊天记录和账户信息则存储在另一个数据库中。随着你对常见应用程序的熟悉,你将知道从哪里开始查看。
在以下截图中,我们可以看到所有与 Twitter 相关的数据库。同样,从你已经知道的信息开始,然后深入挖掘:
包含用户活动的 Twitter 数据库
每个数据库可能包含独特的数据,可以解析出更多的证据。这些应用程序还包含独特的user_id值,这些值可以作为关键词用于搜索在调查中有通讯痕迹的其他设备。
可以编写自定义查询来解析感兴趣的 Twitter 数据库。以下展示了一个如何执行此操作的良好示例。这个查询专门用于解析 Twitter 联系人:
SELECT _id AS "Index",
user_id AS "User ID",
username AS "Username",
name AS "Name",
datetime (profile_created/1000,'UNIXEPOCH','localtime') AS "Profile Created",
description AS "Twitter Description",
web_url AS "Website URL",
location AS "Location",
followers AS "Followers",
friends AS "Following",
users.statuses AS "Number of Tweets",
image_url AS "Profile Image URL",
datetime (updated/1000,'UNIXEPOCH','localtime') AS "Profile Updated"
FROM users
到目前为止,我们已经看过了各种第三方应用程序以及工具如何帮助调查员提取数据。接下来,我们将探讨一些在分析数据时帮助调查员的基本概念。
编码与加密
在讨论应用程序和智能手机数据时,编码和加密这两个术语使用得非常频繁,因此它们常常被混淆。编码本质上是将信息或消息伪装成原始代码的过程。在某些情况下,编码的目的是使数据对计算机或用户不可识别。实际上,编码的主要目标是使用公开的方案将输入转换为不同的格式。换句话说,任何人都可以轻松解码一个编码值。而加密则是使用密钥将数据转换,以保持其内容的机密性。因此,只有当你拥有密钥时,加密文本才可以被反转。
大多数应用程序声称它们会加密数据或数据永远不会保存到磁盘上。虽然一些应用程序确实如此,但大多数只是对数据进行了编码。编码选项可能有所不同,但智能手机数据最常见的编码方式是Base64。消息应用程序通常依赖Base64编码来使数据看起来像是被隐藏或安全的。Base64的一个常见特征是,当编码字节不能被三整除时,数据会用**=**进行填充。
几年前,Oxygen Forensics 和 Autopsy 是少数几款支持解码从智能手机应用程序中提取的Base64负载的工具。为了使这些工具能够解析数据,它们必须支持包含编码的应用程序。目前,MSAB、UFED Physical Analyzer 和 Magnet IEF 提供Base64解码支持。
以下截图展示了一个Base64编码的消息示例。这些数据来自 Tango 聊天应用:
Base64 编码的 Tango 消息
加密稍微复杂一些,因为应用程序本身可能根本不提供对加密数据的访问。例如,你可能会发现数据库目录或包含加密数据的单元格是空的。偶尔,你能访问到数据库中的加密数据块,但这些数据并不总是能被解密。同样,当你面对加密数据时,应该去其他地方查找。你是否检查了日志和预写日志?你是否检查了缓存和媒体目录?你是否检查了 SD 卡?这些是你经常需要问自己的常见问题,确保你不仅仅依赖你的取证工具,并且确保你已经全面检查,确保没有任何东西被忽视。正如我们所解释的,从你知道的地方开始。我们知道缓存和数据库目录存储着用户数据,因此这是开始手动检查的好地方,正如你在下面的截图中看到的:
应用程序的数据存储位置
在接下来的部分中,我们将讨论应用程序如何在设备中存储它们的数据以及各种存储选项的重要性。
iOS、Android 和 Windows Phone 应用程序的数据存储
几乎所有应用程序都依赖 SQLite 进行数据存储。这些数据库可以存储在设备的内部存储中,或者存储在相关手机的 SD 卡上。当使用 SQLite 时,临时内存文件通常与每个数据库相关联,以提高 SQLite 的效率。这些文件包括回滚日志(JOURNAL)、预写日志(WAL)和共享内存(SHM)文件。这些文件可能包含 SQLite 数据库中不存在的数据。我们可以在以下截图中看到与各种 WhatsApp 数据库文件相关联的多个 WAL 和 SHM 文件:
SHM 文件和 WAL 示例
除了 SQLite 数据库外,其他设备还依赖 Plist、XML、JSON 和 DAT 文件进行应用程序数据存储、账户数据存储、购买信息和用户偏好存储。本章中关于 Android、iOS 和 Windows Phone 的部分将讨论这些文件。
iOS 应用程序
Apple 依赖 SQLite 和 Plist 作为应用程序数据存储的常见位置。偶尔,JSON 文件也会用于应用程序数据。检查从 iOS 设备恢复的应用程序可能会令人不知所措。我们建议您从已知的内容开始,并参考您的工具提供的信息。检查您选择的工具列出的已安装应用程序。从这里直接进入应用程序目录,确保没有遗漏任何内容。当用户删除应用程序时,数据库通常仍然存在,链接到已安装的应用程序仅仅是断开的。检查 iOS 设备的所有区域将有助于避免遗漏数据:
iPhone 上的已安装应用程序
在检查已安装的应用程序后,搜索Library和Documents目录,查找可能包含应用程序遗留数据的相关 Plist 文件。最后,检查 iPhone 的Media目录以及与该应用程序相关的目录,以恢复额外的遗留数据,例如共享照片、视频、音频文件和个人资料图片。在下面的截图中,我们正在检查与 WhatsApp 应用程序相关的Media目录:
iPhone 上的应用程序数据
接下来,我们将查看 Android 应用程序中的数据存储。
Android 应用程序
Android 设备在应用程序存储方面严重依赖 SQLite。每个应用程序的偏好设置文件通常采用 DAT 或 XML 文件格式。与 iOS 设备相比,检查 Android 设备上的应用程序可能是最繁琐的任务之一。这是由于数据可能存储在各种不同的位置。最好的起点是使用可以列出设备上已安装应用程序的工具。接下来,进入/Root目录下的子目录。记住,这些应用程序可能有独特的名称,可能很难找到。
你可能需要研究应用程序,以更好地理解与之相关的文件名。以下截图是 Android 设备上应用程序目录的一个示例:
Android 设备上的应用程序数据
每个应用程序目录都包含大量需要检查的数据。我们建议从 Databases 和 Cache 目录开始,然后将分析范围扩展到设备上的其他位置。接下来的检查位置包括 Media 和 Cache 分区。如果数据似乎丢失或声称已被删除,请不要忘记检查设备和 SD 卡上的 Downloads 目录。
应用程序数据可能存在于 Media 目录的多个位置。使用如 UFED Physical Analyzer 这样的工具,它提供了超越解析项目的关键字搜索功能,将非常有助于定位与特定应用程序相关的文物。在以下截图中,我们查看了存储在 Android 设备 Media 目录中的大量数据。这些数据与之前讨论的应用程序目录中存储的数据是不同的。每个位置都需要彻底检查,以确保不会遗漏任何内容。重要的是,你需要运用在前面章节中学到的知识来分析 Android 应用程序数据:
存储在 Media 目录中的独特应用程序数据
现在我们来看看 Windows Phone 上安装的应用程序及其获取方法。
Windows Phone 应用程序
在 Windows Phone 上找到的应用程序与在 iOS 和 Android 设备上找到的应用程序没有区别。SQLite 是用于数据存储的最常见格式。然而,并不是所有设备都允许将 SQLite 文件存储在手机内部。对于这些设备,所有的应用程序数据都将存储在 SD 卡上。有些人可能会认为这是一件幸运的事,因为这样可以避免我们需要检查设备上的多个位置,但 SD 卡和应用程序本身可能会被加密。
如果可能,最好将 SD 卡移除并使用取证工具获取它。当这不可行时,下一步的最佳方法是尝试通过手机使用取证工具获取 SD 卡。同样,这通常会导致数据丢失。作为最后的努力,可以通过挂载设备并使用 Windows 资源管理器查看存储在设备和 SD 卡上的应用程序,进行实时分析,正如在第十二章中讨论的,Windows Phone 取证。
提取第三方应用程序数据的取证方法
几乎所有商用工具都会尝试支持提取第三方应用的数据。如果你依赖工具输出作为调查结果,建议你对工具进行彻底且频繁的测试。这是因为应用更新非常频繁,工具几乎不可能不遗漏任何内容。你必须了解这些应用,它们的工作原理以及设备如何存储每个应用的数据。我们强烈建议你使用工具来筛查案件,然后深入数据手动提取工具遗漏的任何信息。确保在法医报告中只包括事实数据,而不是所有工具解析的数据,因为工具无法区分设备与人类创作的数据,只有经过训练的检查员才能自信地做出区分。
商用工具
如本书中所示,处理智能手机取证的工具有很多。然而,真正能在解析应用数据方面表现出色的工具却不多。Magnet AXIOM、Oxygen Forensic Detective 和 UFED Physical Analyzer 是其中几个在本章讨论的应用类别数据恢复方面做得很好的工具。我们将简要介绍如何利用这些工具解析应用数据。请记住,这些工具并不会找到所有应用,也不会解析所有应用的数据。
Oxygen Forensic Detective
Oxygen Forensic Detective 可用于检查应用数据。在这个示例中,我们假设数据采集已完成,我们只是在尝试分析数据。请注意,Oxygen 能够采集和分析智能手机。在这个示例中,我们用 Cellebrite UFED 采集了设备,并用 Oxygen 分析了数据。要加载设备的数据转储并检查其应用文物,请按照以下步骤操作:
-
启动 Oxygen Forensic Detective。
-
选择“导入文件”选项并选择你的图片。Oxygen 支持多种图像格式的导入。
-
解析完成后,开始检查已解析的应用:
Oxygen Forensic Detective 应用视图
-
接下来,开始检查感兴趣的应用,点击该应用并查看所有相关文件。
-
一旦选择了应用,你将看到解析出来的数据以及数据提取的完整文件路径。使用此路径手动验证结果。我们在下面的截图中查看的是 Pinterest 应用。注意,容器、文件和感兴趣的表格都被提供并超链接给用户。该工具甚至鼓励你深入挖掘并验证结果:
Oxygen Detective Pinterest 示例
Oxygen Detective 内置了关键词搜索、书签和报告功能。此外,SQLite 数据库和 Plist 查看器将为您提供检查相关应用数据的方法。
- 报告所有账户信息、聊天记录、消息、位置和任何其他相关数据,因为这些对您的调查具有重要性。
接下来我们将讨论的工具是 Magnet AXIOM。
Magnet AXIOM
Magnet AXIOM 一直被认为是互联网和应用程序解析领域的领导者之一,在数字媒体领域表现卓越。它在移动设备方面同样强大。再次强调,单一工具无法完成所有工作,但 AXIOM 已证明是最强大的工具,能够解析来自 Android、iOS 和 Windows Phone 的大多数应用程序。使用 AXIOM 审查应用程序文物时,请执行以下步骤:
- 启动 AXIOM,创建一个新案件,然后选择 MOBILE(注意,如果 MOBILE 被灰显,您需要从 Magnet Forensics 获取一个支持移动设备的许可证):
选择证据源
-
选择加载证据(LOAD EVIDENCE),并导航到您的图像文件。可以同时加载并解析多个图像。
-
选择进入文物详情(GO TO ARTIFACT DETAILS),并确定您希望解析的内容。我们建议选择所有应用程序:
Magnet AXIOM 支持的文物
-
选择分析证据(ANALYZE EVIDENCE)。
-
完成后,您可以使用文物:
Magnet AXIOM 中的应用程序文物
审查的第一步是检查 AXIOM 已经解析的内容。在前面的截图中,我们可以看到 Telegram 已经被解析。请从最相关的位置开始审查。例如,如果你正在寻找 Telegram 聊天记录,可以直接跳到该位置并开始审查文物。请注意,消息和聊天被分为两类。这在使用私密消息时很常见。所有相关的应用容器都应该被检查。此外,AXIOM 提供了数据恢复的完整文件路径。使用其他工具导航到该文件进行验证和手动检查。
AXIOM 还提供了逻辑关键词搜索(它将仅搜索能解析的内容,而不搜索其他内容)、书签和报告功能。确保你只报告实际的应用文物,并将其纳入最终的取证报告中。
UFED 物理分析器
Physical Analyzer 是市场上最著名的移动取证工具之一。这个工具不仅能帮助用户手动进行检查,还能利用工具解析出的数据进行分析。对于应用程序分析,Physical Analyzer 擅长解析每个支持的应用程序的聊天记录和联系人信息。对于那些未解析的数据,Physical Analyzer 提供了一个分析平台,允许用户浏览文件系统,揭示更多证据。该工具的关键词搜索功能强大,能够搜索原始的十六进制数据以及已解析的数据。此外,它还包括一个 SQLite 查看器。
要在 Physical Analyzer 中进行应用程序数据的取证检查,请按照以下步骤开始:
-
双击 UFED 快捷方式图标文件或双击工具图标来启动 Physical Analyzer。
-
加载图像文件并等待解析完成。
-
检查解析出的证据,如下图所示:
Physical Analyzer 解析的数据
我们建议检查解析的内容,并参考数据提取的超链接位置。导航至该路径,然后检查整个应用程序目录。
要查找应用程序目录,可以利用内建的关键词搜索功能来协助调查。记住,如果文件名不明显,你可能需要做一些研究来确定与应用程序相关的文件名。
开源/免费工具
对于预算有限的用户,可以使用开源解决方案和廉价工具来检查智能手机上的应用程序数据。这些解决方案使用起来更加困难,通常对于那些需要工具帮助进行数据提取和分析的新手取证人员来说,并不是最好的选择。检查应用程序数据是一个繁琐的过程,如果你不知道该从哪里入手,可能需要花费一些钱来快速开始。像 Andriller 这样的工具大约可以以10,000 价格。在接下来的章节中,我们将介绍几款我们最喜欢的有助于解析智能手机应用数据的工具。
使用 Autopsy
Autopsy 是最好的文件系统检查工具之一。不幸的是,Autopsy 不支持 iOS 解析,但它仍然可能对文件系统镜像有用。Autopsy 可以从 sleuthkit.org/autopsy/ 下载。当使用 Autopsy 时,Android Analyzer 模块将从设备中解析一些应用程序数据。接下来让我们看看如何使用 Autopsy 进行 Android 镜像分析。
要使用 Autopsy,请下载软件并在 Windows 计算机上安装,按照这些指示操作。确保你始终使用最新版本:
-
启动 Autopsy。
-
创建一个新案件:
Autopsy 案件创建
-
选择“下一步”,然后点击“完成”。
-
导航到您的图像文件并选择“下一步”。
-
选择您希望运行的模块。对于 Android 设备,关键字搜索和 Android 分析器将最有成效:
Autopsy 模块选择
数据导入模块是内置于 Autopsy 的工具,可以在案件开始时或之后的任何时间运行。此版本的 Autopsy 默认模块如下:
-
最近活动:此功能提取最近的用户活动,如网页浏览、最近使用的文档和已安装的程序。
-
哈希查找:此功能使用提供的哈希数据库(如标准的 NSRL 数据库)识别已知和著名的文件。它还允许导入自定义哈希数据库。
-
文件类型识别:此功能根据二进制签名匹配文件类型。
-
压缩文件提取器:此功能提取压缩文件(
.zip、.rar、.arj、.7z、.gzip、.bzip2和.tar)。它自动提取这些文件类型并将其内容放入目录树中。 -
EXIF 解析器:此功能导入 JPEG 文件并提取其 EXIF 元数据。
-
关键字搜索:此功能通过关键字和正则表达式在列表中执行文件索引和定期搜索。它允许加载自定义的关键字/列表。
-
邮件解析器:此模块检测并解析
mbox和pst/ost文件,并将电子邮件工件填充到黑板中。 -
扩展名不匹配检测器:这些是具有非标准扩展名的标记文件,依据其文件类型来判断。
-
E01 验证器:此功能验证 E01 文件的完整性。
-
Android 分析器:此功能提取 Android 系统和第三方应用程序的数据。
-
有趣文件识别器:此功能识别定义的有趣项目。
此外,您还可以为 Autopsy 安装第三方模块。其中一些对于 Android 取证非常有用。一个很好的例子是 Mark McKinnon 提供的 Parse SQLite DB 模块。此模块会解析它找到的任何 SQLite 数据库,并将其导入到提取的内容中。这个模块和其他模块可以从这个 GitHub 下载:github.com/markmckinnon/Autopsy-Plugins
Autopsy 提供比任何商业或开源工具更快的文件系统数据访问速度。从此之后,如何进一步操作才是难点。因此,再次强调,首先从提取的内容开始,然后深入文件系统,检查本书中讨论的文件和任何相关的应用数据,如下图所示:
使用 Autopsy 浏览文件系统
一旦确定了感兴趣的应用程序,首先查看已解析的内容,然后检查相关的数据库、缓存和偏好设置文件。Autopsy 包括一个基本的 SQLite 查看器,可以用于初步筛查。如果需要运行查询,我们建议使用 DB Browser for SQLite 或商业产品中包含的浏览器,例如 Belkasoft Evidence Center,特别是当你需要分析来自空闲列表和未分配空间的数据时。
Android Analyzer 可以自动解码一些数据,例如联系人、通话记录和短信。以下截图显示了解码后的短信结果:
Autopsy 解码的短信
现在,我们将探讨一些提取数据的其他方法。
提取应用数据的其他方法
解析应用数据的最简单方法之一是创建自定义的 SQLite 查询和 Python 脚本来解析感兴趣的数据。我们在本书中讨论了多个查询和脚本的建议与示例。Python 是最好的解决方案之一,因为它是免费的,并且我们可以完全访问它的库。需要记住的一点是,我们的脚本必须经常更新,以跟上应用更新的步伐。此外,请确保你的编码方案正确,以避免遗漏或错误解读应用数据。
除了 Python 脚本,已经存在一些免费的解析器,支持应用数据提取。WhatsApp Extract 是一款适用于 Android 和 iOS 的免费工具,可以从设备中提取 WhatsApp 应用数据。通常,这款免费工具提取的数据比商业解决方案更多,具体取决于用户在安装过程中分配的权限。其他开发者,如 Mari DeGrazia (az4n6.blogspot.in/p/downloads.html),Adrian Leong (github.com/cheeky4n6monkey/4n6-scripts),Sarah Edwards (github.com/mac4n6) 和 Alexis Brignoni (github.com/abrignoni),也开发了用于解析应用程序、从 SQLite 空白页恢复删除数据、解码 Base64 等的脚本。我们建议在开发自己的工具之前,先使用现有的工具。
总结
在本章中,我们了解了如何成功地解析和提取流行第三方应用的数据。许多应用并不像它们所宣称的那样。不要轻信关于应用的描述,因为各应用的质量保证测试不一致,且多年来我们已发现了几处漏洞和安全缺陷,这些问题为我们提供了将应用数据重新拼凑的方法。同时,应用更新会改变我们查看数据的方式。理解每款智能手机以及它如何存储应用数据,是成功检查智能手机应用的第一步。要明白,更新可能会改变数据的位置、编码和加密方式,以及工具的功能,这也是考官最难掌握的概念之一。你的任务是了解应用的能力,以便从移动设备中提取尽可能多的数据。
理解一个应用程序的工作原理本身就足够困难,更别提还要考虑如何提取证据了。正如你在本书中所阅读到的,提取智能手机中的数据有许多方法。单一的工具永远不够,实际上,移动取证可能会非常昂贵。我们希望我们提供的这本实用指南,能帮助你学习如何获取并分析从智能手机中恢复的证据。将你所学的应用到你的方法中,立即投入到你的移动取证工作中,或是用它来帮助你在下一个工作中更加准备充分。记住,实践、测试和培训将使你在工作中更加出色,并帮助你完善移动取证的技巧。