Volatility 内存取证框架安装与使用

Volatility 2.6 在 Kali Linux 上的安装、插件配置及常用命令示例

Volatility 内存取证框架

安装步骤(基于 Python2)

环境说明
Kali Linux 自带 Python2,无需额外安装。以下操作均在 root 或 sudo 权限下执行。

第一步:确认 Python2 环境

Kali 自带 Python2,可通过以下命令验证:

1
python2 --version

第二步:安装 pip2

1
2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python2 get-pip.py

第三步:安装 Python2 依赖库

1
2
python2 -m pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple/
# python2 -m pip install distorm3 -i https://pypi.tuna.tsinghua.edu.cn/simple/   # 可选,distorm3 后续会源码编译

第四步:编译安装 distorm3

1
2
3
git clone https://github.com/vext01/distorm3
cd distorm3
python2 setup.py install

第五步:编译安装 Volatility

1
2
3
git clone https://github.com/volatilityfoundation/volatility.git   # 假设目录名为 Volatility
cd Volatility
python2 setup.py install

第六步:安装常用 Python 插件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Yara(恶意软件分类工具)
python2 -m pip install yara -i https://pypi.tuna.tsinghua.edu.cn/simple/

# OpenPyxl(读写 Excel 文件)
python2 -m pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/

# ujson(JSON 解析)
python2 -m pip install ujson -i https://pypi.tuna.tsinghua.edu.cn/simple/

# construct 模块(后面 mimikatz 需要特定版本)
python2 -m pip install construct -i https://pypi.tuna.tsinghua.edu.cn/simple/

# mimikatz 插件依赖
python2 -m pip install mimikatz -i https://pypi.tuna.tsinghua.edu.cn/simple/

第七步:安装 mimikatz 插件

  1. mimikatz.py 复制到 volatility-master/volatility/plugins/ 目录中(具体路径根据你的 Volatility 源码位置调整)。
  2. 安装指定版本的 construct(mimikatz 插件所需):
    1
    2
    
    pip2 install --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple/
    pip2 install construct==2.5.5-reupload -i https://pypi.tuna.tsinghua.edu.cn/simple/
    

插件和安装包可统一打包分发(如群文件)。


基本用法

命令格式及插件列表

  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
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Volatility Foundation Volatility Framework 2.6
用法:volatility - 内存取证分析平台

Options:
  -h, --help            列出所有可用选项及其默认值
  --conf-file=...       用户配置文件
  -d, --debug           调试模式
  --plugins=PLUGINS     额外插件目录(冒号分隔)
  --info                打印所有注册对象的信息
  --cache-directory=... 缓存目录
  --cache               使用缓存
  --tz=TZ               设置时区
  -f FILENAME           内存镜像文件名
  --profile=WinXPSP2x86 指定配置文件(用 --info 查看支持列表)
  -l LOCATION           地址空间 URN 位置
  -w, --write           启用写支持
  --dtb=DTB             DTB 地址
  --shift=SHIFT         Mac KASLR 移位地址
  --output=text         输出格式
  --output-file=FILE    输出到文件
  -v, --verbose         详细输出
  -g KDBG               指定 KDBG 地址
  --force               强制使用可疑配置文件
  -k KPCR               指定 KPCR 地址
  --cookie=COOKIE       指定 nt!ObHeaderCookie 地址(Windows 10)

