volatility使用

0.1.1. x 00 volatility 介绍

Volatility 是一款非常强大的内存取证工具, 它是由来自全世界的数百位知名安全专家合作开发的一套工具, 可以用于 windows, linux, mac osx, android 等系统内存取证。Volatility 是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。

在不同系统下都有不同的软件版本,官网地址:https://www.volatilityfoundation.org/26
Open: zkfo1.png

目前已经有一段时间没有更新了,最新一次更新也是在 2016 年。
Open: dihcz.png

支持的内存格式还是很丰富的。
Open: rck6p.png

另外不同的版本下,也存在着一定命令上的差异,使用时需注意。

0.1.1.1. 生成 内存dump 文件的方式

这里只介绍方式,具体的 dump 抓取操作方式自行研究。

0.1.1.1.1. VMware 虚拟机软件

VM 暂停虚拟后就可以看到 vmem 文件,是可以直接被 volatility 分析的。
Open: dpqr4.png

0.1.1.1.2. 使用第三方软件

针对于物理机,可以使用如下工具来抓取内存 dump

KnTTools
F-Response
Mandiant Memoryze
HBGary FastDump
MoonSols Windows Memory Toolkit
AccessData FTK Imager
EnCase/WinEn
Belkasoft Live RAM Capturer
ATC-NY Windows Memory Reader
Winpmem
Win32dd/Win64dd
DumpIt

windows 下可以使用 AccessData FTK Imager 来完成。

0.1.1.1.3. CuckooSandbox

Cuckoo 沙箱在分析恶意样本后生成 dump 文件。


0.1.2. x 01 volatility 工具的基本使用

命令格式

volatility -f [image] --profile=[profile] [plugin]

在分析之前,需要先判断当前的镜像信息,分析出是哪个操作系统

volatility -f xxx.vmem imageinfo

如果操作系统错误,是无法正确读取内存信息的,知道镜像后,就可以在 --profile= 中带上对应的操作系统

常用插件

下列命令以 windows 内存文件举例

查看用户名密码信息

volatility -f 1.vmem --profile=Win7SP1x64 hashdump

查看进程

volatility -f 1.vmem --profile=Win7SP1x64 pslist

查看服务

volatility -f 1.vmem --profile=Win7SP1x64 svcscan

查看浏览器历史记录

volatility -f 1.vmem --profile=Win7SP1x64 iehistory

查看网络连接

volatility -f 1.vmem --profile=Win7SP1x64 netscan

查看命令行操作

volatility -f 1.vmem --profile=Win7SP1x64 cmdscan

查看文件

volatility -f 1.vmem --profile=Win7SP1x64 filescan

查看文件内容

volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./

查看当前展示的 notepad 内容

volatility -f 1.vmem --profile=Win7SP1x64 notepad

提取进程

volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./

屏幕截图

volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./

查看注册表配置单元

volatility -f 1.vmem --profile=Win7SP1x64 hivelist


查看注册表键名

volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410

查看注册表键值

volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "xxxxxxx"

查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等。

volatility -f 1.vmem --profile=Win7SP1x64 userassist

最大程序提取信息

volatility -f 1.vmem --profile=Win7SP1x64 timeliner

0.1.3. x 02 volatility 实例

46 届世界技能大赛湖北省选拔赛-数字取证

  • 提供文件如下:worldskills 3. Vmem,提取码: czjb
  • 任务描述:某日你获取了一个内存文件,请分析文件完成以下任务。
0.1.3.1. 任务(一) 获取 admin 用户密码是多少 ?

先通过 imageinfo 获取系统信息
Open: 1ku4b.png

使用 hashdump 获取 sam
Open: nq3lc.png

可以通过 john 工具来进行爆破,但是好像跑不出来结果。应该是设定了强密码。于是只能使用了 lasdump 命令来查看
Open: 64xif.png

0.1.3.2. 任务(二) 获 ip 和主机名是什么?

通过 netscan 可以查询到地址
Open: 4f0oz.png

主机名需要通过查询注册表,先用 hivelist
Open: zbniq.png

通过 hivedump 查询对应键名 volatility -f worldskills3.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a000024010 > system.txt;cat system.txt|grep name,这个速度比较慢。
Open: lp4aq.png

如果知道键名的话,可以直接查询键值
Open: 7kkm1.png

0.1.3.3. 任务(三) 获取桌面上的 flag. Txt 中的文件内容是什么

先用 filescan 扫描文件
Open: o49mr.png

接着使用 dumpfiles 爆破文件内容
Open: 9jzpj.png

然后文件内容即可看到结果
Open: 912dx.png

0.1.3.4. 任务(四) 服务器中存在一个挖矿病毒矿池地址是?

查看 netscan 的内容,惟一一个建立了连接的就是矿池地址
Open: esjm8.png

0.1.3.5. 任务(五)恶意代码在系统中注册了服务服务名是什么?

上一题中已经知道了进程号为 2588
Open: czo7y.png

查询进程的父进程为 3036,通过 svcscan 可以查询服务名称,找到对应服务名
Open: euudr.png

0.1.3.6. 任务(六) 获取恶意代码的进程名 pid。

由上两题可知,2588 和 3036 都是恶意进程的 ID,即为 svcst. Exe 和 load. Exe
Open: ogboc.png

0.1.3.7. 任务(七) 病毒在自我删除时执行的命令是什么?(病毒进入系统后会删除原始文件,请获取文件删除时执行的命令)

通过 memdump 爆出 loader. Exe 的进程对应的内存信息
Open: fqk25.png

在内存文件中查寻 del 关键字
Open: thgob.png

但是感觉差了一点什么,/c 前面应该是少了一个 cmd.exe,而且 del 后面应该也少点什么,先这样了,回头有空再弄。
https://blog.csdn.net/m0_68012373/article/details/127419463
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=WinXPSP 2 x 86
要加载的配置文件的名称(使用 --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签名扫描进程或内核内存