原文:
zh.annas-archive.org/md5/6EFD6E14F5596709CDC9A37A8F4A6218
译者:飞龙
第六章:iOS 取证工具
像您这样的取证人员不仅必须知道如何使用取证工具,还必须了解工具在调查中使用的方法和获取技术。除了节省时间外,取证工具还使取证分析过程变得更加容易。然而,每个工具都有其缺陷。您必须发现任何错误,并知道如何通过利用另一个工具或技术来纠正它们。一个工具不可能支持所有设备。您有责任学习并使用最佳工具来完成工作。正如我们在前几章中讨论的那样,您必须了解数据在 iOS 设备上的存储方式,以确保工具捕获所有可访问的数据。
目前,有许多商业工具可用于对 iOS 设备进行取证获取和分析,例如 Cellebrite UFED 物理分析器、BlackBag BlackLight、Oxygen Forensic Detective、Belkasoft Evidence Center、MSAB XRY、Magnet AXIOM 等。出于熟悉的目的,本章将带您了解其中一些工具的使用,并提供执行 iOS 设备取证和分析所需步骤的详细信息。
在本章中,我们将涵盖以下主题:
-
使用 Cellebrite UFED 物理分析器
-
使用 Magnet AXIOM
-
使用 Belkasoft Evidence Center
-
使用 Elcomsoft Phone Viewer
使用 Cellebrite UFED 物理分析器
根据供应商,Cellebrite 通用取证提取设备(UFED)赋予执法、反恐和安全组织从手机、智能手机、PDA 和便携式手机等各种设备中捕获关键的取证证据的能力,包括对新发布型号的更新。该工具能够进行取证合规的数据提取、解码和分析技术,以获取来自不同移动设备的现有和已删除数据。截至 2019 年 2 月,UFED 支持从近 28000 种移动设备中提取数据。
Cellebrite UFED 物理分析器的特点
以下是 Cellebrite UFED 物理分析器的特点:
-
支持不同类型的获取
-
提取需要解密物理图像和钥匙链项目的设备密钥
-
解密物理图像和钥匙链项目
-
显示设备密码(并非所有锁定设备都可用)
-
允许您使用已知密码打开加密的原始磁盘映像文件
-
支持密码恢复攻击
-
支持对提取的应用程序数据进行高级分析和解码
-
提供对物理和逻辑数据的访问,以在同一用户界面中进行分析更容易
-
生成多种流行格式的报告,包括 Microsoft Excel、PDF 和 HTML
-
转储原始文件系统分区,以便在另一个取证工具中导入和检查
-
创建二进制图像文件,以及用于导入其他取证工具进行验证的 UFED 快捷文件
现在让我们来看高级逻辑获取和分析。
使用 Cellebrite UFED 物理分析器进行高级逻辑获取和分析
如前所述,物理分析器不仅可用于解析获取的图像中的不同类型的取证物件,还可用于从 iOS 设备中执行逻辑和文件系统(甚至是旧设备的物理)类型的提取。由于物理获取实际上仅适用于旧设备,最佳选择是高级逻辑获取。
我们将从运行 iOS 13.2.3 的 iPhone 中获取和分析数据。让我们开始吧:
-
通过适当的电缆将设备连接到您的工作站。确保它是受信任的,并启动物理分析器。
-
转到提取 | iOS 设备提取。iOS 设备数据提取向导窗口将弹出:
选择提取类型
- 由于我们正在处理现代 iOS 设备,让我们选择高级逻辑提取。如果设备被识别,您将看到设备的名称、其 UDID,以及其 iOS 版本:
连接设备
在我们的案例中,iPhone 的 iTunes 备份受到已知密码的保护,所以最好的方法是方法 1:
选择提取方法
- 如果您希望备份被加密(建议),您可以在下一页选择此选项:
选择备份是否应该加密
- 是时候选择数据将保存在哪里了;在我们的案例中,是
D:\
驱动器的根目录:
选择提取的保存位置
- 现在,获取过程将开始。确保设备连接到整个过程结束:
提取数据
一旦提取过程完成,提取的数据将通过强大的物理分析器插件进行解析。结果,您将获得一组分成多个类别的工件:
由物理分析器提取和解析的手机数据
关于数据文件也可以说同样的话:
由物理分析器提取的数据文件
您可能已经注意到,括号中有红色数字——这些是物理分析器插件恢复的已删除记录。正如您已经知道的那样,从 iOS 广泛使用的 SQLite 数据库中恢复已删除的数据并不是什么奇迹。
谈到 SQLite 数据库,物理分析器还有另一个令人惊叹的功能,可能对于向移动取证报告添加自定义工件和解析未知应用数据非常有用——SQLite 向导。您可以在工具 | SQLite 向导下找到它:
- 让我们从选择数据库开始。当然,最好选择一个物理分析器没有自动解析的应用。在我们的例子中,这是一个名为 Scan 的应用:
选择数据库
- 确保您已选择了“包括已删除的行”选项;这将帮助您自动恢复数据,但当然也会增加误报记录的数量:
启动 SQLite 向导
因此,我们的应用程序用于扫描 QR 码,并包含四个感兴趣的列——扫描日期和时间、纬度、经度和扫描结果。所有行都属于ZSCSCANEVENT
:
选择数据库表和列
- 下一步是选择时间戳。您已经学到了很多关于 iOS 时间戳,并且应该能够识别
ZTIMELESSCREATIONDATE
中的格式,但即使您不知道,SQLite 向导也会为您完成这一步:
选择时间戳格式
- 通用型号适用于任何数据库,但也有一些现有的物理分析器型号可用于典型内容,如聊天或联系人。在我们的案例中,我们使用通用型号:
选择型号
一旦您选择了模型和列的字段类型,您可以运行查询并将新解析的工件添加到您的提取中,然后添加到您的报告中。
使用 Magnet AXIOM
Magnet AXIOM 是市场上最有用的数字取证工具之一。它可用于计算机和移动取证;套件的最新版本引入了最新功能-云取证。至于 iOS 取证,它可以用于逻辑和文件系统获取,并支持所有 iOS 版本-从最旧到最新。当然,它也可以用于解析 iTunes 备份和第三方工具(如 Elcomsoft iOS Forensic Toolkit)创建的物理镜像。
Magnet AXIOM 最好的功能之一是它能够在获取过程完成之前即时开始处理提取数据,这样您就不必等待获取过程完成才能开始取证分析。
Magnet AXIOM 的功能
以下是 Magnet AXIOM 的功能:
-
支持逻辑和文件系统(对越狱设备)获取
-
支持加密和非加密的 iTunes 备份
-
恢复了 500 多种工件类型
-
与其他流行的移动取证工具(如 Cellebrite UFED 和 XRY)兼容
-
包括内置的 SQLite 和 plist 查看器
-
创建所谓的便携式案例,以便您可以与队友和第三方共享整套数据
-
可以生成多种流行格式的报告,如 Microsoft Excel、PDF 和 HTML
使用 Magnet AXIOM 进行逻辑获取和分析
正如您可能记得的那样,现代 iOS 设备最常见的获取方式是逻辑类型。以下是您如何使用 Magnet AXIOM 获取 iOS 设备的方法:
- 首先创建一个新案例:
创建新案例
- 由于我们处理的是 iOS 设备,我们将选择移动选项:
选择证据来源
- 有许多选项可供选择,但在我们的情况下,iOS选项是正确的:
选择证据来源
- 有三种获取证据的选项-我们可以选择已获取的图像(例如 iTunes 备份或第三方工具获取的文件系统图像),从设备中提取数据,或使用 GrayKey 进行获取。让我们选择第二个选项:
选择获取证据
- 我们的设备已被识别并准备好进行成像。如果您没有看到您的设备,请使用未知选项:
选择设备
- 有两种提取类型-快速和完整。如果您要获取的设备已越狱,则只有完整选项可用。在我们的情况下,不是:
选择图像类型
- 您将被提示输入备份密码。正如您可能记得的那样,这样可以获取更多数据,因此强烈建议这样做:
加密备份
- 在开始获取和处理之前,您可以选择感兴趣的关键词,使用 Magnet.AI 对聊天进行分类,或配置动态应用程序查找器等:
处理细节
动态应用程序查找器是 Magnet IEF 和 AXIOM 的功能,可以在图像中找到潜在的移动聊天应用程序数据库。您可以在此链接了解更多关于此功能的信息:www.magnetforensics.com/mobile-forensics/using-dynamic-app-finder-to-recover-more-mobile-artifacts/
- 您可以从这里自定义移动工件。例如,如果您只对聊天工件感兴趣,最好只选择这些类型的工件,因为它们会缩短处理时间:
选择移动工件
- 点击“分析证据”按钮将启动获取和分析过程:
成像证据来源
- Magnet AXIOM 有两个窗口-处理和检查。第一个可用于监视获取和处理证据来源的过程,而第二个可用于分析提取和解析的数据。正如我们之前提到的,您可以在处理阶段结束之前开始分析。您只需要在 Magnet Examine 中点击 LOAD NEW RESULTS:
加载新结果
- 一旦处理阶段结束,您可以在 Magnet Examine 的 MOBILE 部分找到解析的数据:
移动部分
但是,当然,它不会包括一切;还有其他有价值的部分,您可以在其中找到从 iOS 设备中提取的证据,例如 CHAT,MEDIA 和 DOCUMENTS。
使用 Belkasoft Evidence Center
Belkasoft Evidence Center 是另一个流行的数字取证工具,能够执行 iOS 设备的获取和分析。与 AXIOM 一样,它可用于计算机,移动和云取证。
Belkasoft Evidence Center 最好的功能之一是其处理受损 iTunes 备份的能力。因此,如果您有一个没有任何工具能够处理的备份,请尝试 Belkasoft Evidence Center;根据我们的经验,它将成功处理它。
Belkasoft Evidence Center 的功能
以下是 Belkasoft Evidence Center 的功能:
-
支持逻辑和文件系统(用于越狱设备)获取
-
支持加密和非加密的 iTunes 备份
-
支持受损的 iTunes 备份
-
恢复了 700 多种工件类型
-
与其他流行的移动取证工具一起使用,如 Cellebrite UFED 和 XRY
-
包括内置的 SQLite 和 plist 查看器
-
包括一个免费的脚本模块 BelkaScript,允许检查员编写自己的脚本来自动执行一些常见任务
-
可以生成几种流行格式的报告,如 Microsoft Excel,PDF 和 HTML
使用 Belkasoft Evidence Center 进行逻辑获取和分析
由于备份处理和分析是 Belkasoft Evidence Center 最好的功能之一,我们将在这里为您介绍这个过程:
- 让我们从创建一个新案例开始:
创建新案例
- 这里有多个选项-您可以处理先前获取的图像,例如 iTunes 备份,或选择首先从设备中提取数据。让我们从逻辑获取开始。选择移动选项:
选择数据源
- 由于我们正在处理 iOS 设备,选择苹果。您将看到可用设备的列表:
可用于获取的设备
- 我们的设备没有越狱,因此我们的选择要么是逻辑获取,要么是 iTunes 备份:
选择获取方法
- 一旦获取完成,您可以选择感兴趣的工件。确保只选择与 iOS 相关的工件;这将减少处理时间:
选择数据类型
- 一旦处理完成,提取的工件将显示在概述选项卡中:
概述选项卡
- 最后,如果您想浏览法证图像的文件系统,请使用文件系统选项卡:
文件系统选项卡
其他可用的选项卡也可能很有用-Dashboard 选项卡显示您当前正在处理的案例的所有可用信息,任务管理器选项卡允许您监视处理进度,搜索结果选项卡显示您的关键字搜索结果。
使用 Elcomsoft Phone Viewer
Elcomsoft Phone Viewer 是一款工具,能够解析和查看不仅来自 iOS 设备,还来自 BlackBerry 10 和 Windows Phone 设备的提取数据。它提供对逻辑和文件系统图像的只读、法庭可靠的访问,以及对从云端提取的数据的访问。
Elcomsoft Phone Viewer 的特点
以下是 Elcomsoft Phone Viewer 的特点:
-
分析在线活动,包括浏览历史记录、书签和打开的标签页。
-
提供对同步数据、密码和用户数据的访问,包括消息、通话记录和联系人。
-
它对多媒体文件进行分类,以便您更容易了解照片是通过消息接收的还是使用手机相机拍摄的。
-
聚合来自不同来源的位置数据。
-
支持逻辑图像、文件系统图像以及 iTunes 和 iCloud 备份。
使用 Elcomsoft Phone Viewer 进行文件系统分析
Elcomsoft Phone Viewer 不支持设备获取,但可以解析和帮助您查看使用 Elcomsoft iOS Forensic Toolkit、Elcomsoft Cloud eXtractor 或几乎任何其他能够获取 iOS 设备的工具提取的数据。
要查看以前使用 Elcomsoft iOS Forensic Toolkit 创建的文件系统图像,请按照以下步骤操作:
- 启动 Elcomsoft Phone Viewer 并选择适当的数据源。在我们的情况下,这是 iOS 设备图像:
选择数据源
- 选择要导入的文件和要解析的文物:
选择数据类型
- 等待提取过程完成:
提取过程
因此,您将获得设备的信息,以及分成多个类别的解析文物:
解析文物
现在,您可以轻松查看、过滤和导出可能对您的检查有兴趣的任何数据 - 您所需做的就是点击相应的图标。
摘要
取证工具对于检查员来说非常有帮助,因为它们不仅节省时间,而且使整个过程变得更加容易。然而,并非每个人都有足够大的预算来购买商业工具以获取 iOS 数据。虽然存在用于获取数据的免费工具,但支持可能有限,并且可能需要多次提取才能获得与商业工具相同数量的数据。
对于越狱设备,iOS 设备可以通过 SSH 连接到取证工作站进行实时检查,这是一些工具获取必要数据的方法。然而,这并不是推荐给新手移动取证的方法。出于这种目的,本章向您介绍了几种可用的 iOS 取证工具,并包括您需要遵循的步骤来执行获取和分析。
您应该进一步验证和了解可能作为调查一部分使用的每个工具。我们建议您获取具有已知数据的测试设备,以确保没有遗漏任何内容,证据没有被篡改,并且方法能够让您访问感兴趣的数据。
下一章将介绍 Android 取证,并涵盖 Android 平台的基本概念。
第二部分:Android 取证
本节将涵盖您需要了解的有关 Android 设备取证的一切。我们将从了解 Android 平台及其文件系统开始,然后涵盖设置、获取/提取和恢复的主题。我们还将使用开源工具查看 Android 恶意软件以及如何进行 Android 应用程序的逆向工程。
本章包括以下章节:
-
第七章,了解 Android
-
第八章,Android 取证设置和数据提取前技术
-
第九章,Android 数据提取技术
-
第十章,Android 数据分析和恢复
-
第十一章,Android 应用程序分析、恶意软件和逆向工程
第七章:理解 Android
在前几章中,我们介绍了 iOS 设备的详细信息,包括文件系统结构、关键文件、备份文件以及获取和分析方法。从本章开始,我们将专注于 Android 平台以及如何对 Android 设备进行取证。在进行取证调查时,对 Android 生态系统、安全约束、文件系统和其他功能有很好的理解将会很有用。掌握这些基础知识将有助于取证专家在进行调查时做出明智的决定。
本章我们将涵盖以下主题:
-
Android 的演变
-
Android 架构
-
Android 安全
-
Android 文件层次结构
-
Android 文件系统
Android 的演变
Android 是为触摸屏移动设备开发的基于 Linux 的移动操作系统。它由一家名为开放手机联盟(OHA)的公司联合开发,主要贡献者和商业营销商是谷歌。自首次发布以来,Android 操作系统已经有了显著的发展。Android 于 2008 年正式向公众发布,版本为 Android 1.0。随着 2009 年 Android 1.5 杯子蛋糕版本的发布,以甜点命名 Android 版本的传统诞生了。接下来的 10 年,版本名称也按字母顺序发布。然而,2019 年,谷歌宣布他们将结束基于甜点的命名,未来将使用数字顺序。最近的几年里,Android 版本更新频率减少到每年一次。最新的主要 Android 更新是 Android 11,这是谷歌于 2020 年 2 月 19 日宣布的第 11 个主要版本。
以下是撰写时的 Android 版本历史概述:
版本 | 版本名称 | 发布年份 |
---|---|---|
Android 1.0 | 苹果派 | 2008 年 |
Android 1.1 | 香蕉面包 | 2009 年 |
Android 1.5 | 杯子蛋糕 | 2009 年 |
Android 1.6 | 甜甜圈 | 2009 年 |
Android 2.0 | 松饼 | 2009 年 |
Android 2.2 | 冻酸奶 | 2010 年 |
Android 2.3 | 姜饼 | 2010 年 |
Android 3.0 | 蜂巢 | 2011 年 |
Android 4.0 | 冰淇淋三明治 | 2011 年 |
Android 4.1 | 果冻豆 | 2012 年 |
Android 4.4 | 奇巧 | 2013 年 |
Android 5.0 | 棒棒糖 | 2014 年 |
Android 6.0 | 棉花糖 | 2015 年 |
Android 7.0 | 牛轧糖 | 2016 年 |
Android 8.0 | 奥利奥 | 2017 年 |
Android 9.0 | 派 | 2018 年 |
Android 10.0 | Q | 2019 年 |
Android 11 | R | 2020 年 |
这种演变也极大地影响了 Android 的安全考虑以及取证技术的应用。例如,最初的 Android 版本没有全盘加密(FDE)机制来以加密格式存储设备内的数据。因此,相较于现在,取证人员从设备中提取数据要容易得多。随着每个 Android 版本的更新,越来越多的安全功能,如应用程序权限、受信任执行环境(TEE)和安全内核,已被添加以提高整个平台的安全性,但同时也使数据提取的过程变得更加复杂。我们将在本章的其他部分详细介绍这些安全功能。
现在我们了解了 Android 的历史和版本,接下来我们将在下一节中看一下 Android 的架构。
Android 架构
在处理安卓时,要有效地理解法医概念,你应该对安卓架构有基本的了解。就像计算机一样,任何与用户交互并执行复杂任务的计算系统都需要一个操作系统来有效地处理任务。这个操作系统(无论是桌面操作系统还是手机操作系统)负责管理系统的资源,为应用程序提供一种与硬件或物理组件交流以完成特定任务的方式。安卓目前是最流行的移动操作系统,旨在为移动设备提供动力。你可以在developer.android.com/about/android.html
了解更多信息。
作为开源操作系统,安卓以 Apache 许可证的形式发布其代码,这是众多开源许可证之一。实际上,这意味着任何人(尤其是设备制造商)都可以访问它,自由修改它,并根据任何设备的要求使用该软件。这是其广泛接受的主要原因之一。使用安卓的知名厂商包括三星、HTC、索尼和 LG。
与任何其他平台一样,安卓由一堆层次运行在另一堆层次之上。要理解安卓生态系统,有必要对这些层次是什么以及它们的作用有基本的了解。
以下图表总结了安卓软件堆栈中涉及的各个层:
安卓架构
此图像是基于安卓开源项目创建和共享的工作进行修改:https://developer.android.com/guide/platform
许可证:https://creativecommons.org/licenses/by/4.0/
这些层每个都执行支持特定操作系统功能的几个操作。每个层为其上面的层提供服务。让我们更详细地看一下。
Linux 内核层
安卓操作系统是建立在 Linux 内核之上的,谷歌对其进行了一些架构上的改变。选择 Linux 内核有几个原因。最重要的是,Linux 是一个可以轻松在不同硬件上编译的可移植平台。内核充当软件和设备上的硬件之间的抽象层。考虑一下相机的情况。当你使用设备上的相机按钮拍照时会发生什么?在某个时候,硬件指令(按下按钮)必须转换为软件指令(拍照并将其存储在相册中)。内核包含驱动程序来促进这个过程。当用户按下按钮时,指令传递到内核中相应的相机驱动程序,该驱动程序向相机硬件发送必要的命令,类似于在键盘上按键时发生的情况。简而言之,内核中的驱动程序控制着底层硬件。如安卓架构模型所示,内核包含与 Wi-Fi、蓝牙、通用串行总线(USB)、音频、显示等相关的驱动程序。
Linux 内核负责管理安卓的核心功能,如进程管理、内存管理、安全性和网络。在安全性和进程管理方面,Linux 是一个经过验证的平台。安卓已经利用现有的 Linux 开源操作系统来构建其生态系统的坚实基础。每个安卓版本都有不同版本的底层 Linux 内核。Oreo 安卓版本已知使用 Linux 内核 3.18 或 4.9,而 Pie 版本已知使用 Linux 内核 4.4、4.9 或 4.14。安卓 Q 版本的目标是 Linux 内核 4.9、4.14 或 4.19。实际的内核取决于个别设备。
硬件抽象层
设备硬件功能通过硬件抽象层(HAL)暴露给高级 Java 框架。HAL 由几个库模块组成,实现特定类型硬件组件的接口。这允许硬件供应商在不改变更高级别系统的情况下实现功能。
库
Android 架构中的下一层包括 Android 的本机库。这些库是用 C 或 C++编写的,帮助设备处理不同类型的数据。例如,SQLite 库用于存储和检索数据库中的数据。其他库包括媒体框架、WebKit、Surface Manager 和安全套接字库(SSL)。
媒体框架库充当提供服务给其他底层库的主要接口。WebKit 库提供 Web 浏览器中的网页,Surface Manager 库维护图形。在同一层中,我们有Android 运行时(ART)和核心库。ART 负责在 Android 设备上运行应用程序。术语运行时指的是从应用程序启动到关闭的时间。
Dalvik 虚拟机(DVM)
您在 Android 设备上安装的所有应用程序都是用 Java 编程语言编写的。当 Java 程序编译时,我们得到字节码。虚拟机(VM)是一个充当操作系统的应用程序,也就是说,可以在 Mac 上运行 Windows 操作系统的实例,反之亦然,使用 VM。Java 虚拟机(JVM)就是这样一个可以执行前面提到的字节码的 VM。但是 Android 5.0 之前的版本使用了称为 DVM 的东西来运行它们的应用程序。
DVM 运行 Dalvik 字节码,这是由Dalvik 可执行文件(DEX)编译器转换的 Java 字节码。因此,.class
文件使用dx
工具转换为dex
文件。与 Java 字节码相比,Dalvik 字节码更适合于低内存和低处理环境。此外,需要注意的是,JVM 的字节码由一个或多个.class
文件组成,取决于应用程序中存在的 Java 文件数量,但 Dalvik 字节码只由一个dex
文件组成。每个 Android 应用程序都运行自己的 DVM 实例。这是 Android 安全的关键方面,将在第八章中详细讨论,即Android 取证设置和数据提取技术。
以下图表提供了 Android 的 DVM 与 Java 的 JVM 之间的区别:
JVM 与 DVM
现在我们已经了解了 JVM 和 DVM 之间的基本区别,让我们快速看一下 ART。
ART
从 Android 5.0 版本的棒棒糖开始,Dalvik 被 ART 取代。Android 早期版本使用 Dalvik 的即时(JIT)编译(识别并动态编译频繁执行的操作为本机机器代码)。这些频繁使用的字节码的本机执行,称为跟踪,提供了显著的性能改进。
与 Dalvik 不同,ART 使用预编译(AOT)编译,即在安装时将整个应用程序编译为本机机器代码。这自动增加了应用程序的安装时间,但一个主要优点是这消除了 Dalvik 的解释和基于跟踪的 JIT 编译,从而提高了效率并减少了功耗。ART 使用一个名为dex2oat
的实用程序,它接受DEX
文件作为输入,并为目标设备生成一个编译的应用程序可执行文件。使用 ART,优化的 DEX(.odex)文件已被可执行和可链接格式(ELF)可执行文件取代。
Java API 框架层
应用程序框架是负责处理手机的基本功能的层,如资源管理,处理通话等。这是应用程序直接与设备通信的块。以下是应用程序框架层中的一些重要块:
-
电话管理器:此块管理所有语音通话。
-
内容提供者:此块管理不同应用程序之间的数据共享。
-
资源管理器:此块管理应用程序中使用的各种资源。
最终层是系统应用程序层,接下来将讨论这一层。
系统应用程序层
这是用户可以直接与设备交互的最顶层。有两种应用程序——预装应用程序和用户安装的应用程序。预装应用程序——如拨号器、网络浏览器和联系人——随设备一起提供。用户安装的应用程序可以从不同的地方下载,如 Google Play 商店、亚马逊市场等。您在手机上看到的一切(联系人、邮件、相机等)都是应用程序。
到目前为止,我们已经了解了 Android 架构和重要的构建块。现在我们将深入了解 Android 操作系统中固有的一些安全功能。
Android 安全
Android 的设计专注于安全。作为一个平台,Android 提供并强制执行某些功能,以通过多层安全保护移动设备上的用户数据。有一些安全默认设置可以保护用户,也有一些功能可以被开发社区利用来构建安全的应用程序。作为法医调查员,了解 Android 安全的内部情况至关重要,因为它有助于确定在特定情况下应用的最佳技术,某些技术的技术限制等。
接下来的几节将帮助我们更好地了解 Android 的安全功能和提供。
有关 Android 安全的详细说明可在source.android.com/security/
找到。
安全内核
内核是任何操作系统安全的核心。通过选择多年来发展成为可信平台的 Linux,Android 建立了非常坚实的安全基础。Linux 内核固有的大多数安全功能都会自动被 Android 采用。例如,Linux 的基于用户的权限模型实际上对 Android 非常有效。如前所述,Linux 内核中内置了大量特定代码。随着每个 Android 版本的发布,内核版本也发生了变化。以下表格显示了 Android 版本及其对应的内核版本:
Android 版本 | Linux 内核版本 |
---|---|
1 | 2.6.25 |
1.5 | 2.6.27 |
1.6 | 2.6.29 |
2.2 | 2.6.32 |
2.3 | 2.6.35 |
3.0 | 2.6.36 |
4.0 | 3.0.1 |
4.1 | 3.0.31 |
4.2 | 3.4.0 |
4.2 | 3.4.39 |
4.4 | 3.8 |
5.0 | 3.16.1 |
6.0 | 3.18.1 |
7.0 | 4.4.1 |
8.0 | 4.10 |
9.0 | 4.4, 4.9 和 4.14 |
10.0 | 4.9, 4.14 和 4.19 |
Linux 内核自动为 Android 平台带来了一些固有的安全功能,例如以下功能:
-
基于用户的权限模型
-
运行进程的隔离(应用程序沙盒)
-
安全进程间通信(IPC)
我们现在将了解每个这些功能。
权限模型
如下截图所示,任何 Android 应用程序必须获得用户的权限才能访问敏感功能,例如互联网、拨号器等。这为用户提供了提前了解应用程序访问设备上哪些功能的机会。简而言之,它需要用户的许可才能执行任何恶意活动(窃取数据,破坏系统等)。
这个模型帮助用户防止攻击,但如果用户不知情并授予了很多权限,就会陷入麻烦(记住——当涉及在任何设备上安装恶意软件时,最薄弱的环节始终是用户)。
安卓中的权限模型
直到安卓 6.0 之前,用户需要在安装时授予权限。用户必须接受所有权限或者不安装应用程序。但是,从安卓 6.0 开始,用户在应用程序运行时授予权限。这种新的权限系统还允许用户更多地控制应用程序的功能,允许用户选择性地授予权限。例如,用户可以拒绝某个应用程序访问他们的位置,但允许访问互联网。用户可以随时通过转到应用程序的设置屏幕来撤销权限。从取证的角度来看,这意味着可以从设备中提取的信息类型不仅取决于设备和安装的应用程序,还取决于用户配置的权限。
应用程序沙箱
在 Linux 系统中,每个用户被分配一个唯一的用户标识符(UID),并且用户被隔离开来,以便一个用户无法访问另一个用户的数据。然而,特定用户下的所有应用程序都以相同的权限运行。同样,在安卓中,每个应用程序都作为一个独特的用户运行。换句话说,每个应用程序都被分配一个 UID 并作为一个独立的进程运行。这个概念确保了内核级别的应用程序沙箱。内核通过利用现有的 Linux 概念,如 UID 和组标识符(GID),来管理应用程序之间的安全限制。如果一个应用程序试图执行一些恶意操作——比如读取另一个应用程序的数据——这是不允许的,因为应用程序没有用户权限。因此,操作系统保护应用程序免受访问另一个应用程序数据的侵害。
安全的 IPC
安卓提供了安全的 IPC,通过它,一个应用程序中的一个活动可以向同一个或不同应用程序中的另一个活动发送消息。为了实现这一点,安卓提供了 IPC 机制:意图、服务、内容提供程序等。这对为安卓平台编写第三方应用程序的开发人员更为相关。在幕后,取证工具利用其中一些概念来获取设备信息。
应用程序签名
所有安装的应用程序都必须经过数字签名。开发人员只有在对应用程序进行签名后才能将其放置在谷歌的 Play 商店中。应用程序签名所使用的私钥由开发人员持有。使用相同的密钥,开发人员可以为他们的应用程序提供更新,在应用程序之间共享数据等。未经签名的应用程序如果尝试安装,将被谷歌 Play 或安卓设备上的软件包安装程序拒绝。在安卓 8.0 及以上版本中,用户必须导航到“安装未知应用程序”设置才能运行未经签名的应用程序,如下图所示:
在安卓系统中安装未知应用程序屏幕
现在我们对数字签名应用程序有了一些基本知识,让我们来看看安卓中的一个安全功能。
安全增强型 Linux(SELinux)
SELinux 是在 Android 4.3 中引入的安全功能,并在 Android 5.0 中得到全面执行。在此添加之前,Android 安全性是基于自主访问控制(DAC)的,这意味着应用程序可以请求权限,用户可以授予或拒绝这些权限。因此,恶意软件可以通过获得这些权限在手机上制造混乱。但 SE Android 使用强制访问控制(MAC),确保应用程序在隔离的环境中工作。因此,即使用户安装了恶意应用程序,恶意软件也无法访问操作系统并损坏设备。SELinux 用于在所有进程上强制执行 MAC,包括以 root 权限运行的进程。在 SELinux 中,任何未明确允许的操作默认都被拒绝。SELinux 可以在两种全局模式中运行:宽容模式,记录权限拒绝但不强制执行;和强制模式,记录并强制执行权限拒绝。有关 SELinux 的更多详细信息,请访问source.android.com/security/selinux/concepts
。
FDE
随着 Android 6.0 Marshmallow,Google 规定大多数设备必须使用 FDE,前提是硬件符合一定的最低标准。加密是将数据使用秘密密钥转换为密文的过程。在 Android 设备上,FDE 指的是使用秘密密钥加密所有用户数据的过程。然后,该密钥由用户设置的个人识别号码(PIN)/图案/密码加密。一旦设备加密,所有用户创建的数据在写入磁盘之前会自动加密,并且所有读取操作在返回给调用进程之前会自动解密数据。Android 中的 FDE 仅适用于嵌入式多媒体卡(eMMC)和类似的将自身呈现为块设备的闪存设备。
从 Android 7.x 开始,Google 决定将加密功能从 FDE 转移到基于文件的加密(FBE)。在 FBE 中,不同的文件使用不同的密钥进行加密。通过这样做,这些文件可以独立访问,无需解密完整分区。因此,系统现在可以在用户解锁手机之前显示打开通知或访问与引导相关的文件。
Android Keystore
Android Keystore 用于保护敏感的加密密钥,防止未经授权的访问。存储在 Keystore 中的密钥可用于执行加密操作,但永远无法从 Keystore 外部提取。硬件支持的 Keystore 在硬件级别提供安全性,即使操作系统被 compromise,硬件模块中的密钥仍然是安全的。
TEE
TEE 是一个隔离的区域(通常是一个单独的微处理器),旨在保证其中存储的数据的安全性,并以完整性执行代码。移动设备上的主处理器被视为不可信任,不能用于存储秘密数据(如加密密钥)。因此,TEE 专门用于执行此类操作,并且运行在主处理器上的软件将需要使用秘密数据的任何操作委托给 TEE 处理器。
验证启动
验证启动试图确保在 Android 设备上执行的所有代码来自合法来源,而不是来自攻击者或欺诈者。它建立了完整的信任链,并防止任何其他操作系统的侧加载。在设备启动期间,每个阶段在移交执行之前都会验证下一个阶段的完整性和真实性。
我们现在将研究 Android 设备上可用的各个分区和文件系统。
Android 文件层次结构
为了对任何系统(桌面或移动设备)进行取证分析,了解底层文件层次结构是很重要的。对 Android 如何在文件和文件夹中组织数据有基本的了解,有助于取证分析师将研究范围缩小到特定问题。与任何其他操作系统一样,Android 使用了几个分区。本章提供了一些最重要分区和其中存储的内容的见解。
值得再次提到的是,Android 使用 Linux 内核。因此,如果您熟悉类 Unix 系统,您将非常了解 Android 中的文件层次结构。对于那些对 Linux 模型不太熟悉的人,这里有一些基本信息:在 Linux 中,文件层次结构是一个单一的树,树的顶部被表示为/(称为根)。这与在驱动器中组织文件的概念(如 Windows)不同。无论文件系统是本地还是远程,它都将存在于根目录下。
Android 文件层次结构是现有 Linux 层次结构的定制版本。根据设备制造商和底层 Linux 版本,这个层次结构的结构可能有一些微不足道的变化。以下是大多数 Android 设备共有的重要文件夹列表。列出的一些文件夹只有通过 root 访问才能看到。Rooting 是在 Android 设备上获得特权访问的过程。有关 rooting 和执行 adb 命令(在下面的列表中显示)的更多详细信息在第八章中有详细介绍,Android 取证设置和数据提取前技术:
-
/boot:顾名思义,这个分区包含了手机启动所需的信息和文件。它包含了内核和随机存取存储器(RAM)磁盘,因此没有这个分区,手机无法启动其进程。存储在 RAM 中的数据价值丰富,在取证获取过程中应该被捕获。
-
/system:这个分区包含除了内核和 RAM 磁盘之外的系统相关文件。这个文件夹不应该被删除,否则设备将无法启动。可以使用以下命令查看此分区的内容:
/system 分区
-
/recovery:这个分区设计用于备份目的,并允许设备启动到恢复模式。在恢复模式下,您可以找到修复手机安装的工具。
-
/data:这是包含每个应用程序数据的分区。大部分属于用户的数据,如联系人、短信和拨打的号码,都存储在这个文件夹中。从取证的角度来看,这个文件夹非常重要,因为它包含有价值的数据。可以使用以下命令查看数据文件夹的内容:
/data 分区
-
/cache:这是用于存储频繁访问的数据和一些日志以加快检索速度的文件夹。/cache 分区对于取证调查也很重要,因为这里的数据可能不再存在于/data 分区中。
-
/misc:顾名思义,这个文件夹包含有关杂项设置的信息。这些设置主要定义设备的状态,即开/关。有关硬件设置、USB 设置等信息可以从这个文件夹中访问。
-
/sdcard:这是保存在安全数字(SD)卡上的所有信息的分区。它很有价值,因为它可能包含图片、视频、文件、文档等信息。
现在我们已经了解了 Android 文件层次结构并查看了其中的重要文件夹,让我们在下一节看看文件系统。
Android 文件系统
了解文件系统是取证方法论的一个重要部分。了解文件系统的属性和结构在取证分析过程中非常有用。文件系统是指数据存储、组织和从卷中检索的方式。基本安装可能基于一个分成多个分区的卷;在这里,每个分区可以由不同的文件系统管理。在 Linux 中,Android 使用挂载点,而不是驱动器(即C:
或E:
)。
在 Linux 中,挂载是将附加文件系统连接到计算机当前可访问的文件系统的行为。在 Linux 中,文件系统不是通过驱动器名称访问的,而是组织成一个多级层次结构,顶部有一个名为root
的目录。每当挂载时,每个新文件系统都添加到这个单一的文件系统树中。
无论文件系统存在于本地设备还是远程设备上都没有任何区别。一切都在以root
开始的单一层次结构中。每个文件系统都定义了管理卷中文件的规则。根据这些规则,每个文件系统提供了不同的文件检索速度、安全性、大小等。Linux 使用多个文件系统,Android 也是如此。从取证的角度来看,了解 Android 使用的文件系统以及识别对调查具有重要意义的文件系统是很重要的。例如,存储用户数据的文件系统对我们来说是首要关注的,而不是用于启动设备的文件系统。
查看 Android 设备上的文件系统
Android 内核支持的文件系统可以通过检查proc
文件夹中的filesystems
文件的内容来确定。可以使用# cat /proc/filesystems
命令查看此文件的内容:
Android 设备上的文件系统
在上述输出中,第一列告诉我们文件系统是否挂载在设备上。具有nodev
属性的文件系统未挂载在设备上。
第二列列出了设备上存在的所有文件系统。简单的mount
命令显示设备上可用的不同分区,如下所示:
Android 设备上的分区
接下来,让我们看看 Android 上常见的文件系统。
在 Android 上发现的常见文件系统
Android 中存在的文件系统主要可以分为三个主要类别,如下所示:
-
Flash 存储器文件系统
-
基于媒体的文件系统
-
伪文件系统
让我们详细看看每一个。
Flash 存储器文件系统
Flash 存储器是一种持续供电的非易失性存储器(NVM),在没有电源供应的情况下保留数据。Flash 存储器可以按块擦除和重新编程。虽然支持的文件系统因设备和底层 Linux 内核而异,但常见的 Flash 存储器文件系统如下:
-
扩展文件分配表(exFAT)是微软专有的文件系统,用于闪存驱动器,如 USB 存储设备和 SD 卡。由于许可要求,它不是标准 Linux 内核的一部分。但仍然有一些制造商为该文件系统提供支持。
-
Flash 友好文件系统(F2FS)于 2013 年 2 月发布,以支持运行 Linux 3.8 内核的三星设备。F2FS 依赖于优化 NAND Flash 存储器的日志结构方法。离线支持功能是该文件系统的一个亮点,尽管它仍然是临时的并且正在更新。
-
另一个闪存文件系统 2(YAFFS2)是一个开源的单线程文件系统,于 2002 年发布。它主要设计用于处理 NAND 闪存时的速度。YAFFS2 利用带外(OOB),这在取证获取时通常无法正确捕获或解码,使得分析变得困难。我们将在第九章中进一步讨论这个问题,安卓数据提取技术。YAFFS2 曾经是最受欢迎的版本,并且仍然广泛用于安卓设备。YAFFS2 是一个日志结构的文件系统。即使在突然断电的情况下,数据完整性也得到了保证。2010 年,有一则公告称在 Gingerbread 之后的版本中,设备将从 YAFFS2 转移到第四扩展文件系统(EXT4)。目前,YAFFS2 不受新内核版本的支持,但某些手机制造商可能仍然继续支持它。
-
稳健文件系统(RFS)支持三星设备上的 NAND 闪存。RFS 可以总结为文件分配表 16(FAT16)或 FAT32 文件系统,通过事务日志启用日志记录。许多用户抱怨三星应该坚持使用 EXT4。RFS 已知会导致 Android 功能的延迟。
媒体为基础的文件系统是接下来的一个主题。
媒体为基础的文件系统
以下是一些安卓设备支持的媒体为基础的文件系统。
扩展文件系统(EXT)于 1992 年专门为 Linux 内核引入,是最早的文件系统之一,它使用了虚拟文件系统。EXT2、EXT3 和 EXT4 是随后的版本。EXT3 相对于 EXT2 的主要优势是日志记录。使用 EXT3,如果出现意外关机,就不需要验证文件系统。EXT4 文件系统随着移动设备实现双核处理器而变得重要。YAFFS2 文件系统在双核系统上已知存在瓶颈。在安卓的 Gingerbread 版本中,YAFFS 文件系统被替换为 EXT4。
以下是三星 Galaxy 手机上使用 EXT4 的挂载点:
/dev/block/mmcblk0p9 /system ext4 ro,noatime,barrier=1,data=ordered 0 0
/dev/block/mmcblk0p3 /efs ext4 rw,nosuid,nodev,noatime,barrier=1,journal_async_commit,data=ordered 0 0
/dev/block/mmcblk0p8 /cache ext4 rw,nosuid,nodev,noatime,barrier=1,journal_async_commit,data=ordered 0 0
/dev/block/mmcblk0p12 /data ext4 rw,nosuid,nodev,noatime,barrier=1,journal_async_commit,data=ordered,n oauto_da_alloc,discard 0 0
虚拟文件分配表(VFAT)是对 FAT16 和 FAT32 文件系统的扩展。大多数安卓设备支持微软的 FAT32 文件系统。它被几乎所有主要操作系统支持,包括 Windows、Linux 和 macOS。这使得这些系统能够轻松地读取、修改和删除安卓设备的 FAT32 部分上的文件。大多数外部 SD 卡都是使用 FAT32 文件系统格式化的。
观察以下输出,显示了/sdcard
和/secure/asec
挂载点使用 VFAT 文件系统:
安卓中的挂载命令输出
最后一个类别是伪文件系统。
伪文件系统
伪文件系统,顾名思义,不是实际的文件,而是文件的逻辑分组。以下是安卓中一些重要的伪文件系统:
-
根文件系统(
rootfs
)是安卓的主要组成部分之一,包含了启动设备所需的所有信息。当设备启动引导过程时,它需要访问许多核心文件,因此会挂载根文件系统。如前面的mount
命令行输出所示,这个文件系统被挂载在/
(root
文件夹)上。因此,这是所有其他文件系统逐渐挂载的文件系统。如果这个文件系统损坏了,设备就无法启动。 -
sysfs
文件系统挂载了/sys
文件夹,其中包含了设备配置的信息。以下输出显示了安卓设备中sys
目录下的各种文件夹:
安卓系统中/sys 目录下的文件夹
由于这些文件夹中的数据大多与配置相关,这对于取证调查员通常并不是非常重要。但在某些情况下,我们可能需要检查手机上是否启用了特定设置,并在这种情况下分析这个文件夹可能是有用的。
请注意,每个文件夹都包含大量文件。通过取证获取数据是确保在检查过程中数据不被更改的最佳方法。
devpts
文件系统提供了一个接口,用于在安卓设备上的终端会话。它被挂载在/dev/pts
上。每当建立一个终端连接时,例如当adb
shell 连接到安卓设备时,一个新的节点会在/dev/pts
下创建。以下是当adb
shell 连接到设备时显示的输出:
shell@Android:/ $ ls -l /dev/pts ls -l /dev/pts
crw------- shell shell 136, 0 2013-10-26 16:56 0
-
cgroup
文件系统代表控制组。安卓设备使用这个文件系统来跟踪它们的任务。它们负责聚合任务并跟踪它们。这些数据通常在取证分析过程中并不是非常有用。 -
proc
文件系统包含有关内核数据结构、进程和其他系统相关信息的信息,存储在/proc
目录中。例如,/sys
目录包含与内核参数相关的文件。同样,/proc/filesystems
显示设备上可用文件系统的列表。以下命令显示了设备的中央处理器(CPU)的所有信息:
在安卓设备上运行 cpuinfo 命令的输出。
同样,当您遍历这些文件时,还有许多其他有用的文件可以提供有价值的信息。
tmpfs
文件系统是设备上的临时存储设施,它将文件存储在 RAM(易失性内存)中。使用 RAM 的主要优势是更快的访问和检索。但一旦设备重新启动或关闭,这些数据将不再可访问。因此,对于取证调查员来说,在设备重新启动之前检查 RAM 中的数据,或者通过 RAM 获取方法提取数据是很重要的。
今天的取证工具可以轻松地挂载这些文件系统,并在图形用户界面(GUI)屏幕上显示内容,从而使取证调查员能够轻松地浏览和解析文件。在安卓取证的早期阶段,调查员通常需要运行一系列 Linux 或 Windows 命令来格式化和查看这些文件系统。
总结
在本章中,我们涵盖了安卓操作系统的基本特性、文件系统和其他在取证调查中有用的细节。我们了解了内置在安卓中的有趣的安全功能。与 iOS 不同,安卓存在多个变体,因为许多设备运行安卓操作系统,每个设备可能具有不同的文件系统和独特的特性。安卓是开放和可定制的事实也改变了数字取证的格局。这些知识将有助于理解取证获取技术。
在下一章中,我们将讨论如何在进行分析之前设置取证工作站。
第八章:Android 取证设置和数据提取前技术
在上一章中,我们介绍了 Android 架构、安全功能、文件系统和其他功能的基础知识。在开始审查之前建立一个完善的取证环境非常重要,因为这可以确保数据在您作为审查员的控制下得到保护。本章将解释建立数字取证审查环境的过程以及需要考虑的事项。在整个取证过程中,保持对取证环境的控制至关重要;这可以防止引入可能影响取证调查的污染物。
本章将涵盖以下主题:
-
为 Android 建立取证环境
-
连接 Android 设备到工作站
-
屏幕锁定绕过技术
-
获取 root 权限
为 Android 建立取证环境
作为取证员,在调查过程中可能会遇到各种手机。因此,有必要在基础环境上建立一个基本环境,以满足需求。同时,您始终保持对环境的完全控制以避免任何意外情况。建立适当的实验室环境是取证过程的重要组成部分。Android 取证设置通常包括以下步骤:
-
从一个全新或取证上的计算机环境开始。这意味着系统上要么没有其他数据,要么以一种方式包含,以防止其污染当前的调查。
-
安装连接到设备所需的基本软件。Android 取证工具和方法可以在 Windows、Linux 和 macOS 平台上运行。
-
获取设备访问权限。您必须能够启用设置或绕过设置,以允许从 Android 设备中提取数据。
-
使用本章和第九章《Android 数据提取技术》中定义的方法向设备发出命令。
以下部分提供了设置基本 Android 取证工作站的指导。
安装软件
Android 软件开发工具包(SDK)帮助开发世界构建、测试和调试在 Android 上运行的应用程序。Android SDK 附带 Android Studio,这是官方的集成开发环境(IDE),用于开发 Android 应用程序。Android Studio 提供了有价值的文档和其他工具,在调查 Android 设备时可以提供很大帮助。或者,您也可以仅下载平台工具,这是 Android SDK 的组件,包括可以与 Android 平台交互的工具,如 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 约为 718 MB,而且相对较重,后者只有 20 MB。
在 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:\
文件夹中。 -
打开目录(
C:\platform-tools
),注意列出了以下工具:
Android 平台工具
这完成了基本的 Android 工具安装。如果您安装了完整版的 Android Studio 版本,您仍然应该在新安装的 Android 目录下看到平台工具文件夹。
创建 Android 虚拟设备
使用 Android Studio,您可以创建一个 Android 虚拟设备(AVD),也称为模拟器,开发人员在创建新应用程序时经常使用它;然而,从法医角度来看,模拟器也具有重要意义。在尝试了解应用程序在设备上的行为和执行方式时,模拟器非常有用。这在确认法医调查中发现的某些发现时可能会有所帮助。
此外,在运行在较旧平台上的设备上工作时,可以为相同平台设计一个模拟器。此外,在在真实设备上安装法医工具之前,可以使用模拟器来了解法医工具的工作方式以及如何更改 Android 设备上的内容。要在 Windows 工作站上创建一个新的 AVD,按照以下步骤进行:
- 打开 Android Studio,导航到工具 | AVD Manager。Android 虚拟设备管理器窗口如下截图所示:
Android 虚拟设备管理器
- 单击创建虚拟设备以创建一个新的虚拟设备。在随后的屏幕中,选择适当的硬件、系统映像、API 级别、AVD 名称等,然后继续。例如,以下截图显示选择了 Android Pie:
虚拟设备配置
-
设备成功创建后会显示确认消息。现在,选择 AVD 并单击播放按钮。
-
这应该启动模拟器。请注意,这可能需要几分钟,甚至更长时间,这取决于工作站的 CPU 和 RAM。模拟器在系统上消耗大量资源。成功启动后,AVD 将运行,如下截图所示:
Android 模拟器
从法医角度来看,分析师和安全研究人员可以利用模拟器的功能来了解文件系统、数据存储等。在模拟器上工作时创建的数据存储在名为android
的文件夹中的主目录中。例如,在我们的示例中,我们之前创建的 Pixel_XL_API_28 模拟器的详细信息存储在C:\Users\Rohit\.android\avd\Pixel_XL_API_28.avd
下。
在此目录下存在各种文件,以下是法医分析师感兴趣的文件:
-
cache.img
:这是/cache
分区的磁盘映像(记住我们在第七章中讨论过安卓设备的/cache
分区)。 -
sdcard.img
:这是 SD 卡分区的磁盘映像。 -
Userdata-qemu.img
:这是/data
分区的磁盘映像。/data
分区包含有关设备用户的宝贵信息。
现在我们已经了解了设置环境的步骤,让我们将安卓设备连接到取证工作站。
将安卓设备连接到工作站
使用开源工具对安卓设备进行取证需要将设备连接到取证工作站。任何设备的取证都应该在取证工作站上进行。这意味着工作站严格用于取证,而不是个人使用。
请注意,每次将设备插入计算机时,都可能对设备进行更改;您必须始终全面控制与安卓设备的所有交互。
您应该按照以下步骤成功地将设备连接到工作站。请注意,写保护可能会阻止成功获取设备,因为可能需要向设备发送命令以获取信息。在尝试在真实证据上进行之前,应该在测试设备上验证所有以下步骤。
识别设备电缆
安卓设备的物理 USB 接口允许它连接到计算机共享数据,如歌曲、视频和照片。这个 USB 接口可能会因制造商和设备而有所不同。例如,一些设备使用迷你 USB,而另一些使用微型 USB 和 USB Type C。除此之外,一些制造商使用自己的专有格式,如 EXT-USB、EXT 微型 USB 等。获取安卓设备的第一步是确定需要什么样的设备电缆。
有不同类型,如迷你 USB、微型 USB 和其他专有格式。以下是最常用连接器类型的简要描述:
连接器类型 | 描述 |
---|---|
Mini - A USB | 大约 7 x 3 毫米大小,其中一个长边的两个角被抬起。 |
Micro - B USB | 大约 6 x 1.5 毫米大小,两个角被切掉形成梯形。 |
同轴 | 它有一个中间竖起的圆孔。这个类别有不同大小,直径从 2 到 5 毫米不等。广泛用于诺基亚型号。 |
D 子迷你 | 它呈矩形形状,两个圆角。矩形的长度各不相同,但高度始终为 1.5 到 2 毫米。主要由三星和 LG 设备使用。 |
接下来,让我们快速看一下如何安装设备驱动程序。
安装设备驱动程序
为了正确识别设备,计算机可能需要安装某些驱动程序。没有必要的驱动程序,计算机可能无法识别并与连接的设备一起工作。问题在于,由于安卓允许制造商进行修改和定制,没有适用于所有安卓设备的通用驱动程序。每个制造商都会编写自己的专有驱动程序并通过互联网分发,因此重要的是识别需要安装的特定设备驱动程序。当然,一些安卓取证工具包(我们将在接下来的章节中讨论)确实带有一些通用驱动程序或一组最常用的驱动程序;它们可能无法与所有型号的安卓手机一起使用。
一些 Windows 操作系统可以在设备插入后自动检测并安装驱动程序,但更多时候会失败。所有制造商的设备驱动程序都可以在它们各自的网站上找到。
访问连接的设备
如果您还没有这样做,使用 USB 电缆将解锁的安卓设备直接连接到计算机。安卓设备将显示为新的驱动器,您将能够访问外部存储上的文件。如果设备被锁定,那么在这一点上,您将无法访问任何文件,并且可能需要使用“打开 USB 存储”选项,该选项可以在手机上启用,如下面的屏幕截图所示:
安卓 4.1 版本中的 USB 大容量存储
对于一些安卓手机(尤其是 HTC),当使用 USB 电缆连接时,设备可能会暴露多个功能。例如,如下面的屏幕截图所示,当连接 HTC 设备时,它会显示一个具有四个选项的菜单。默认选择是仅充电。当选择磁盘驱动器选项时,它会被挂载为磁盘驱动器:
HTC 手机 USB 选项
当设备被挂载为磁盘驱动器时,您将能够访问设备上的 SD 卡。从取证的角度来看,SD 卡具有重要价值,因为它可能包含对调查重要的文件;然而,存储在/data/data
下的核心应用数据将保留在设备上,并且无法通过这些方法访问。
安卓调试桥
被认为是安卓取证中最关键的组件之一,安卓调试桥(ADB)是一个命令行工具,允许您与安卓设备进行通信和控制。我们将在接下来的章节中详细了解 ADB;现在,我们将专注于对 ADB 的基本介绍。您可以在/platform-tools/
下访问 ADB 工具。
在我们讨论 ADB 之前,我们需要了解USB 调试选项。
USB 调试
此选项的主要功能是在安装了安卓 SDK 的工作站和安卓设备之间启用通信。在三星手机上,您可以在设置|开发者选项下访问此选项,如下面的屏幕截图所示:
三星 S8 设备中的 USB 调试选项
其他安卓手机可能有不同的环境和配置功能。您可能需要通过访问构建模式来强制启用开发者选项选项。
然而,从 Android 4.2 开始,开发者选项菜单被隐藏起来,以确保用户不会意外启用它。要启用它,进入设置|关于手机,然后点击构建号字段七次。之后,开发者选项将在设置菜单中可用。在 Android 4.2.2 之前,启用此选项是与设备通过 ADB 通信的唯一要求;然而,从 Android 4.2.2 开始,Google 引入了安全的 USB 调试选项。此功能只允许用户明确授权的主机使用 ADB 连接到设备。
因此,当您通过 USB 将设备连接到新的工作站以访问 ADB 时,您需要首先解锁设备,并通过在确认窗口中按下 OK 来授权访问,如下面的屏幕截图所示。如果选中了“始终允许此计算机”,设备将不会在将来提示授权:
安全的 USB 调试
当选择 USB 调试选项时,设备将在后台运行adb 守护程序(adbd
),并将不断寻找 USB 连接。该守护程序通常在非特权 shell 用户帐户下运行,因此不会提供对完整数据的访问;但是,在 rooted 手机上,adbd
将在 root 帐户下运行,因此可以访问所有数据。不建议您 root 设备以获得完全访问权限,除非所有其他取证方法均失败。如果选择 root Android 设备,则必须在尝试在真实证据上进行之前对方法进行充分记录和测试。Rooting 将在本章末讨论。
在安装了 Android SDK 的工作站上,adbd
将作为后台进程运行。同样,在同一工作站上,可以通过发出adb
命令从 shell 调用的客户端程序也将运行。当启动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
命令之前执行和理解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 手机上,您可以通过导航到设置|显示|屏幕超时来访问此设置。
除此之外,如第一章中所述,移动取证简介,需要将设备与网络隔离,以确保远程擦除选项不适用于设备。安卓设备管理器允许远程擦除或锁定手机。这可以通过登录配置在手机上的谷歌账户来完成。关于此的更多细节将在以下部分提供。如果安卓设备未设置允许远程擦除,只能使用安卓设备管理器锁定设备。市场上还有一些移动设备管理(MDM)软件产品,允许用户远程锁定或擦除安卓设备。其中一些可能不需要在设备上启用特定设置。
使用可用的远程擦除软件,可以删除所有数据,包括电子邮件、应用程序、照片、联系人和其他文件,以及存储在 SD 卡上的文件。为了使设备与网络隔离,您可以将设备置于飞行模式并禁用 Wi-Fi 作为额外预防措施。启用飞行模式并禁用 Wi-Fi 效果很好,因为设备将无法通过蜂窝网络进行通信,也无法通过 Wi-Fi 访问。从手机中取出 SIM 卡也是一个选择,但这并不能有效地阻止设备通过 Wi-Fi 或其他蜂窝网络进行通信。要将设备置于飞行模式,按住关机按钮并选择飞行模式。
所有这些步骤都可以在安卓设备未锁定时完成;然而,在调查过程中,我们经常遇到已锁定的设备。因此,了解如何绕过安卓设备上启用的锁定代码是很重要的。
屏幕锁定绕过技术
由于用户意识的增加和功能的便利性,使用密码选项锁定安卓设备的使用量呈指数级增长。这意味着在法证调查中绕过设备的屏幕锁定变得越来越重要。迄今为止讨论的屏幕锁定绕过技术的适用性取决于情况。请注意,其中一些方法可能导致我们对设备进行更改。确保您在非证据性安卓设备上测试和验证所有列出的步骤。您必须获得授权对设备进行必要的更改,记录所有采取的步骤,并能够描述采取的步骤,如果需要法庭证词。
目前,安卓提供了三种屏幕锁定机制。虽然有一些设备提供了语音锁定、面部识别锁定和指纹锁定选项,但我们将限制讨论以下三种选项,因为这些是所有安卓设备上最广泛使用的:
-
图案锁定:用户在手机上设置一个图案或设计,必须绘制相同的图案才能解锁设备。安卓是第一款引入图案锁定的智能手机。
-
PIN 码:这是最常见的锁定选项,在许多手机上都可以找到。PIN 码是一个需要输入的四位数字,用于解锁设备。
-
密码:这是一个包含字母和数字的密码。与需要四位数字的 PIN 码不同,包含字母和数字的密码更加安全。
以下部分详细介绍了一些绕过这些安卓锁定机制的技术。根据情况,这些技术可能有助于调查人员绕过屏幕锁定。
使用 ADB 绕过屏幕锁定
如果 Android 设备上似乎启用了 USB 调试,最好利用它通过 USB 连接与adb
连接,如本章前面讨论的那样。您应该将设备连接到取证工作站并发出adb
设备命令。如果设备出现,这意味着 USB 调试已启用。如果 Android 设备被锁定,您必须尝试绕过屏幕锁定。当 USB 调试启用时,以下两种方法可能允许您绕过屏幕锁定。
删除 gesture.key 文件
删除gesture.key
文件将删除设备上的图案锁定;然而,重要的是要注意,这将永久改变设备,因为图案锁已经消失。如果您正在进行秘密行动,应该考虑这一点。以下显示了该过程的执行方式:
-
使用 USB 电缆将设备连接到取证工作站(在我们的示例中是 Windows 机器)。
-
打开命令提示符并执行以下指令:
adb.exe shell
cd /data/system rm gesture.key
- 重新启动设备。如果图案锁仍然出现,只需绘制任意设计,设备应该可以轻松解锁。
此方法仅在设备已获取 root 权限时有效。此方法可能在未获取 root 权限的设备上无法成功。未经适当授权不应对 Android 设备进行 root 操作,因为这会改变设备。
更新 settings.db 文件
要更新settings.db
文件,请按以下步骤操作:
-
使用 USB 电缆将设备连接到取证工作站。
-
打开命令提示符并执行以下操作:
/data/data/com.android.providers.settings/databases sqlite3 settings.db
:
-
退出并重新启动设备。
-
Android 设备应该是解锁的。如果没有解锁,请尝试按照前面解释的方法删除
gesture.key
。
我们将在下一节中查看恢复模式和 ADB 连接。
检查修改后的恢复模式和 ADB 连接
在 Android 中,恢复是指专用分区,恢复控制台位于其中。恢复的两个主要功能是删除所有用户数据和安装更新。例如,当您恢复出厂设置手机时,恢复启动并删除所有数据。同样,当要在手机上安装更新时,就在恢复模式下进行。
有许多热心的 Android 用户通过修改后的恢复模块安装自定义 ROM。这个修改后的恢复模块主要用于简化安装自定义 ROM 的过程。恢复模式可以通过不同的方式访问,具体取决于设备制造商;关于哪种方法适用于哪种制造商的设备的信息在互联网上很容易找到。通常,这是通过同时按下不同的键来完成的,例如音量按钮和电源按钮。一旦进入恢复模式,将设备连接到工作站并尝试访问adb
连接。如果设备的恢复模式没有被修改,您可能无法访问adb
连接。设备的修改后的恢复版本向用户提供不同的选项,如下图所示:
接下来,我们将看到如何刷入恢复分区。
刷入新的恢复分区
有机制可用于使用修改后的镜像刷入 Android 设备的恢复分区。fastboot 实用程序简化了这一过程。Fastboot 是一个诊断协议,随 SDK 软件包一起提供,主要用于通过 USB 连接从主机计算机修改闪存文件系统。为此,您需要在启动加载程序模式下启动设备,其中只执行最基本的硬件初始化。
一旦在设备上启用了协议,它将通过命令行接收到的特定一组命令,这些命令是通过 USB 电缆发送的。刷新或使用存储在计算机上的二进制映像重写分区是允许的一种命令。刷新恢复后,将设备引导到恢复模式,挂载/data
和/system
分区,并使用adb
删除gesture.key
文件。重新启动手机,您应该能够绕过屏幕锁定;但是,这仅在设备引导加载程序已解锁时才有效。此外,刷新会永久更改设备。您可以使用 fastboot boot
命令临时引导到恢复映像以删除密钥文件,而不会永久更改恢复分区。
使用自动化工具
市场上有几种用于解锁 Android 设备的自动化解决方案。商业工具,如 Cellebrite 和 XRY,能够绕过屏幕锁定,但大多数工具需要启用 USB 调试。现在我们将介绍如何使用 UFED 用户锁代码恢复工具解锁 Android 设备。该工具仅适用于支持 USB OTG 的设备。此过程还需要 UFED 摄像头、Cable No. 500-Bypass lock 和 Cable No. 501-Bypass lock。安装工具后,请按以下步骤解锁 Android 设备:
- 在工作站上运行该工具,并按照下面的屏幕截图按
1
。
UFED 用户锁代码恢复工具
-
现在,将 Cable No. 500-Bypasslock 的 A 端连接到工作站的 USB 端口。还要将 Cable No. 500-Bypasslock 的 B 端连接到 Cable No. 501-OTG,然后将另一端连接到设备。
-
连接后,该工具会提示您选择恢复配置文件。选择
[1]手动选择恢复配置文件
。 -
现在,选择设备上使用的锁类型和恢复配置文件,并按照屏幕上的说明进行操作。
-
之后,请确保键盘出现在设备屏幕上,并且已准备好接受 PIN 码。
-
关闭可能出现的任何消息窗口。按
1
并按Enter。现在,通过输入随机输入进行五次错误的登录尝试,并在设备底部单击忘记图案。 -
按照屏幕上的说明操作,等待摄像头窗口打开,然后单击摄像头窗口。
-
使用光标通过将绿色方块放在设备屏幕上的任何非空区域上来选择该区域,例如,在屏幕上选择任何数字。这是工具用来检测设备是否已解锁的方法。按Enter开始该过程。
-
该工具将尝试多种组合来解锁设备。一旦解锁,它将提示您结束该过程。
现在我们将学习 Android 设备管理器以及如何使用它来解锁设备。
使用 Android 设备管理器
大多数最新的 Android 手机都配备了一个名为 Android 设备管理器的服务,它可以帮助设备所有者找到他们丢失的手机。该服务还可以用于解锁设备;但是,只有在您知道在设备上配置的 Google 帐户凭据时才能实现。如果您可以访问帐户凭据,那么请按照以下步骤解锁设备:
-
在您的工作站上访问
google.com/android/devicemanager
。 -
使用在设备上配置的 Google 帐户登录。
-
选择您需要解锁的设备,然后单击锁定,如下面的屏幕截图所示:
Android 设备管理器
-
输入临时密码,然后再次单击锁定。
-
成功后,在设备上输入临时密码以解锁它。
这可以在不知道登录保存在哪台计算机上的凭据的情况下完成(即,嫌疑人的 PC)。
使用 Find My Mobile 绕过(仅适用于三星手机)
如果您正在处理三星设备,使用“查找我的手机”是一种值得尝试的技术;但是,只有在设备所有者已经登录到设备上的三星帐户并且您知道在设备上配置的三星凭据时才能使用。
要开始该过程,请从 Web 浏览器访问“查找我的手机”服务,然后使用在设备上注册的 Samsung 帐户凭据登录,如下所示:
- 点击位于左侧的锁定我的屏幕选项:
- 现在,输入任何临时 PIN 码,然后点击“锁定”按钮。(对于某些设备,您也可能会看到“解锁我的屏幕”选项,它也具有相同的作用)。现在可以使用之前设置的临时 PIN 码解锁手机。
接下来,让我们来看一下污迹攻击。
指纹攻击
在极少数情况下,污迹攻击可能用于推断触摸屏移动设备的密码。这种攻击依赖于识别用户手指留下的污迹。虽然这可能提供了一种绕过方法,但必须说,污迹攻击不太可能成功,因为大多数 Android 设备都是触摸屏,并且使用设备时也会留下污迹;然而,已经证明,在适当的光线下,留下的污迹可以很容易地被检测到,如下截图所示。
通过分析污迹,我们可以辨别用于解锁屏幕的图案。这种攻击更有可能在识别 Android 设备上的图案锁时起作用。在某些情况下,根据屏幕的清洁程度,也可以恢复 PIN 码。因此,在取证调查期间,应该在首次处理设备时注意确保屏幕没有被触摸:
在适当的光线下可见的设备上的污渍
现在我们将看一下下一个方法,即忘记密码选项。
使用忘记密码/忘记图案选项
如果您知道设备上配置的主要 Gmail 地址的用户名和密码,您可以更改设备上的 PIN 码、密码或滑动。在尝试多次解锁屏幕失败后,Android 会提供一个名为“忘记图案?”或“忘记密码?”的选项,如下截图所示:
Android 设备上的忘记图案选项
点击该链接并使用 Gmail 用户名和密码登录。这将允许您为设备创建新的图案锁或密码。
请注意,这仅适用于运行 Android 4.4 或更早版本的设备。
绕过第三方锁屏,进入安全模式
如果屏幕锁是第三方应用程序而不是内置锁,则可以通过进入安全模式并禁用它来绕过它。要在 Android 4.1 或更高版本的设备上进入安全模式,请按住电源按钮直到出现电源选项菜单。然后,按住电源按钮,系统会提示您重新启动 Android 设备进入安全模式。点击确定按钮,如下截图所示:
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 的设备上,可以通过崩溃屏幕 UI 来绕过密码锁屏(而不是 PIN 或图案锁)。可以通过执行以下步骤来实现,如android.gadgethacks.com/
所述:
-
在锁定屏幕上点击紧急呼叫选项,然后在拨号屏幕上输入任意随机输入(例如,10 个星号)。
-
双击字段以突出显示输入的文本,如下截图所示,并选择复制。现在,将其粘贴到相同的字段中:
崩溃锁定屏幕 UI
-
重复此过程以添加更多字符。直到双击字段不再突出显示字符为止。
-
返回到锁定屏幕,打开相机快捷方式。现在,下拉通知屏幕,点击设置图标。然后会提示你输入密码。
-
按住输入字段并选择粘贴,多次重复此过程。一旦足够的字符被粘贴到字段中,锁定屏幕将崩溃,允许您访问设备。
现在,让我们看看一些更多的技术。
其他技术
所有上述技术和可用的商业工具对任何法医检查员都是有用的,比如你,试图访问 Android 设备上的数据;然而,可能会出现这些技术都无法使用的情况。在商业和开源解决方案失败时,可能需要使用芯片脱落和 JTAG 等技术来获取设备的完整物理镜像。这里包括了这些技术的简要描述。
芯片取下技术是从电路中取下存储芯片并尝试读取它,而 JTAG 技术涉及探测 JTAG 测试访问端口(TAPs)并焊接连接器到 JTAG 端口,以便从设备存储器中读取数据。芯片取下技术更具破坏性,因为一旦芯片从设备中取下,就很难将设备恢复到其原始的功能状态。此外,需要专业知识小心地从电路板上去除芯片。取下芯片所需的热量也可能损坏或破坏存储在芯片上的数据,这意味着只有在数据无法通过开源或商业工具检索或设备已经损坏无法修复时才应使用这种技术。使用 JTAG 技术时,JTAG 端口帮助您访问存储芯片,以检索数据的物理图像,而无需取下芯片。要关闭设备上的屏幕锁定,您可以确定锁定代码存储在物理存储转储中的位置,关闭锁定,并将数据复制回设备。商业工具,如 Cellebrite Physical Analyzer,可以接受来自芯片取下和 JTAG 获取的.bin
文件,并为您破解锁定代码。一旦代码被手动移除或破解,您可以使用正常的技术分析设备。
芯片取下和 JTAG 技术都需要进行广泛的研究和经验,才能在真实设备上尝试。关于设备上的 JTAG 和芯片取下的重要资源可以在forensicswiki.xyz/page/Main_Page
找到。
在本节中,我们研究了绕过 Android 设备屏幕锁定的各种方法。现在我们将了解什么是 Android Root。
获得 Root 访问权限
作为移动设备取证检查员,了解与扭曲和调整设备有关的一切是至关重要的。这将帮助您详细了解设备的内部运作,并了解您在调查过程中可能遇到的许多问题。对 Android 手机进行 Root 已经成为一种常见现象,您可以预期在取证检查中会遇到已 Root 的手机。在适用的情况下,您可能还需要对设备进行 Root 以获取取证检查的数据。这意味着了解 Root 设备的方方面面以及它们与其他手机的区别非常重要。以下部分涵盖了有关 Android Root 和其他相关概念的信息。
什么是 Rooting?
类 Unix 操作系统中的默认管理帐户称为root。在 Linux 中,root 用户有权启动/停止任何系统服务,编辑/删除任何文件,更改其他用户的权限等。我们已经了解到 Android 使用 Linux 内核,因此大多数 Linux 概念也适用于 Android;但是,大多数 Android 手机默认情况下不允许您以 root 用户身份登录。
Rooting Android 手机就是为了获得对设备的访问权限,以执行在设备上通常不允许的操作。制造商希望设备对普通用户以某种方式进行功能。Rooting 设备可能会使保修失效,因为使用 Root 会使系统面临漏洞,并为用户提供超级用户功能。
想象一下,一个恶意应用程序获得了对整个 Android 系统的 Root 访问权限。请记住,在 Android 中,每个应用程序都被视为单独的用户,并被分配一个 UID。这意味着应用程序只能访问有限的资源,并且应用程序隔离的概念得到了执行。基本上,Rooting Android 设备允许超级用户功能,并为 Android 设备提供开放访问。
超级用户权限类似于 Windows 机器上的管理员权限,并且允许特权访问以执行普通用户无法执行的操作。在移动设备中,这种超级用户访问是被设计禁用的,但对手机进行 root 可以让您获得这种特权。
了解 root 过程
尽管硬件制造商试图施加足够的限制来限制对 root 的访问,但黑客们总是找到不同的方法来获取 root 权限。获取 root 权限的过程取决于底层设备制造商的不同;然而,root 任何设备通常涉及利用设备固件中的安全漏洞,然后将su
(超级用户)二进制文件复制到当前进程路径中的位置(/system/xbin/su
),并使用chmod
命令授予它可执行权限。
为了简单起见,想象一下一个 Android 设备有三到四个分区,其中运行的程序与 Android 并不完全相关(Android 只是其中之一)。
引导加载程序位于第一个分区中,是手机开机时运行的第一个程序。这个引导加载程序的主要工作是引导其他分区并加载 Android 分区,默认情况下通常称为 ROM。要查看引导加载程序菜单,需要特定的按键组合,例如按住电源按钮并按音量上按钮。此菜单提供选项,让您可以引导到其他分区,如恢复分区。
恢复分区处理安装手机升级的工作,这些升级直接写入 Android ROM 分区。这是您在设备上安装任何官方更新时看到的模式。设备制造商确保只有通过恢复分区安装官方更新。这意味着绕过此限制将允许您安装/刷写任何解锁的 Android ROM。修改后的恢复程序不仅允许更容易的 root 过程,还提供了在正常恢复模式中看不到的各种选项。以下截图显示了正常恢复模式:
正常的 Android 系统恢复模式
以下截图显示了修改后的恢复模式:
修改后的恢复模式
在 Android 世界中最常用的恢复程序是 Clockwork 恢复,也称为ClockworkMod。大多数 root 方法都是通过向恢复分区刷写修改后的恢复开始的。之后,您可以发出更新,这可以对设备进行 root;但是,您不需要手动执行所有操作,因为大多数型号都提供了可以一键 root 您的手机的软件。
从 Android 7.x 开始,Google 开始严格执行设备上的验证启动。验证启动保证设备上的软件在启动到正常模式之前没有被修改。这是以这样一种方式实现的,即每个阶段在执行之前都会验证下一个阶段的完整性和真实性。如果特定分区或段被修改,完整性检查将失败,手机可能无法启动到正常模式。有关验证启动的更多信息,请访问source.android.com/security/verifiedboot/verified-boot
。
这也意味着对这些 Android 设备进行 root 将会非常困难,因为 root 涉及调整 Android 操作系统。Marshmallow 是第一个提供系统完整性警报的 Android 版本,但自 Android 7.x 以来,这已成为强制性的。
对 Android 设备进行 root
现在我们将看看 root Android 设备的不同方法。影响您选择方法的主要因素是底层引导加载程序是否已锁定。在具有解锁引导加载程序的设备上获得 root 访问权限非常容易,而在具有锁定引导加载程序的设备上获得 root 访问权限则不那么直接,这意味着解锁 Android 手机的引导加载程序通常是 rooting 和刷写自定义 ROM 的第一步。这可以通过 fastboot 模式(在前面的部分中讨论)或按照特定供应商的引导加载程序解锁过程来完成。一旦设备的引导加载程序已解锁,下一步是复制su
二进制文件并授予其可执行权限。有很多种方法可以做到这一点。
以下是如何 root 三星 Galaxy S7(国际版 SM-G930F/FD/X,韩国版 SM-G930K/L/S 和加拿大版 SM-G930W8 Exynos 型号):
-
确保在开发者选项中启用 OEM 解锁。
-
下载 ODIN(可在
build.nethunter.com/samsung-tools/Odin_3.12.3.zip
找到),并将存档内容提取到您选择的目录中。 -
下载 TWRP 镜像(可在
twrp.me/samsung/samsunggalaxys7.html
找到)。 -
将您的设备重新启动到下载模式。要做到这一点,当您的设备重新启动时,按住音量减+主页按钮。一旦看到下载模式警告屏幕,请按音量上键继续。
启动 Odin 并将 TWRP 镜像放入 AP 插槽;不要忘记禁用自动重启。开始刷写恢复。
-
要退出下载模式,请按住音量减+主页+电源键;当屏幕变黑时,立即将音量减换成音量加。
-
通过向右滑动允许系统修改。
-
下载 SuperSU(可在
download.chainfire.eu/supersu
找到)。 -
通过 MTP 将带有 SuperSU 的存档传输到设备,并通过相应的 TWRP 选项进行安装。
Rooting 是一个高度特定于设备的过程,因此取证调查人员在对任何 Android 设备应用这些技术之前需要谨慎。对设备进行 root 处理既有优点也有缺点。以下是 rooting 的优点:
-
Rooting 允许修改设备上的软件到最深层次,例如,您可以对设备的 CPU 进行超频或降频。
-
它允许绕过运营商、制造商等对设备施加的限制。
-
对于极端定制,可以下载并安装新的定制 ROM。
以下是 rooting 的缺点:
-
对设备进行 root 处理必须非常小心,因为错误可能导致手机软件无法修复,使设备变成无用的砖头。
-
Rooting 可能会使设备的保修失效。
-
Rooting 会增加对恶意软件和其他攻击的暴露。具有对整个 Android 系统访问权限的恶意软件可能会造成严重破坏。
一旦设备被 rooted,诸如超级用户应用之类的应用程序就可以提供和拒绝 root 权限。该应用程序可以帮助您在设备上授予和管理超级用户权限,如下面的屏幕截图所示:
应用程序请求 root 访问权限
现在我们来看看 root 访问权限。
Root 访问权限 - ADB shell
普通的 Android 手机不允许您访问设备上的某些目录和文件。例如,尝试在未 root 的 Android 设备上访问/data/data
文件夹。您将看到以下消息:
未经 root 访问权限的权限拒绝
在 rooted 手机上,您可以通过发出以下命令以 root 身份运行adb
shell:
C:\android-sdk\platform-tools>adb.exe root
以下屏幕截图显示了前面命令的输出:
在 rooted 设备上成功执行 shell 命令
因此,对手机进行 root 操作可以让您访问通常无法访问的文件夹和数据。还要注意,#
符号表示 root 或超级用户访问权限,而$
表示普通用户,如前面的命令行所示。
安卓 7.0(牛轧糖)及更高版本支持基于文件的加密(FBE),允许使用不同的密钥加密不同的文件。对于像您这样的取证调查人员,重要的是要注意,不可能对启用 FBE 的设备应用永久的 root 以进行获取。相反,建议您使用自定义恢复方法,因为恢复分区以 root 权限运行。
总结
在本章中,我们学习了如何在对安卓设备进行调查之前设置适当的取证工作站。首先要有一个干净的取证工作站,上面安装了必要的基本软件和设备驱动程序。如果取证获取的方法需要解锁安卓设备,你需要确定最佳的方法来获取设备访问权限。如果设备启用了 USB 调试功能,那么绕过屏幕锁定就很容易。我们学习了各种屏幕锁定绕过技术,并帮助您确定在不同情况下使用哪种技术。根据取证获取的方法和调查的范围,对设备进行 root 操作应该可以完全访问设备上的文件。我们还学习了关于 root 操作以及如何使用它来完全访问设备文件系统并执行通常不允许的操作。
现在,已经涵盖了获取安卓设备访问权限的基本概念,我们将介绍获取技术,并描述如何使用每种方法提取数据,详见《第九章》《安卓数据提取技术》。
第九章:Android 数据提取技术
使用第八章中解释的任何屏幕锁定绕过技术,Android 法证设置和数据提取技术,检查员可以尝试访问被锁定的设备。一旦设备可访问,下一个任务是提取设备上的信息。这可以通过将各种数据提取技术应用于 Android 设备来实现。
本章将帮助您识别 Android 设备上的敏感位置,并解释可以应用于设备以提取必要信息的各种逻辑和物理技术。
在本章中,我们将涵盖以下主题:
-
理解数据提取技术
-
手动数据提取
-
逻辑数据提取
-
物理数据提取,包括成像 Android 设备和 SD 卡、JTAG 和芯片脱落技术
理解数据提取技术
驻留在 Android 设备上的数据可能是公司内部调查的一部分,也可能是民事、刑事或内部调查的一部分。在处理涉及 Android 设备的调查时,作为法证检查员,您需要注意在法证过程中需要处理的问题;这包括确定是否允许 root 访问(通过同意或法律授权),以及在调查期间可以提取和分析哪些数据。例如,在涉及跟踪的刑事案件中,法院可能只允许提取和分析嫌疑人所拥有的 Android 设备上的短信、通话记录和照片。在这种情况下,最好只逻辑捕获这些特定项目。然而,最好从设备中获取完整的物理数据提取,并仅检查法院允许的区域。您永远不知道您的调查可能会引向何处,最好立即从设备中获取尽可能多的数据,而不是希望在同意范围发生变化时能够获得完整的图像。Android 设备上的数据提取技术可以分为三种类型:
-
手动数据提取
-
逻辑数据提取
-
物理数据提取
正如第一章移动取证简介中所述,手动提取涉及正常浏览设备并捕获任何有价值的信息,而逻辑提取涉及访问文件系统,物理提取则是提取设备的逐位图像。这些类型的提取方法将在接下来的章节中详细描述。
有些方法可能需要设备被 root 才能完全访问数据。每种方法都有不同的影响,其成功率将取决于所使用的工具和方法,以及设备的制造和型号。
手动数据提取
这种提取方法涉及您利用移动设备的正常用户界面来访问存储器中的内容。您将通过访问不同的菜单来浏览设备,以查看通话记录、短信和即时通讯聊天等详细信息。每个屏幕的内容都通过拍照来捕获,并可以作为证据呈现。
这种类型的考察的主要缺点是只有通过操作系统(在 UI 模式下)可访问的文件才能被调查。在手动检查设备时必须小心,因为很容易按错按钮而擦除或添加数据。手动提取应该作为验证使用其他方法提取的结果的最后手段。某些情况可能需要您首先进行手动检查。这可能包括生死关头或失踪人员的案件,快速扫描设备可能会引导警方找到个人。
逻辑数据提取
逻辑数据提取技术通过与操作系统交互和访问文件系统来提取设备上的数据。这些技术很重要,因为它们提供有价值的数据,适用于大多数设备,并且易于使用。再次,当提取数据时,root 权限的概念再次出现。逻辑技术实际上不需要 root 权限来提取数据。但是,在设备上具有 root 权限允许您访问设备上的所有文件。这意味着在非 root 设备上可能提取一些数据,而 root 权限将打开设备并提供对设备上所有文件的访问。因此,在设备上具有 root 权限将极大地影响可以通过逻辑技术提取的数据的数量和类型。以下部分将解释可以用来从安卓设备逻辑提取数据的各种技术。
ADB 拉取数据提取
如前所述,adb
是一个命令行工具,可帮助您与设备通信以检索信息。使用adb
,您可以从设备上的所有文件或您感兴趣的相关文件中提取数据。这是逻辑提取的最常用技术。
要通过adb
访问安卓设备,必须启用 USB 调试选项。从安卓 4.2.2 开始,由于安全的 USB 调试,连接到设备的主机也必须经过授权。如果设备被锁定且未启用 USB 调试,请尝试使用第八章 安卓取证设置和数据提取前技术中解释的技术来绕过屏幕锁定。
作为法证检查员,重要的是要了解数据在安卓设备上的存储方式,并理解重要和敏感信息的存储位置,以便相应地提取数据。应用程序数据通常包含大量可能与调查相关的用户数据。应该检查与感兴趣的应用程序相关的所有文件,如第十章 安卓数据分析和恢复中所解释的那样。应用程序数据可以存储在以下位置之一:
-
共享偏好: 这里以轻量级 XML 格式存储数据的键值对。共享偏好文件存储在应用程序
/data
目录的shared_pref
文件夹中。 -
内部存储: 这里存储的数据是私有的,存在于设备的内部存储器中。保存在内部存储器中的文件是私有的,其他应用程序无法访问。
-
外部存储: 这里存储的数据是设备外部存储器中的公共数据,通常不实施安全机制。这些数据可以在
/sdcard
目录中找到。 -
SQLite 数据库: 这些数据位于
/data/data/PackageName/
数据库中。通常以.db
文件扩展名存储。可以使用 SQLite 浏览器(sourceforge.net/projects/sqlitebrowser/
)查看 SQLite 文件中的数据,或者通过在相应文件上执行必要的 SQLite 命令来查看。
每个安卓应用程序都使用前述的一种或多种数据存储选项在设备上存储数据。因此,联系人应用程序将在其包名下的/data/data
文件夹中存储有关联系人详细信息的所有信息。请注意,/data/data
是设备内部存储的一部分,在正常情况下,所有应用程序都安装在这里。一些应用程序数据将驻留在 SD 卡和/data/data
分区中。使用adb
,我们可以使用adb pull
命令提取此分区中的数据以进行进一步分析。再次强调,这个目录只能在具有 root 权限的手机上访问。
在 Android 7.0(Nougat)中,引入了一种新的存储类型,称为设备加密存储,允许应用程序在此存储中存储某些类型的数据。因此,您将注意到新的文件路径,如misc_de
、misc_ce
、system_de
和system_ce
在/data
文件夹下。从取证的角度来看,这是一个非常重要的变化,因为这也意味着在运行 Android Nougat 的设备上,/data/data
不是存储工件的唯一位置,例如,
旧设备上的短信数据位置:/data/com.android.providers.telephony/databases/smsmms.db
,Nougat 设备上的短信数据位置:/user_de/0/com.android.providers.telephony/databases/smsmms.db
。
在 rooted 手机上,可以执行 Dropbox 应用程序的databases
文件夹上的adb pull
命令,如下所示:
adb pull 命令
同样,在 rooted 手机上,整个/data
文件夹可以以这种方式被拉取。如下截图所示,Android 设备上完整的/data
目录可以被复制到机器上的本地目录。整个data
目录在 97 秒内被提取出来。提取时间将取决于/data
中数据的数量。
从取证工作站提取的/data 目录
在非 rooted 设备上,对/data
目录的pull
命令不会提取文件,如下面的输出所示,因为 shell 用户没有权限访问这些文件:
非 rooted 设备上的 ADB pull 命令
通过上述过程从 rooted 手机复制的数据保持其目录结构,因此允许调查人员浏览必要的文件以获取信息。通过分析各个应用程序的数据,取证专家可以收集影响调查结果的关键信息。请注意,在取证工作站上本地检查文件夹将改变内容的日期和时间。您应该复制原始输出以用于日期/时间比较。
使用 SQLite Browser 查看数据
SQLite Browser 是一个在分析提取的数据过程中有所帮助的工具。SQLite Browser 允许您探索具有以下扩展名的数据库文件:.sqlite
、.sqlite3
、.sqlitedb
、.db
和.db3
。使用 SQLite Browser 的主要优势是它以表格形式显示数据。
导航到文件 | 打开数据库,使用 SQLite Browser 打开.db
文件。如下截图所示,有三个主要选项卡:数据库结构、浏览数据和执行 SQL。浏览数据选项卡允许您查看.db
文件中不同表中的信息。
我们在分析过程中将主要使用这个选项卡。另外,诸如 Oxygen Forensic SQLite Viewer 之类的工具也可以用于相同的目的。从数据库文件中恢复已删除的数据是可能的,并将在第十章 Android 数据分析和恢复中进行解释。
SQLite Browser
以下部分将介绍如何识别重要数据,并手动从 Android 手机中提取各种详细信息。在早期章节中已经介绍了如何访问 Android 终端。在接下来的部分中,我们将直接开始从那里获取设备信息。
提取设备信息
了解您的 Android 设备的详细信息,如型号、版本等,将有助于您的调查。例如,当设备受到物理损坏,这会阻止对设备信息的检查时,您可以通过在/system
文件夹下执行以下命令来获取有关设备的详细信息:
# cat build.prop
这可以在下面的截图中看到:
build.prop 文件
提取设备信息后,我们现在将提取通话记录。
提取通话记录
访问手机的通话记录通常在调查过程中需要确认某些事件。通话记录的信息存储在位于/data/data/com.android.providers.contacts/databases/
下的contacts2.db
文件中。如前所述,您可以使用 SQLite Browser 在将其提取到取证工作站上的本地文件夹后查看此文件中的数据。让我们看看如何按照以下步骤提取通话记录:
- 如下屏幕截图所示,使用
adb pull
命令可以将必要的.db
文件提取到取证工作站上的文件夹中:
将 contacts2.db 文件复制到本地文件夹
- 请注意,用于拨打电话的应用程序可以将通话记录详细信息存储在各自的应用程序文件夹中。必须检查所有通信应用程序以获取通话记录详细信息,如下所示:
C:\android-sdk-windows\platform-tools>adb.exe pull
/data/data/com.android.providers.contacts C:temp
这将产生以下输出:
- 现在,使用 SQLite Browser(通过导航到文件|打开数据库)打开
contacts2.db
文件,并浏览不同表中的数据。contacts2.db
文件中的通话表提供有关通话历史的信息。以下屏幕截图突出显示了通话历史以及名称、号码、持续时间和日期:
在运行 Android 7.0(Nougat)的设备上,通话记录数据已从contacts2.db
文件中移出。在这些设备上,通话记录数据可以在/data/com.android.providers.contacts/databases/calllog.db
中访问
提取短信/彩信
在调查过程中,您可能会被要求检索发送到特定移动设备的文本消息。因此,重要的是要了解详细信息存储在何处以及如何访问数据。mmssms.db
文件位于/data/data/com.android.providers.telephony/databases
下,包含必要的详细信息。与通话记录一样,您必须确保检查能够发送消息的应用程序,以便使用以下命令检查相关消息日志:
adb.exe pull /data/data/com.android.providers.telephony C:\temp
这将产生以下输出:
提取短信数据
电话号码可以在地址列下看到,相应的文本消息可以在正文列下看到,如下屏幕截图所示:
contacts2.db 文件中的通话表
我们现在将提取浏览器历史信息。
提取浏览器历史信息
提取浏览器历史信息通常是取证人员经常需要执行的任务。除了默认的 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
表包含用户朋友的姓名,电话号码,电子邮件 ID 和出生日期等信息,如下截图所示。类似地,可以分析其他文件,以找出是否可以收集到任何敏感信息:
SQLite 浏览器中的 fb.db 文件
类似地,通过分析/data/data
文件夹中的数据,可以获取有关地理位置、日历事件、用户笔记等信息。
ADB 备份提取
从 Android 4.0 开始,Google 实施了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
文件,然后可以查看。可以从sourceforge.net/projects/adbextractor/
下载 Android Backup Extractor。这个工具是基于 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
命令一样。如下面的屏幕截图所示,要查看您可以与dumpsys
一起使用的所有服务的列表,请运行adb.exe shell service list
命令:
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,它利用内容提供者机制来访问信息。该工具提取数据并以 CSV 格式保存到 SD 卡中。以下步骤使用 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
命令删除的文件和无法访问的文件不会被复制。根据情况,可以使用某些技术恢复已删除的文件,我们将在接下来的章节中看到。与逻辑提取不同,物理提取是设备内存的精确副本,并包括更多信息,如松弛空间和未分配空间。
通过物理技术进行安卓数据提取通常使用dd
命令进行,而其他高级技术如 JTAG 和芯片脱焊也可用,但通常难以实施,并需要极大的精度和经验才能在调查过程中尝试在真实设备上使用它们。与任何其他技术一样,如果个人执行这些程序不正确,设备上的数据可能会损坏或变得无法检索,从而使其在法庭上不可接受。JTAG 和芯片脱焊技术在接下来的章节中有详细介绍。然而,通过dd
命令提取数据需要 root 权限。接下来的章节将概述可以用来执行物理提取的各种技术。
成像安卓手机
设备成像是移动设备取证中最重要的步骤之一。在可能的情况下,在执行任何直接从设备中提取数据的技术之前,必须先获取安卓设备的物理镜像。在取证中,这个获取物理镜像的过程通常被称为“成像设备”。术语物理镜像、取证镜像和原始镜像经常被用来指代通过这一过程捕获的镜像。让我们首先回顾一下在台式电脑上如何进行成像,因为这有助于我们理解并意识到成像安卓设备所涉及的问题。假设从嫌疑人那里夺取了一台未开机的台式电脑,并送去进行取证检查。在这种情况下,典型的取证员会移除硬盘,连接到写保护器,并使用任何可用的工具获取逐位取证镜像。原始硬盘在数据的取证成像过程中得到安全保护。
对于安卓设备,包含数据的所有区域都不能轻易移除。此外,如果设备在接收检查时处于活动状态,就不可能在不对其进行任何更改的情况下分析设备,因为任何交互都会改变设备的状态。
安卓设备可能有两个文件存储区域:内部和外部存储。内部存储指的是内置的非易失性存储器。外部存储指的是可移动存储介质,如 micro SD 卡。然而,重要的是要注意,一些设备没有可移动的存储介质,如 SD 卡,而是将可用的永久存储空间划分为内部和外部存储。因此,并不总是外部存储是可移动的。当可移动的 SD 卡存在时,必须获取存储卡的取证镜像。正如在第七章中所讨论的,“理解安卓”中所述,这些可移动卡通常使用 FAT32 文件系统格式化。一些移动设备取证方法将通过安卓设备获取 SD 卡。这个过程虽然有用,但由于 USB 手机数据线的速度限制,将会很慢。
默认情况下,安卓不提供对内部目录和系统相关文件的访问。这种受限访问是为了确保设备的安全。例如,在非 root 设备上无法访问/data/data
文件夹。这个文件夹对我们来说特别重要,因为它存储了大部分用户创建的数据,许多应用程序将有价值的数据写入此文件夹。因此,为了获取设备的图像,我们需要对安卓设备进行 root。对设备进行 root 将赋予我们超级用户权限并访问所有数据。重要的是要意识到,本书一直强调,所有步骤都应该是取证上的,并且在可能的情况下不应该对设备进行更改。对安卓设备进行 root 将对其进行更改,并且应该在之前未调查过的设备上进行测试。对安卓设备进行 root 是常见的,但获得 root 权限可能会改变设备,使数据发生改变,甚至被删除。一些安卓设备,如 Nexus 4 和 5,在允许 root 权限之前可能会强制擦除数据分区。这就消除了对设备进行 root 以获得访问权限的需要,因为在此过程中所有用户数据都会丢失。只需记住,虽然成功进行 root 可以访问更多数据,但也可能会擦除数据或销毁手机。因此,在进行 root 之前,必须确保您有同意或合法权利来操作安卓设备。由于第八章中已经讨论了 root 技术,安卓取证设置和数据提取前技术,我们将继续进行示例,假设设备已经 root。
以下是获取已 root 的安卓设备的取证图像的逐步过程:
- 将安卓设备连接到工作站,并通过发出
adb devices
命令来验证设备是否被识别,如下所示:
识别连接的设备
- 一旦
adb
访问准备就绪,可以通过以下步骤从安卓设备中获取分区:
-
使用
dd
命令:dd
命令可用于创建设备的原始镜像。此命令帮助我们通过复制低级数据来创建安卓设备的逐位图像。 -
插入新的 SD 卡:将新的 SD 卡插入设备,将图像文件复制到该卡中。确保此 SD 卡已擦除并且不包含任何其他数据。您可能还需要证明驱动器上没有其他数据。
-
执行命令:安卓设备的文件系统存储在
/dev
分区的不同位置。对三星 Galaxy S3 手机执行简单的mount
命令返回以下输出:
安卓设备上的 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 编辑模式视图(左)和启用 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 适配器的使用消除了焊接的需要,因为它连接了 TAP 到 CPU:
JTAG 设置
-
完成上述步骤后,必须施加电源以启动 CPU。必须施加的电压取决于硬件制造商发布的规格。不要施加超出规格中给定数字的电压。
-
施加电源后,可以提取 NAND 闪存的完整二进制内存转储。
-
使用本书学习的取证技术和工具分析提取的数据。在获取期间将获得一个原始的
.bin
文件;大多数取证工具都支持对这种图像格式的摄取和分析。
JTAG 可能听起来很复杂(也许是),但它有许多有用的用途,以下列出了三个优点:
-
这种技术的主要优势是即使设备未开启也可以工作。
-
不需要 root,ADB 或 USB 调试。
-
它可以用于恢复设备的 PIN 码/密码,因此可以对整个闪存进行成像,并恢复/破解密码文件。
还需要了解 JTAG 技术不应导致设备功能丧失。如果正确重新组装,设备应该可以正常运行。尽管 JTAG 技术在提取数据方面是有效的,但只有经验丰富和合格的人员才能尝试。在焊接 JTAG 接触点或施加错误电压时出现任何错误可能会严重损坏设备。
芯片脱落技术
芯片脱落,顾名思义,是一种从设备中移除 NAND 闪存芯片并进行检查以提取信息的技术。因此,即使设备受到密码保护并且未启用 USB 调试,这种技术也可以工作。与 JTAG 技术不同,设备在检查后通常会被破坏,也就是说,重新连接 NAND 闪存到设备后更加困难。重新连接 NAND 闪存到设备的过程称为重新焊球,需要培训和实践。
Chip-off 技术通常涉及以下取证步骤:
-
必须研究设备上的所有芯片,以确定哪个芯片包含用户数据。
-
确定后,NAND 闪存从设备中物理移除。这可以通过施加热量来去焊接芯片来完成:
芯片脱落技术
来源:http://www.binaryintel.com/services/jtag-chip-off-forensics/chip-off_forensics/
-
这是一个非常细致的过程,必须非常小心,因为可能会损坏 NAND 闪存。
-
然后清洁和修复芯片,以确保连接器存在并且正常工作。
-
使用专门的硬件设备适配器,现在可以读取芯片。这是通过将芯片插入支持特定 NAND 闪存芯片的硬件设备中来完成的。在这个过程中,从芯片中获取原始数据,生成一个
.bin
文件。 -
现在可以使用取证技术和之前描述的工具对获取的数据进行分析。
芯片脱落技术在设备严重损坏、锁定或无法访问时最有帮助。然而,这种技术的应用不仅需要专业知识,还需要昂贵的设备和工具。在取出 NAND 闪存时总会有损坏的风险,因此建议首先尝试逻辑技术来提取任何数据。
虽然在执行前面讨论的任何技术时都必须具有根访问权限,但在撰写本书时,必须指出,这些技术中没有一种适用于启用了全盘加密(FDE)的设备。正如在第七章中所讨论的了解 Android,Google 已经要求从 Android 6.0 开始,大多数设备都使用 FDE。尽管已经演示并发布了一些解密全盘加密的技术,但它们是特定于设备的,不具有普遍适用性。
总结
本章涵盖了各种手动、逻辑和物理数据提取技术。我们学会了在调查过程中何时以及如何应用这些技术。逻辑技术通过使用 ADB 等工具与设备交互来提取数据。另一方面,物理技术可以访问更多的数据;它们是复杂的,需要大量的专业知识来执行。对设备进行成像会产生设备的逐位图像,稍后可以使用工具对其进行分析。对设备进行成像是确保设备上的数据未被修改的主要步骤之一。Android 7.0 及以上版本为取证调查人员带来了新的挑战,引入了新的安全功能和可能限制获取的文件路径。有了这些知识,您可以执行设备获取操作,从 Android 设备中提取相关数据。
在下一章中,我们将看到如何从图像文件中提取通话记录、短信和浏览历史等相关数据。我们还将介绍数据恢复技术,使用这些技术可以从设备中恢复删除的数据。
第十章:Android 数据分析和恢复
在上一章中,我们介绍了各种逻辑和物理提取技术。在物理提取中,获得了 Android 设备的逐位镜像,其中包含有价值的信息。在本章中,我们将学习如何分析和提取图像文件中的通话记录和短信等相关数据。虽然数据提取和分析技术提供了各种详细信息,但并非所有技术都能提供有关已删除数据的信息。数据恢复是移动取证的关键方面,因为它有助于发现已删除的项目。
本章旨在涵盖法证分析员可以使用的各种技术,以从 Android 设备中恢复数据。
在本章中,我们将涵盖以下两个主要主题:
-
使用 Autopsy 工具分析和提取 Android 镜像文件中的数据
-
了解从 SD 卡和内部存储器中恢复已删除文件的技术
使用 Autopsy 工具分析和提取 Android 镜像文件中的数据
术语Android 镜像指的是通过执行任何物理数据提取技术获得的物理镜像(也称为法证镜像或原始镜像)。使用第九章中解释的技术,Android 数据提取技术,您可以对整个/data/data
块或任何与调查相关的特定块进行镜像。一旦获得镜像,像您这样的调查人员可以手动查看文件内容或利用可用工具来解析内容。商业工具,如 Cellebrite 和 XRY,可以深入挖掘数据并呈现内容的全面图片。Autopsy 是法证界中使用非常广泛的开源工具之一,它在分析 Android 镜像方面表现出色。
Autopsy 平台
Autopsy 是一个法证平台,作为 Sleuth Kit 的 GUI。它是免费提供的;您可以在www.sleuthkit.org/
下载。Sleuth Kit 是一组 Unix 和基于 Windows 的工具和实用程序,用于进行法证分析。Autopsy 通过对给定卷进行法证分析来显示结果,从而帮助调查人员专注于数据的相关部分。Autopsy 是免费且可扩展的,并且有几个可以插入的模块。Autopsy 可用于加载和分析在物理提取后获得的 Android 镜像。
将图像添加到 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 卡可以作为外部大容量存储设备挂载,并且可以使用标准的数字取证方法进行取证,如第九章 Android 数据提取技术中所讨论的。如前几章所述,Android 设备中的 SD 卡通常使用 FAT32 文件系统。这主要是因为 FAT32 文件系统在包括 Windows、Linux 和 macOS X 在内的大多数操作系统中得到了广泛支持。FAT32 格式化的驱动器上的最大文件大小约为 4GB。随着越来越高分辨率的格式现在可用,这个限制通常会被达到。除此之外,FAT32 只能用于小于 32GB 的分区。因此,现在一些设备中使用了克服这些问题的 exFAT 文件系统。
如果可以将外部 SD 卡挂载为驱动器,那么从中恢复已删除的数据就可以很容易地完成。因此,如果 SD 卡是可移动的,可以使用写入阻断器将其连接到工作站进行取证。然而,最新的 Android 设备通常不会作为大容量存储挂载。这是因为这些设备使用媒体传输协议(MTP)或图片传输协议(PTP)协议,而不是 USB 大容量存储。USB 大容量存储的问题在于计算机需要对存储进行独占访问。换句话说,当连接到工作站时,外部存储需要完全断开与 Android 操作系统的连接。这给移动应用程序带来了其他一些复杂性。当 Android 设备使用 MTP 时,它会被计算机识别为媒体设备,而不是可移动存储,如下图所示:
使用 MTP 连接 Android 设备
但是,普通的数据恢复工具需要挂载驱动器才能进行扫描。因此,大多数使用 MTP/PTP 的最新设备不被视为挂载驱动器,因此传统的适用于计算机的数据恢复工具在这些设备上不起作用。
因此,当设备使用 MTP/PTP 并且没有作为驱动器挂载时,可以通过某些需要打开 USB 调试选项的特定于 Android 的数据恢复工具来进行恢复。市场上几乎所有的 Android 数据恢复工具都需要您启用 USB 调试,以便在开始 Android 数据恢复之前识别您的设备和 SD 卡。
您必须了解,安卓设备可能会使用 SD 卡上的空间来缓存应用程序数据;因此,在移除 SD 卡之前,确保尽可能多地从设备获取数据非常重要。一些旧设备在通过 USB 连接时会自动将设备挂载为驱动器。在数据提取、数据恢复等方面,直接在设备上操作不是一个良好的取证实践。因此,需要获取 SD 卡的物理镜像,并在镜像上执行所有必要的分析。建议通过设备以及单独获取 SD 卡,以确保获取所有数据。要获取 SD 卡镜像,可以在设备运行时使用adb
中的dd
来获取设备的 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.dd
SD 卡镜像文件的位置,选择它,然后单击“完成”:
在 FTK Imager 中选择要分析的镜像文件
- 然后在查看窗格中显示 SD 卡镜像的内容。您可以通过单击“+”号来浏览文件夹。当文件夹被突出显示时,其内容将显示在右窗格中。选择文件后,其内容将显示在底部窗格中。如下图所示,已删除的文件也显示为图标上的红色叉号:
在 FTK Imager 中显示带有红色叉号的图标的已删除文件
- 要将已删除的文件复制到工作站,请右键单击标记的文件,然后选择“导出文件…”,如下图所示:
在 FTK Imager 中恢复已删除的图像
还建议检查设备是否安装了任何备份应用程序或文件。最初的安卓版本没有包括用户备份其个人数据的机制。因此,用户广泛使用了几个备份应用程序。使用这些应用程序,用户可以将其数据备份到 SD 卡或云端。例如,Super Backup应用程序包含了备份通话记录、联系人、短信等选项,如下图所示:
超级备份安卓应用程序
检测到备份应用程序后,必须尝试确定数据存储在何处。通常,备份文件夹路径是内部 SD 卡。备份应用程序的设置中也包含文件夹路径。备份中保存的数据可能包含重要信息,因此,在设备上寻找任何第三方备份应用程序将非常有帮助。
从内部存储器中恢复数据
从 Android 设备的内部存储器中恢复已删除的文件(如短信、联系人和应用数据)并非所有分析工具都支持,可能需要手动切割。与一些包含常见文件系统的媒体(如 SD 卡)不同,取证工具可能无法识别和挂载文件系统。此外,除非手机已 root 处理,否则无法访问 Android 手机的内部存储器的原始分区。建议在 root 处理发生之前和之后对设备进行镜像。在尝试从 Android 设备的内部存储器中恢复数据时,可能会面临以下一些其他问题:
-
要访问内部存储器,可以尝试对手机进行 root 处理。但是,root 处理过程可能涉及向
/data
分区写入一些数据,这个过程可能会覆盖设备上有价值的数据。 -
与 SD 卡不同,这里的内部文件系统不是 FAT32(这是取证工具广泛支持的)。内部文件系统可能是 YAFFS2(在旧设备上)、EXT3、EXT4、RFS 或专为 Android 运行而构建的其他文件系统。因此,许多专为 Windows 文件系统设计的恢复工具将无法使用。
-
Android 设备上的应用数据通常以 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 文件中的已删除记录。
在我们的示例中,我们将从安卓设备中恢复已删除的短信。从安卓手机中恢复已删除的短信经常被要求作为设备取证分析的一部分,主要是因为短信包含的数据可以揭示很多信息。有不同的方法可以在安卓设备上恢复已删除的短信。首先,我们需要了解消息在设备上的存储位置。在第九章中,安卓数据提取技术,我们解释了安卓设备上存储用户数据的重要位置。以下是对此的快速回顾:
-
每个应用程序都将其数据存储在
/data/data
文件夹下(同样,这需要 root 权限来获取数据)。 -
位于
/data/data/com.android.providers.telephony/databases
位置下的文件包含有关短信/彩信的详细信息。
在上述位置下,短信存储在名为mmssms.db
的 SQLite 数据库文件中。可以通过检查此文件来恢复已删除的短信。以下是使用mmssms.db
文件恢复已删除短信的步骤:
- 在安卓设备上,启用 USB 调试模式并将设备连接到取证工作站。使用
adb
命令行工具,通过以下命令提取位于/data/data/
下的数据库文件夹:
adb.exe pull /data/data/com.android.providers.telephony/databases C:\temp
输出如下所示:
ADB pull 命令
一旦文件被提取到本地机器上,使用 Oxygen Forensics SQLite Viewer 工具打开mmssms.db
文件。
-
点击名为
sms
的表,并观察工具中 Tables 数据选项卡下的当前消息。 -
查看已删除数据的一种方法是点击包含已删除数据的块选项卡,如下截图所示:
恢复已删除的短信
同样,存储在 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
文件包含有关支持的文件类型的信息,如下面的屏幕截图所示:
手术刀配置文件
需要修改此文件以提及与 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 帐户中恢复已删除的联系人
因此,使用上述任一技术,像您这样的法医检查员可以尝试轻松恢复已删除的数据。
摘要
在本章中,我们学习了从 Android 设备中恢复已删除数据的各种技术。这个过程取决于各种因素,这些因素严重依赖于访问存储在内部存储器和 SD 卡中的数据。我们看到了从 SD 卡和内部存储器中恢复已删除数据的各种技术。虽然从外部存储器(如 SD 卡)中恢复已删除的项目很容易,但从内部存储器中恢复已删除的项目需要相当大的努力。我们还学习了 SQLite 文件解析和文件切割技术,使用这些技术可以从 Android 设备中提取已删除的数据。有了这些知识,您现在可以在法医调查期间进行数据恢复。
下一章将讨论 Android 应用程序和恶意软件的法医分析以及 Android 应用程序的逆向工程。