支持的插件命令(部分):
  amcache        查看 AmCache 应用程序痕迹
  apihooks       检测内核及进程空间中的 API hook
  atoms          列出会话及窗口站 atom 表
  atomscan       Atom 表池扫描
  auditpol       列出审计策略信息
  bigpools       转储大分页池
  bioskbd        读取键盘缓冲数据(早期 BIOS 密码)
  cachedump      获取内存中缓存的域帐号密码哈希
  callbacks      打印全系统通知例程
  clipboard      提取 Windows 剪贴板内容
  cmdline        显示进程命令行参数
  cmdscan        提取命令行历史记录
  connections    打印系统打开的网络连接(XP/2003)
  connscan       打印 TCP 连接信息
  consoles       提取命令行历史记录
  crashinfo      提取崩溃转储信息
  deskscan       tagDESKTOP 池扫描
  devicetree     显示设备树信息
  dlldump        转储进程加载的 DLL
  dlllist        打印每个进程的 DLL 列表
  driverirp      IRP hook 驱动检测
  drivermodule   关联驱动对象至内核模块
  driverscan     驱动对象池扫描
  dumpcerts      提取 RAS 私钥及 SSL 公钥
  dumpfiles      提取内存中映射或缓存的文件
  dumpregistry   转储注册表信息至磁盘
  editbox        查看 Edit 编辑控件信息
  envars         显示进程环境变量
  eventhooks     打印 Windows 事件 hook 详细信息
  evtlogs        提取 Windows 事件日志(XP/2003)
  filescan       提取文件对象池信息
  gahti          转储用户句柄类型信息
  gditimers      打印 GDI 计时器及回调
  gdt            显示全局描述符表
  getservicesids 获取注册表服务名称并返回 SID
  getsids        打印每个进程的 SID
  handles        打印每个进程打开的句柄列表
  hashdump       转储 Windows 帐户密码哈希(LM/NTLM)
  hibinfo        转储休眠文件信息
  hivedump       打印注册表配置单元信息
  hivelist       打印注册表配置单元列表
  hivescan       注册表配置单元池扫描
  hpakextract    从 HPAK 文件提取物理内存数据
  hpakinfo       查看 HPAK 文件属性
  idt            显示中断描述符表
  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 的屏幕截图
  servicediff    Windows 服务列表比较
  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 恢复 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 签名扫描进程或内核内存

使用示例

以下示例中 Target.vmem 为内存镜像文件,--profile=Win7SP1x64 根据实际情况修改(可通过 imageinfo 自动识别)。

分析镜像基本信息

1
python vol.py --filename=Target.vmem imageinfo

查找用户名密码哈希(hashdump)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 hashdump

提取 LSA 密钥信息(lsadump)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 lsadump

列举进程(pslist,不能检测隐藏进程)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 pslist

直接破解哈希(mimikatz 插件)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz

扫描已终止或隐藏的进程(psscan)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 psscan

树形显示进程列表(pstree)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 pstree

提取指定进程的内存(memdump)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 memdump -p <PID> --dump-dir=./

查看服务列表(svcscan)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 svcscan

查看 IE 浏览历史(iehistory)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 iehistory

查看网络连接(netscan)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 netscan

查看命令行操作(cmdscan)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 cmdscan

查看文件对象(filescan)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 filescan

提取文件(dumpfiles)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 dumpfiles -Q 0x物理偏移地址 -D ./

查看记事本内容(notepad)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 notepad

屏幕截图(screenshot)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 screenshot --dump-dir=./

查看注册表单元列表(hivelist)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 hivelist

导出注册表单元(hivedump)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410

获取注册表键值(printkey)

1
python vol.py -f Target.vmem --profile=Win7SP1x64 printkey -K "注册表路径"

查看 UserAssist 运行记录

1
python vol.py -f Target.vmem --profile=Win7SP1x64 userassist

完整示例:解密 TrueCrypt 加密文件

mem.vmem 为例,分析过程如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 1. 获取镜像信息
python vol.py -f mem.vmem imageinfo
# 输出建议使用 WinXPSP2x86

# 2. 查看进程,发现 TrueCrypt 进程(PID 2012)
python vol.py -f mem.vmem --profile=WinXPSP2x86 pslist

# 3. 转储 TrueCrypt 进程内存
python vol.py -f mem.vmem --profile=WinXPSP2x86 memdump -p 2012 -D ./

# 4. 将转储文件丢到 edff 解密工具(外部工具)
# 步骤截图如下:

暂无图片


常见问题与解决方法

问题:libyara.so 找不到

1
2
Failed to import '/usr/lib/libyara.so'
...

原因:通过 pip install yara 安装后,libyara.so 被放在了 Python 的 dist-packages 目录下,而 Volatility 期望在 /usr/lib 中找到。

解决方法:创建软链接

1
ln -s /usr/local/lib/python2.7/dist-packages/usr/lib/libyara.so /usr/lib/libyara.so

(如果路径不同,请根据实际情况修改)

推荐参考文章

Volatility 内存取证详细教程


快捷方式创建(方便使用)

1
2
3
4
5
6
7
8
# 进入 /usr/local/bin
cd /usr/local/bin

# 创建软链接
ln -s /path/to/vol.py vol   # 将 /path/to/vol.py 替换为你的 vol.py 实际路径

# 测试
vol -h

之后即可直接使用 vol 命令代替 python vol.py


版权与使用声明
工具仅可用于授权渗透测试或合法取证分析,请勿用于非法用途。