安全矩阵

 找回密码
 立即注册
搜索
查看: 968|回复: 0

深入了解Volatility:开源内存取证工具的安装、使用和技巧

[复制链接]

417

主题

417

帖子

2391

积分

金牌会员

Rank: 6Rank: 6

积分
2391
发表于 2023-11-12 14:21:52 | 显示全部楼层 |阅读模式
simeon的文章 小兵搞安全 2023-11-10 16:33 发表于北京

1.简介

Volatility是一个功能强大且广泛使用的开源内存取证工具,它支持多种操作系统和文件格式,并提供了各种内存分析和漏洞利用功能。本文将介绍Volatility的安装和使用方法,并分享一些技巧和关键命令,以帮助您更好地利用这个工具进行内存取证和分析。





2.安装Volatility
Volatility是一个基于Python的工具,可以通过以下步骤进行安装:
步骤1:下载Volatility
您可以从Volatility的官方GitHub页面(https://github.com/volatilityfoundation/volatility)下载最新版本的源代码,或者直接使用pip命令进行安装。
步骤2:安装依赖项
在安装Volatility之前,确保您的系统已经安装了Python和一些必要的依赖项。可以使用以下命令安装:
pip install -r requirements.txt
步骤3:验证安装
安装完成后,通过运行以下命令来验证Volatility是否安装成功:
volatility -h
3.基本命令
Volatility提供了许多基本命令,用于不同类型的内存分析和取证任务。以下是一些常用的基本命令:
imageinfo:识别内存镜像的操作系统和版本信息。
pslist:显示进程列表。
psscan:对内存中的进程进行快速扫描。
dlllist:显示特定进程中加载的DLL列表。
filescan:扫描内存中的文件对象。
cmdscan:检测命令行历史记录。
hivelist:显示注册表的内存映像列表。
hashdump:提取系统中的密码哈希。
malfind:查找内存中的恶意软件迹象。
timeliner:创建时间线,显示系统活动的时间和顺序。
screenshot:保存内存中的屏幕截图。
netscan:扫描网络连接和套接字。
yarascan:使用YARA规则对内存进行扫描,用于查找已知的恶意软件特征。
mboxparser:解析邮箱文件和邮件数据。
mftparser:解析NTFS文件系统中的主文件表。
4.50条使用命令
1.查看内存映像文件信息:
volatility -f <memory_image> imageinfo
2.查看进程列表:
volatility -f <memory_image> pslist
3.查看网络连接列表:
volatility -f <memory_image> netscan
4.查看文件系统信息:
volatility -f <memory_image> filescan
5.查看注册表信息:
volatility -f <memory_image> hivelist
6.导出注册表子键到文件:
volatility -f <memory_image> printkey -K "<registry_key>" --output=</output/directory>
7.查看打开的文件列表:
volatility -f <memory_image> handles
8.查看驱动模块列表:
volatility -f <memory_image> ldrmodules
9.查看命令行历史记录:
volatility -f <memory_image> cmdline
10.查找可疑的进程:
volatility -f <memory_image> malfind
11.导出可疑进程的内存到文件:
volatility -f <memory_image> memdump -p <pid> --output=</output/directory>
12.导出某个进程的所有线程内存到文件:
volatility -f <memory_image> thrdscan -p <pid> --output=</output/directory>
13.导出某个进程的某个线程内存到文件:
volatility -f <memory_image> memdump -p <pid> -t <tid> --output=</output/directory>
14.查看网络协议栈信息:
volatility -f <memory_image> sockets
15.查看网络流量:
volatility -f <memory_image> pcap -o </output/directory>
16.分析网络流量中的HTTP请求:
volatility -f <memory_image> chromehistory --output=</output/directory>
17.导出内存中的图片文件:
volatility -f <memory_image> apihooks -p <pid> --output=</output/directory>
18.查看进程的API钩子信息:
volatility -f <memory_image> modscan
19.查看系统服务信息:
volatility -f <memory_image> servicestat
20.查看系统驱动信息:
volatility -f <memory_image> driverirp
21.查看与Internet Explorer相关的活动:
volatility -f <memory_image> iehistory --output=</output/directory>
22.查看最近活动的USB设备信息:
volatility -f <memory_image> usbstat -o </output/directory>
23.查看系统中的导入函数:
volatility -f <memory_image> iat
24.分析Windows日志文件:
volatility -f <memory_image> evtlogs -o </output/directory>
25.分析Windows事件订阅信息:
volatility -f <memory_image> subscriptions -o </output/directory>
26.查看系统中已安装的设备:
volatility -f <memory_image> devicetree
27.查看系统中已加载的DLL模块:
volatility -f <memory_image> dlllist
28.查看系统中的网络连接历史记录:
volatility -f <memory_image> connscan
29.查看系统中使用的打开的文件句柄:
volatility -f <memory_image> handles
30.查看打开的文件句柄的详细信息:
volatility -f <memory_image> handles --pid=<pid>
31.查看系统中的全局ATOM表:
volatility -f <memory_image> atomscan
32.查看系统中的钩子:
volatility -f <memory_image> hookscan
33.查看系统中的隐藏进程:
volatility -f <memory_image> psxview
34.查看系统中的已加载驱动信息:
volatility -f <memory_image> devicetree
35.分析系统中的GDT表:
volatility -f <memory_image> gdt
36.分析系统中的IDT表:
volatility -f <memory_image> idt
37.分析系统中的内核模块:
volatility -f <memory_image> modules
38.查看系统中的窗口信息:
volatility -f <memory_image> windows
39.查看系统中的服务DLL信息:
volatility -f <memory_image> symservicetable
40.查看系统中的系统调用表(SSDT):
volatility -f <memory_image> ssdt
41.搜索关键字在内存中的位置:
volatility -f <memory_image> search -s "<keyword>"
42.导出内存中的某个进程的某个线程的堆栈到文件:
volatility -f <memory_image> stackstrings -p <pid> -t <tid> --output=</output/directory>
43.分析某个进程的DLL加载历史记录:
volatility -f <memory_image> dlldump -p <pid> --output=</output/directory>
44.查看系统中的全局缓解字符集(GLOB):
volatility -f <memory_image> glob
45.查看系统中的用户名、SID和令牌:
volatility -f <memory_image> getsids
46.分析系统中的内存分页文件:
volatility -f <memory_image> pagefilescan
47.查看系统中的事件钩子:
volatility -f <memory_image> eventhooks
48.分析内存中的SMB会话信息:
volatility -f <memory_image> smbtree --output=</output/directory>
49.导出某个进程的导入函数列表到文件:
volatility -f <memory_image> impscan -p <pid> --output=</output/directory>
50.查看系统中的命名管道对象:
volatility -f <memory_image> pipes
5.技巧和建议
以下是一些使用Volatility的技巧和建议,以帮助您在内存取证和分析过程中更高效地工作:
  • 了解目标系统和操作系统的版本:在开始内存分析之前,确保您对目标系统的操作系统和版本有一定了解,这将帮助您选择正确的插件和命令。
  • 使用插件:Volatility的真正力量在于其插件系统。掌握不同的插件,可以更好地发现和分析系统中的各种活动和数字痕迹。
  • 结合其他工具和数据来源:与其他取证工具和数据来源结合使用,可以提供更全面的视图。例如,可以将Volatility的结果与磁盘映像和网络流量分析工具的结果进行比对。

5.参考案例5.1分析Windows系统中的恶意软件活动
步骤1:准备工作
收集目标系统的内存镜像。这可以通过多种方式完成,例如使用专业取证工具、制作物理内存副本或通过虚拟化平台导出内存。
步骤2:识别系统信息
使用Volatility的imageinfo命令识别内存镜像的操作系统和版本信息。
volatility -f memory_image.raw imageinfo
这将输出操作系统的名称、版本和体系结构,以及推荐的profile信息。
步骤3:分析恶意软件活动
使用不同的Volatility命令和插件执行恶意软件活动的分析。以下是一些常用命令的例子:
查看所有进程列表:
volatility -f memory_image.raw --profile=Win7SP1x64 pstree
查找恶意软件进程:
volatility -f memory_image.raw --profile=Win7SP1x64 psscan | grep malware_process
查看指定进程的DLL列表:
volatility -f memory_image.raw --profile=Win7SP1x64 dlllist -p PID
查找恶意软件的网络连接:
volatility -f memory_image.raw --profile=Win7SP1x64 netscan | grep malware_process
导出恶意软件的文件:
volatility -f memory_image.raw --profile=Win7SP1x64 procdump -p PID -D output_directory
解析恶意软件的注册表活动:
volatility -f memory_image.raw --profile=Win7SP1x64 hivelist | grep System | cut -d' ' -f1 | xargs -I{} volatility -f memory_image.raw --profile=Win7SP1x64 printkey -o {} -K 'ControlSet001\Control\Run'
这只是一小部分Volatility命令和插件的例子,您可以根据需要选择其他命令和插件进行分析。
步骤4:整理结果和报告

根据分析结果整理并生成报告,包括发现的恶意进程、网络活动、文件和注册表的异常项等。确保在报告中包括取证过程中使用的命令和参数。

请注意,这只是一个简单的案例示例,实际的取证过程可能更为复杂,取证人员应根据具体情况深入分析。
5.2外部参考实际命令
  • 可以先查看当前内存镜像中的用户printkey -K “SAM\Domains\Account\Users\Names”

volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
  • 查看用户名密码信息(密码是哈希值,需要john爆破) hashdump

volatility -f 1.vmem --profile=Win7SP1x64 hashdump
  • 查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)

