Post

Volatility

Volatility

Volatility安装

第一步:

安装python2(kali自带无需安装)

第二步:

安装pip2

1
2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python get-pip.py

第三步:

安装python2的库

1
2
python -m pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple/
# python -m pip install distorm3 -i https://pypi.tuna.tsinghua.edu.cn/simple/

第四步:

下载编译distorm3

1
2
3
git clone https://github.com/vext01/distorm3
cd distorm3
python2 setup.py install

第五步:

编译Volatility

1
2
cd Volatility
python2 setup.py install

第七步:

  • 安装插件
1
2
3
4
5
6
7
8
9
10
11
Yara(恶意软件分类工具):
python -m pip install yara -i https://pypi.tuna.tsinghua.edu.cn/simple/
OpenPyxl(读写excel文件):
python -m pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/
ujson(JSON解析):
python -m pip install ujson -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装construct模块:
python -m pip install construct -i https://pypi.tuna.tsinghua.edu.cn/simple/

python -m pip install mimikatz -i https://pypi.tuna.tsinghua.edu.cn/simple/

第六步:

安装插件mimikatz

mimikatz.py复制到 volatility-master/volatility/plugins/目录中

安装construct

1
2
pip2 install --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple #使用清华源
pip2 install construct==2.5.5-reupload -i https://pypi.tuna.tsinghua.edu.cn/simple

插件和安装包我会统一打包发到群里。

用法:

命令及插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
Volatility Foundation Volatility Framework 2.6
用法: Volatility - 内存取证分析平台

