网络安全应急响应----10、内存分析



目前的内存镜像获取方法主要分为基于硬件设备的和基于软件的。两种方式虽然都能完整获取到内存中的数据,但是二者也有很大的差异。除此之外,其他的获取方式有虚拟化环境下获取内存、系统崩溃转储的内存获取等。
硬件方式获取:可以最大限度地保持数据的原始性,但是需要特殊的物理设备支持,甚至需要提前安装在目标计算机上。
软件方式方式:可能会对原有的数据产生一定程度的干扰,不需要特定硬件设备的支持。如果操作合理,也能得到较为完整的内存数据镜像。

在应急响应中,一般使用Dumpit、Redline、 RAM Capturer、FTK lmager、Volatility等工具就可以满足我们的需求,有时候会存在某个工具无法获取内存,但是其他工具又可以的情况。下面文章可以不看,在搜索引擎搜一下工具的使用教程及分析方法


一、基于软件的内存获取技术和工具

基于软件的内存镜像获取方式依赖于操作系统提供的物理内存访问技术,这是在线取证中获取物理内存镜像的关键技术。
在较低版本的操作系统中,一般都提供了直接访问系统物理内存的对象或设备,可以直接在用户模式下读写系统物理内存数据。
较高版本的操作系统中,不再支持上述对象或设备的访问。而运行在核心态的驱动程序,能将虚拟地址空间映射为物理地址空间,从而访问物理内存地址。如果还想在用户模式下读写系统物理内存数据,就需要自己开发相应驱动或内核扩展程序实现对内存数据的访问。因此,按照实现原理划分,获取内存镜像的软件可分为两类:利用对象或设备直接读取物理内存的软件和利用驱动或内核扩展读取物理内存的软件

1.1、利用对象或设备直接读取物理内存的软件

在Windows XP系统中,各种资源以对象(Object) 的形式组织。Windows XP提供了一个位于\Device路径下的Section内核对象PhysicalMemory。使用sysinternals (引用网址)工具查看内核对象PhysicalMemory,通过系统提供的应用程序编程接口API函数对该对象进行读取,用户程序就实现了对物理内存的访问。Data-Dumper(dd)、mdd、dumpmmf,,它们都可以通过访问\Device'\PhysicalMemory获取内存数据。

Windows系统下获取内存的软件
1、dd
当用户以管理员权限运行dd时,工具通过调用内建的\\.\Device\PhysicalMemory内存区对象来创建目标机器的内存dump文件。
2、process dumper utility
此工具能够转储一个正在运行的进程内存空间,包括该进程空间内所有的数据和代码。除此之外该工具使用元信息描述不同的映射并保存进程环境和状态。
3、mdd
mdd是ManTech International Corporation开发的获取Windows系统物理内存镜像的工具,它可以获取Windows 2000、Windows XP、Windows Vista和Windows Server系统的内存镜像,对于Windows XP SP1及其以下版本的内存镜像的获取,它是通过读取\\.\Device\PhysicalMemory内存区对象实现的。

Linux\Mac OS下获取内存的软件
1、/dev/mem
/dev/mem是操作系统提供的一个对物理内存的映射。首先使用open函数打开/dev/mem设备,然后使用mmap映射到用户空间实现应用程序对内存信息的读取。然而/ dev/ mem的映射区域有限,只映射了RAM的896 MB地址,通过它无法完全获取更大的RAM。因此,目前较为主流的L inux版本不再支持此设备的映射。Mac OS X 10.4以后的版本也删除了/dev/mem文件。
2、/dev/ kmem
和/dev/mem不同的是,/dev/kmem是 虚拟内存的映射,使用者可以以用户态直接访问内核虚拟地址空间。这样会给系统安全带来隐患,因此目前Linux主流发行版已经禁止使用/dev/kmem设备。
3、Ptrace
Ptrace是Linux本身提供的用户态调试接口,此接口适用于对某个进程的内存空间信息获取,而不是对全部内存信息的获取。首先通过读取/proc//maps获取指定进程的地址空间范围,然后对内存信息逐页获取存至磁盘。
4、/proc/kcore
/proc/kcore文件将内核的虚拟地址空间以ELF(Executable and Linking Format) 文件的形式导出在用户空间,在32 bit系统中,获取地址局限在896MB以内。不过通过此文件获取内存的步骤较为繁琐,需要专门的工具配合使用获取内存信息。
随着操作系统对安全权限等的重视,现在主流操作系统上,运行在用户态的程序已经无法获取完整的物理内存镜像

1.2、利用驱动或内核扩展读取物理内存的软件

用户模式的进程不允许执行CPU的一些指令,对系统数据、地址空间以及硬件的访问是受到严格限制的。因此,从用户模式访问系统的全部物理内存数据,需要将一个内核模式驱动程序装载到系统中并调用它,从而利用驱动拥有的权限对底层硬件(物理内存)信息进行读写操作。

