
An advanced memory forensics framework
此项目已归档。如需现代调查,请参阅Volatility 3:https://github.com/volatilityfoundation/volatility3
Volatility Framework 是一个完全开放的工具集合,采用 Python 实现,遵循 GNU 通用公共许可证,用于从易失性内存(RAM)样本中提取数字痕迹。提取技术完全独立于被调查系统,但能提供系统运行时状态的可视性。该框架旨在向人们介绍与从易失性内存样本中提取数字痕迹相关的技术和复杂性,并为这一激动人心的研究领域提供进一步工作的平台。
Volatility 发行版可从以下网址获取: http://www.volatilityfoundation.org/#!releases/component_71401
Volatility 应能在任何支持 Python (http://www.python.org) 的平台上运行
Volatility 支持对以下内存映像进行调查:
Windows:
注意:请参阅以下链接中的指南,了解与最近修补的 Windows 7(或更高版本)内存样本兼容性的说明:
https://github.com/volatilityfoundation/volatility/wiki/2.6-Win-Profiles
Linux:
Mac OSX:
Volatility 不提供内存样本获取能力。关于获取,有免费和商业解决方案可用。如果您希望获得合适的获取解决方案建议,请通过以下地址联系我们:
volatility (at) volatilityfoundation (dot) org
Volatility 支持多种样本文件格式,并能在这些格式之间进行转换:
有关更详细的功能列表,请参阅以下网址:
https://github.com/volatilityfoundation/volatility/wiki
另请参阅社区插件仓库:
https://github.com/volatilityfoundation/community
如果您想尝试 Volatility,可以从以下网址下载示例内存映像:
https://github.com/volatilityfoundation/volatility/wiki/Memory-Samples
用于支持 Volatility 用户和开发者的邮件列表可在以下地址找到:
http://lists.volatilesystems.com/mailman/listinfo
如需信息或请求,请联系:
Volatility Foundation
网站:http://www.volatilityfoundation.org http://volatility-labs.blogspot.com http://volatility.tumblr.com
邮箱:volatility (at) volatilityfoundation (dot) org
IRC:#volatility on freenode
Twitter:@volatility
某些插件可能有其他要求,详情请参阅: https://github.com/volatilityfoundation/volatility/wiki/Installation
从 volatilityfoundation.org 解压最新版本的 Volatility
要查看可用选项,运行 "python vol.py -h" 或 "python vol.py --info"
示例:
$ python vol.py --info Volatility Foundation Volatility Framework 2.6
AMD64PagedMemory - Standard AMD 64-bit address space. ArmAddressSpace - Address space for ARM processors FileAddressSpace - This is a direct file AS. HPAKAddressSpace - This AS supports the HPAK format IA32PagedMemory - Standard IA-32 paging address space. IA32PagedMemoryPae - This class implements the IA-32 PAE paging address space. It is responsible LimeAddressSpace - Address space for Lime LinuxAMD64PagedMemory - Linux-specific AMD 64-bit address space. MachOAddressSpace - Address space for mach-o files to support atc-ny memory reader OSXPmemELF - This AS supports VirtualBox ELF64 coredump format QemuCoreDumpElf - This AS supports Qemu ELF32 and ELF64 coredump format VMWareAddressSpace - This AS supports VMware snapshot (VMSS) and saved state (VMSS) files VMWareMetaAddressSpace - This AS supports the VMEM format with VMSN/VMSS metadata VirtualBoxCoreDumpElf64 - This AS supports VirtualBox ELF64 coredump format Win10AMD64PagedMemory - Windows 10-specific AMD 64-bit address space. WindowsAMD64PagedMemory - Windows-specific AMD 64-bit address space. WindowsCrashDumpSpace32 - This AS supports windows Crash Dump format WindowsCrashDumpSpace64 - This AS supports windows Crash Dump format WindowsCrashDumpSpace64BitMap - This AS supports Windows BitMap Crash Dump format WindowsHiberFileSpace32 - This is a hibernate address space for windows hibernation files.
amcache - 输出 AmCache 信息 apihooks - 检测进程和内核内存中的 API 钩子 atoms - 输出会话和窗口站原子表 atomscan - 原子表的内存池扫描器 auditpol - 从 HKLM\SECURITY\Policy\PolAdtEv 输出审核策略 bigpools - 使用 BigPagePoolScanner 转储大页池 bioskbd - 从实模式内存读取键盘缓冲区 cachedump - 从内存转储缓存的域哈希 callbacks - 输出系统范围的通知例程 clipboard - 提取 Windows 剪贴板内容 cmdline - 显示进程命令行参数 cmdscan - 通过扫描 _COMMAND_HISTORY 提取命令历史 connections - 输出打开的连接列表(仅限 Windows XP 和 2003) connscan - TCP 连接的内存池扫描器 consoles - 通过扫描 _CONSOLE_INFORMATION 提取命令历史 crashinfo - 转储崩溃转储信息 deskscan - tagDESKTOP(桌面)的内存池扫描器 devicetree - 显示设备树 dlldump - 从进程地址空间转储 DLL dlllist - 输出每个进程加载的 DLL 列表 driverirp - 驱动 IRP 钩子检测 drivermodule - 将驱动对象与内核模块关联 driverscan - 驱动对象的内存池扫描器 dumpcerts - 转储 RSA 私钥和公钥 SSL 密钥 dumpfiles - 提取内存映射和缓存文件 dumpregistry - 将注册表文件转储到磁盘 editbox - 显示编辑控件信息(实验性支持列表框) envars - 显示进程环境变量 eventhooks - 输出 Windows 事件钩子详细信息 evtlogs - 提取 Windows 事件日志(仅限 XP/2003) filescan - 文件对象的内存池扫描器 gahti - 转储 USER 句柄类型信息 gditimers - 输出已安装的 GDI 定时器和回调 gdt - 显示全局描述符表 getservicesids - 从注册表获取服务名称并返回计算出的 SID getsids - 输出拥有每个进程的 SID handles - 输出每个进程打开的句柄列表 hashdump - 从内存转储密码哈希(LM/NTLM) hibinfo - 转储休眠文件信息 hivedump - 输出注册表配置单元 hivelist - 输出注册表配置单元列表 hivescan - 注册表配置单元的内存池扫描器 hpakextract - 从 HPAK 文件提取物理内存 hpakinfo - 显示 HPAK 文件信息 idt - 显示中断描述符表 iehistory - 重建 Internet Explorer 缓存/历史记录 imagecopy - 将物理地址空间复制为原始 DD 镜像 imageinfo - 识别镜像信息 impscan - 扫描对导入函数的调用 joblinks - 输出进程作业链接信息 kdbgscan - 搜索并转储潜在的 KDBG 值 kpcrscan - 搜索并转储潜在的 KPCR 值 ldrmodules - 检测未链接的 DLL limeinfo - 转储 Lime 文件格式信息 linux_apihooks - 检查用户态 API 钩子 linux_arp - 输出 ARP 表 linux_aslr_shift - 自动检测 Linux ASLR 偏移 linux_banner - 输出 Linux 横幅信息 linux_bash - 从 bash 进程内存恢复 bash 历史 linux_bash_env - 恢复进程的动态环境变量 linux_bash_hash - 从 bash 进程内存恢复 bash 哈希表 linux_check_afinfo - 验证网络协议的操作函数指针 linux_check_creds - 检查是否有进程共享凭据结构 linux_check_evt_arm - 检查异常向量表以查找系统调用表钩子 linux_check_fop - 检查文件操作结构是否存在 rootkit 修改 linux_check_idt - 检查 IDT 是否被篡改 linux_check_inline_kernel - 检查内联内核钩子 linux_check_modules - 将模块列表与 sysfs 信息比较(如果可用) linux_check_syscall - 检查系统调用表是否被篡改 linux_check_syscall_arm - 检查系统调用表是否被篡改 linux_check_tty - 检查 tty 设备是否存在钩子 linux_cpuinfo - 输出每个活动处理器的信息 linux_dentry_cache - 从 dentry 缓存收集文件 linux_dmesg - 收集 dmesg 缓冲区 linux_dump_map - 将选定的内存映射写入磁盘 linux_dynamic_env - 恢复进程的动态环境变量 linux_elfs - 在进程映射中查找 ELF 二进制文件 linux_enumerate_files - 列出文件系统缓存中引用的文件 linux_find_file - 从内存列出并恢复文件 linux_getcwd - 列出每个进程的当前工作目录 linux_hidden_modules - 通过内存雕刻查找隐藏的内核模块 linux_ifconfig - 收集活动接口 linux_info_regs - 类似 GDB 中的 'info registers',输出所有寄存器 linux_iomem - 提供类似 /proc/iomem 的输出 linux_kernel_opened_files - 列出在内核中打开的文件 linux_keyboard_notifiers - 解析键盘通知器调用链 linux_ldrmodules - 将 proc maps 输出与 libdl 中的库列表比较 linux_library_list - 列出加载到进程中的库 linux_librarydump - 将进程内存中的共享库转储到磁盘 linux_list_raw - 列出具有混杂套接字的应用程序 linux_lsmod - 收集加载的内核模块 linux_lsof - 列出文件描述符及其路径 linux_malfind - 查找可疑的进程映射 linux_memmap - 转储 Linux 任务的内存映射 linux_moddump - 提取加载的内核模块 linux_mount - 收集挂载的文件系统/设备 linux_mount_cache - 从 kmem_cache 收集挂载的文件系统/设备 linux_netfilter - 列出 Netfilter 钩子 linux_netscan - 雕刻网络连接结构 linux_netstat - 列出打开的套接字 linux_pidhashtable - 通过 PID 哈希表枚举进程 linux_pkt_queues - 将每个进程的数据包队列写入磁盘 linux_plthook - 扫描 ELF 二进制文件的 PLT,查找钩子指向非 NEEDED 镜像 linux_proc_maps - 收集进程内存映射 linux_proc_maps_rb - 通过映射红黑树收集 Linux 进程映射 linux_procdump - 将进程的可执行镜像转储到磁盘 linux_process_hollow - 检查进程空洞迹象 linux_psaux - 收集进程以及完整命令行和启动时间 linux_psenv - 收集进程及其静态环境变量 linux_pslist - 通过遍历 task_struct->task 列表收集活动任务 linux_pslist_cache - 从 kmem_cache 收集任务 linux_psscan - 扫描物理内存以查找进程 linux_pstree - 显示进程间的父子关系 linux_psxview - 使用多种进程列表查找隐藏进程 linux_recover_filesystem - 从内存恢复整个缓存的文件系统 linux_route_cache - 从内存恢复路由缓存 linux_sk_buff_cache - 从 sk_buff kmem_cache 恢复数据包 linux_slabinfo - 模拟正在运行机器上的 /proc/slabinfo linux_strings - 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常详细) linux_threads - 输出进程的线程 linux_tmpfs - 从内存恢复 tmpfs 文件系统 linux_truecrypt_passphrase - 恢复缓存的 TrueCrypt 密码短语 linux_vma_cache - 从 vm_area_struct 缓存收集 VMA linux_volshell - 内存镜像中的 shell linux_yarascan - Linux 内存镜像中的 shell lsadump - 从注册表转储(解密)LSA 机密 mac_adium - 列出 Adium 消息 mac_apihooks - 检查进程中的 API 钩子 mac_apihooks_kernel - 检查系统调用和内核函数是否被挂钩 mac_arp - 输出 arp 表 mac_bash - 从 bash 进程内存恢复 bash 历史 mac_bash_env - 恢复 bash 的环境变量 mac_bash_hash - 从 bash 进程内存恢复 bash 哈希表 mac_calendar - 从 Calendar.app 获取日历事件 mac_check_fop - 验证文件操作指针 mac_check_mig_table - 列出内核 MIG 表中的条目 mac_check_syscall_shadow - 查找影子系统调用表 mac_check_syscalls - 检查系统调用表条目是否被挂钩 mac_check_sysctl - 检查未知的 sysctl 处理器 mac_check_trap_table - 检查 Mach 陷阱表条目是否被挂钩 mac_compressed_swap - 输出 Mac OS X VM 压缩器统计信息并转储所有压缩页面 mac_contacts - 从 Contacts.app 获取联系人姓名 mac_dead_procs - 输出已终止/释放的进程 mac_dead_sockets - 输出已终止/释放的网络套接字 mac_dead_vnodes - 列出已释放的 vnode 结构 mac_devfs - 列出文件缓存中的文件 mac_dmesg - 输出内核调试缓冲区 mac_dump_file - 转储指定文件 mac_dump_maps - 转储进程的内存范围,可选包含压缩交换中的页面 mac_dyld_maps - 从 dyld 数据结构获取进程的内存映射 mac_find_aslr_shift - 查找 10.8+ 镜像的 ASLR 偏移值 mac_get_profile - 自动检测 Mac 配置文件 mac_ifconfig - 列出所有设备的网络接口信息 mac_interest_handlers - 列出 IOKit 兴趣处理器 mac_ip_filters - 报告任何挂钩的 IP 过滤器 mac_kernel_classes - 列出内核中加载的 C++ 类 mac_kevents - 显示进程的父子关系 mac_keychaindump - 恢复可能的钥匙串密钥。使用 chainbreaker 打开相关的钥匙串文件 mac_ldrmodules - 将 proc maps 输出与 libdl 中的库列表比较 mac_librarydump - 转储进程的可执行文件 mac_list_files - 列出文件缓存中的文件 mac_list_kauth_listeners - 列出 Kauth 作用域监听器 mac_list_kauth_scopes - 列出 Kauth 作用域及其状态 mac_list_raw - 列出具有混杂套接字的应用程序 mac_list_sessions - 枚举会话 mac_list_zones - 输出活动区域 mac_lsmod - 列出加载的内核模块 mac_lsmod_iokit - 通过 IOkit 列出加载的内核模块 mac_lsmod_kext_map - 列出加载的内核模块 mac_lsof - 列出每个进程打开的文件 mac_machine_info - 输出样本的机器信息 mac_malfind - 查找可疑的进程映射 mac_memdump - 将可寻址的内存页面转储到文件 mac_moddump - 将指定的内核扩展写入磁盘 mac_mount - 输出挂载的设备信息 mac_netstat - 列出活动的每个进程网络连接 mac_network_conns - 从内核网络结构列出网络连接 mac_notesapp - 查找 Notes 消息内容 mac_notifiers - 检测向 I/O Kit 添加钩子的 rootkit(例如 LogKext) mac_orphan_threads - 列出不映射回已知模块/进程的线程 mac_pgrp_hash_table - 遍历进程组哈希表 mac_pid_hash_table - 遍历 PID 哈希表 mac_print_boot_cmdline - 输出内核启动参数 mac_proc_maps - 获取进程的内存映射 mac_procdump - 转储进程的可执行文件 mac_psaux - 输出带有用户态参数(**argv)的进程 mac_psenv - 输出带有用户态环境变量(**envp)的进程 mac_pslist - 列出正在运行的进程 mac_pstree - 显示进程的父子关系 mac_psxview - 使用多种进程列表查找隐藏进程 mac_recover_filesystem - 恢复缓存的文件系统 mac_route - 输出路由表 mac_socket_filters - 报告套接字过滤器 mac_strings - 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常详细) mac_tasks - 列出活动任务 mac_threads - 列出进程线程 mac_threads_simple - 列出线程及其启动时间和优先级 mac_timers - 报告内核驱动程序设置的定时器 mac_trustedbsd - 列出恶意的 trustedbsd 策略 mac_version - 输出 Mac 版本 mac_vfsevents - 列出过滤文件系统事件的进程 mac_volshell - 内存镜像中的 shell mac_yarascan - 使用 yara 签名扫描内存 machoinfo - 转储 Mach-O 文件格式信息 malfind - 查找隐藏和注入的代码 mbrparser - 扫描并解析潜在的主引导记录(MBR) memdump - 转储进程的可寻址内存 memmap - 输出内存映射 messagehooks - 列出桌面和线程窗口消息钩子 mftparser - 扫描并解析潜在的 MFT 条目 moddump - 将内核驱动程序转储到可执行文件样本 modscan - 内核模块的内存池扫描器 modules - 输出加载的模块列表 multiscan - 同时扫描多种对象 mutantscan - 互斥对象的内存池扫描器 netscan - 扫描 Vista(或更新版本)镜像的连接和套接字 notepad - 列出当前显示的记事本文本 objtypescan - 扫描 Windows 对象类型对象 patcher - 基于页面扫描修补内存 poolpeek - 可配置的内存池扫描插件 pooltracker - 显示内存池标签使用情况摘要 printkey - 输出注册表键及其子键和值 privs - 显示进程权限 procdump - 将进程转储到可执行文件样本 pslist - 通过遍历 EPROCESS 列表输出所有正在运行的进程 psscan - 进程对象的内存池扫描器 pstree - 以树形结构输出进程列表 psxview - 使用多种进程列表查找隐藏进程 qemuinfo - 转储 Qemu 信息 raw2dmp - 将物理内存样本转换为 windbg 崩溃转储 screenshot - 基于 GDI 窗口保存伪屏幕截图 servicediff - 列出 Windows 服务(类似 Plugx) sessions - 列出 _MM_SESSION_SPACE 的详细信息(用户登录会话) shellbags - 输出 ShellBags 信息 shimcache - 解析应用程序兼容性 Shim 缓存注册表键 shutdowntime - 从注册表输出机器的关机时间 sockets - 输出打开的套接字列表 sockscan - TCP 套接字对象的内存池扫描器 ssdt - 显示 SSDT 条目 strings - 将物理偏移量与虚拟地址匹配(可能需要一段时间,非常详细) svcscan - 扫描 Windows 服务 symlinkscan - 符号链接对象的内存池扫描器 thrdscan - 线程对象的内存池扫描器 threads - 调查 _ETHREAD 和 _KTHREAD timeliner - 从内存中的各种工件创建时间线 timers - 输出内核定时器及关联模块的 DPC truecryptmaster - 恢复 TrueCrypt 7.1a 主密钥 truecryptpassphrase - TrueCrypt 缓存密码短语查找器 truecryptsummary - TrueCrypt 摘要 unloadedmodules - 输出已卸载模块列表 userassist - 输出 userassist 注册表键和信息 userhandles - 转储 USER 句柄表 vaddump - 将 VAD 段转储到文件 vadinfo - 转储 VAD 信息 vadtree - 遍历 VAD 树并以树形格式显示 vadwalk - 遍历 VAD 树 vboxinfo - 转储 VirtualBox 信息 verinfo - 从 PE 镜像输出版本信息 vmwareinfo - 转储 VMware VMSS/VMSN 信息 volshell - 内存镜像中的 shell win10cookie - 查找 Windows 10 的 ObHeaderCookie 值 windows - 输出桌面窗口(详细信息) wintree - 输出 Z 顺序桌面窗口树 wndscan - 窗口站的内存池扫描器 yarascan - 使用 Yara 签名扫描进程或内核内存
要获取 Windows 内存样本的更多信息并确保 Volatility 支持该样本类型,请运行 'python vol.py imageinfo -f ' 或 'python vol.py kdbgscan -f '
示例:
$ python vol.py imageinfo -f WIN-II7VOJTUNGL-20120324-193051.raw Volatility Foundation Volatility Framework 2.6 Determining profile based on KDBG search...
Suggested Profile(s) : Win2008R2SP0x64, Win7SP1x64, Win7SP0x64, Win2008R2SP1x64 (Instantiated with Win7SP0x64)
AS Layer1 : AMD64PagedMemory (Kernel AS)
AS Layer2 : FileAddressSpace (/Path/to/WIN-II7VOJTUNGL-20120324-193051.raw)
PAE type : PAE
DTB : 0x187000L
KDBG : 0xf800016460a0
Number of Processors : 1
Image Type (Service Pack) : 1
KPCR for CPU 0 : 0xfffff80001647d00L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2012-03-24 19:30:53 UTC+0000
Image local date and time : 2012-03-25 03:30:53 +0800
如果 imageinfo 或 kdbgscan 建议了多个配置文件,或者您在分析 Windows 7 及更新版本的内存样本时遇到问题,请参考以下指南:
https://github.com/volatilityfoundation/volatility/wiki/2.6-Win-Profiles
运行其他插件。-f 是所有插件的必需选项。某些插件还要求/接受其他选项。运行 "python vol.py -h" 以获取特定命令的更多信息。GitHub 网站上还有一个命令参考 wiki:https://github.com/volatilityfoundation/volatility/wiki
以及基本用法:
https://github.com/volatilityfoundation/volatility/wiki/Volatility-Usage
版权所有 (C) 2007-2016 Volatility Foundation
保留所有权利
Volatility 是自由软件;你可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证版本 2 或(根据你的选择)任何后续版本。
Volatility 的分发是希望它能有用,但没有任何担保;甚至没有对适销性或特定用途适用性的暗示担保。详情请参阅 GNU 通用公共许可证。
你应该已经随 Volatility 收到了一份 GNU 通用公共许可证的副本。如果没有,请访问 http://www.gnu.org/licenses/。
Volatility 不提供任何支持。没有任何担保;甚至没有对适销性或特定用途适用性的担保。
如果你认为自己发现了一个错误,请在此报告:
https://github.com/volatilityfoundation/volatility/issues
为了帮助我们尽快解决你的问题,请在提交错误时包含以下信息:
根据内存映像的操作系统,你可能需要提供额外信息,例如:
对于 Windows:
对于 Linux:
其他交流方式可在此找到: https://github.com/volatilityfoundation/volatility/wiki
Volatility Foundation 不对 Volatility 输出的有效性或正确性做出任何声明。许多因素可能导致 Volatility 输出不正确,包括但不限于:对操作系统的恶意修改、由于交换导致的信息不完全、以及映像获取过程中的信息损坏。
以下 URL 包含了 Volatility 支持的所有命令的参考信息。
https://github.com/volatilityfoundation/volatility/wiki