0%

内存取证工具volatility

最近学了一些关于内存取证工具volatility的使用,在这里整理一下

内存取证工具volatility

1
2
3
4
#确定镜像类型
volatility -f imagename imageinfo
#选定一个profile进行操作
volatility -f imagename --profile=profiletype modulename

基本的volatility插件

进程类

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
pslist #列出系统的所有进程

psscan #显示非活跃或隐藏进程,手册原话:This can find processes that previously terminated (inactive) and processes that have been hidden or unlinked by a rootkit.

pstree #以树状形式打印进程

dlllist #显示当前进程加载的dll

envar #显示进程的环境变量

privs #显示进程的运行权限

cmdline #显示进程启动的命令行参数

malfind #找出隐藏在内存中的dll文件和代码

timeliner #显示内存中多种事件的时间线

procdump #导出当前进程的可执行文件
#使用方法:
volatility -f imagename --profile=profiletype procdump -p [pid] -D [dumpdir]

memdump #导出一个进程的内存镜像
#使用方法:
volatility -f imagename --profile=profiletype memdump -p [pid] -D [dumpdir]

dlldump #导出程序加载的dll文件
#使用方法:
volatility -f imagename --profile=profiletype dlldump -p [pid] -D [dumpdir]
volatility -f imagename --profile=profiletype dlldump -o [offset] -D [dumpdir]
--baseaddr [base addr] #从基地址提取隐藏的dll文件
--regex [regular exp] #采用正则表达式dump符合条件的dll文件

命令类

1
2
3
cmdscan #检查从cmd.exe输入的命令记录

consoles #收集键入cmd.exe的命令和返回内容

文件类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
filescan #扫描内存中的文件对象

mftparser #扫描在内存中潜在NTFS主文件表记录(MFT),就算删除了文件,在MFT中这条记录会被标记为free,但是实际文件是仍然没有被真正删除的,只要原来的文件没有被新文件覆盖,就可以完整恢复被删除的文件。在mftparser的$DATA就可以看见文件的数据了

mbrparser #扫描内存中潜在的主引导记录

dumpfiles #导出加载在内存中的文件
#使用方法
volatility -f imagename --profile=profiletype dumpfiles -D [dumpdir] -Q [physoffset]
volatility -f imagename --profile=profiletype dumpfiles -D [dumpdir] -o [physicaloffset]
-n, --name #在转储出来的文件的文件名中加入原来的文件名
-u, --unsafe #放松安全约束来获取更多信息
-r, --regex #转储符合正则表达式的文件
-i, --ignore-case #在正则表达式中忽略大小写
#导出的文件名有三种后缀
#.img .dat .vacb
#其中.dat文件可以直接修改后缀为原文件后缀使用

网络类

1
2
3
4
5
6
7
8
9
10
11
connections #显示活跃的TCP连接/win7x64sp1不可用

connscan #显示所有的TCP连接/win7x64sp1不可用

sockets #显示所有的套接字连接/win7x64sp1不可用

sockscan #扫描标签池查找_ADDRESS_OBJECT结构体/win7x64sp1不可用

netscan #扫描所有的网络连接

iehistory #显示ie浏览器历史记录

注册表类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
userassist #打印userassist信息,userassist信息可以显示用户从Windows explore使用应用的频率

hivelist #显示内存中的注册表配置单元和对应的路径

printkey #显示指定的注册表项,
#使用方法
volatility -f imagename --profile=profiletype printkey -K [registrykey]

hivedump #递归列出所有的配置单元的子项,需要给出虚拟偏移
#使用方法
volatility -f imagename --profile=profiletype hivedump -o [virtualoffset]

hashdump #解密SAM中存储的用户域凭据(账户密码)哈希

lsadump #提取windows LSA(本地安全颁发机构) secret中保存的信息,可能有udp公钥,默认密码等信息

shellbags #导出shellbags注册表项
#关于shellbags注册表项:是一组用来记录文件夹(包括挂载网络驱动器文件夹和挂载设备的文件夹)的名称、大小、图标、视图、位置的注册表项。每次对文件夹的操作,shellBags的信息都会更新,而且包含时间戳信息。是Windows系统改善用户体验的功能之一。即使删除文件夹后,shellBags仍然会保留文件夹的信息

dumpregistry #将内存中的注册表配置单元导出至磁盘
#使用方法
volatility -f imagename --profile=profiletype dumpregistry -D [dumpdir] #导出所有注册表到磁盘
volatility -f imagename --profile=profiletype dumpregistry -o [virtualoffset] -D [dumpdir] #导出对应虚拟偏移所在的单个注册表

窗口类

1
2
3
4
5
6
7
8
9
10
11
12
13
windows #打印系统所有桌面窗口的信息

wintree #以树状形式打印系统所有的窗口简略信息

screenshot #导出当前桌面的截图(只有线框图和标题)
#使用方法
volatility -f imagename --profile=profiletype screenshot -D [dumpdir]

clipboard #获取用户剪贴板的内容

notepad #查看用户的记事本内容

editbox #查看编辑控件信息

基本的volatility操作组合

获取内存中的文件信息并导出

1
2
3
volatility -f imagename --profile=profiletype filescan | grep [targetfile]

volatility -f imagename --profile=profiletype dumpfiles -Q [offset] -D [dumpdir]

提取的文件并不一定能成功获取有用的数据

获取进程信息并导出可疑进程

1
2
3
volatility -f imagename --profile=profiletype pslist

volatility -f imagename --profile=profiletype memdump -p [pid] -D [dumpdir]

像什么mspaint.exe,notepad.exe啥的都可以dump出来试试,用foremost或者binwalk可以分析并提取有用的文件

获取Windows账户密码

1
volatility -f imagename --profile=profiletype hashdump

获得密码的哈希值以后可以用hashcat爆破或者用解密网站解密,如果有mimikatz可以尝试直接获得明文密码

1
volatility -f imagename --profile=profiletype mimikatz

导出Windows注册表项

1
2
3
volatility -f imagename --profile=profiletype hivelist #找出注册项的虚拟偏移

volatility -f imagename --profile=profiletype hivedump -o [offset] -D [dumdir] #导出对应的注册表配置单元

导出的注册表的后缀为.reg,但是不能直接挂载,可以用WRR转换成Windows可以挂载的格式或直接阅读

找到被删除的文件痕迹

1
2
3
volatility -f imagename --profile=profiletype shellbags

volatility -f imagename --profile=profiletype mftparser > mftoutput.txt