如果john爆破不出来,就使用 lasdmp 查看强密码 lsadmp
volatility -f 1.vmem --profile=Win7SP1x64 lsadump
  • 查看进程pslist

volatility -f 1.vmem --profile=Win7SP1x64 pslist
pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
  • 查看已知进程pslist

volatility -f 1.vmem --profile=Win7SP1x64 pslist -p 2588
  • 隐藏或解链的进程psscan

volatility -f 1.vmem --profile=Win7SP1x64 psscan
psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
  • 查看服务 查询服务名称svcscan

volatility -f 1.vmem --profile=Win7SP1x64 svcscan
svcscan:扫描 Windows 的服务
  • 查看浏览器历史记录,获取当前系统浏览器搜索过的关键词 iehistory

volatility -f 1.vmem --profile=Win7SP1x64 iehistory
  • 查看网络连接 获取当前系统 ip netscan

volatility -f 1.vmem --profile=Win7SP1x64 netscan
有一些版本 这个命令是使用不了 这里我们就要使用(connscan,connections)
查看网络连接connscan
volatility -f 1.vmem --profile=Win7SP1x64 connscan
connscan:查看网络连接
查看网络连接connections
volatility -f 1.vmem --profile=Win7SP1x64 connections
connections:查看网络连接
  • 查看命令行操作,显示cmd历史命令 cmdscan

