引言
智能手机,平板电脑和其他移动设备等移动设备正在成为人们生活中不可或缺的一部分。 世界上有近67%的人至少拥有一部智能手机; 到2025年,预计将有58亿台活动移动设备[1]。
根据IDC [2]的数据,在2018年第三季度售出的所有移动设备中,有86.8%配备了Android OS。 使用Android操作系统的用户数量超过14亿。 根据Securelist [3],在2018年,检测到530万个用于Android OS系列的恶意软件包。 因此,计算机取证领域的专家必须使用不同的方法来提取每个设备的内存副本。
当前,无法从运行Android OS的设备统一获取内存副本。 在这方面,计算机取证专家必须使用许多不同的方法来面对技术问题。 首先,问题与缺少驱动程序或传统数据提取方法中使用的USB连接器故障有关。 但是,要获取并传输内存副本,可以使用无线通信通道[4]。
第1节将描述Android OS的体系结构,使用RAM的场景,RAM中包含的数据结构,用于获取内存副本的软件以及用于传输数据的软件。
第2节将描述用于获取RAM副本,子系统与模块之间的连接的系统的体系结构。
第3节将描述获取RAM副本的系统的实现。
第1节:探索通过无线通道在运行Android OS的设备中获取内存副本的方法
本节讨论用于获取内存副本及其比较的软件,用于传输RAM副本的网络协议,用于Android OS的通过无线连接运行可执行文件的方式,RAM结构以及使用RAM副本的方案。
使用RAM副本的方案
如今,借助Linux内核和Dalvik虚拟机,Android操作系统可以在不同的设备上使用。 本文讨论了在最常见的ARM和x86硬件平台上运行的设备。
内存副本是非结构化的二进制数据,如果没有适当的专用工具,则很难分析。 在撰写本文时,设备的RAM大小不超过10 GB,这大大增加了此大小的RAM副本的分析时间。 目前,还没有一种方法可以分析RAM的所有结构。 为了对RAM进行完整分析,需要使用几种软件工具。
即使由于获取内存副本阶段出现问题而拥有所有必要的工具,也无法保证成功分析RAM副本。 如果无法连接到该设备或存在巨大的数据损坏风险,那么获取内存副本的无线方式仍然是唯一且安全的方法。 不幸的是,目前没有软件工具可以通过无线通信自动接收存储器的副本。
副本可用于计算机取证。 例如,如果所研究设备上的数据是加密的,则存储器的副本可以帮助解密包含密码和加密密钥的数据[5]。 每个处理个人数据的应用程序都使用数据加密。 拥有RAM副本的映像并具有一些使用它的技能,就有机会恢复有助于司法鉴定的最新消息或临时文件。
如果发生设备攻击,则可以通过分析设备RAM的副本来了解攻击是如何进行的,攻击者使用了哪些通信渠道,恶意软件和漏洞来防止将来发生此类攻击。
定期复制关键数据以检测恶意软件。 该方法用于检测恶意软件,该恶意软件使用方法隐藏其在系统中的存在。
同样,可以使用内存的副本(或仅包含所研究的应用程序或过程的上下文的部分)来标识软件的漏洞和未记录的功能。 现有的专用软件工具使用RAM的副本来检测rootkit [6]。 整个系统内存的副本可用于监视整个系统中的更改,以识别非法行为。
为了分析操作副本,使用了波动性框架[7]。 Volatility Framework是用于获取和分析各种操作系统(包括Android)的RAM副本的一组工具。 使用这些工具,您可以获得包含在RAM映像中的必要信息。 为了获得RAM的副本,Volatile Framework使用LiME内核模块。 要通过LiME提取RAM的副本,需要所研究设备的Linux内核的源代码。
分析用于通过Android OS无线连接执行可执行文件的工具和方法
要像在任何类似UNIX的操作系统中一样安装应用程序,请使用软件包。 在Android上,这些软件包的扩展名为.apk。 此类软件包甚至在安装后也会存储在设备的内存中,只有在卸载应用程序后才会删除。 .apk程序包包含已编译的Java代码以及声明应用程序正常工作所需的权限的AndroidManifest.xml文件。
有两种类型的应用程序:系统和用户。 系统应用程序与用户应用程序不同,它具有更多特权,因此只有拥有超级用户权限才可以更改或删除它们。 用户应用程序包位于“ / data / app”目录中。 系统应用程序包位于“ / system / app”目录中。
从Android 5.0开始,将使用Android Runtime虚拟机代替Dalvik虚拟机。 与Dalvik不同,Android Runtime不会在启动期间而是在安装期间编译应用程序。 这样可以提高启动程序的速度,并延长电池寿命。 为了确保向后兼容,Android运行时使用与Dalvik相同的字节码。
与系统进程不同,用户进程在系统上具有较少的特权。 为了获得类似于系统进程的特权,用户进程需要超级用户权限或“ root”权限。 超级用户是操作系统的用户,该用户在系统中具有无限权限。
超级用户权限有两种:永久和临时。 即使重新启动后,永久超级用户权限仍会保留,并且临时权限在重新启动设备之前一直有效。
通常,设备上的超级用户权限不可用。 由于设备种类繁多,因此没有统一的方法来获取超级用户权限。 因此,为了获得超级用户权限,使用了不同的工具。 要从Android设备获取内存副本,必须获得超级用户权限。
要运行可执行文件,系统上需要一些特权以及一组Unix命令。 最初,Android仅具有一些最少的命令集,这些命令通常不足以获取内存的副本。 因此,他们使用BusyBox,其中包括扩展的命令集。 BusyBox附带的实用程序使您可以在文件系统中工作,启动应用程序,显示系统信息等等。 也可以创建shell脚本。
Shell脚本是可执行文件,其中包含执行一组命令的脚本。 与应用程序不同,shell脚本不需要安装和编译。 如果您需要修复某些问题,则只需对shell脚本文件进行更改。
由于可执行文件是通过无线通信启动的,因此我们将考虑两种使用ADB和SSH启动可执行文件的方法。
对于第一种方法,执行“ setprop service.adb.tcp.port 5555; 停止adbd;启动adbd”。 接下来,在计算机上运行命令提示符,并使用“ adb connect X”命令连接到设备,其中“ X”是网络上设备的IP地址,端口值为5555。要运行可执行文件,请使用命令“ adb shell am start -n com”。 “ package.name/com.package.name.ActivityName”(如果这是一个应用程序)。 如果可执行文件是Shell脚本,则使用“ adb shell ./name”命令启动该文件,其中name是脚本的名称。
第二种方法使用SSH协议。 与以前的方法不同,此方法需要计算机上的SSH客户端和设备上的SSH服务器。 在Windows上,您可以使用PuTTY,或者在Linux Openssh上。 将设备连接到计算机后,我们便可以访问Shell命令Shell。 运行可执行文件的命令与第一种方法相同。
因此,可以看出两种方法仅在连接方法上不同。 两种方法都使用Shell命令Shell运行可执行文件。 由此可见,访问外壳程序后,您可以执行任何命令,也可以运行任何可执行文件,无论它是应用程序还是外壳程序脚本。
用于获取RAM副本的软件工具
现有的软件方法可以分为两类:
- 从用户空间和内核获取内存副本;
- 仅从用户空间检索内存的副本。
检索用户空间和内核空间副本的软件工具包括AMExtractor和LiME。 Mem和Memfetch工具只能从用户空间获取内存的副本。
考虑上述软件工具,用于在Android操作系统的控制下从设备获取RAM的副本:
- Mem:用于获取进程RAM数据的开源实用程序[8];
- Memfetch:一个开源实用程序,用于使用设备/ proc / $ pid / map和/ proc / $ pid / mem来获取进程RAM的地址空间[9];
- LiME:Linux内核的模块,带有开放源代码,用于获取用户空间和内核中RAM中存储的数据[10];
- AMExtractor:一个开源实用程序,使用/ dev / kmem伪设备将其加载到内核内存中[11]。
Mem和Memfetch程序无需进行初步配置即可使用,但是它们无法从内核内存区域获取数据,并且需要超级用户权限才能工作。
尽管LiME模块具有广泛的用途和多功能性,但仍需要为每个单独的设备的Linux内核正确配置和提供源代码。
为了使AMExtractor正常工作,需要有关内核使用的虚拟内存寻址模型的类型和超级用户权限的信息。
本工作中考虑的软件工具(其源代码可公开获得)仅用于获取RAM的副本。
Oxygen,UFED和MSAB XRY等软件工具价格昂贵,仅可用于商业用途。 此级别的程序能够执行以下操作:从锁定的设备接收内存的副本,获取超级用户权限,生成取证报告,等等。
ANDROPHSY工具是第一个支持Android设备法医调查各个阶段的开源工具[12]。 ANDROPHSY体系结构由四个主要模块组成:处理模块,收集模块,分析模块和报告模块。 使用dd工具和ADB服务执行数据采集。 USB电缆用于在计算机和被调查设备之间进行连接,并且数据通过TCP协议进行传输。
这项工作的相关性的确认是ANDROPHSY中存在缺陷。 其中包括仅在Linux环境中的性能,缺少获取和分析设备RAM副本的功能以及缺少通过Wi-Fi或蓝牙与设备的连接以提取数据。
根据分析,建立了一个比较表(参见图1)。 在表1中,符号“ +”表示满足要求的资金,符号“-”表示相反的要求。

