Ethan's Blog

内存取证艺术

字数统计: 1.2k阅读时长: 4 min
2019/05/27 Share

题记:

取证是一种艺术,取证的过程就像是一个烹饪美食的过程。需要在不断的细腻中寻找灵感,对于取证来说就是一个抽丝剥茧的过程。最近突然喜欢上了取证,于是就写下这篇文章。

正文:

Volatility 简介:

Volatility是一款开源的,基于Python开发的内存取证工具集,可以分析内存中的各种数据。Volatility支持对32位或64位Wnidows、Linux、Mac、Android操作系统的RAM数据进行提取与分析。

这里有一个可疑文件以及该存储该文件电脑的一个内存快照,我们利用这个来玩一下内存取证的过程,同样这个资源也是一个内存取证大赛的文件,我们借来分析一下。

volatility 使用:

volatility -f <文件名> –profile=<配置文件> <插件> [插件参数]

获取–profile的参数

使用imageinfo插件来猜测dump文件的profile值:WinXPSP2x86

1
volatility -f mem.vmem imageinfo

Profiles(配置文件)

profile是特定操作系统版本以及硬件体系结构(x86,x64,ARM)中VTypes,共用体,对象类型的集合.除了这些组件以外,profile还包括如下:

  • 元数据:操作系统的名称(例如:”windows”,”mac”,”linux”),内核版本,以及编译号.
  • 系统调用信息:索引以及系统调用的名称
  • 常量值:全局变量-在某些操作系统中能够在硬编码的地址处找到的全局变量
  • 系统映射:关键全局变量和函数的地址(仅限Linux和Mac)

每个profile(配置文件)有个一个唯一的名称,通常是由操作系统的名称,版本,服务包,系统结构等信息组成.例如:Win7SP1x64是64位的Windows 7 SP1系统配置文件的名称.

可以看到有多个结果,通常来说第一个结果是正确的.imageinfo,kdbgscan这两个插件仅适用于Windows系统的内存dump文件.而Linux,Mac确定正确的profile值有其他的方法.

现在我们就可以指定profile这个选项的值了.

1
volatility -f mem.vmem –profile=WinXPSP2x86 volshell

volshell这个插件用于进入Volatility专属的shell.在该shell中可以利用dt(“内核关键数据结构名称”)命令来查看操作系统内核关键数据结构的定义.

shell的命令:

dt(“内核关键数据结构名称”)

如:

dt(“_PEB”)

列举进程:

1
volatility -f mem.vmem –profile=WinXPSP2x86 pslist

列举缓存在内存的注册表 :

1
volatility -f mem.vmem –profile=WinXPSP2x86 hivelist

hivedump 打印出注册表中的数据 :

1
volatility -f mem.vmem –profile=WinXPSP2x86 hivedump -o 注册表的 virtual 地址


获取SAM表中的用户 :

1
volatility -f mem.vmem –profile=WinXPSP2x86 printkey -K "SAM\Domains\Account\Users\Names"

可以看到有4个用户

获取最后登录系统的账户 :

1
volatility -f mem.vmem –profile=WinXPSP2x86 printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

提取出内存中记录的 当时正在运行的程序有哪些,运行过多少次,最后一次运行的时间等信息

1
volatility -f mem.vmem –profile=WinXPSP2x86 userassist

将内存中的某个进程数据以 dmp 的格式保存出来 。

1
volatility -f mem.vmem –profile=WinXPSP2x86 memdump-p [PID] -D [dump 出的文件保存的目录]

二进制编辑器 hexeditor 将以上保存的 dmp 文件打开,并进行调查取证的工作 。

hexeditor 1464.dmp

你还可以使用 strings 这个工具将它的字符串打印出来。

例:

1
2
strings 1464.dmp > 1464.txt 
strings 1464.dmp > 1464.txt | grep shellcode

提取内存中保留的 cmd 命令使用情况 。

volatility -f mem.vmem –profile=WinXPSP2x86 cmdscan

获取到当时的网络连接情况 。

volatility -f mem.vmem –profile=WinXPSP2x86 netscan

获取 IE 浏览器的使用情况。

volatility -f mem.vmem –profile=WinXPSP2x86 iehistory

获取内存中的系统密码,我们可以使用 hashdump 将它提取出来 。

volatility -f mem.vmem –profile=WinXPSP2x86 hashdump -y (注册表 system 的 virtual 地址 )-s (SAM 的 virtual 地址)

volatility -f mem.vmem –profile=WinXPSP2x86 hashdump -y 0xe1035b60 -s 0xe16aab60

解题步骤:

首先解压获得的两个文件,一个是内存文件,另一个是加密文件。

使用volatility 查看进程,可以发现一个TrueCrypy.exe的进程。

volatility -f mem.vmem –profile=WinXPSP2x86 pslist

TrueCrypy.exe是一款加密程序,而我们可以推出,suspicion为加密的结果。

我们需要从内存dump出key来。

volatility -f mem.vmem –profile=WinXPSP2x86 memdump -p 1464 -D ctf/

dump出来的文件为1464.dmp 。

Elcomsoft Forensic Disk Decryptor 的使用

我们需要借助Elcomsoft Forensic Disk Decryptor(Elcomsoft硬盘取证解密器,简称为EFDD)软件来获取key和破解文件 。

当我们选择挂载以后,我们可以在挂载后的存储空间里找到我们想要的内容。

Think one Think

内存取证之所以可以称为艺术,对我来说它似乎给了你一种超能力,能够把时间的记忆存储下来,通过我们的内存快照技术,我们给时间拍了一张时间photo,从而在不可否认的记忆里,寻找我们想要的证据!

CATALOG
  1. 1. 题记:
  2. 2. 正文:
  3. 3. Think one Think