1.工具介绍
Volatility 是一款非常流行的开源内存取证分析框架,主要用于从计算机的内存转储(memory dump)中提取关键信息,广泛应用于数字取证、恶意软件分析和系统调试等领域。Volatility 支持多种操作系统的内存映像,包括 Windows、Linux、MacOS 等,并能够提取与操作系统相关的详细信息,如进程、网络连接、文件、注册表、内核模块等。
1.1 Volatility 迭代
-
Volatility 2.0: 初始版本发布于 2011年。Volatility 2 是一款成熟的内存取证工具,支持多个操作系统(Windows、Linux、MacOS)并提供了丰富的插件和功能,成为内存取证领域的标准工具之一。
-
Volatility 2.6:这是 Volatility 2 的最后一个主要版本。发布于 2016年,Volatility 2.6 增强了对 Windows 10 和其他操作系统的支持,并进行了一些性能和稳定性改进。但由于 Python 2 的逐步淘汰,Volatility 2 的开发逐渐放缓,转而聚焦于 Volatility 3 的发展。
-
Volatility 3.0: 第一个 Volatility 3 的版本发布于 2019年10月。Volatility 3 的发布标志着 Volatility 框架的重大重构,采用了 Python 3,完全重写了其代码库,并进行了模块化设计。与 Volatility 2 不同,Volatility 3 引入了更现代化的开发方式,提供了更好的扩展性、更强大的性能和对新操作系统的支持。
-
Volatility 3.x: 随着 Volatility 3 的发展,开发者不断增加新功能,改进性能,并修复了初期版本中的一些问题。每个小版本都专注于增强框架的稳定性和对新平台的支持。例如,Volatility 3.1 及以后的版本增加了对更广泛的操作系统和内存映像格式的支持,并增强了插件系统。
1.1.1 Volatility 2
Volatility 2 支持多个操作系统和平台的内存映像文件,包括 Windows、Linux、MacOS。Volatility 2还 提供了大量的插件来帮助用户分析内存映像。Volatility 2 支持常见的内存映像格式,如 Windows 系统的 .dmp 和 .raw 文件。用户可以通过各种取证工具(如 FTK Imager、WinPMEM 等)获取内存转储并进行分析。
1.1.2 Volatility 3
Volatility 3 是 Volatility 框架的第三代版本,专注于改进和增强内存取证和分析功能。与 Volatility 2.x 相比,Volatility 3 引入了很多架构上的变化和改进,目的是使其更具现代性、更强大且更易于扩展。Volatility 3 的设计更加模块化,并支持更广泛的操作系统和架构,同时通过 Python 3 提供更好的兼容性和性能。
1.1.3 Volatility 2.6 和 Volatility 3 区别
特性 | Volatility 2 | Volatility 3 |
---|---|---|
Python版本 | 基于 Python 2 | 完全基于 Python 3 |
架构 | 单体架构,功能整合在一个文件中 | 模块化架构,支持插件和更强的扩展性 |
操作系统支持 | 支持 Windows、Linux、Mac OS,较少支持其他系统 | 支持 Windows、Linux、macOS,进一步支持 Android、ELF 等 |
性能 | 在处理大规模内存映像时性能较低 | 优化了性能,特别是在处理大规模内存转储时表现更好 |
插件和命令 | 插件较少,命令行接口较为简单 | 插件系统增强,命令行接口更简洁和一致,插件更多 |
内存映像支持 | 支持传统的内存映像格式,如 Windows 的 .dmp 和 .raw | 增加了对更多内存映像格式的支持,包括 ELF 格式等 |
符号解析 | 符号解析较为简单,且处理复杂的内存结构时可能出现困难 | 改进了符号解析和内存结构解析的准确性和效率 |
开发和扩展 | 扩展性较差,功能相对固定 | 模块化设计,易于扩展和开发新插件 |
代码结构 | 较为复杂且过时,维护性差 | 代码库进行了重构,采用了更加现代的编程模式 |
社区支持 | 较为广泛,但已进入维护阶段 | 更积极的发展阶段,社区支持逐渐增长 |
2.下载与安装
2.1 Volatility 2
MD5:
c6ff76f3cc08a739302ee372d6a2a62d volatility_2.6_lin64_standalone.zip
1de73681ec0e883af852755141eab909 volatility_2.6_mac64_standalone.zip
07b3292dc814ded7c00322a7525d73db volatility_2.6_win64_standalone.zip
1249996d1887578365ee74ec3763cc13 volatility-2.6.zip
SHA256:
dc375a0f6909cb93ac17a10e28a0963fcd2decfc3c4291aadb7e5e0cbe28874a volatility_2.6_lin64_standalone.zip
23bab41b110a1470b9ca71e945450a0a8bcb2edfc8160643b38ab2a8c1d4bd8f volatility_2.6_mac64_standalone.zip
bb021f3b569bf8ee4a408b2e07b0662699894ff7eecd4473badf0ef0c58f2fce volatility_2.6_win64_standalone.zip
5b73050d72bf94870ffce22843f03d4b0b7764011dec29ef1a0a5b1b46cf9295 volatility-2.6.zip
Volatility 2项目地址:https://github.com/volatilityfoundation/volatility
Volatility 2 整合在一个文件中可在github直接下载使用
2.2 Volatility 3
MD5:
f326e5a1352e4e63527212f9278b85d5 volatility3-2.11.0.zip
Volatility 3项目地址:https://github.com/volatilityfoundation/volatility3
Volatility 3需要python版本 >= 3.7.3
下载并解压
unzip volatility3-2.8.0.zip
安装 Volatility 3 所需的所有依赖库
pip install -r requirements.txt
在本地安装 Volatility 3
python setup.py install
此命令会将 Volatility 3 安装到你的 Python 环境中。
验证安装
vol -h
3.命令说明
-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)
3.1 Volatility 2
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签名扫描进程或内核内存
Volatility 2 的命令结构通常是:
./volatility_2.6_lin64_standalone -f <memory dump file> --profile=<profile> <plugin>
-
-f <memory dump file>
: 指定要分析的内存转储文件。 -
--profile=<profile>
: 指定分析时使用的操作系统配置文件(例如 Windows 7 64 位等)。 -
<plugin>
: 指定使用的插件,插件用于提取特定类型的内存信息。
3.2 常用命令和插件解析
3.2.1. imageinfo
该命令用于获取内存转储的基本信息,例如操作系统、架构、时间戳等。
./volatility_2.6_lin64_standalone -f SERVER.raw imageinfo
作用:该命令会根据内存转储的元数据(如时间戳、结构信息等)推荐可能的操作系统配置文件,帮助我们确定合适的 profile。
输出示例:
3.2.2. pslist
列出内存中的所有进程。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 pslist
作用:该命令显示了内存中的进程列表,包括进程名、PID、父进程ID、线程数、句柄数及启动时间。
输出示例:
3.2.3. pstree
以树形结构显示进程关系,帮助查看进程的父子关系。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 pstree
作用:该命令以树形结构展示内存中的进程及其父子关系。
输出示例:
3.2.4. dlllist
列出每个进程加载的 DLL 文件。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 dlllist
作用:列出每个进程所加载的 DLL 文件,包括 DLL 基址和文件名。
输出示例:
3.2.5. netscan
扫描内存中的网络连接,包括 TCP、UDP 连接。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 netscan
作用:列出内存中的网络连接,包括协议、局部地址、远程地址和连接状态。
输出示例:
3.2.6. mftparser
解析文件系统中的 MFT(主文件表),提供有关文件的信息。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 mftparser
作用:列出内存中 MFT 的文件记录信息,通常用于分析系统中文件的路径和元数据。
输出示例:
3.2.7. malfind
检测和列出内存中的恶意代码。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 malfind
作用:检测内存中是否存在可疑的、可能是恶意软件的代码段。
输出示例:
3.2.8. cmdscan
和 consoles
提取命令行历史记录。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 cmdscan
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 consoles
输出示例:
作用:提取并显示命令行历史记录,有助于分析用户在系统中的操作轨迹。
3.2.9. filescan
列出所用文件列表。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 filescan
作用:扫描所有的文件列表并列出。
输出示例:
3.2.10. dumpfiles
dump文件。
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007e4cedd0 -D /tmp
-Q:指定偏移量
-D:指定输出目录
作用:指定内存中文件偏移量导出文件。
输出示例:
3.2.11. screenshot
屏幕截图
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 screenshot --dump-dir=/tmp
--dump-dir=/:保存位置
作用:对当前屏幕进行截图。
输出示例:
3.2.12. hashdump
转储内存中的Windows帐户密码哈希
./volatility_2.6_lin64_standalone -f SERVER.raw --profile=Win7SP1x64 hashdump
作用:转储内存中的Windows帐户密码哈希。
输出示例:
3.3 Volatility 3
layerwriter 列出内存镜像platform信息
linux.bash 从内存中恢复bash命令历史记录
linux.check_afinfo 验证网络协议的操作功能指针
linux.check_syscall 检查系统调用表中的挂钩
linux.elfs 列出所有进程的所有内存映射ELF文件
linux.lsmod 列出加载的内核模块
linux.lsof 列出所有进程的所有内存映射
linux.malfind 列出可能包含注入代码的进程内存范围
linux.proc 列出所有进程的所有内存映射
linux.pslist 列出linux内存映像中存在的进程
linux.pstree 列出进程树
mac.bash 从内存中恢复bash命令历史记录
mac.check_syscall 检查系统调用表中的挂钩
mac.check_sysctl 检查sysctl处理程序的挂钩
mac.check_trap_table 检查trap表中的挂钩
mac.ifconfig 列出网卡信息
mac.lsmod 列出加载的内核模块
mac.lsof 列出所有进程的所有内存映射
mac.malfind 列出可能包含注入代码的进程内存范围
mac.netstat 列出所有进程的所有网络连接
mac.psaux 恢复程序命令行参数
mac.pslist 列出linux内存映像中存在的进程
mac.pstree 列出进程树
mac.tasks 列出Mac内存映像中存在的进程
windows.info 显示正在分析的内存样本的OS和内核详细信息
windows.callbacks 列出内核回调和通知例程
windows.cmdline 列出进程命令行参数
windows.dlldump 将进程内存范围DLL转储
windows.dlllist 列出Windows内存映像中已加载的dll模块
windows.driverirp 在Windows内存映像中列出驱动程序的IRP
windows.driverscan 扫描Windows内存映像中存在的驱动程序
windows.filescan 扫描Windows内存映像中存在的文件对象
windows.handles 列出进程打开的句柄
windows.malfind 列出可能包含注入代码的进程内存范围
windows.moddump 转储内核模块
windows.modscan 扫描Windows内存映像中存在的模块
windows.mutantscan 扫描Windows内存映像中存在的互斥锁
windows.pslist 列出Windows内存映像中存在的进程
windows.psscan 扫描Windows内存映像中存在的进程
windows.pstree 列出进程树
windows.procdump 转储处理可执行映像
windows.registry.certificates 列出注册表中存储的证书
windows.registry.hivelist 列出内存映像中存在的注册表配置单元
windows.registry.hivescan 扫描Windows内存映像中存在的注册表配置单元
windows.registry.printkey 在配置单元或特定键值下列出注册表项
windows.registry.userassist 打印用户助手注册表项和信息
windows.ssdt 列出系统调用表
windows.strings 读取字符串命令的输出,并指示每个字符串属于哪个进程
windows.svcscan 扫描Windows服务
windows.symlinkscan 扫描Windows内存映像中存在的链接
Volatility 3命令结构与 Volatility 2 相似。
vol -f <memory dump file> <plugin> [options]
-
-f <memory dump file>
:指定分析的内存转储文件。
注意:在 Volatility 3 中,Profile 的概念被改为适配特定操作系统的自动探测。
-
<plugin>
:选择要运行的插件,插件用于提取不同类型的信息。 -
[options]
:可选参数,针对插件的特定配置。
3.4 常用命令和插件解析
3.4.1. windows.info
该命令用于获取内存转储的基本信息,例如操作系统、架构、时间戳等。
vol -f SERVER.raw windows.info
作用:该命令会根据内存转储的元数据,如时间戳、结构信息等
输出示例:
3.4.2. windows.pslist
列出内存中的所有进程。
vol -f SERVER.raw windows.pslist
作用:该命令显示了内存中的进程列表,包括进程名、PID、父进程ID、线程数、句柄数及启动时间。
输出示例:
3.4.3. windows.pstree
以树形结构显示进程关系,帮助查看进程的父子关系。
vol -f SERVER.raw windows.pstree
作用:该命令以树形结构展示内存中的进程及其父子关系。
输出示例:
3.4.4. windows.dlllist
列出每个进程加载的 DLL 文件。
vol -f SERVER.raw windows.dlllist
作用:列出每个进程所加载的 DLL 文件,包括 DLL 基址和文件名。
输出示例:
3.4.5. windows.netscan
扫描内存中的网络连接,包括 TCP、UDP 连接。
vol -f SERVER.raw windows.netscan
作用:列出内存中的网络连接,包括协议、局部地址、远程地址和连接状态。
输出示例:
3.4.6. windows.cmdline
列出进程命令行参数
vol -f SERVER.raw windows.cmdline
作用:提取并显示列出进程命令行参数。
输出示例:
3.4.7. windows.filescan
列出所用文件列表。
vol -f SERVER.raw windows.filescan
作用:扫描所有的文件列表并列出。
输出示例:
3.4.8. windows.dumpfiles
dump文件。
vol -f SERVER.raw windows.dumpfiles --physaddr 0x7e4cedd0
作用:指定内存中文件偏移量导出文件。
输出示例:
3.4.9. hashdump
转储内存中的Windows帐户密码哈希
vol -f SERVER.raw windows.hashdump
作用:转储内存中的Windows帐户密码哈希。
输出示例: