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

2.1 PC硬件架构

本书所说的PC指的是采用英特尔或兼容的处理器,可以运行Windows、Linux或Mac操作系统的计算机。需要注意的是,术语随着时间的推移会发生变化,而且技术上的细节往往日新月异,变化极快,但是构成PC的大部分组件执行的主要功能是相同的。

多年来,个人计算机和小型服务器被标准化到了一个芯片组上,并被集成到称为主板的主电路板上。主板上安装了组成计算机的主要电路系统,并提供扩展插槽,供PC机外围设备的控制卡(适配器)插接。计算机各种功能部件之间通过总线传递信息。图2-1说明了本章所讨论的计算机各功能部件之间是如何组织的。

图2-1 PC硬件架构

2.1.1 中央处理器和内存管理单元

中央处理器(CPU)和内存是组成计算机的两大核心部件。CPU的主要功能是解释计算机指令以及处理计算机软件中的数据,并执行指令。内存的作用是暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。操作系统把指令和数据加载到内存中,CPU从主内存中读取指令并进行运算。

CPU与主内存之间存在着巨大的速度差异,如果频繁占用CPU与主内存之间的传输总线,也会大大影响系统的效率。因此,现代计算机系统通过在CPU与主内存之间添加高速缓冲存储器(Cache)来解决这个问题。主内存将CPU需要的数据提前送至缓存内,CPU不通过传输总线,能够直接从缓存中读取所需信息,从而提高了系统的效率。现代计算机系统一般采用分级缓存的设计,每级缓存(L1,L2……)相对前一级来说容量大,但是速度慢。CPU对缓存和主内存的操作是由硬件及其辅助软件完成的,对应用程序是透明的,用户级的程序并不知道其所操作的内容是在缓存内还是在主存中。

CPU中的内存管理单元负责将用户程序的虚拟地址请求映射为实际的物理地址,并提供硬件机制的内存访问授权。引入地址转换机制后,增加了内存的访问操作,大大降低了系统的性能。因此,处理器使用一种特殊的硬件设备转换检测缓冲区(TLB,Translation Lookaside Buffer)来缓存页表项(PTE,Page Table Entry),以加速对线性地址的转换操作。当线性地址第一次被使用时,通过页目录、页表计算得出相应的物理地址,这个地址在使用后将被缓存在TLB中,以备将来对同一线性地址引用时直接从TLB中得到其对应的物理地址。还要注意的是,当CR3控制寄存器被更新时,硬件将自动使TLB中的所有项设置为无效,因为CR3被更改后将存放新的页目录基地址,所以线性地址转换时不允许再引用TLB中的表项。

2.1.2 寄存器

寄存器(Register)是CPU中一组容量很小,访问速度极快的存储器。IA-32架构下,每个内核包含8个32 bit的通用寄存器,用来执行逻辑和算数运算;同时也包含一些用于控制其他处理器行为的寄存器。

CPU中与内存相关的寄存器如下。

(1)EIP寄存器:指令寄存器,存放当前指令的下一条指令的地址。

(2)IA32_EFER MSR:IA-32e模式的特别寄存器,包含IA-32e模式的控制和操作标志位。在内存分析中,主要关心其与64 bit架构下分页机制相关的控制标志位。

(3)控制寄存器(CR0~CR4)

CR0含有控制处理器工作模式和状态的控制标志。

CR1保留未用。

CR2含有导致页错误的线性地址。当根据某个线性地址所寻址的页不在内存中时将触发一个缺页异常,此时处理器负责将该线性地址加载至CR2寄存器从而把适当的页重新加载到内存中。

CR3含有地址转换的初始结构,该结构含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器(PDBR,Page-Directory Base address Register)。当新的任务准备执行时,该寄存器内容会被更新。

CR4用来标志使用架构的扩展功能,包括PAE。

2.1.3 南北桥芯片

内存控制器是计算机系统内部控制内存并且通过内存控制器使内存与CPU和设备之间交换数据的重要组成部分。内存控制器决定了计算机系统的内存性能。

传统PC使用了南北桥芯片组的设计。北桥芯片被用来处理高速信号,通常处理CPU、主内存、PCI Express以及和南桥之间的通信。南桥芯片负责低速设备和北桥之间的通信,如网卡、磁盘控制器等。在老型号的计算机上,CPU使用前端总线(FSB,Front-Side-Bus)和北桥中的内存控制器连接,北桥通过内存总线与主内存连接。接入南桥的设备共用南北桥之间的总线访问内存和CPU。

现在,内存控制器的功能已经整合到了CPU的内部。

2.1.4 直接存储器访问

现代计算机系统提供了一种高速的数据传输操作功能,允许在外部设备和存储器之间直接读写数据,整个数据传输在DMA控制器控制下进行,不需要CPU干预。这种功能称为直接存储器访问(DMA,Direct Media Access)。没有DMA功能之前,CPU必须作为一个媒介处理输入/输出,极影响系统的性能。通过DMA机制,CPU或者某些外部设备可以启动数据传输并通过DMA控制管理数据传输。

DMA对内存取证有特别的意义:可以不使用运行在主机中的软件,而是通过计算机的外围设备直接访问物理内存中的内容。例如,PCI总线支持设备作为总线主控,意味着可以请求控制总线发起传输,一个支持总线主控和DMA的PCI设备就可以不通过CPU访问系统的内存。另外一个例子是IEEE 1394接口,一般也称为Firewire,中文直译为火线。IEEE 1394主控芯片提供了端到端的串行扩展总线,用于连接高速外围设备到PC。如果计算机提供了IEEE 1394接口,那么也可以通过这个接口的设备,不经CPU而访问计算机物理内存中的信息。

2.1.5 内存

如果没有特别说明,本书一般提到内存时,是指计算机使用随机存储器(RAM,Random Access Memory)动态地存储程序和数据,CPU能直接寻址的存储空间,又称主存。随机存储指的是存储器存取的速度与存储单元的位置无关。内存是内存取证需要研究的主要数据空间。

最为常见的系统内存使用动态随机存取存储器(DRAM,Dynamic Random Access Memory)。DRAM使用电容存储,所以必须隔一段时间刷新一次,如果存储单元没有被刷新,存储的信息就会丢失。定期更新的任务一般由内存控制器完成,因此,内存中的数据被认为是不稳定的、易变和易失的。除了冷启动攻击(Cold Boot见第3章)的情况,计算机关机后,内存中存储的数据就丢失了。这也是在需要获取在线证据时,不能拔掉电源的原因(而拔掉电源是很多旧的计算机取证或者应急响应指导、手册中推荐的首要步骤)。