Options:
  -h, --help            列出所有可用选项及其默认值
                        默认值可以在配置文件中设置
                        (/etc/volatilityrc)
  --conf-file=/home/kali/.volatilityrc
                        基于用户的配置文件
  -d, --debug           调试Volatility
  --plugins=PLUGINS     要使用的其他插件目录(冒号分隔)
  --info                打印所有注册对象的信息
  --cache-directory=/home/kali/.cache/volatility
                        存放缓存文件的目录
  --cache               使用缓存
  --tz=TZ               设置 (Olson) 时区以使用 pytz(如果已安装)或 tzset 显示时间戳
  -f FILENAME, --filename=FILENAME
                        打开图像时使用的文件名
  --profile=WinXPSP2x86
                        要加载的配置文件的名称(使用 --info 查看支持的配置文件列表)
  -l LOCATION, --location=LOCATION
                        从中加载地址空间的 URN 位置
  -w, --write           启用写支持
  --dtb=DTB             DTB 地址
  --shift=SHIFT         Mac KASLR 移位地址
  --output=text         以这种格式输出(支持特定于模块,请参阅下面的模块输出选项)
  --output-file=OUTPUT_FILE
                        在此文件中写入输出
  -v, --verbose         详细信息
  -g KDBG, --kdbg=KDBG  指定一个 KDBG 虚拟地址(注意:对于 64 位 Windows 8 及更高版本,这是 KdCopyDataBlock 的地址)
  --force               强制使用可疑配置文件
  -k KPCR, --kpcr=KPCR  指定特定的 KPCR 地址
  --cookie=COOKIE       指定 nt!ObHeaderCookie 的地址(仅适用于 Windows 10)

	支持的插件命令:

		amcache        	查看AmCache应用程序痕迹信息
		apihooks       	检测内核及进程的内存空间中的API hook
		atoms          	列出会话及窗口站atom表
		atomscan       	Atom表的池扫描(Pool scanner)
		auditpol       	列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息
		bigpools       	使用BigPagePoolScanner转储大分页池(big page pools)
		bioskbd        	从实时模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码)
		cachedump      	获取内存中缓存的域帐号的密码哈希
		callbacks      	打印全系统通知例程
		clipboard      	提取Windows剪贴板中的内容
		cmdline        	显示进程命令行参数
		cmdscan        	提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息)
		connections    	打印系统打开的网络连接(仅支持Windows XP 和2003)
		connscan       	打印TCP连接信息
		consoles       	提取执行的命令行历史记录(扫描_CONSOLE_INFORMATION信息)
		crashinfo      	提取崩溃转储信息
		deskscan       	tagDESKTOP池扫描(Poolscaner)
		devicetree     	显示设备树信息
		dlldump        	从进程地址空间转储动态链接库
		dlllist        	打印每个进程加载的动态链接库列表
		driverirp      	IRP hook驱动检测
		drivermodule   	关联驱动对象至内核模块
		driverscan     	驱动对象池扫描
		dumpcerts      	提取RAS私钥及SSL公钥
		dumpfiles      	提取内存中映射或缓存的文件
		dumpregistry   	转储内存中注册表信息至磁盘
		editbox        	查看Edit编辑控件信息 (Listbox正在实验中)
		envars         	显示进程的环境变量
		eventhooks     	打印Windows事件hook详细信息
		evtlogs        	提取Windows事件日志(仅支持XP/2003)
		filescan       	提取文件对象(file objects)池信息
		gahti          	转储用户句柄(handle)类型信息
		gditimers      	打印已安装的GDI计时器(timers)及回调(callbacks)
		gdt            	显示全局描述符表(Global Deor Table)
		getservicesids 	获取注册表中的服务名称并返回SID信息
		getsids        	打印每个进程的SID信息
		handles        	打印每个进程打开的句柄的列表
		hashdump       	转储内存中的Windows帐户密码哈希(LM/NTLM)
		hibinfo        	转储休眠文件信息
		hivedump       	打印注册表配置单元信息
		hivelist       	打印注册表配置单元列表
		hivescan       	注册表配置单元池扫描
		hpakextract    	从HPAK文件(Fast Dump格式)提取物理内存数据
		hpakinfo       	查看HPAK文件属性及相关信息
		idt            	显示中断描述符表(Interrupt Deor Table)
		iehistory      	重建IE缓存及访问历史记录
		imagecopy      	将物理地址空间导出原生DD镜像文件
		imageinfo      	查看/识别镜像信息
		impscan        	扫描对导入函数的调用
		joblinks       	打印进程任务链接信息
		kdbgscan       	搜索和转储潜在KDBG值
		kpcrscan       	搜索和转储潜在KPCR值
		ldrmodules     	检测未链接的动态链接DLL
		lsadump        	从注册表中提取LSA密钥信息(已解密)
		machoinfo      	转储Mach-O 文件格式信息
		malfind        	查找隐藏的和插入的代码
		mbrparser      	扫描并解析潜在的主引导记录(MBR)
		memdump        	转储进程的可寻址内存
		memmap         	打印内存映射
		messagehooks   	桌面和窗口消息钩子的线程列表
		mftparser      	扫描并解析潜在的MFT条目
		moddump        	转储内核驱动程序到可执行文件的示例
		modscan        	内核模块池扫描
		modules        	打印加载模块的列表
		multiscan      	批量扫描各种对象
		mutantscan     	对互斥对象池扫描
		notepad        	查看记事本当前显示的文本
		objtypescan    	扫描窗口对象类型对象
		patcher        	基于页面扫描的补丁程序内存
		poolpeek       	可配置的池扫描器插件
		printkey       	打印注册表项及其子项和值
		privs          	显示进程权限
		procdump       	进程转储到一个可执行文件示例
		pslist         	按照EPROCESS列表打印所有正在运行的进程
		psscan         	进程对象池扫描
		pstree         	以树型方式打印进程列表
		psxview        	查找带有隐藏进程的所有进程列表
		qemuinfo       	转储 Qemu 信息
		raw2dmp        	将物理内存原生数据转换为windbg崩溃转储格式
		screenshot     	基于GDI Windows的虚拟屏幕截图保存
		servicediff    	Windows服务列表(ala Plugx)
		sessions       	_MM_SESSION_SPACE的详细信息列表(用户登录会话)
		shellbags      	打印Shellbags信息
		shimcache      	解析应用程序兼容性Shim缓存注册表项
		shutdowntime   	从内存中的注册表信息获取机器关机时间
		sockets        	打印已打开套接字列表
		sockscan       	TCP套接字对象池扫描
		ssdt           	显示SSDT条目
		strings        	物理到虚拟地址的偏移匹配(需要一些时间,带详细信息)
		svcscan        	Windows服务列表扫描
		symlinkscan    	符号链接对象池扫描
		thrdscan       	线程对象池扫描
		threads        	调查_ETHREAD 和_KTHREADs
		timeliner      	创建内存中的各种痕迹信息的时间线
		timers         	打印内核计时器及关联模块的DPC
		truecryptmaster	Recover 	恢复TrueCrypt 7.1a主密钥
		truecryptpassphrase		查找并提取TrueCrypt密码
		truecryptsummary	TrueCrypt摘要信息
		unloadedmodules	打印卸载的模块信息列表
		userassist     	打印注册表中UserAssist相关信息
		userhandles    	转储用户句柄表
		vaddump        	转储VAD数据为文件
		vadinfo        	转储VAD信息
		vadtree        	以树形方式显示VAD树信息
		vadwalk        	显示遍历VAD树
		vboxinfo       	转储Virtualbox信息(虚拟机)
		verinfo        	打印PE镜像中的版本信息
		vmwareinfo     	转储VMware VMSS/VMSN 信息
		volshell       	内存镜像中的shell
		windows        	打印桌面窗口(详细信息)
		wintree        	Z顺序打印桌面窗口树
		wndscan        	池扫描窗口站
		yarascan       	以Yara签名扫描进程或内核内存
