一.简介
Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全专家合作开发的一套工具, 可以用于windows,linux,mac osx,android等系统内存取证。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
二.安装Volatility
在不同系统下都有不同的软件版本
官网地址:https://www.volatilityfoundation.org/26
根据自己需求下载
另外不同的版本下,也存在着一定命令上的差异,使用时一定需注意
1.windows
直接下载解压就好了
打开cmd 直接输入命令即可 ,cmd必须是当前目录,除非你设了环境变量
2. Linux下(这里kali为例)
Volatility2.6需要python2,pip安装模块也需要2版本,具体命令根据实际情况调整
源码包(这是github,比较快,也可以下上面官网的,步骤是一样的)
下载解压
unzip volatility-master.zip
安装依赖环境(distorm3 crypto)
crypto
pip2 install pycryptodome
如果安装失败,可使用以下命令切换国内源
pip2 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
distorm3下载地址
https://github.com/vext01/distorm3
进行编译
python2 setup.py install
安装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
四.命令格式
volatility -f [image] –profile=[profile] [plugin]
volatility -f [对象] –profile=[操作系统] [插件参数]
在分析之前,需要先判断当前的镜像信息,分析出是哪个操作系统 命令imageinfo即可获取镜像信息。
Volatility -f xxx.vmem imageinfo
在查到操作系统后如果不确定可以使用以下命令查看
volatility - f xxx.vmem –profile=[操作系统] volshell
举个例子 像这种什么都找不到
当我们确定操作系统就可以利用插件去做题了
六.常用命令插件
可以先查看当前内存镜像中的用户printkey -K SAM\Domains\Account\Users\Names
volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
查看用户名密码信息(密码是哈希值,需要john爆破) hashdump
volatility -f 1.vmem --profile=Win7SP1x64 hashdump
查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)
如果john爆破不出来,就使用 lasdmp 查看强密码 lsadump
volatility -f 1.vmem --profile=Win7SP1x64 lsadump
查看进程 pslist
volatility -f 1.vmem --profile=Win7SP1x64 pslist
pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
查看已知进程pslist
volatility -f 1.vmem --profile=Win7SP1x64 pslist -p 2588
隐藏或解链的进程 psscan
volatility -f 1.vmem --profile=Win7SP1x64 psscan
psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
查看服务 查询服务名称 svcscan
volatility -f 1.vmem --profile=Win7SP1x64 svcscan
svcscan:扫描 Windows 的服务
查看浏览器历史记录,获取当前系统浏览器搜索过的关键词 iehistory
volatility -f 1.vmem --profile=Win7SP1x64 iehistory
查看网络连接 获取当前系统 ip netscan
volatility -f 1.vmem --profile=Win7SP1x64 netscan
有一些版本 这个命令是使用不了 这里我们就要使用(connscan,connections)
查看网络连接 connscan
volatility -f 1.vmem --profile=Win7SP1x64 connscan
connscan:查看网络连接
查看网络连接 connections
volatility -f 1.vmem --profile=Win7SP1x64 connections
connections:查看网络连接
查看命令行操作,显示cmd历史命令 cmdscan
volatility -f 1.vmem --profile=Win7SP1x64 cmdscan
cmdscan:可用于查看终端记录
查看进程命令行参数(具体一些可疑进程的参数指令) cmdline
volatility -f 1.vmem --profile=Win7SP1x64 cmdline
扫描所有的文件列表 filescan
volatility -f 1.vmem --profile=Win7SP1x64 filescan
(linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’)
例
volatility -f 1.vmem --profile=Win7SP1x64 filescan grep "flag.txt"
cat system.txt | grep -i computername
查看文件内容 dumpfiles
volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./
需要指定偏移量 -Q 和输出目录 -D
dumpfiles:导出某一文件(指定虚拟地址)
查看当前展示的notepad内容 notepad
volatility -f 1.vmem --profile=Win7SP1x64 notepad
查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox)
显示有关编辑控件(曾经编辑过的内容)的信息 editbox
volatility -f 1.vmem --profile=Win7SP1x64 editbox
editbox:显示有关编辑控件(曾经编辑过的内容)的信息 查看内存中记事本的内容
提取进程 memdump
volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./
memdump:提取出指定进程,常用foremost 来分离里面的文件
需要指定进程-p [pid] 和输出目录 -D
memdump -p 332 -D XX/
提取进程 -p 进程号 -D 当前输出路径(导出为332.dmp)
dump出来的进程文件,可以使用 foremost 来分离里面的文件,用 binwak -e 不推荐
strings -e l 2040.dmp | grep flag 查找flag
屏幕截图 screenshot
volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./
screenshot:保存基于GDI窗口的伪截屏
查看注册表配置单元 hivelist
volatility -f 1.vmem --profile=Win7SP1x64 hivelist
hivelist: 列出所有的注册表项及其虚拟地址和物理地址
查看注册表键名 hivedump
volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410
查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等 userassist
volatility -f 1.vmem --profile=Win7SP1x64 userassist
最大程序提取信息timeliner
volatility -f 1.vmem --profile=Win7SP1x64 timeliner
timeliner: 将所有操作系统事件以时间线的方式展开
查看剪贴板信息 clipboard
volatility -f 1.vmem --profile=Win7SP1x64 clipboard
clipboard:查看剪贴板信息
恢复被删除的文件 mftparser
volatility -f 1.vmem --profile=Win7SP1x64 mftparser
mftparser:恢复被删除的文件
查看环境变量 envars
volatility -f 1.vmem --profile=Win7SP1x64 envars
envars:查看环境变量
列出某一进程加载的所有dll文件 dlllist
volatility -f 1.vmem --profile=Win7SP1x64 dlllist -p 2588
dlllist: 列出某一进程加载的所有dll文件
程序版本信息 verinfo
volatility -f 1.vmem --profile=Win7SP1x64 verinfo
列出PE|程序版本信息
产看进程树,可以轻松了解各进程之间的关系:父进程与子进程 pstree
volatility -f 2008.raw –profile=Win2008R2SP1x64 pstree
在进程中PPID比PID还大,那就可能这个进程有异常程序
从内存文件中找到异常程序植入到系统的开机自启痕迹 shimcache
volatility -f 2008.raw –profile=Win2008R2SP1x64 shimcache
七.例题讲解
[陇剑杯 2021]内存分析
1.网管小王制作了一个虚拟机文件,让您来分析后作答:虚拟机的密码是_____________。(密码中为flag{xxxx},含有空格,提交时不要去掉)。
1)首先确定镜像是何种操作系统的,命令imageinfo即可获取镜像信息
2)我们使用hashdump获取sam
3)john工具来进行爆破,但是好像跑不出来结果。应该是设定了强密码。于是只能使用了lasdump命令来查看
我们可以看到flag
flag{W31C0M3 T0 THiS 34SY F0R3NSiCX}
2.虚拟机中有一个某品牌手机的备份文件,文件里的图片里的字符串为_____________。(解题过程中需要用到上一题答案中flag{}内的内容进行处理。本题的格式也是flag{xxx},含有空格,提交时不要去掉)
1)我们直接在桌面进行搜索,我们可以看到HUAWEI手机
2)我们直接搜索HUAWEI
3)将第一个提取出来
4)我们可以看到2个文件,我们进行解压
5)解压完成后发现多了一个HUAWEI P40_2021-aa-bb xx.yy.zz文件夹,并且在里面发现一个images0.tar.enc文件,此文件为华为加密文件,我们需要在网上下载解密脚本,解压密码题目中已经提示为上一题的flag,也就是W31C0M3 T0 THiS 34SY F0R3NSiCX,注意,运行脚本时密码的空格要改为’_’也就是W31C0M3_T0_THiS_34SY_F0R3NSiCX
6)项目地址
https://github.com/RealityNet/kobackupdec
然后运行命令
用法:
kobackupdec.py [-h] [-v] password backup_path dest_path
password:是用户提供的密码
backup_path:是包含华为备份的文件夹,可以使用相对或绝对路径
dest_path:是要在指定路径(绝对或相对)中创建的文件夹。如果提供的文件夹已存在,它将报错
例如:
python kobackupdec.py -vvv W31C0M3_T0_THiS_34SY_F0R3NSiCX "/home/kali/volatility_2.6_lin64_standalone/HUAWEI P40_2021-aa-bb xx.yy.zz/picture/storage/MediaTar/images/" /home/kali
由于我的环境有问题,所以后面我使用网上的图片
7)运行完后会有两个文件,打开storage
8)里面会有一个.tar压缩文件,打开后会有flag
flag{TH4NK Y0U FOR DECRYPTING MY DATA}
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~