Volatility
Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
特点:
-
开源:Python编写,易于和基于python的主机防御框架集成。
-
支持多平台:Windows,Mac,Linux全支持
-
易于扩展:通过插件来扩展Volatility的分析能力
安装分为三步走:
-
下载
-
安装必要的python依赖文件
-
安装本体
你可以在Release中找到对应你系统(Mac,Win,Linux)的源代码,当然也可以通过github去获取源码:
git clone https://github.com/volatilityfoundation/volatility.git
软件官方GitHub:https://github.com/volatilityfoundation
获取支持python2的软件:
https://github.com/volatilityfoundation/volatility
获取支持python3的软件:
https://github.com/volatilityfoundation/volatility3
如果只是用Volatility本体的话,这些依赖是没必要装的,但是如果你想用某些插件,还是把以下这些必备的依赖包装上吧。
Distorm3:牛逼的反编译库
pip install distorm3
Yara:恶意软件分类工具
pip install yara
PyCrypto:加密工具集
pip install pycrypto
PIL:图片处理库
pip install pillow
OpenPyxl:读写excel文件
pip install openpyxl
ujson:JSON解析
pip install ujson
如果你用的是独立的win、linux、mac执行文件,那就不必安装了。只要用python去执行就好。
若是下载了压缩文件,那你可以选择直接运行python主程序,也可以选择使用python setup.py install
的方式将Volatility以一个库的形式安装在系统的特定位置上,从而以后我们可以将Volatility作为一个库在其他脚本中去引用其namespace。
先通过 imageinfo 获取系统信息
python2 vol.py -f Target.vmem imageinfo
使用hashdump命令获取用户名
python2 vol.py -f Target.vmem --profile=Win7SP1x64 hashdump
lsadump命令获取最后登录的用户
python2 vol.py -f Target.vmem --profile=Win7SP1x64 lsadump
可以直接使用mimikatz插件获取flag
插件下载地址:https://github.com/ruokeqx/tool-for-CTF
python2 vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz
获取flag flag{W31C0M3 T0 THiS 34SY F0R3NSiCX}
┌──(root💀kali)-[/volatility-master]
python2 vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz
Volatility Foundation Volatility Framework 2.6.1
Module User Domain Password
---------------- ---------------- ----------------------------------------
wdigest CTF WIN-QUN5RVOOF27 flag{W31C0M3 T0 THiS 34SY F0R3NSiCX}
wdigest WIN-QUN5RVOOF27$ WORKGROUP
补充扩展
基本概念
在CTF中,内存取证一般指对计算机及相关智能设备运行时的物理内存中存储的临时数据进行获取与分析,提取flag或者与flag相关重要信息。
解题思路
解析Windows/Linux/Mac OS的内存结构、分析进程等内存数据、根据题目提示寻找线索和思路,提取分析指定进程的特定内存数据。
笼统的说,常见的内存结构存在于以下三大操作系统:
●Windows操作系统
●Linux操作系统
●Mac OS操作系统
只要我们在拿到内存数据文件时,能够判断该内存是哪种格式的。常见的内存文件格式有img、dmp、raw、vmem等。
知道了内存格式之后呢,就需要开始分析内存数据了,通过对应格式下的内存所在的对应的系统,我们可以使用对应的工具去进行分析。最后根据题目提示,进行针对性的去提取我们所需要的内存数据。
了解完内存取证的解题思路后,就要开始了解一下解题所需要用到的工具,推荐一个比较好用的开源内存取证框架----Volatility。
开源内存分析框架--Volatility
Volatility Framwork是一款开源的基于Python开发的内存分析框架,它自带的分析插件支持分析内存镜像中所保留的历史网络连接信息、历史进程、历史命令记录等等。Kali系统自带,其他系统可自行到Github上进行Download。
使用方法:
基本命令格式
python vol.py -f [内存文件] --profile=[配置文件] <插件>
eg:python vol.py -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. 当我们拿到内存文件后,一般会做的便是先识别一下该内存文件一些信息(一般会去识别配置文件,然后通过对应的配置文件进行其他操作)
命令:
python vol.py -f [内存文件] imageinfo
2. 得到配置文件后,我们可以使用对应的配置文件进行相应的查询
a. 查看系统开放端口以及连接情况(发现可疑进程、可疑连接)
命令:
python vol.py -f [内存文件] --profile=[配置文件] netscan
b. 查看系统注册表(获取主机名、IP等信息)
找到system注册表—hivelist:
命令:
python vol.py -f [内存文件] --profile=[配置文件] hivelist
● 读注册表中的信息—printkey 命令:
python vol.py -f
c. 查看剪切版中的信息(获取复制剪切的内容):
命令:
python vol.py -f [内存文件] --profile=[配置文件] clipboard
d. 查看进程信息(发现可疑进程):
● 无法显示隐藏/终止的进程—pslist
命令:
python vol.py -f [内存文件] --profile=[配置文件] pslist
● 显示隐藏/终止的进程—psscan
命令:
python vol.py -f [内存文件] --profile=[配置文件] psscan
● 把进程以树的形式显示—pstree
命令:
python vol.py -f [内存文件] --profile=[配置文件] pstree
e. 查看DLL文件(当我们发现可疑进程后,可通过此命令进行深度查看):
命令:
python vol.py -f
f. 查看IE浏览器历史记录(获取IE浏览器浏览历史信息):
命令:
python vol.py -f [内存文件] --profile=[配置文件] iehistory
g. 查看文件(获取可疑文件):
命令:
python vol.py -f [内存文件] --profile=[配置文件] filescan
h. 查看命令行历史记录(获取执行的可疑命令) 命令:
python vol.py -f [内存文件] --profile=[配置文件] cmdscan
i. 查看进程命令行参数(具体查看一些可疑进程的参数指令) 命令:
python vol.py -f [内存文件] --profile=[配置文件] cmdline
j. 查看notepad文件(只能查看进程中的notepad.exe中的内容) 命令:
python vol.py -f [内存文件] --profile=[配置文件] notepad
3.得到了一些信息有时候往往不过,有可能还需要我们提取内存中的数据再进行二次操作才可以得到flag a. 获取密码hash 命令:
python vol.py -f [内存文件] --profile=[配置文件] hashdump
b. 获取对应进程(当我们发现某个进程中可能会存在我们所需的flag) 命令:
python vol.py -f
python vol.py -f
c. 打印注册表中的对应表的数据:命令:
python vol.py -f
d. 转储内存中的文件 命令:
python vol.py -f [内存文件] --profile=[配置文件] dumpfiles -Q [偏移地址] -D [保存路径]
python vol.py -f
Volatility入门指令篇:
python vol.py -f name imageinfo
--profile=Win10x64_18362 pslist 列举进程
python vol.py -f name --profile=Win10x64_18362 volshell
查看进程环境块
Win10x64_18362 hivelist 列举缓存在内存的注册表 =
python vol.py -f name --profile=Win10x64_18362 hivedump -o 注册表的 virtual 地址
python vol.py -f name --profile=Win10x64_18362 dlllist> dlllist.txt
python vol.py -f name --profile=Win10x64_18362 printkey -K "SAMDomainsAccountUsersNames"
登录账户系统
python vol.py -f name --profile=Win10x64_18362 printkey -K "SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
userassist键值包含系统或桌面执行文件的信息,如名称、路径、执行次数、最后一次执行时间等
python vol.py -f name --profile=Win10x64_18362 userassist
将内存中的某个进程数据以 dmp 的格式保存出来
python vol.py -f name --profile=Win10x64_18362 -p
提取内存中保留的 cmd 命令使用情况
python vol.py -f name --profile=Win10x64_18362 cmdscan
获取到当时的网络连接情况
python vol.py -f name --profile=Win10x64_18362 netscan
python vol.py -f name --profile=Win10x64_18362 iehistory
获取内存中的系统密码,可以使用 hashdump 将它提取出来
python vol.py -f name --profile=Win10x64_18362 hashdump -y (注册表 system 的 virtual 地址 )-s (SAM 的 virtual 地址)
python vol.py -f name --profile=Win10x64_18362 hashdump -y 0xe1035b60 -s 0xe16aab60
python vol.py -f name --profile=Win10x64_18362 timeliner
对文件查找及dumo提取某个进程
python vol.py -f name --profile=Win10x64_18362 memdump -D . -p 2872
strings -e l ./2872.dmp | grep flag
python vol.py -f name --profile=Win10x64_18362 dumpfiles -Q 0x000000007e410890 -n --dump-dir=./
HASH匹配用户账户名密码
Hash, 然后使用john filename --format=NT破解
安全进程扫描
python vol.py -f name --profile=Win10x64_18362 psscan
Flag字符串扫描
strings -e l 2616.dmp | grep flag
查找图片
python vol.py -f name --profile=Win10x64_18362 filescan | grep -E 'jpg|png|jpeg|bmp|gif
python vol.py -f name --profile=Win10x64_18362 netscan
注册表解析
python vol.py -f name --profile=Win10x64_18362 hivelist
python vol.py -f name --profile=Win10x64_18362 -o 0xfffff8a000024010 printkey -K "ControlSet001Control;"
复制、剪切版
python vol.py -f name --profile=Win10x64_18362 clipboard
python vol.py -f name --profile=Win10x64_18362 dlllist -p 3820
Dump所有进程
python vol.py -f name --profile=Win10x64_18362 memdump -n chrome -D .
利用字符串查找download
python vol.py -f name --profile=Win10x64_18362 shimcache
svcscan查看服务
python vol.py -f name --profile=Win10x64_18362 svcscan
modules 查看内核驱动
modscan、driverscan 可查看一些隐藏的内核驱动
ShimCache来识别应用程序兼容性问题。跟踪文件路径,大小,最后修改时间和最后“执行”时间.
分割文件
foremost 352.dmp ##分割dmp文件
题外话 :
学习了一圈,依然没有解决内存分析获取操作系统产品密钥问题。哪位大佬知道如何操作可以公众号私聊我。
参考资料
1、https://cloud.tencent.com/developer/article/1419462
作者:漏洞社区
链接:https://cloud.tencent.com/developer/article/1419462
标题:CTF| 攻击取证之内存分析
来源:腾讯云社区
2、https://blog.csdn.net/chanyi0040/article/details/100956582
作者:chanyi0040
链接:https://blog.csdn.net/chanyi0040/article/details/100956582
标题:Volatility工具指令篇
来源:CSDN
本文始发于微信公众号(利刃信安):【学习笔记】陇剑杯之攻击取证内存分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论