Windows下获取内存的软件
1、win32dd
win32dd是由suiche开发的一款运行于内核级的内存获取工具(可从moonsols网站下载),该工具的运行要求用户具有管理员权限,通过MmMaploSpace()映射函数实现对内存的映射。
2、Memoryze
Memoryze是一款由Mandiant开发的免费的内存取证软件(可从mandiant网站下载)。它可以帮助取证调查人员镜像内存或从实时内存中分析关键信息。
3、Windows Memory Reader
Windows Memory Readerl 是一款由National Institute of Justice提出的免费获取物理内存的命令行工具,该工具支持对32 bit和64 bit Windows XP-Windows 8系统物理内存的获取。可以通过该工具获取设备的内存映射数据,如共享的video设备的内存。除此之外,还有很多提供了内存镜像功能的软件,如Encase (可从Guidance Software官网获得)和FTK Imager (可从Access Data网站下载)等。

Linux\Mac OS系统下获取内存的软件
1、Memdump
Coroner取证包中的Memdump工具跳过内存映射将系统内存转储到标准输出流,可以在Solaris、FreeBSD、RedHat、OpenBSD以及SunOS等多个系统中使用。
2、SecondLook
SecondLook是一款商业安全产品,可以用于Linux系统的内存取证和完整性扫描,并对物理内存中存在的未知和潜在恶意代码进行报警。Secondlook提供了本地和远程两种内存获取方式,本地获取方式通过在本机中运行命令行脚本获取物理内存,远程获取方式通过调用目标系统中的内存获取代理程序目标系统中的物理内存信息。除了提供内存获取功能外,SecondLook也可以通过分析检测系统中存在的恶意程序、隐藏的rootkit以及后门等恶意行为来实时分析系统物理内存。
3、LiME
LiME (Linux Memory Extractor) 是目前使用较为广泛的内存获取工具(可从github下载),是一种可加载内核模块(LKM, Loadable Kernel Module) ,以此获得 inux设备中易失性存储器中的内容。使用LiME时首先加载-一个内核驱动,然后在用户态调用内核驱动获取内存信息,减少了获取过程中用户和内核空间进程之间的互动,提高了获取性能。另外,在获取过程中,LiME通过枚举内核中iomem_resouce链表获取物理内存段信息,按照分段信息的起始和终结地址依次获取内存,且可以处理物理内存较大的目标设备。
LiME提供了3种获取内存格式: raw、padded和lime
raw格式:是指获取全部物理内存段的物理内存;
padded:是指除获取物理内存段物理内存外,其他段以0填充;
lime:除获取物理内存外,每段内存段前附加了格式为lime_header结构体的数据。
4、Mac Memoryze
Mac Memoryze ( 可从mandiant网站下载)可以获取Mac OS X 10.6~Mac OS X 10.8的内存。该软件输出raw格式的内存转储文件。除了内存获取功能,Mac Memoryze具有基本的内存分析功能:获取进程链表、转储进程内存空间、显示每个进程加载的库和建立的网络连接、获取加载的内核扩展、分析系统调用表hook。


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

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

2.1、使用网卡获取物理内存

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

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

PCI Express接口总线具有64 bit地址空间访问能力, 因此,基于该接口的内存读写工具能读取4GB以上的物理内存数据。

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桥接控制器的高16bit数据端经数据传输接口转换模块与USB控制器的16 bit数据端相连接;;USB控制器、PCI-E桥接控制器的控制信号均与配置接口转换模块相连接,USB控制器、PCI -E桥接控制器的总线仲裁信号均与总线逻辑模块相连接。
使用该设备读取内存的流程如下:
在这里插入图片描述

2.4、基于Thunderbolt接口获取物理内存

Thunderbolt技术被广泛应用于苹果系列计算机中,在厂商(如惠普、戴尔)生产的部分Windows系统的笔记本计算机中也配有此接口。
使用转换器的Thunderbolt接口与目标计算机相连接,可读取带有Thunderbolt接口的苹果计算机Mac OS的物理内存。对Windows 10以前的版本而言,由于其不支持Thunderbolt接口设备热插拔功能,在使用Thunderbolt读取计算机物理内存时,必须先连接上设备,然后重启目标计算机,使Windows系统识别出Thunderbolt设备,最后才能成功读取计算机物理内存。
以上都是基于DMA方式实现对计算机物理内存数据的访问,采用该方式能够在不干扰操作系统和CPU的情况下,较为准确地镜像物理内存。


三、内存获取的其他方式

除了使用软硬件工具镜像计算机的物理内存,还可以通过其他途径访问内存数据。

3.1、虚拟化环境下获取内存

现在的大部分虚拟机都具有快照功能,该功能将虚拟机操作系统的当前内存以文件的形式保存在相应的主机系统中。例如,VMware
Workstation虚拟机的快照会在本地磁盘产生一个“vmem”后缀的文件,以保存当前虚拟机系统的全部内存数据,该文件格式与DD工具得到的内存格式类似,都保留了原始的系统内存内容。采用这种方式可以方便地得到某一时刻的系统内存数据。
虽然实际的目标计算机很少运行在虚拟机中,但是基于其跨平台、易于操作并可以多次获取运行中系统内存的特性,可以把虚拟机的内存文件作为内存分析研究阶段的内存数据来源直接使用。

