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 'ControlSet001ControlRun'
这只是一小部分Volatility命令和插件的例子,您可以根据需要选择其他命令和插件进行分析。
步骤4:整理结果和报告
根据分析结果整理并生成报告,包括发现的恶意进程、网络活动、文件和注册表的异常项等。确保在报告中包括取证过程中使用的命令和参数。
请注意,这只是一个简单的案例示例,实际的取证过程可能更为复杂,取证人员应根据具体情况深入分析。
5.2外部参考实际命令
-
可以先查看当前内存镜像中的用户printkey -K “SAMDomainsAccountUsersNames”
volatility -f 1.vmem –profile=Win7SP1x64 printkey -K “SAMDomainsAccountUsersNames”
-
查看用户名密码信息(密码是哈希值,需要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 "ControlSet001ControlComputerNameComputerName"
-
获取主机名 printkey
volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "ControlSet001ControlComputerNameComputerName"
-
列出用户名 pringkey
volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "SAMDomainsAccountUsersNames"
-
查看运行程序相关的记录,比如最后一次更新时间,运行过的次数等。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
原文始发于微信公众号(小兵搞安全):深入了解Volatility:开源内存取证工具的安装、使用和技巧
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论