volatility2 使用笔记

volatility2 安装

在 GitHub 主页中可以直接获取源码:https://github.com/volatilityfoundation/volatility

直接使用源码运行即可,同时在官网也可以获取到可直接运行的版本:https://www.volatilityfoundation.org/releases

需要注意的是,volatility2 所需的运行环境为 Python2,且存在一些依赖库。

volatility2 使用

参数

使用 python2 vol.py -h 可获取到帮助信息:

Options: -h, --help list all available options and their default values. Default values may be set in the configuration file (/etc/volatilityrc) --conf-file=.volatilityrc User based configuration file -d, --debug Debug volatility --plugins=PLUGINS Additional plugin directories to use (semi-colon separated) --info Print information about all registered objects --cache-directory=C:\53124/.cache Directory where cache files are stored --cache Use caching --tz=TZ Sets the (Olson) timezone for displaying timestamps using pytz (if installed) or tzset -f FILENAME, --filename=FILENAME Filename to use when opening an image --profile=WinXPSP2x86 Name of the profile to load (use --info to see a list of supported profiles) -l LOCATION, --location=LOCATION A URN location from which to load an address space -w, --write Enable write support --dtb=DTB DTB Address --output=text Output in this format (support is module specific, see the Module Output Options below) --output-file=OUTPUT_FILE Write output in this file -v, --verbose Verbose information --shift=SHIFT Mac KASLR shift address --physical_shift=PHYSICAL_SHIFT Linux kernel physical shift address --virtual_shift=VIRTUAL_SHIFT Linux kernel virtual shift address -g KDBG, --kdbg=KDBG Specify a KDBG virtual address (Note: for 64-bit Windows 8 and above this is the address of KdCopyDataBlock) --force Force utilization of suspect profile -k KPCR, --kpcr=KPCR Specify a specific KPCR address --cookie=COOKIE Specify the address of nt!ObHeaderCookie (valid for Windows 10 only)

一般来说常用的参数格式为:

1
python2 vol.py -f file.raw plugins [args]

例如获取内存镜像的环境信息:

1
python2 vol.py -f file.raw imageinfo

或者是转储文件:

1
python2 vol.py -f file.raw dumpfiles --dump-dir .

插件明细

插件名 作用
amcache 打印 AmCache 信息
apihooks 检测进程和内核内存中的 API 钩子 (hooks)
atoms 打印会话和窗口站原子表
atomscan 原子表池扫描器
auditpol HKLM\SECURITY\Policy\PolAdtEv 打印审计策略
bigpools 使用 BigPagePoolScanner 转储大页面池
bioskbd Real Mode 内存中读取键盘缓冲区
cachedump 从内存中转储缓存的域哈希值
callbacks 打印整个系统的回调和通知进程
clipboard 提取 Windows 剪贴板的内容
cmdline 显示进程的命令行参数
cmdscan 通过扫描 _COMMAND_HISTORY 提取命令历史记录
connections 打印开放的连接列表 [仅适用于Windows XP和2003]
connscan 连接池中扫描 tcp 连接
consoles 通过扫描 _CONSOLE_INFORMATION 来提取命令历史记录
crashinfo 转储崩溃转储信息
deskscan 标签 DESKTOP(台式机)的池扫描器
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 检查用户区 apihooks 情况
linux_arp 打印 ARP 表
linux_aslr_shift 自动检测 Linux ASLR shift
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 中的“信息寄存器”(它将打印出所有寄存器)
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 收集已安装的 fs/设备
linux_mount_cache 从 kmem_cache 收集已安装的 fs/驱动
linux_netfilter 列出 Netfilter 钩子
linux_netscan 列出网络连接结构
linux_netstat 列出打开的套接字
linux_pidhashtable 通过 PID 哈希表枚举进程
linux_pkt_queues 将每个进程的数据包队列写入磁盘
linux_plthook 扫描 ELF 二进制文件的 PLT 以查找非需要图像的挂钩
linux_proc_maps 收集进程内存映射
linux_proc_maps_rb 通过映射红黑树为 linux 收集 proc maps
linux_procdump 将进程的可执行映像转储到磁盘
linux_process_hollow 检查进程空心的迹象
linux_psaux 收集进程以及完整的命令行和开始时间
linux_psenv 收集进程及其静态环境变量
linux_pslist 通过遍历 task_struct-> 任务列表来收集活动任务
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 检查马赫陷阱表条目是否已挂钩
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 映射的输出与 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(例如 LogKext)添加挂钩的 rootkit
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
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 windows 保存伪屏幕截图
servicediff 列出 Windows 服务(类似于 Plugx)
sessions 列出关于 _MM_SESSION_SPACE(用户登录会话)的详细信息
shellbags 打印 ShellBags 信息
shimcache 解析应用程序兼容性 Shim 缓存注册表项
shutdowntime 从注册表中打印机器的 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 打印 USER 注册表键值和信息
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 打印桌面 Windows(详细详细信息)
wintree 打印 Z-Order 桌面Windows 树
wndscan 用于窗口站的池扫描程序
yarascan 使用 Yara 签名扫描进程或内核内存

volatility2 插件

实际上所有 volatility2 的功能都是由插件实现的,我们可以自主安装他人所写的插件或者是自己写插件脚本。

无论是哪种,只需要将插件脚本拖入 plugins/ 文件下即可(另一个可能的路径为 volatility/plugins/),且支持文件夹分类(实际上只要在该目录下的所有文件都会遍历加载)。

mimikatz

mimikatz 是一个可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证的软件,在 volatility2 中有专门的插件替代了繁琐的操作。

如果不使用插件,我们需要首先从内存镜像中转储 lsass.exe 的内存文件为 lsass.dmp 后,用 mimikatz 加载并读取数据。

我们可以在 https://github.com/RealityNet/hotoloti/tree/master/volatility 中获取 mimikatz.py,将其添加到 plugins/ 文件夹下即可使用。

使用方式:

1
python2 vol.py -f file.raw mimikatz

一键提取出目标内存镜像中的用户名和密码。