volatility -f 1.vmem --profile=Win7SP1x64 cmdscan
cmdscan:可用于查看终端记录
  • 查看进程命令行参数(具体一些可疑进程的参数指令)cmdline

volatility -f 1.vmem --profile=Win7SP1x64 cmdline
  • 扫描所有的文件列表 filescan

volatility -f 1.vmem --profile=Win7SP1x64 filescan
(linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’)例
volatility -f 1.vmem --profile=Win7SP1x64 filescan grep "flag.txt"
cat system.txt|grep -i computername
  • 查看文件内容dmpfiles

volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0xxxxxxxx -D ./
  • 需要指定偏移量 -Q 和输出目录 -D

dumpfiles:导出某一文件(指定虚拟地址)
  • 查看当前展示的notepad内容 notepad

volatility -f 1.vmem --profile=Win7SP1x64 notepad
  • 查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox)
  • 显示有关编辑控件(曾经编辑过的内容)的信息 editbox

volatility -f 1.vmem --profile=Win7SP1x64 editbox
editbox:显示有关编辑控件(曾经编辑过的内容)的信息 查看内存中记事本的内容
  • 提取进程memdump

volatility -f 1.vmem --profile=Win7SP1x64 memdump -p xxx --dump-dir=./
memdump:提取出指定进程,常用foremost 来分离里面的文件  
  • 需要指定进程-p [pid] 和输出目录 -D

