CTF| 攻击取证之内存分析

基本概念

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

解题思路

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

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

●Windows操作系统

●Linux操作系统

●Mac OS操作系统

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

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

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

开源内存分析框架--Volatility

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

使用方法:

基本命令格式

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

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

插件名

作用

imageinfo

识别内存映像相关信息(包括了配置文件类型、处理器数量、文件类型、文件日期与时间等等)

netscan

扫描内存中的连接以及开放端口

hivelist

列出注册表配置文件中的注册表信息

printkey

打印注册表项及其子项和对应的值

clipboard

打印内存中Windows剪切板中的内容

pslist

按照EPROCESS列表列出所有正在运行的进程

psscan

扫描内存中的进程

pstree

将内存中的进程以树的结构打印出来

dlllist

列出每个进程已加载的DLL

iehistory

重建Internet Explorer缓存/历史记录

filescan

扫描内存中的文件对象

cmdscan

通过扫描_COMMAND_HISTORY提取命令历史记录

cmdline

显示进程命令行参数

notepad

列出当前显示的记事本文本

hashdump

从内存中转储指定的密码hash

memdump

转储出可寻址的内存数据

hivedump

打印内存中指定的注册表信息

dumpfiles

提取内存映射以及缓存文件

procdump

将进程转储到可执行文件中

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

效果:

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

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

效果:

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

效果:

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

小结

以上还只是解题的思路以及工具用法,但是不去用它,我们还是不懂怎么去使用,学习并不仅仅只在于理论,更重要的是实践,只有理论结合实际,我们才能对某一类题目做到得心应手。最后,为了能加深大家对内存取证工具使用的熟练,斗哥也为大家准备了一些小题目,希望大家都能好好做,好好学习内存取证类题目的思路以及工具使用。

比较会装傻卖萌

比较想你关注我(* ̄∇ ̄*)

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2019-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券