Volatility工具在内存分析中的应用与实践
1. Volatility基础使用
Volatility是一款命令行工具,围绕CLI接口构建,通过传递命令和参数来使用。若从GitHub克隆获取Volatility,只需进入存储目录,找到用于运行它的Python脚本
vol.py
。其基本语法如下:
vol.py –f memoryimage ––profile=selectedmemoryprofile module
其中:
-
memoryimage
:需要分析的内存转储文件路径。
-
selectedmemoryprofile
:Volatility使用的内存配置文件。
-
module
:希望Volatility执行的任务。
在进一步操作前,需确定要使用的内存配置文件。可以使用
imageinfo
模块让Volatility分析内存样本,它会建议不同的可用配置文件,通常可通过试错法在建议的配置文件中找到最适用的,且配置文件名的大小写必须准确。此外,
imageinfo
还会报告内存转储文件的创建时间,以UTC和本地时间表示。
确定配置文件后,就可以开始使用各种用于内存分析的插件。可以通过以下命令查看Volatility内置的可用插件帮助:
Python vol.py –h
2. Volshell简介
Volshell是一个可交互式探索内存转储文件的接口。它允许打印与进程相关的特定内存地址的数据,还能遍历链表并反汇编特定地址的指令。这在恶意软件分析中非常有价值,但超出了本文的范围。
3. 刑事调查中的内存分析
在犯罪场景的法医检查中,内存分析通常是为了寻找可在法庭上使用的信息,目标可能从查找电子邮件到检测恶意软件不等。以下是一些在法医检查中有用的Volatility模块:
-
pslist
:用于查看内存转储时计算机上运行的进程,为后续分析提供重点方向。
-
netscan
:报告网络信息,揭示运行的程序以及被检查计算机连接的远程计算机,有助于发现与案件相关的其他计算机。
-
envars
:显示一个或所有进程的环境变量,帮助确定应用程序相关工件的位置以及系统上的活跃用户。
-
filescan
:扫描内存转储文件中的打开文件,返回打开文件列表及文件在内存中的物理偏移量。由于计算机通常有大量打开的文件,使用
grep
过滤输出很有帮助。
-
mftparser
:查找主文件表(MFT)条目,并可根据需要转储找到的常驻文件。使用示例命令:
Volatility –f memoryimage –profile = selectedmemoryprofile mftparser >> outfile.txt
然后使用Linux命令进一步解析输出:
cat outfile.txt |grep –context = 15 encrypted
- yarascan :在整个内存转储文件中进行文本搜索。与其他法医工具相比,Volatility使用特定的内存配置文件,能更好地查看内存,搜索结果更准确。可以指定纯文本搜索字符串或十六进制字节模式进行搜索。
- hivelist :列出内存中存在的注册表项。
- hashdump :提供计算机上用户的用户名和密码哈希值。
- printkey :打印指定注册表子键中的值和子键。示例命令:
Python vol.py –f memsample –profile=``WinXPSP2x86'' print-key –K``Microsoft\Windows NT\CurrentVersion''
- screenshot :尝试为内存中找到的每个活动用户会话创建模拟屏幕截图,提供用户屏幕实际显示内容的洞察。但需注意,每个活动会话(包括非交互式会话)都会生成截图,且截图并非实际桌面截图,只是一个模拟。
-
TrueCrypt相关模块
:用于检测与TrueCrypt加密软件相关的信息,包括
Truecryptsummary(返回TrueCrypt信息摘要)、Truecryptpassphrase(查找缓存的TrueCrypt密码短语)和Truecryptmaster(查找TrueCrypt主密钥)。
4. 实践任务
可以从
www.memoryanalysis.net/amf
下载名为
sample009.bin
的内存转储文件,使用Volatility回答以下问题:
1. 内存转储文件何时创建?
2. 哪个进程的PID为1320?
3. RID为1003的用户的用户名是什么?
4. PID为1320的进程是否有任何打开的网络连接?
若无法获取建议的内存转储文件,也可以使用FTK imager创建自己计算机的内存转储文件来完成任务。
5. 恶意软件分析
恶意软件分析主要是理解计算机的正常运行方式,并找出异常之处。恶意软件通常会尝试伪装自己、访问不应访问的内容以及创建网络连接。
以感染了名为
spyeye
的木马的内存样本为例,分析步骤如下:
1.
确定内存配置文件
:使用
imageinfo
模块确定使用的内存配置文件,本例中使用
WinXPSP2x86
配置文件。
2.
查看运行进程
:使用
pslist
或
pstree
查看内存转储时运行的进程。
pslist
通过遍历存储进程的双向链表输出进程列表,终止的进程会从列表中移除,且恶意软件可能会从进程列表中移除自己以避免检测。
psscan
则不依赖链表,而是扫描内存中的实际进程对象来呈现进程列表。
3.
分析进程差异
:比较
pslist
和
psscan
的输出,若
psscan
发现
pslist
未检测到的运行进程,则该进程可能试图隐藏自己,需要进一步检查。例如,在本例中发现
wmiprvse.exe
进程存在异常,但由于无法获取其可执行文件且内存映射无结果,暂时无法深入分析。
4.
查找可疑进程
:观察活动进程,查找不符合预期的进程。如
cleansweep.exe
进程启动和终止时间相同且之后长时间留在活动进程链表中,可使用
procdump
尝试提取其内存,但因页面被换出失败,可使用
memdump
命令转储仍在内存中的页面:
Python vol.py –f spyeye.vmem –profile=``WinXPSP2x86'' memdump –D dump/ -p 2268
-
检查网络活动
:使用
connscan查找TCP连接,若结果无价值则继续使用sockets插件查看哪些进程有活动的监听套接字,判断是否存在异常。 -
使用malfind检测恶意代码
:对可疑进程及其父进程使用
malfind插件,若发现可疑指令,可使用-D参数将可疑代码输出为文件,然后使用病毒扫描网站(如Virustotal)进行分析。例如,对explorer.exe进程使用malfind后发现大量与spyeye木马相关的命中结果,从而确定被分析的主机感染了spyeye。
malfind
在分析时会查看数据及其反汇编内容,在代码部分查找可执行文件,数据部分以
MZ
开头表示可执行文件的开始。
以下是一个简单的mermaid流程图,展示恶意软件分析的主要步骤:
graph TD;
A[确定内存配置文件] --> B[查看运行进程];
B --> C[分析进程差异];
C --> D[查找可疑进程];
D --> E[检查网络活动];
E --> F[使用malfind检测恶意代码];
通过以上步骤和Volatility的各个模块,可以有效地进行内存分析,无论是在刑事调查还是恶意软件检测方面都能发挥重要作用。
Volatility工具在内存分析中的应用与实践
6. 各模块操作步骤总结
为了更清晰地展示各模块的使用方法,下面以表格形式总结各模块的操作步骤:
|模块名称|操作目的|操作步骤|
| ---- | ---- | ---- |
|pslist|查看内存转储时计算机上运行的进程|进入Volatility存储目录,运行
vol.py –f memoryimage ––profile=selectedmemoryprofile pslist
,其中
memoryimage
为内存转储文件路径,
selectedmemoryprofile
为内存配置文件|
|netscan|报告网络信息|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile netscan
|
|envars|显示一个或所有进程的环境变量|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile envars
|
|filescan|扫描内存转储文件中的打开文件|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile filescan
,可使用
grep
过滤输出,如
vol.py –f memoryimage ––profile=selectedmemoryprofile filescan | grep 关键词
|
|mftparser|查找主文件表(MFT)条目并转储常驻文件|先运行
Volatility –f memoryimage –profile = selectedmemoryprofile mftparser >> outfile.txt
,再使用
cat outfile.txt |grep –context = 15 关键词
进一步解析输出|
|yarascan|在整个内存转储文件中进行文本搜索|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile yarascan
,可指定纯文本搜索字符串或十六进制字节模式|
|hivelist|列出内存中存在的注册表项|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile hivelist
|
|hashdump|提供计算机上用户的用户名和密码哈希值|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile hashdump
|
|printkey|打印指定注册表子键中的值和子键|运行
Python vol.py –f memsample –profile=``WinXPSP2x86'' print-key –K``注册表子键路径``
|
|screenshot|为活动用户会话创建模拟屏幕截图|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile screenshot
|
|Truecryptsummary|返回TrueCrypt信息摘要|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile Truecryptsummary
|
|Truecryptpassphrase|查找缓存的TrueCrypt密码短语|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile Truecryptpassphrase
|
|Truecryptmaster|查找TrueCrypt主密钥|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile Truecryptmaster
|
|procdump|转储进程的内存|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile procdump -p 进程PID
|
|memdump|转储进程仍在内存中的页面|运行
Python vol.py –f memoryimage –profile=``WinXPSP2x86'' memdump –D dump/ -p 进程PID
|
|malfind|检测进程中的恶意代码|运行
vol.py –f memoryimage ––profile=selectedmemoryprofile malfind
,若发现可疑指令,可使用
-D
参数输出为文件,如
vol.py –f memoryimage ––profile=selectedmemoryprofile malfind –D dump/ -p 进程PID
|
7. 注意事项
在使用Volatility进行内存分析时,有以下几点需要注意:
-
内存配置文件
:配置文件名的大小写必须准确,不同的操作系统和版本可能需要不同的配置文件,使用
imageinfo
模块确定配置文件时,要通过试错法找到最适合的。
-
文件过滤
:在使用
filescan
等模块时,由于计算机通常有大量的打开文件,使用
grep
等工具过滤输出可以提高分析效率。
-
进程检测
:
pslist
依赖于进程的双向链表,恶意软件可能会移除自己以避免检测,所以要结合
psscan
等模块进行综合分析。
-
内存转储
:在使用
procdump
和
memdump
转储进程内存时,可能会因为进程的状态(如页面被换出)而失败,需要根据实际情况进行处理。
8. 常见问题及解决方法
下面列举一些使用Volatility时可能遇到的常见问题及解决方法:
|问题描述|解决方法|
| ---- | ---- |
|无法确定合适的内存配置文件|使用
imageinfo
模块获取建议的配置文件,通过试错法在建议的配置文件中找到最适用的,注意配置文件名的大小写|
|
filescan
输出结果过多难以分析|使用
grep
等工具过滤输出,如
vol.py –f memoryimage ––profile=selectedmemoryprofile filescan | grep 关键词
|
|
procdump
无法获取进程的可执行文件|使用
memmap
查看进程是否有内存页面,若没有则可能无法获取可执行文件,可考虑使用
memdump
转储仍在内存中的页面|
|
malfind
未发现可疑代码|检查内存配置文件是否正确,尝试对更多的进程使用
malfind
,或者调整搜索的关键词和模式|
9. 总结
Volatility是一款功能强大的内存分析工具,通过各种模块可以在刑事调查和恶意软件分析等方面发挥重要作用。在刑事调查中,可以使用
pslist
、
netscan
等模块查找与案件相关的信息;在恶意软件分析中,通过
pslist
、
psscan
、
malfind
等模块可以检测出隐藏的恶意进程和代码。
在使用Volatility时,要严格按照操作步骤进行,注意内存配置文件的选择、文件过滤、进程检测等问题,遇到问题时可以参考常见问题及解决方法进行处理。通过合理运用Volatility的各个模块和功能,可以更高效地进行内存分析,为安全领域的工作提供有力支持。
以下是一个mermaid流程图,展示使用Volatility进行内存分析的整体流程:
graph LR;
A[获取内存转储文件] --> B[确定内存配置文件];
B --> C{分析类型};
C -->|刑事调查| D[使用刑事调查相关模块];
C -->|恶意软件分析| E[使用恶意软件分析相关模块];
D --> F[分析结果];
E --> F;
F --> G{是否有新发现};
G -->|是| H[进一步深入分析];
G -->|否| I[结束分析];
H --> F;
通过以上的介绍和总结,希望能帮助大家更好地理解和使用Volatility工具进行内存分析。
Volatility内存分析实战指南
超级会员免费看
1205

被折叠的 条评论
为什么被折叠?



