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

admin 2024年2月15日14:02:03评论11 views字数 9248阅读30分49秒阅读模式

1.简介

Volatility是一个功能强大且广泛使用的开源内存取证工具,它支持多种操作系统和文件格式,并提供了各种内存分析和漏洞利用功能。本文将介绍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:开源内存取证工具的安装、使用和技巧

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月15日14:02:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   深入了解Volatility:开源内存取证工具的安装、使用和技巧http://cn-sec.com/archives/2194718.html

发表评论

匿名网友 填写信息