For example
Target.vmem

分析获取内存镜像的基本信息

1
python vol.py --filename=Target.vmem imageinfo

查找⽤户名密码信息。当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容

1
python vol.py -f Target.vmem --profile=Win7SP1x64 hashdump

从注册表中提取LSA密钥信息(已解密)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 lsadump

列举出系统进程,但它不能检测到隐藏或者解链的进程

1
python vol.py -f Target.vmem --profile=Win7SP1x64 pslist

直接破解哈希值

1
python vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz 

可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程

1
python vol.py -f Target.vmem --profile=Win7SP1x64 psscan

以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程

1
python vol.py -f Target.vmem --profile=Win7SP1x64 pstree

提取进程, -p是进程号 -D 存储的文件夹 提取出指定进程

1
python vol.py -f Target.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./

查看服务

1
python vol.py -f Target.vmem --profile=Win7SP1x64 svcscan

查看ie浏览器浏览历史

1
python vol.py -f Target.vmem --profile=Win7SP1x64 iehistory

查看⽹络连接

1
python vol.py -f Target.vmem --profile=Win7SP1x64 netscan

查看命令⾏操作

1
python vol.py -f Target.vmem --profile=Win7SP1x64 cmdscan

查看⽂件

1
python vol.py -f Target.vmem --profile=Win7SP1x64 filescan

提取文件

1
python vol.py -f Target.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./

查看当前展示的notepad内容

1
python vol.py -f Target.vmem --profile=Win7SP1x64 notepad

查看屏幕截图

1
python vol.py -f Target.vmem --profile=Win7SP1x64 screenshot --dump-dir=./

查看注册表单元

1
python vol.py -f Target.vmem --profile=Win7SP1x64 hivelist

导出注册表, -o 注册表的virtual地址

1
python vol.py -f Target.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410

获取注册表信息,-K “键值”

1
python vol.py -f Target.vmem --profile=Win7SP1x64 printkey -K "xxxxxxx"

查看运⾏程序相关的记录

1
python vol.py -f Target.vmem --profile=Win7SP1x64 userassist
mem.vmem

分析获取内存镜像的基本信息

1
python vol.py -f mem.vmem imageinfo

查看进程

1
python vol.py -f mem.vmem --profile=WinXPSP2x86 pslist

发现一个名为 TrueCrypt的进程!TrueCrypt是一款加密软件,那么我们就很容易能想到,suspicion应该是一个被 TrueCrypt加密的文件

1
python vol.py -f mem.vmem --profile=WinXPSP2x86 memdump -p 2012 -D ./

然后丢到edff解密 打开edff

image-20230202143226562

image-20230202143250632

image-20230202143329763

image-20230202143352103

image-20230202143412798

点击下一页

image-20230202143534379

然后打开挂载的盘符找到flag。

image-20230202143707060

可能会出现的问题

1
2
3
4
5
6
Failed to import '/usr/lib/libyara.so'
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games;/usr/lib
*** Failed to import volatility.plugins.linux.malfind (OSError: /usr/lib/libyara.so: cannot open shared object file: No such file or directory)
Failed to import '/usr/lib/libyara.so'
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games;/usr/lib;/usr/lib
......

问题出现的原因

中途由于直接pip install yara 导致libyara装去了Python的dist-pakages下,运行可能会报错,提示在/usr/lib下找不到libyara.so,解决方法如下,当然也可以cp一份直接去/usr/lib。

可以使用软链接来解决问题

1
ln -s /usr/local/lib/python2.7/dist-packages/usr/lib/libyara.so /usr/lib/libyara.so

推荐一篇个人觉得写的很好的博客:

1
https://blog.csdn.net/Aluxian_/article/details/128194996

快捷方式创建

1
2
3
4
5
6
7
8
# 这时就可以直接运行 vol.py
# 为了更方便,可以创建一个软链接
👇
# 进入 /usr/local/bin 文件夹内
ln -s vol.py vol

运行 cd /;vol -h 命令测试是否有用
这样就可以通过运行 vol 愉快的使用了
This post is licensed under CC BY 4.0 by the author.