图1-用于获取RAM副本的软件
根据比较的结果,由于收到RAM的完整副本,并且不需要源内核代码和支持加载模块,因此决定使用AMExtractor拍摄RAM的映像。
数据传输软件
USB电缆用于从运行Android操作系统的设备中检索数据。 大多数Android设备可以使用USB电缆连接到个人计算机。
但是,在研究Android设备期间,可能会发生无法使用USB连接从其中提取数据的情况。 原因可能是电缆故障或连接器损坏。 在这些情况下,只有外部存储卡(并非在所有设备上都可以找到)才可供专家进行研究。 有时设备仅包含内部存储器。 可以通过USB连接安全地删除此存储器以及RAM的内容。 有线连接的替代方法是无线。 在所有无线协议中,Android操作系统支持最流行的:Wi-Fi和蓝牙。
现代Android设备中的Wi-Fi用于访问Internet或传输数据。 基于机器人的移动设备支持高达802.11ac的大多数Wi-Fi标准。 通过Wi-Fi在设备之间的数据传输速度超过了通过蓝牙[13]的数据传输速度。
要通过Wi-Fi连接设备,只需连接到共享访问点即可。 由于其他设备可以连接到共享访问点,因此限制它们对网络的访问很重要。 Android的Wi-Fi热点支持功能可让您将设备用作接入点。
可在An-droid设备上使用的Bluetooth无线协议旨在在电池较小的设备之间传输数据。 与Wi-Fi相比,通过蓝牙传输文件的速度要低得多。 该协议基于由一个主节点和几个从属节点组成的微微网[14]。 配置文件用于传输不同类型的数据。 蓝牙配置文件定义了设备之间可以交换的命令和功能。 至少有27个蓝牙配置文件。
PAN配置文件用于在两个设备之间创建WPAN。 HID配置文件允许您连接鼠标,键盘和其他支持此配置文件的外围设备[14]。
在这项工作中,基于Android操作系统的功能,我们考虑以下软件数据传输:
- SSHFS:基于FUSE的文件系统客户端,用于通过SSH连接安装远程目录[15];
- Rsync:一个开源实用程序,可提供快速的逐步数据传输[16];
- SCP:通过SSH协议传输数据的实用程序和协议[17];
- SFTP:与仅允许复制文件的SCP相比,SFTP具有执行文件操作的能力:例如,断开连接后恢复文件传输,删除服务器上的文件以及许多其他操作[18];
- NetCat:UNIX实用程序,使用TCP或UDP协议通过网络连接读取和写入数据[19]。
在大多数情况下,rsync实用程序用于同步文件或目录。 在同步期间,使用有效的校验和搜索算法仅发送更改。 Rsync功能允许您通过SSH协议进行传输,压缩文件以及复制链接,设备文件,所有者属性,组和权限。
获取存储器副本的大多数方法都使用TCP协议进行数据传输,以排除将数据写入所研究设备的存储器的可能性。
为了安全地进行数据传输,软件必须使用SSH协议,这一点很重要。 安全外壳协议(SSH)是用于在不安全的网络上安全远程登录系统和其他安全网络服务的协议[20]。
数据压缩可以显着提高低信道带宽下的传输速率。 文件的传输及其属性对于随后的法医分析非常重要。
dd. dd , , .
(. 2). “+” , , “-” — .

2 — .
- NetCat, Rsync ,
PS ...