基本概念:

在CTF中,内存取证一般指对计算机及相关智能设备运行时的物理内存中存储的临时数据进行获取与分析,提取flag或者与flag相关重要信息。

解题思路:

根据近来做题心得以及前人经验,明白了内存取证三步曲:解析Windows/Linux/Mac OS的内存结构、分析进程等内存数据、根据题目提示寻找线索和思路,提取分析指定进程的特定内存数据。

笼统的说,常见的内存结构存在于以下三大操作系统:

●Windows操作系统

●Linux操作系统

●Mac OS操作系统

难道真的要去深度学习这三种结构吗?认为暂时可以不用,只要我们在拿到内存数据文件时,能够判断该内存是哪种格式的。常见的内存文件格式有img、dmp、raw、vmem等。

知道了内存格式之后呢,就需要开始分析内存数据了,通过对应格式下的内存所在的对应的系统,我们可以使用对应的工具去进行分析。最后根据题目提示,进行针对性的去提取我们所需要的内存数据。

了解完内存取证的解题思路后,就要开始了解一下解题所需要用到的工具,这里给大家推荐一个比较好用的开源内存取证框架—-Volatility。

开源内存分析框架–Volatility

给大家介绍一下,Volatility Framwork是一款开源的基于Python开发的内存分析框架,它自带的分析插件支持分析内存镜像中所保留的历史网络连接信息、历史进程、历史命令记录等等。Kali系统自带,其他系统可自行到Github上进行Download。

使用方法:

基本命令格式

1
2
volatility -f [内存文件] --profile=[配置文件] <插件>
`eg:volatility -f /opt/test.vmem –profile=Win7SP1x86_23418 pslist

img

CTF中比较常用(目前用到过的)的插件:

img

img

基本用法(本期以Windows为例来阐述)

\1. 当我们拿到内存文件后,一般会做的便是先识别一下该内存文件一些信息(一般会去识别配置文件,然后通过对应的配置文件进行其他操作) 命令:volatility -f [内存文件] imageinfo

img

img

\2. 得到配置文件后,我们可以使用对应的配置文件进行相应的查询 a. 查看系统开放端口以及连接情况(发现可疑进程、可疑连接) 命令:volatility -f [内存文件] –profile=[配置文件] netscan

img

b. 查看系统注册表(获取主机名、IP等信息)

找到system注册表—hivelist: 命令:volatility -f [内存文件] –profile=[配置文件] hivelist

img

● 读注册表中的信息—printkey 命令:volatility -f [内存文件] –profile=[配置文件] printkey -o [虚拟地址] -K [注册表路径]

img

c. 查看剪切版中的信息(获取复制剪切的内容): 命令:volatility -f [内存文件] –profile=[配置文件] clipboard

img

d. 查看进程信息(发现可疑进程):

● 无法显示隐藏/终止的进程—pslist 命令:volatility -f [内存文件] –profile=[配置文件] pslist

img

● 显示隐藏/终止的进程—psscan 命令:volatility -f [内存文件] –profile=[配置文件] psscan

img

● 把进程以树的形式显示—pstree 命令:volatility -f [内存文件] –profile=[配置文件] pstree

img

e. 查看DLL文件(当我们发现可疑进程后,可通过此命令进行深度查看): 命令:volatility -f [内存文件] –profile=[配置文件] dlllist -p [PID]

img

f. 查看IE浏览器历史记录(获取IE浏览器浏览历史信息): 命令:volatility -f [内存文件] –profile=[配置文件] iehistory

img

g. 查看文件(获取可疑文件): 命令:volatility -f [内存文件] –profile=[配置文件] filescan

img

h. 查看命令行历史记录(获取执行的可疑命令) 命令:volatility -f [内存文件] –profile=[配置文件] cmdscan

img

i. 查看进程命令行参数(具体查看一些可疑进程的参数指令) 命令:volatility -f [内存文件] –profile=[配置文件] cmdline

img

j. 查看notepad文件(只能查看进程中的notepad.exe中的内容) 命令:volatility -f [内存文件] –profile=[配置文件] notepad

img

3.得到了一些信息有时候往往不过,有可能还需要我们提取内存中的数据再进行二次操作才可以得到flag a. 获取密码hash 命令:volatility -f [内存文件] –profile=[配置文件] hashdum

img

b. 获取对应进程(当我们发现某个进程中可能会存在我们所需的flag) 命令: volatility -f [内存文件] –profile=[配置文件] memdump -n [文件名(不带后缀)] -D [保存路径]

img

Or volatility -f [内存文件] –profile=[配置文件] memdump -p [PID] -D [保存路径]

img

效果:

img

c. 打印注册表中的对应表的数据: 命令:volatility -f [内存文件] –profile=[配置文件] hivedump -o [虚拟地址]

img

d. 转储内存中的文件 命令:volatility -f [内存文件] –profile=[配置文件] dumpfiles -Q [偏移地址] -D [保存路径]

img

效果:

img

e. 转储内存中的进程里exe文件 命令:volatility -f [内存文件] –profile=[配置文件] procdump -p [PID] -D [保存路径]

img

效果:

img

这些便是volatility内存分析框架目前在比赛中比较常见的一些用法。具体操作还是需要跟着题目的提示或者一些隐藏在字里行间的需求来做题。

查看网络连接

命令:volatility -f [内存文件] –profile=[配置文件] connscan

image-20210830165418017