Android取证简介(翻译)

在此文中,我们将探讨 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 功能的文件加密应用程序。在这种情况下,获取正确的密码将很痛苦。

隐写术

隐写术是将文件隐藏在另一个文件中的方法。这种技术非常罕见,但不应被忽视。例如,在音频、图像文件等中隐藏文本。

# 引用
相关推荐
follycat13 分钟前
信息收集--CDN绕过
网络·安全·网络安全
NotesChapter37 分钟前
Android吸顶效果,并有着ViewPager左右切换
android
_祝你今天愉快2 小时前
分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.
android
暮志未晚Webgl2 小时前
109. UE5 GAS RPG 实现检查点的存档功能
android·java·ue5
麦田里的守望者江2 小时前
KMP 中的 expect 和 actual 声明
android·ios·kotlin
Dnelic-3 小时前
解决 Android 单元测试 No tests found for given includes:
android·junit·单元测试·问题记录·自学笔记
佛系小嘟嘟3 小时前
Android Studio不显示需要的tag日志解决办法《All logs entries are hidden by the filter》
android·ide·android studio
清风.春不晚3 小时前
shell脚本2---清风
网络·网络安全
mariokkm3 小时前
Django一分钟:django中收集关联对象关联数据的方法
android·django·sqlite