内存取证原理与实践
上QQ阅读APP看书,第一时间看更新

3.2 基于硬件的内存获取技术和工具

Windows、Linux、Mac都是基于Intel架构的桌面操作系统,对于此类操作系统,硬件获取内存的原理是利用直接内存访问(DMA,Direct Memory Access)指令获取物理内存镜像。根据读取内存镜像的硬件接口不同,可将获取内存镜像文件的硬件分为5类,分别是:基于PCI接口镜像物理内存,基于IEEE 1394火线接口镜像物理内存,使用网卡镜像物理内存,基于PCI Express接口镜像物理内存,基于Thunderbolt接口镜像物理内存。

3.2.1 基于PCI接口获取物理内存

内存的硬件获取方法最早由Brian Carrier提出并实现。他开发了名为“Tribble”[9]的一种演示性的硬件设备。利用Tribble设备,取证人员可以将系统物理内存复制到外部存储设备中。但是,该设备需要插入计算机的PCI卡槽,并在系统中安装驱动,重新启动系统后才能应用。因此,这种基于硬件板卡的方法在在线取证中的实用性并不强,容易受到针对性攻击,不太安全。

在实际的内存取证中,随着硬件接口技术的不断发展,逐步出现了利用以下接口实现内存获取的方法。

3.2.2 基于IEEE 1394接口获取物理内存

IEEE1394是苹果公司开发的串行标准,中文译名为火线,支持外设热插拔,可为外设提供电源,能够连接多个不同设备,支持同步数据传输。该技术于1995年被接纳为IEEE工业标准,凭借其强大的传输性能,成为数字音频、视频设备及其他高速外设的理想接口。

物理内存镜像文件的获取可以通过IEEE 1394设备、协议和相关的软件相结合而实现。通过IEEE 1394接口与主机相连的设备可以读取主机内存,其基本原理基于以下几点。

(1)1394互连的设备是对等(Peer-to-Peer)连接,设备可以向主机发送读写数据请求。

(2)作为IEEE 1394协议在主机端的实现,1394 OHCI用一个物理请求DMA控制器支持直接读取主机内存的请求。

(3)操作系统IEEE 1394总线驱动程序以及OHCI、SBP2等总线传输驱动程序。

根据IEEE 1394协议,在设备向主机发送的异步读写请求包中包含64 bit的目标地址字段,包括16 bit的Destination_ID和48 bit的Destination_Offset,用于标识接收此请求的目标节点及节点内偏移地址,而对于节点偏移地址位于底层地址空间(0~PhysicalUpperBound-1或0~000100000000H)的异步读写请求(此时成为物理请求),将由物理请求/物理读写单元处理,即由1394 OHCI芯片通过DMA控制器直接读写系统存储器。

需要注意的是,并非所有设备节点的物理请求都会被主机允许,主机通过设置两个请求过滤寄存器(Asynchoronous Request Filter和Physical Request Filter)决定是否允许来自设备节点的请求,而这两个寄存器的值是由操作系统设置的。因此一个设备若想取得向主机发送物理请求的权力,必须让主机设置过滤寄存器相应位的值,此工作由设备类驱动程序完成。

因此,硬件实现需要配置成操作系统本身自带驱动并允许物理请求的设备类(如1394 MassStorage),并获取此设备类的CSR描述和CONFIG ROM描述。实现原理如图3-2所示:添加带有某设备类CSR和CONFIG ROM描述的设备到主机→设备向主机报告→主机安装设备驱动程序→主机向设备开放物理请求功能→设备使用物理读写请求与主机内存交换数据。

图3-2 1394设备读取主机内存原理

Ruff[10]、Bock[11]、Boileau[12]等都提出了利用IEEE 1394火线接口进行内存镜像的方法。

然而,随着计算机硬件技术的发展,配有1394接口的计算机已经很少见了;除此之外,对配备1394接口的苹果计算机,由于Mac OS X 10.7.2及其以上版本的操作系统不再支持基于IEEE1394协议对内存的DMA访问,因此基于IEEE1394接口获取内存的方法只适应于Mac OS X 10.7.2以下的操作系统;再者,由于IEEE1394总线的寻址能力有限,基于此接口获取的内存大小不超过4 GB,因此,随着内存大小的不断增加,此方法无法满足获取完整内存的需求。所以,研究人员提出了通过网卡读取内存的方法和基于PCI Express接口总线获取内存的方法。

3.2.3 使用网卡获取物理内存

Balogh[13]使用基于网卡的网络驱动程序接口规范(NDIS,Network Driver Interface Specification)协议驱动通过DMA方式读取计算机物理内存,并通过网络发送到远程计算机上。然而,如果攻击者对NDIS库进行劫持,就能篡改通过网卡传送的物理内存数据。Wang等[14]利用PCI网卡中的系统管理模式(SMM,System Management Mode)固件获取计算机物理内存数据。但是,新版的BIOS对SMM模式进行了锁定,限制了利用固件获取物理内存的应用。