3.2、内存转储(Memory Dump)方式

操作系统为了调试和报告错误,通常提供了系统出错时的内存转存功能,可以利用系统自带的或者根据此功能开发的取证工具获取物理内存。

3.3、休眠文件保存的内存信息

很多操作系统提供了休眠功能,休眠时内存信息往往以文件的形式保存在磁盘中,如Windows系统中的hyberfle.sys文件、Mac OS的/var/vm/.sleepimage.swp文件等。

3.4、页面交换文件中的内存信息

为了解决物理内存不足的问题,引入了虚拟内存的概念。系统在运行过程中,只对真正需要内存的进程分配所需的内存,这样才能保证每个进程都有内存可以使用。但是当系统中同时执行很多个程序,或者某个程序需要使用的内存数据超出了物理内存的容量时,内存还是会被占用完,这样便无法继续执行其他的应用程序。为了解决这个问题,操作系统在磁盘空间中专门创建了文件对内存数据进行缓存,可以将这部分磁盘空间当作真正的物理内存来使用,操作系统通过一些换入换出操作完成该文件和真正物理内存的数据交换。对于上层的应用程序来说,这个过程是透明的。这些文件中或多或少地保存有内存数据。在内存取证分析过程中,为了尽可能多地利用这部分数据,也需要对该文件进行获取和分析。
操作系统一般会限制用户对这类文件的访问,在系统运行时,无法直接使用操作系统的文件管理功能获取。
下面以Windows操作系统的页面交换文件pagefle.sys为例,说明如何直接根据磁盘的文件系统,从底层获取到这些文件的内容。Windows系统创建的内存交换文件pagefle.sys,通常存储在%SystemRoot%目录下。默认情况下,其大小与物理内存大小相同,也可以在系统设置中调整其占用的磁盘空间。在Windows操作系统运行过程中,该文件是被内核锁定的,无法使用Windows系统提供的文件复制功能来提取该文件。
目前,Windows系统中最常用的文件系统为NTFS (New Technology File System)。NTFS文件系统中一个非常重要的概念是文件相关的元数据文件,简称“元文件”。主文件表(MFT,Master File Table) 是NTFS的核心,它包含了所有文件和目录的信息。只要找到了页交换文件MFT记录就可以知道页交换文件在硬盘上的起始位置和大小,接着就可以通过直接读取磁盘扇区的方法来复制这个页交换文件。

软件实现通过NTFS文件系统,获取pagefle.sys文件的步骤如下:
主文件表(MFT) 定位
分析操作系统所在分区的BPB (BIOS Parameter Block) 数据区,该数据区位于NTFS分区中的第一个区域。通过查找MFT (Master File Table)的起始逻辑簇号、每簇扇区数和每扇区字节数可以计算出根目录的位置。具体实现是选中磁盘,获取磁盘句柄,然后读取该磁盘引导扇区中的BPB参数,获得MFT逻辑簇号MFT_L ogic_Address。 如此就可以找到$MFT的偏移位置。

页面文件的文件记录定位
MFT为NTFS文件系统的第一条文件记录。磁盘中的每个文件都有自己的文件记录,每条文件记录是固定的1KB,而且在磁盘中连续存放。从$MFT的文件记录开始的16条记录是系统文件的文件记录。每条文件记录由若干文件属性组成,每个属性有相同的格式,开始是一个标准属性记录头,然后是属性的数据段。搜索文件名需要用到文件的FILE_NAME属性,该属性值存放的内容是文件名,在NTFS中用0x30作为属性标识符。从$MFT的文件记录开始,挨个搜索系统分区的文件记录,提取文件记录中文件名属性,与字符串pagefle.sys进行匹配,即可找到页面文件的文件记录。

获取页面文件的物理地址
找到pagefle.sys的文件记录之后,利用文件记录中的另外一个属性DATA,在NTFS中以0x80作为标识符。NTFS中文件记录的属性头有两种格式:驻留属性和非驻留属性。驻留属性中文件的数据直接存储在文件记录中,大小不能超过700 KB。 pagefle.sys文件的大小默认和物理内存的大小相同,远大于700 KB, 因此文件记录的DATA属性头采用的是非驻留属性格式。通过分析DATA属性便可得到pagefle.sys文件的物理偏移地址和文件大小。利用得到的文件偏移地址和文件大小,直接读取磁盘的数据,并将数据写到目标文件中即可完成pagefle.sys文件的提取。

3.5、系统崩溃转储的内存获取
打开系统属性-->高级-->启动和故障恢复-->设置按钮,打开启动和故障恢复–>核心内存转储并找到转储文件进行获取。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李沉肩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值