在此文中,我们将探讨 Android 取证、获取 Android 设备的过程、反取证技术以及从 Android 设备映像分析和恢复已删除文件的实际示例。
# 本文中使用的关键术语
采集(Acquisition) : 在数字取证调查期间收集敏感数据
取证健全性(Forensically Soundness) : 采用透明的数字取证程序,保留数据的原始含义,以便在法庭上出示
磁盘映像/转储(Disk Image/Dump) :磁盘映像/转储是包含磁盘卷或整个数据存储设备的内容和结构的文件。
ROM:安卓操作系统,Stock ROM 是手机预装的安卓操作系统。定制 ROM 是由开源社区维护的经过修改的安卓操作系统。
块设备(Block Device) :块设备往往是存储设备,能够缓冲输出并存储数据以供以后检索。HDD、SSD 等是块设备的示例。
# 为什么选择 Android Forensics
# 支持正在进行的犯罪调查
Android Forensics 有助于从 Android 手机中查找与正在进行的刑事调查相关的数字证据。如果被告使用的是 Apple iPhone,则应用 iPhone 取证。人们使用智能手机进行数字犯罪和非数字犯罪。因此,分析这些设备对于解决调查至关重要。
# 识别恶意软件
最近,针对智能手机的恶意软件攻击越来越严重。现在,一个家庭中至少有一个人拥有智能手机。大多数人通过智能手机进行银行业务和购物。这吸引了许多威胁行为者。从简单的键盘记录器到 24x7 全天候监视受害者的终极间谍软件(如 Pegasus),智能手机威胁已经变得可怕。Android 取证和移动取证通常有助于识别事件中的这些威胁。
# Android 取证程序
Sieze and Isolate : 扣押设备(主要在刑事调查中完成)并隔离它以避免篡改数据。
Acquisition :创建设备存储或文件的副本。
解密 (Decryption) :如果存储已加密,则解密存储。
分析 (Analysis) : 分析收集到的证据。
# Android 设备获取类型
-
Physical Acquisition 实物采集
创建存储设备的逐位副本的过程称为 物理采集。使用这种方法,我们可以分析已删除的文件和系统文件。这种类型的采集可以使用具有提升权限(root 访问权限)的软件来完成,也可以使用 JTAG 接口、EDL 模式(由 SOC 开发人员实现的引导加载程序)直接对存储设备进行映像。
-
Logical Acquisition 逻辑采集
在此过程中,我们将从设备存储中复制现有文件。这意味着我们无法分析已删除的文件以及 Android 操作系统的关键系统文件。这种类型的客户获取不需要 root 访问权限。
-
Cloud Acquisition 云采集
此方法依赖于云备份和其他云数据源。例如,可以使用 WhatsApp 云备份分析 WhatsApp 聊天。
UFS (通用文件系统存储) 3.0 - 读/写速度 ~ 2900 MB/s
eMMC (嵌入式多媒体卡) 5.1 - 读/写速度 ~ 256 MB/s
具有 eMMC 和 UFS 接口的 Easy JTAG 盒
# Android 取证工具
Android Forensics 领域中使用的不同工具列表。
工具名称 | 许可证类型 | 描述 |
---|---|---|
Autopsy Sleuthkit | 免费 | Autopsy 是 TSK 的 GUI 前端,具有许多自定义模块和附加组件。 |
Belkasoft Evidence Center X Belkasoft | 付费 | Evidence Center X 是 Belkasoft 用于计算机、移动和云取证的旗舰工具。它可以采集和分析各种移动设备和计算机。 |
Cellebrite UFED | 付费 | Cellebrite UFED 是一个强大的平台,用于转储和分析不同的便携式设备,如手机、无人机、SIM 卡等。 |
Sleuthkit (TSK) | 免费 | TSK 是命令行工具和 C 库的集合,允许您分析磁盘映像并从中恢复文件。 |
Magnet Acquire | 免费 | 轻松获取任何 iOS 或 Android 设备、硬盘驱动器和可移动介质的取证镜像 |
Magnet AXIOM | 付费 | Magnet AXIOM 是另一个能够分析各种移动设备的平台。 |
Oxygen Forensics Detective | 付费 | Oxygen Forensics Detective 是一个一体化的取证软件平台,用于提取、解码和分析来自多个数字源的数据。 |
# Android 操作系统
Android 是基于 Linux 内核修改版的移动操作系统。Android 的内核基于 Linux 内核的长期支持 (LTS) 分支。Android 还有另一个操作系统 Trusty OS,它是 Google 对与 Android 一起运行的可信执行环境 (TEE) 操作系统的实现。TEE 是 SOC 芯片的一个安全区域。这使得 Hardware-backed keystorage 能够确保加密和解密密钥得到安全处理。因此,密钥永远不会加载到 RAM 中,并且可以免受许多基于 ram 的攻击。
# Android 分区
Android 设备中有几个分区,它们提供不同的启动过程功能。自 Android 11 以来,Google 对分区布局进行了新的更改,并且在最近的 Android 13 更新中进行了更多调整(截至撰写本文时)。
分区名称 | 描述 |
---|---|
boot | 包含一个内核映像和一个通用 ramdisk |
system | Android 框架 |
recovery | 包含恢复映像。恢复映像包含一个恢复程序,该程序允许设备启动到恢复控制台以执行高级恢复和维护操作。它包含第二个完整的 Linux 系统,即独立的操作系统,包括用户界面应用程序、内核和特殊的恢复二进制文件,该二进制文件读取软件包并使用其内容进行更新,即刷新或擦除自身或任何其他分区,尤其是在 OTA 更新期间 |
cache | 临时数据存储 |
misc | 由恢复分区使用 |
userdata / data | 包含用户安装的应用程序、媒体文件和其他用户数据 |
vendor | 包含未随 AOSP 分发的专有文件,即 OEM 添加的系统应用程序和库 |
**cust ** | 包含一些预加载的系统 apss 和区域设置,这些设置在首次使用时安装 |
# Android 磁盘加密
Android 使用 FDE(全盘加密)和 FBE(文件级加密)方案来加密内部存储。从 Android 5 到 Android 9,FDE 被用作默认加密方案,因为 Android 10 FBE 是默认加密方案。
全盘加密 (FDE:Full-Disk Encryption)
Android 全盘加密基于 dm-crypt,后者是一项在块存储设备层运行的内核功能。加密算法是 128 高级加密标准 (AES),带有密码块链接 (CBC) 和 ESSIV:SHA256。主密钥通过调用 OpenSSL 库使用 128 位 AES 加密。首次启动时,设备会创建一个随机生成的 128 位主密钥,然后使用默认密码和存储的盐对其进行哈希处理。默认密码为:"default_password"
但是,生成的哈希也是通过 TEE(例如 TrustZone)签名的,TEE 使用签名的哈希来加密主密钥。可以使用 PIN、密码、图案或默认密码对设备进行加密。FDE 的限制之一是手机只有在启动时输入凭据后才能使用,这也称为安全启动
。这意味着,如果未提供凭据,则 SMS、Receiving Calls 、 Alarms 和其他服务将不可用。大多数 OEM 使用默认密码进行加密。
FDE 怀疑受到以下类型的攻击:
1、暴力攻击 :使用 adb 或 HID 界面暴力破解锁屏。暴力破解需要很多时间,因为 OEM 在锁屏超时时使用不同的方案,而且如果 PIN/密码很长,则相对不可能破解。
2、冷启动攻击 : FDE 解密密钥被加载到 RAM 中以进行解密过程。可以通过在冷却 RAM 模块后创建内存转储来提取密钥。这种攻击现在已经过时了。
文件加密 (FBE:File-Based Encryption)
FBE 允许使用不同的密钥加密不同的文件,这些密钥可以独立解锁。FBE 引入了一种称为 Direct Boot 的新引导方法。使用直接启动,加密设备可以直接启动到锁定屏幕。在启用 FBE 的设备上,设备的每个用户都有两个可供应用程序使用的存储位置:凭据加密 (CE) 存储,这是默认存储位置,仅在用户解锁设备后可用,以及设备加密 (DE) 存储,这是在直接启动模式下和用户解锁设备后都可用的存储位置。Phone Dialer、Alarm 和其他重要应用程序在启动后在 DE 存储上运行。
MIUI 11 中的安全启动选项
安全启动锁屏
# 获取Android 设备实体
请注意,本文中提到的程序旨在概述如何获取 Android 设备。在实际场景中,例如在取证实验室中,设备被隔离并保护免受任何形式的数据篡改,它们还使用专业工具进行采集和分析。在家庭实验室中模拟这些方法是不可行的。
让我们在 FDE 加密的 Android 设备上执行物理采集方法。
Device Specifications :- 设备规格 :- Model : Xiaomi Redmi Note 6 Pro (Tulip) 型号 : 小米红米 Note 6 Pro (Tulip) ROM/OS : MIUI 11 (Android 9) ROM/操作系统 : MIUI 11 (Android 9) Recovery : TWRP Custom Recovery 恢复 : TWRP 自定义恢复 Encryption : FDE ( with default password ) 加密 : FDE ( 使用默认密码 )
所需工具:
# 准备设备
- 解锁引导加载程序 :每个制造商都有不同的方法来解锁引导加载程序。请参阅设备论坛以查找正确的程序,另请注意,某些制造商不允许解锁 bootloader。
- 安装自定义恢复 :有许多适用于 Android 的自定义恢复项目。TWRP Custom Recovery 是其中最受欢迎的一种。我们可以使用下面给出的命令启动临时恢复会话。要在设备中永久安装 TWRP,请参阅此 XDA 论坛帖子
TWRP 支持 FDE 和 FBE 的解密,如果设备使用默认密码加密,TWRP 将自动解密存储。否则,将要求用户输入密码/PIN 码。
默认情况下,Data
(userdata) 分区和 Cache
分区在 recovery 中挂载。只有挂载的分区会被解密,因此如果我们必须转储 System
分区或任何其他分区,我们将不得不挂载它们。可以通过 Mount 选项挂载分区。
TWRP Menu --> Mount TWRP (菜单 --> 安装)
我们可以通过 adb 运行以下命令来确定加密类型。如果结果是 block
,则为 FDE,如果结果是 file
,则为 FBE 加密。
nxb1t@4n6:~$ adb shell "getprop ro.crypto.type"
# 转储数据分区
首先,我们必须确定数据分区的名称。我们知道,FDE 加密是基于 dm-crypt 的,所以解密后的分区会挂载在单独的块设备上。我们可以使用以下命令通过 adb 列出挂载的分区:
nxb1t@4n6:~$ adb shell "df -h"
nxb1t@4n6:~$ adb shell "ls /dev/block"
但在此之前,我会将我的设备启动到恢复模式(使用 adb 或通过按下音量增大按钮和电源按钮,它会因设备而异)。因为 Android 在标准模式下运行时不允许通过 adb 获得 root 权限。
这里我们可以看到 /dev/block/dm-0
被挂载在 /data
挂载点上。这就是我们需要转储的解密数据分区,因为自定义恢复会使用默认密码自动解密它。
在下图中,我们可以看到一个名为 mmcblk0
的块设备,它相当于我们在 linux 发行版中看到的 /dev/sda
设备文件。
转储分区非常简单,并且时间消耗可能会因设备的分区大小和速度而异。在我们的例子中,内部存储大小为 64 GB,数据分区约为 50 GB。因此,我转储了 mmcblk0
块设备和 dm-0
块设备,总共超过 100 GB。mmcblk0
是加密的内部存储,因此我将它的转储命名为 encdisk.img
,对于 dm-0
,我将其命名为 decdata.img
。
块设备名称可能因设备而异,因此请确保在转储分区时输入正确的名称。
我们将使用 adb pull
命令来转储块设备/分区。
nxb1t@4n6:~$ adb pull /dev/block/mmcblk0 encdisk.img
nxb1t@4n6:~$ adb pull /dev/block/dm-0 decdata.img
# 分析取证镜像
好了,现在我们可以使用 Autopsy Software 分析转储的数据分区映像。
打开 Autopsy并选择 新建案例 ,输入所需信息。
选择 Disk Image (磁盘映像) 作为源类型。
选择所需的模块,在我们的例子中,我只选择了 Picture Analyzer、Photorec、Central Repo 和 Android。
一旦它开始处理镜像,我们就能实时看到通话记录、联系人、信息等许多数据。
我们还可以使用 TSK 命令行实用程序来访问取证镜像内容,它在系统上确实轻量级,但涉及大量手动工作。
TSK 命令行参考
# If the image is a single partition
nxb1t@4n6:~$ fls image.img [inode]
# If the image is entire storage
nxb1t@4n6:~$ fls -o partition_offset image.img [inode]
# Identifying partition offset
nxb1t@4n6:~$ mmls image.img
# To view file content
nxb1t@4n6:~$ icat image.img [inode]
- fls :fls 列出文件系统中的文件和目录名称。
- MMLS :MMLS 显示卷系统 (Media Management) 的内容。
- icat : icat 将磁盘映像中文件的内容输出到 STDOUT。
在下面的屏幕截图中,我们在 encdisk.img 上使用了 mmls。只有少数分区(如缓存)未加密。Userdata 和其他重要分区已加密。更多 TSK 命令及其用法可以在 Sleuthkit wiki 中找到
# 恢复已删除的文件
在恢复已删除的文件之前,让我们看看幕后发生了什么。
数据恢复的工作原理
当我们将文件存储在 hdd/ssd 中时,文件会存储在块中。每个块都包含一段文件。第一个块通常包含文件的元数据。当我们删除文件时,只会删除包含元数据的第一个块。操作系统无法再检测到该文件,因为它的元数据已丢失,因此认为这些块可以自由写入新文件。恢复工具逐个读取存储扇区,逐块读取,并找到相关的块。找到所有相关块后,恢复实用程序将重新制作元数据。由于块被标记为空闲,因此块很有可能被新文件覆盖,因此恢复的文件可能包含已存在文件的内容。因此,强烈建议尽快恢复文件以防止覆盖。
对于大多数用户来说,Autopsy 足以恢复已删除的文件,因为它包含下面列出的工具,选择"已删除文件"类别中的所有文件并将其导出到所需的文件夹即可完成这项工作。但是,如果您使用的是低规格系统和包含许多文件的数据源,那么 Autopsy 将不是一个好的选择。让我们检查一些用于数据恢复的命令行工具。
-
tsk_recover :tsk_recover 将文件从映像恢复到output_dir。默认情况下,仅恢复未分配的文件。使用 flags,它将导出所有文件。
nxb1t@4n6:~$ tsk_recover image.img outpu_dir # recover unallocated files to output_dir
nxb1t@4n6:~$ tsk_recover -d directory_inode image.img output_dir # recover a single folder
-
PhotoRec :PhotoRec 是文件数据恢复软件,旨在恢复丢失的文件,包括视频、文档和档案。
nxb1t@4n6:~$ sudo apt install testdisk -y # Installing photorec in linux
nxb1t@4n6:~$ photorec image.img
以下是 WhatsApp Images 文件夹中的几个恢复文件。如前所述,一些已删除的文件会被现有文件覆盖。所以数据恢复成功率在 60% 左右。
# 反取证技术
反取证技术旨在从系统中完全隐藏与用户相关的数据/痕迹,使数字取证调查员更难进行调查。反取证技术有好的也有坏的用例。好的情况是,当我们把手机卖给陌生人或送人给别人时,最好彻底擦拭我们的手机。因为我们不知道他们是否臭名昭著,是否具备数字取证方面的技能。糟糕的用例是罪犯隐藏和销毁证据。
Disk Wipe 磁盘擦除
这是第一个也是最重要的反取证技术。删除存储设备上的所有数据。虽然简单删除不会阻止恢复,但磁盘擦除利用安全删除来超越它。从存储开始到结束的每个扇区都使用零覆盖。也可以使用文件粉碎机安全地删除单个文件。Android 没有太多可靠的文件粉碎和磁盘擦除工具。唯一的选择是在 FDE 设备中设置安全启动并设置长密码,然后多次格式化设备。与 FBE 设备相同,对其进行多次格式化以使其无法获取解密密钥。
文件加密
顾名思义,文件加密技术使用密码加密文件。在 Android 中,有许多使用 TEE 功能的文件加密应用程序。在这种情况下,获取正确的密码将很痛苦。
隐写术
隐写术是将文件隐藏在另一个文件中的方法。这种技术非常罕见,但不应被忽视。例如,在音频、图像文件等中隐藏文本。