memdump -p 332 -D XX/  
  • 提取进程   -p 进程号 -D 当前输出路径(导出为332.dmp)

dump出来的进程文件,可以使用 foremost 来分离里面的文件,用 binwak -e 不推荐
strings -e l 2040.dmp | grep flag 查找flag
  • 屏幕截图screenshot

volatility -f 1.vmem --profile=Win7SP1x64 screenshot --dump-dir=./
screenshot:保存基于GDI窗口的伪截屏
  • 查看注册表配置单元hivelist

volatility -f 1.vmem --profile=Win7SP1x64 hivelist
hivelist: 列出所有的注册表项及其虚拟地址和物理地址
  • 查看注册表键名hivedmp

volatility -f 1.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410
  • 查看注册表键值printkey

volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
  • 获取主机名 printkey

volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
  • 列出用户名 pringkey

volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"
  • 查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等。serassist

volatility -f 1.vmem --profile=Win7SP1x64 userassist
  • 最大程序提取信息timeliner

volatility -f 1.vmem --profile=Win7SP1x64 timeliner
timeliner: 将所有操作系统事件以时间线的方式展开
  • 查看剪贴板信息clipboard

volatility -f 1.vmem --profile=Win7SP1x64 clipboard
clipboard:查看剪贴板信息
  • 显示关于计算机及其操作系统的详细配置信息(插件)systeminfo

volatility -f 1.vmem --profile=Win7SP1x64 systeminfo
systeminfo:显示关于计算机及其操作系统的详细配置信息(插件)
  • 恢复被删除的文件mftparser

volatility -f 1.vmem --profile=Win7SP1x64 mftparser
mftparser:恢复被删除的文件
  • 查看环境变量envars

volatility -f 1.vmem --profile=Win7SP1x64 envars
envars:查看环境变量
  • 列出某一进程加载的所有dll文件dlllist

volatility -f 1.vmem --profile=Win7SP1x64 dlllist -p 2588
dlllist: 列出某一进程加载的所有dll文件
需要指定进程-p [pid]
程序版本信息 verinfo
volatility -f 1.vmem --profile=Win7SP1x64 verinfo
  • 列出PE|程序版本信息

产看进程树,可以轻松了解各进程之间的关系:父进程与子进程 pstree
volatility -f 2008.raw –profile=Win2008R2SP1x64 pstree
在进程中PPID比PID还大,那就可能这个进程有异常程序
  • 从内存文件中找到异常程序植入到系统的开机自启痕迹 shimcache

volatility -f 2008.raw –profile=Win2008R2SP1x64 shimcache
5.3其他可参考取证场景思路
以下是三个与恶意软件分析不同的常见Volatility取证案例:
1. 勒索软件调查:
  - 分析内存中的进程和文件,查找可疑的勒索软件活动。
  - 追踪勒索软件的加密操作和文件扩展名修改。
  - 研究勒索软件的恢复说明文件和入侵路径,以帮助恢复加密数据。
2. 网络钓鱼调查:
  - 分析内存中的连接,查找与网络钓鱼网站相关的URL和进程。
  - 追踪网络钓鱼活动的时间线和恶意代码下载过程。
  - 解析恶意代码,分析钓鱼攻击的目标和手法。
3. 网络入侵调查:
  - 分析内存中的进程和网络连接,查找异常的网络活动和横向移动行为。
  - 追踪入侵活动的入口,如僵尸网络、漏洞利用或远程访问。
  - 研究入侵者的特征、惯用工具和攻击方法。

6.总结

Volatility是一个功能丰富且广泛使用的开源内存取证工具。本文介绍了Volatility的安装和使用方法,以及一些技巧和关键命令,帮助您更好地利用这个工具进行内存取证和分析。请记住,在使用任何取证工具时,遵循合法和合规的准则,并在授权范围内使用。

参考及引用文章:

https://blog.csdn.net/m0_68012373/article/details/127419463

https://blog.51cto.com/secself/5919842



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-8 08:47 , Processed in 0.020962 second(s), 20 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表