17、Volatility工具在内存分析中的应用与实践

Volatility内存分析实战指南

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
  1. 检查网络活动 :使用 connscan 查找TCP连接,若结果无价值则继续使用 sockets 插件查看哪些进程有活动的监听套接字,判断是否存在异常。
  2. 使用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工具进行内存分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值