Volatility是一款开源的内存取证框架,主要用于对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。这是volatility内存取证工具史上最全使用教程主要针对比赛场景,文章内容主要借鉴csdn论坛内容进行整合。
目录
内存取证-volatility工具的使用一,简介
二,安装Volatility
1.windows下
2. Linux下(这里kali为例)
三 、安装插件
四,工具介绍help 五,命令格式编辑
六,常用命令插件:
1. 查看当前内存镜像中的用户密码信息,可以使用printkey命令。例如,要查看SAM\Domains\Account\Users\Names的用户名和密码信息,可以输入`printkey -K “SAM\Domains\Account\Users\Names”`。
2. 如果使用john爆破无法获取密码,可以尝试使用lasdmp查看强密码。例如,要查看lsadmp中的强密码,可以输入`lasdmp`。
3. 查看进程信息可以使用pslist命令。例如,要查看已知进程,可以输入`pslist`。
4. 隐藏或解链的进程可以使用psscan命令。例如,要查看服务名称,可以输入`svcscan`。
5. 查看浏览器历史记录可以使用iehistory命令。例如,要获取当前系统浏览器搜索过的关键词,可以输入`iehistory`。
6. 查看网络连接可以使用netscan命令。例如,要获取当前系统的IP地址和主机名,可以输入`netscan`。
7. 查看命令行操作可以使用cmdscan命令。例如,要显示cmd历史命令,可以输入`cmdscan`。
8. 查看进程命令行参数可以使用cmdline命令。例如,要列出某一进程加载的所有dll文件,可以输入`dlllist`。
9. 扫描所有文件列表可以使用filescan命令。例如,要查看文件内容,可以输入`dmpfiles`。
10. 查看当前展示的notepad内容可以使用notepad命令。例如,要显示有关编辑控件的信息,可以输入`editbox`。
11. 提取进程memdump可以使用screenshot命令。例如,要查看注册表配置单元,可以输入`hivelist`。
12. 查看注册表键名和值可以使用hivedmp命令。例如,要获取主机名,可以输入`printkey`。
13. 查看运行程序相关的记录可以使用serassist命令。例如,要最大程序提取信息,可以输入`timeliner`。
14. 查看剪贴板信息可以使用clipboard命令。例如,要显示计算机及其操作系统的详细配置信息,可以输入`systeminfo`。
15. 恢复被删除的文件可以使用mftparser命令。例如,要查看环境变量,可以输入`envars`。
16. 程序版本信息可以使用verinfo命令。例如,要查看进程树,可以输入`pstree`。
17. 从内存文件中找到异常程序植入到系统的开机自启痕迹可以使用shimcache命令。
内存取证-volatility工具的使用
一,简介
Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全专家开发的一套工具, 可以用于windows,linux,mac osx,android等取证。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状
二,安装Volatility 在不同系统下都有不同的软件版本
我这里强烈建议直接使用kali2019及其以前的kali老版本,kali2019以前的老版本系统自带volatility工具,不用费劲安装,volatility工具安装起来很麻烦,而且老有一些幺蛾子事,不如直接vmware安装kali2019系统然后自带volatility工具。
官网地址:
https://www.volatilityfoundation.org
根据自己需求下载
另外不同的版本下,也存在着一定命令上的差异,使用时一定需注意支持的内存格式还是很多的,符合日常需求
1.windows下直接下载解压好了
打开cmd 直接输入命令·即可 (cmd必须是当前目录,除非你设了环境变量)
2. Linux 下(这里kali为例)
Volatility2.6需要python2,pip安装模块也需要2版本,具体命令根据实际情况调整。
源码包(这是github,比较快,也可以下上面官网的,步骤是一样的)
https://github.com/volatilityfoundation/volatility
下载解压
unzip volatility-master.zip
安装依赖环境(
distorm3 crypto
)
crypto pip2 install pycryptodome
#如果安装失败,可使用以下命令切换国内源
pip2 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
distorm3下载地址
GitHub – vext01/distorm3: distorm3
下载解压
unzip distorm3-master.zip
进行编译
python2 setup.py install
可选插件
Distorm3
(反编译库):
pip install distorm3
Yara
(恶意软件分类工具):
pip install yara
PyCrypto
(加密工具集):
pip install pycrypto
PIL
(图片处理库):
pip install pil
OpenPyxl
(读写
excel
文件):
pip install openpyxl
ujson
(
JSON
解析):
pip install ujson
安装
Volatility
在解压后的Volatility目录下进行编译
python2 setup.py install
检验
三 、安装插件
安装mimikatz
将mimikatz.py复制到volatility-master/volatility/plugins/目录下,使用时需要添加参数–plugins=./volatility-master/volatility/plugins。
运行时可能会出现如下错误,这是因为没有安装construct 模块:
Volatility Foundation Volatility Framework 2.6
*** Failed to import volatility.plugins.mimikatz (ImportError: No module named construct) ERROR : volatility.debug : You must specify something to do (try -h)
安装construct模块。
pip install construct
四,工具介绍help
输入vol.py –h 查看官方做出的帮助
翻译如下
1 | Volatility Foundation Volatility Framework 2.6 |
2 | 用法: Volatility – 内存取证分析平台 |
34 | Options: |
5 | -h, –help 列出所有可用选项及其默认值 |
6 | 默认值可以在配置文件中设置 |
7 | (/etc/volatilityrc) |
8 | –conf-file=/home/kali/.volatilityrc |
9 | 基于用户的配置文件 |
10 | -d, –debug 调试Volatility |
|
- –cache-directory=/home/kali/.cache/volatility
- 存放缓存文件的目录 15 –cache 使用缓存
输入vol.py –info可查看插件。
翻译如下
1
Volatility Foundation Volatility Framework 2.6
2
3
Profiles
4
——–
5
VistaSP0x64 – Windows Vista SP0 x64
的配置文件
6
VistaSP0x86 – Windows Vista SP0 x86
的配置文件
7
VistaSP1x64 – Windows Vista SP1 x64
的配置文件
8
VistaSP1x86 – Windows Vista SP1 x86
的配置文件
9
VistaSP2x64 – Windows Vista SP1 x86
的配置文件
10
VistaSP2x86 – Windows Vista SP2 x64
的配置文件
11
Win10x64 – Windows 10 x64
的配置文件
12
Win10x64_10586 – Windows 10 x64
的配置文件
(10.0.10586.306 / 2016-04-23)
13
Win10x64_14393 – Windows 10 x64
的配置文件
(10.0.14393.0 / 2016-07-16)
14
Win10x86 – Windows 10 x86
的配置文件
15
Win10x86
10586
– Windows 10 x86
的配置文件
(10.0.10586.420 / 2016-05-28)
五,命令格式
volatility -f [image] –profile=[profile] [plugin] volatility -f [对象] –profile=[操作系统] [插件参数]
在分析之前,需要先判断当前的镜像信息,分析出是哪个操作系统 命令imageinfo即可获取镜像信息。
Volatility -f xxx.vmem imageinfo
在查到操作系统后如果不确定可以使用以下命令查看
volatility – f xxx.vmem –profile= [操作系统] volshell
举个例子 像这种什么都找不到 什么都
像这种是合格的
当我们确定操作系统可以利用插件去做题了
六,常用命令插件
六,常用命令插件:
注意,一下命令为简称需要使用完全命令才行
1. 查看当前内存镜像中的用户密码信息,可以使用printkey命令。例如,要查看SAM\Domains\Account\Users\Names的用户名和密码信息,可以输入`printkey -K “SAM\Domains\Account\Users\Names”`。例如volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
2. 查看用户名密码信息(哈希值需要john爆破),可以使用hashdump命令。例如查看当前系统ip和主机名,可以提交Flag{ip:主机名}。例如volatility -f 1.vmem –profile=Win7SP1x64 hashdump
3. 查看进程pslist。例如,要查看已知进程,可以输入`pslist`。
4. 隐藏或解链的进程psscan。例如,要查看服务名称,可以输入`svcscan`。
5. 查看浏览器历史记录,获取当前系统浏览器搜索过的关键词,可以使用iehistory命令。例如,要获取当前系统浏览器搜索过的关键词,可以输入`iehistory`。
6. 查看网络连接,可以使用netscan命令。例如,要获取当前系统的IP和主机名,可以输入`netscan`。
7. 查看网络连接connscan。例如,要查看网络连接,可以输入`connscan`。
8. 查看命令行操作,显示cmd历史命令,可以使用cmdscan命令。例如,要显示cmd历史命令,可以输入`cmdscan`。
9. 查看进程命令行参数(具体一些可疑进程的参数指令),可以使用cmdline命令。例如,要列出某一进程加载的所有dll文件,可以输入`dlllist -p 2588`。
10. 扫描所有的文件列表,可以使用filescan命令。例如,要扫描所有文件列表,可以输入`filescan`。
11. 查看文件内容,可以使用dmpfiles命令。例如,要查看文件内容,可以输入`dmpfiles`。
12. 查看当前展示的notepad内容,可以使用notepad命令。例如,要查看当前展示的 notepad 文本,可以输入`notepad`。
13. 显示有关编辑控件的信息,可以使用editbox命令。例如,要显示有关编辑控件的信息,可以输入`editbox`。
14. 提取进程memdump。例如,要提取指定进程,常用foremost 来分离里面的文件,需要指定进程-p [pid] 和输出目录 -D。例如,要提取进程号为332的进程,可以输入`memdump -p 332 -D XX/`。
15. 屏幕截图,可以使用screenshot命令。例如,要保存基于GDI窗口的伪截屏,可以输入`screenshot –dump-dir=./`。
16. 查看注册表配置单元hivelist。例如,要列出所有的注册表项及其虚拟地址和物理地址,可以输入`hivelist`。
17. 查看注册表键名hivedmp。例如,要查看注册表键值,可以输入`hivedump -o 0xfffff8a001032410`。
18. 获取主机名,可以使用printkey命令。例如,要获取主机名,可以输入`printkey -K “ControlSet001\Control\ComputerName\ComputerName”`。
19. 列出用户名,可以使用printkey命令。例如,要列出用户名,可以输入`printkey -K “SAM\Domains\Account\Users\Names”`。
20. 查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等。可以使用userassist命令。例如,要查看运行程序相关的记录,可以输入`userassist`。
21. 最大程序提取信息timeliner。例如,要将所有操作系统事件以时间线的方式展开,可以输入`timeliner`。
22. 查看剪贴板信息clipboard。例如,要查看剪贴板信息,可以输入`clipboard`。
23. 显示关于计算机及其操作系统的详细配置信息(插件)systeminfo。例如,要显示关于计算机及其操作系统的详细配置信息,可以输入`systeminfo`。
24. 恢复被删除的文件mftparser。例如,要恢复被删除的文件,可以输入`mftparser`。
25. 查看环境变量envars。例如,要查看环境变量,可以输入`envars`。
26. 列出某一进程加载的所有dll文件dlllist。例如,要列出某一进程加载的所有dll文件,需要指定进程-p [pid]。例如,要列出进程号为2588的进程加载的所有dll文件,可以输入`dlllist -p 2588`。
27. 程序版本信息verinfo。例如,要列出PE|程序版本信息,可以输入`verinfo`。
28. 产看进程树,可以轻松了解各进程之间的关系:父进程与子进程 pstree。例如,要在进程中PPID比PID还大,那可能这个进程有异常程序。
八,例题讲解
这里我们找两个典型例题 讲解一下哦
题目一
是46届世界技能大赛湖北省选拔赛 也是今年金砖比赛的样题
链接:https://pan.baidu.com/s/1tYgIicCqJExmaMLYa3YeSA 提取码:lulu
你作为 A 公司的应急响应人员,请分析提供的内存文件按照下面的要求找到 相关关键信息,完成应急响应事件。
- 从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password} 形式提交(密码为 6 位);
- 获取当前系统 ip 地址及主机名,以 Flag{ip:主机名}形式提交;
- 获取当前系统浏览器搜索过的关键词,作为 Flag 提交;
- 当前系统中存在挖矿进程,请获取指向的矿池地址,以 Flag{ip:端口}形式 提交;
- 恶意进程在系统中注册了服务,请将服务名以 Flag{服务名}形式提交。
上题已经看到进程
解析
1.从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password} 形式提交(密码为 6 位);
不管什么题内存取证的第一步肯定是去判断当前的镜像信息,分析出是哪个操作系统 使用参数 imageinfo 查看系统信息
volatility -f 1.vmem imageinfo
操作系统我们一般取第一个可以了接下来可以输入参数可以先查看当前内存镜像中的用户
volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
使用hashdump获取sam
volatility -f 1.vmem –profile=Win7SP1x64 hashdump
可以通过john工具来进行好像跑不出来结果。应该是设定了强密码。于是只能使用了lasdump命令来查看
volatility -f 1.vmem –profile=Win7SP1x64 lsadump
flag{admin.dfsddew}
2.获取当前系统 ip 地址及主机名,以 Flag{ip:主机名}形式提交;
Netscan 可以查ip
volatility -f 1.vmem –profile=Win7SP1x64 netscan
Ip:192.168.85.129
主机名需要通过查询注册表,先用hivelist
Volatility -f 1.vmem –profile=Win7SP1x64 hivelist
然后我们需要一步一步去找键名
volatility -f 1.vmem –profile=Win7SP1x64 -o 0xfffff8a000024010 printkey
volatility -f 1.vmem -profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K “ControlSet001”
继续
volatility -f 1.vmem –profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K “ControlSet001\Control “
继续
volatility -f 1.vmem –profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K “ControlSet001\Control\ComputerName”
再来
volatility -f 1.vmem –profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K “ControlSet001\Control\ComputerName\ComputerName”
得到主机名WIN-9FBAEH4UV8C 也可以直接通过 hivedump查询相应的键名 但比较慢
volatility -f 1.vmem –profile=Win7SP1x64 hivedump -o 0xfffff8a000024010 > system.txt
3.获取当前系统浏览器搜索过的关键词,作为 Flag 提交;
这里使用iehistory
volatility -f 1.vmem –profile=Win7SP1x64 iehistory
flag{admin@file:///C:/Users/admin/Desktop/flag.txt}
4.当前系统中存在挖矿进程,请获取指向的矿池地址,以 Flag{ip:端口}形式 提交;
volatility -f 1.vmem –profile=Win7SP1x64 netscan
唯一一个已建立的
flag{54.36.109.161:2222}
5.恶意进程在系统中注册了服务,请将服务名以 Flag{服务名}形式提交。
上一题中已经知道了进程号为2588
volatility -f 1.vmem –profile=Win7SP1x64 pslist -p 2588
查到父进程是3036 然后在通过通过svcscan可以查询服务名称,找到对应服务名
volatility -f 1.vmem –profile=Win7SP1x64
svcscan
flag{VMnetDHCP}
暂无评论内容