3.2.4 基于PCI Express接口获取物理内存

PCI Express接口总线具有64 bit地址空间访问能力,因此,基于该接口的内存读写工具能读取4 GB以上的物理内存数据。我们开发了PCI Express内存读写工具[15],原理如图3-3所示。

图3-3 PCIExpress内存读写设备原理

PCI Express内存读写设备通过PCI Express总线读取计算机物理内存,主要包括USB控制器、PCI-E桥接控制器、供电模块、时钟模块、复位模块、数据传输接口转换模块、配置接口转换模块、总线逻辑模块等。

其中,供电模块、时钟模块给USB控制器和PCI-E桥接控制器分别提供电源和时钟脉冲信号;USB控制器与PCI-E桥接控制器之间通过CPLD逻辑器件实现两者之间的数据传输,并且两者均具有双向数据传输的作用。USB控制器上的USB接口与取证计算机相连接;PCI-E桥接控制器上的PCI Express接口与目标计算机相连接。CPLD逻辑器件可确定USB控制器与PCI-E桥接控制器的主从状态、进行时序和总线宽度的转换以及在DMA模式下将内存数据传输至取证计算机。

USB控制器中有复位模块、程序存储模块。程序存储器采用EEPROM存储固件程序。USB控制器的16 bit数据端与PCI-E桥接控制器的低16 bit数据端相连接,PCI-E桥接控制器的高16 bit数据端经数据传输接口转换模块与USB控制器的16 bit数据端相连接;USB控制器、PCI-E桥接控制器的控制信号均与配置接口转换模块相连接,USB控制器、PCI-E桥接控制器的总线仲裁信号均与总线逻辑模块相连接。

PCI Express内存读写设备与取证计算机和待取证计算机相连接的示意如图3-4所示。

图3-4 设备间连接示意

使用该设备读取内存的流程如图3-5所示。其具体流程如下。

(1)设备连接,将取证计算机与内存读取设备的USB接口相连接,目标计算机与内存读取设备的PCI Express接口相连接。

(2)设备配置,将内存读取设备配置为以PCI-to-PCI桥与目标计算机相连接的内存控制器,避免目标计算机上出现查找驱动程序的提示信息。

(3)分配PCI总线号、设备号,目标计算机为内存读取设备分配PCI总线号和PCI设备号,目标计算机自动加载内存读取设备的驱动程序。

(4)参数发送,取证计算机将读取命令、写入命令、内存地址、内存长度信息作为参数,通过USB接口发送至USB控制器中。

(5)配置PCI-E桥接控制器,以USB控制器为总线上的主机、PCI-E桥接控制器为从机,将取证计算机发出的参数发送至PCI-E桥接控制器,PCI-E桥接控制器根据参数构造读写物理内存的数据包。

(6)配置绕开UMA地址段,绕开目标计算机内存中的Upper Memory Area地址段,获取目标计算机的内存数据。

图3-5 读取内存流程

(7)采用DMA模式传输数据,PCI-E桥接控制器通过PCI Express总线获取目标计算机的内存数据,以PCI-E桥接控制器为总线上的主机、USB控制器为从机,在DMA模式下通过USB控制器将内存数据发送至取证计算机。

(8)内存数据分析,取证计算机对获取的内存数据进行校验和分析。

3.2.5 基于Thunderbolt接口获取物理内存

Thunderbolt(又名雷电)是由Intel公司2009年设计完成的,并于2011年正式发布的一项新技术,其初始设计理念是用于连接PC和其他设备,用于替代计算机上数量繁多而性能参差不齐的扩展接口。对最初的Thunderbolt接口而言,每条通道都提供双向10 Gbit/s的带宽,目前,Thunderbolt3的传输率可达40 Gbit/s。Thunderbolt技术被广泛应用于苹果系列计算机中,在某些厂商(如惠普、戴尔)生产的部分Windows系统的笔记本计算机中也配有此接口。

美国的TALINO[16]数字取证工作室对Thunderbolt接口取证技术开展过相关研究。可以将3.2.3节中介绍的PCI Express内存读写器与一个PCI Express转Thunderbolt的转换器(如Sonnet Echo ExpressCard Thunderbolt 2 toExpressCard adapter)相连,使用转换器的Thunderbolt接口与目标计算机相连接,可读取带有Thunderbolt接口的苹果计算机Mac OS的物理内存。然而,对Windows 10以前的版本而言,由于其不支持Thunderbolt接口设备热插拔功能,在使用Thunderbolt读取计算机物理内存时,必须先连接上设备,然后重启目标计算机,使Windows系统识别出Thunderbolt设备,最后才能成功读取计算机物理内存。

以上都是基于DMA方式实现对计算机物理内存数据的访问,采用该方式能够在不干扰操作系统和CPU的情况下,较为准确地镜像物理内存。然而,Intel SGX和VT-d技术都会对以DMA方式获取内存数据产生一定影响。