带你走进volatility内存取证的世界

admin 2024年7月12日14:13:17评论79 views字数 8698阅读28分59秒阅读模式

点击上方蓝字“小谢取证”一起玩耍

带你走进volatility内存取证的世界

带你走进volatility内存取证的世界

前言

    内存取证技术不仅应用于实际的AJ中,还在CTF、电子数据取证竞赛中出现它的身影。本期特邀z0sen带你走进内存取证的世界--volatility内存取证工具的应用。哥们,想学习内存取证?这一篇文章就够用。

带你走进volatility内存取证的世界

内存取证概述

  内存取证是一种数字取证技术,通过分析计算机系统的内存(RAM)数据来获取证据。内存取证的重要性在于内存中包含了系统的实时状态信息,如运行中的进程、网络连接、登录会话、密钥文件和其他潜在的证据。

内存镜像采集

工具选择

  • FTK Imager:可以从 Windows 系统内存中创建镜像文件,并对文件进行哈希校验。

  • osxpmem:用于 MacOS 系统的内存镜像提取工具。

  • LiME(Linux Memory Extractor):用于 Linux 系统的内存镜像提取工具。

采集方法

  • 现场采集:在现场使用工具采集内存镜像,确保系统尽可能保持原样,保持证据的完整性和真实性。可以通过 USB 设备加载采集工具。

  • 远程采集:通过网络连接远程采集内存镜像。需要注意网络传输的安全性和数据完整性。

完整性验证

  • 使用哈希算法(如 MD5、SHA-256)对采集到的内存镜像文件进行哈希值计算,确保在传输和分析过程中数据未被篡改,哈希计算可借助 HashCalculator 完成。

内存镜像分析

进程和线程分析

  • 列出所有进程:通过工具列出当前内存中的所有进程,识别出合法和潜在的恶意进程。

  • 分析线程:查看每个进程的线程,寻找异常行为或隐藏的恶意代码。

网络连接分析

  • 当前连接:列出当前的网络连接,分析可疑的远程连接和未经授权的网络活动。

  • 当前端口:检查系统中当前的端口,识别可能的攻击路径或正在运行的服务。

系统注册表分析

  • 注册表提取:从内存中提取系统注册表,分析其中的配置信息和历史操作。

  • 分析关键节点:检查关键注册表节点(如启动项、服务项)以发现潜在的恶意配置。

文件和内存映射

  • 文件提取:从内存中提取运行中的文件和模块,检查其完整性和合法性。

  • 内存映射:分析内存中加载的文件和内存映射,识别未注册或隐藏的模块和动态链接库(DLL)。

加密数据和密钥提取

  • 内存密钥提取:尝试从内存中提取加密密钥和解密后的数据,有助于破译加密的通信和文件(如 Bitlocker)。

内存取证的关键概念

易失性数据

内存中的数据是易失性的,系统断电或重启后数据会丢失。因此,及时采集内存数据非常重要。

工具和技术

  • Volatility:一款开源的内存取证框架,支持多种操作系统内存镜像的分析。

  • FTK Imager:主要用于采集 Windows 内存镜像,并生成哈希值。

  • DumpIt:一个简单易用的工具,适用于快速采集 Windows 系统的内存镜像。

  • WinPmem:一个 Windows 物理内存镜像采集工具,使用 WDK10 进行编译,支持 Win7 - Win10。

  • osxpmem:用于 MacOS 系统的内存镜像提取工具。

  • LiME(Linux Memory Extractor):用于 Linux 系统的内存镜像提取工具。

  • Elcomsoft Forensic Disk Decryptor:即时访问被 BitLocker、FileVault2、PGP、TrueCrypt 和 VeraCrypt 等加密存储的数据。该工具从内存中捕获休眠文件和 page 文件,并从中提取加密密钥,也可以使用纯文本mm或托管密钥来解密存储在加密容器中的文件和文件夹,或者将加密卷挂载到本地磁盘,以便进行实时访问。

进程和模块分析

通过分析内存中的进程和模块,可以发现隐藏的恶意软件或异常行为。
可以识别隐藏进程(rootkits)和未注册的网络连接。

内存中的加密数据

现代操作系统和应用程序广泛使用加密技术,内存中可能存在解密密钥或解密后的数据,可以帮助破译加密文件和通信内容。

现场取证与远程取证

现场取证:直接在目标设备上采集内存镜像,适用于物理接触到目标设备的场景。
远程取证:通过网络远程采集内存镜像,需要确保网络传输过程中的数据完整性和安全性。

内存取证的注意事项

数据完整性:采集前后进行哈希值校验,确保内存镜像数据未被篡改。
尽量减少干扰:采集过程应尽量减少对系统状态的改变,避免对证据的破坏。
合法性:确保取证过程符合相关法律法规,保护隐私和数据安全。

volatility内存取证工具

  近来碰到一些 Windows 取证问题,其中内存取证这块发现比较有趣,学习了一下 volatility,将其安装使用过程记录了下来。

准备工作

  • kali 2h4g(虚拟机)

  • Python2

  • volatility

  • Python3

  • volatility3

volatility

volatility 基于 python2 编写,针对 Windows 只支持到 win7/win8

安装 pip2

在安装 volatility 之前,我们需要手动安装基于 python2 的 pip,因为 volatility 基于 python2,而 kali 中的 python2 缺少 pip

# 下载 get-pip.pycurl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py# 安装 pippython2 get-pip.py# 升级 pippython2 -m pip install --upgrade setuptools
Bash

带你走进volatility内存取证的世界

安装依赖项

安装 crypto 和 construct 库:

python2 -m pip install pycryptodome construct Pillow yara-python -i https://pypi.tuna.tsinghua.edu.cn/simple
Bash

安装 distorm3:

# 使用 git 命令下载 distorm3 模块git clone https://github.com/vext01/distorm3.git# 进入到 distorm3 目录cd distorm3# 安装 python2 setup.py install
Bash

volatility 安装

依赖环境安装好后,将 volatility 源码下载到 kali 开始安装:

# 下载项目到本地git clone https://github.com/volatilityfoundation/volatility.git# 进入到 volatility 目录cd volatility# 安装python2 setup.py install
Bash

安装完成后可通过命令 vol.py 运行 volatility

带你走进volatility内存取证的世界

volatility 使用

基础使用:

# 查看imageinfo获取操作系统类型vol.py -f <filename> imageinfo# 示例:vol.py -f ~/memdump_win7.mem imageinfo# 指定操作系统类型进行其他操作vol.py -f <filename> --profile <ostype># 查看进程vol.py -f <filename> --profile <ostype> pslist# 筛选特定后缀名的文件vol.py -f <filename> --profile <ostype> filescan | grep -E "txt|xml|png|jpg|gif|zip|rar|7z|pdf|doc|docx|php|py|flag"# 桌面vol.py -f <filename> --profile <ostype> filescan | grep -E "Desktop"# 导出文件vol.py -f <filename> --profile <ostype> dumpfiles -Q <virtual address> -D <savedir># 获取系统用户名vol.py -f <filename> --profile <ostype> printkey -K "SAMDomainsAccountUsersNames"# 查看注册表vol.py -f <filename> --profile <ostype> hivelist# 提取用户名与mm hashvol.py -f <filename> --profile <ostype> hashdump# 获取IE浏览器历史记录vol.py -f <filename> --profile <ostype> iehistory# 查看网络连接vol.py -f <filename> --profile <ostype> netscan# 将内存中的某个进程数据以 dmp 的格式保存出来 vol.py -f <filename> --profile <ostype> memdump -p <pid> -D <savedir># 查看命令行历史记录vol.py -f <filename> --profile <ostype> cmdscan# 查看进程命令行参数vol.py -f <filename> --profile <ostype> cmdline# 获取TrueCrypt秘钥信息vol.py -f <filename> --profile <ostype> truecryptmaster# 获取TrueCrypt mm信息vol.py -f <filename> --profile <ostype> truecryptpassphrase
Bash

案例演示:

通过 imageinfo 命令得知系统版本为:Win7SP1x64

带你走进volatility内存取证的世界

通过 pslist 查看进程列表,其结果中 PID 是当前进程号,PPID 是父进程号,如果一个进程已经结束了,那么在 Exit 列会显示进程结束的时间:

带你走进volatility内存取证的世界

pstree 可以识别子进程和父进程,可以显示出被隐藏的病毒程序:

另有 psscan 命令与此命令目的类似

带你走进volatility内存取证的世界

hashdump 抓取内存中的系统用户mm hash(LM/NTLM):

带你走进volatility内存取证的世界

filescan 扫描所有文件列表,文件比较多,若是比赛推荐对 flag 等关键字过滤,若是实际工作则据实际情况做筛选,这里以查看桌面文件为例:

带你走进volatility内存取证的世界

iehistory 查看 IE 浏览器的历史记录:

带你走进volatility内存取证的世界

netscan 查看网络连接情况,相当于 Windows 中查看 netstat -ano

带你走进volatility内存取证的世界

userassist 包含 GUI 应用执行的信息,如名称、路径、关联快捷方式、执行次数、上一次执行时间等:

带你走进volatility内存取证的世界

screenshot 查看截屏,使用 -D 参数将截屏输出到指定目录:

带你走进volatility内存取证的世界

svcscan 查看开启的 Windows 服务,内容较多可将结果输出到文件中方便后续查看:

vol.py -f ~/memdump_win7.mem --profile Win7SP1x64 svcscan > svc.txt
Bash

带你走进volatility内存取证的世界

volatility 插件

volatility 可安装许多插件来对内存镜像进行进一步快速分析,这些插件功能各不相同,如抓取 Windows 账号明文mm、Bitlocker 解密、浏览器历史记录读取、浏览器存储的mm读取等等。

首先创建一个目录用于存放插件:

sudo mkdir -p /opt/volatility/plugins
Bash

使用插件时需指定插件存放路径,且该指令需作为第一个参数紧跟在 vol.py 命令后,参考如下:

vol.py --plugin=/opt/volatility/plugins -f [内存镜像文件路径] --profile [系统版本] [插件名]
Bash

mimikatz.py

mimikatz.py 插件可以从内存中提取明文mm,安装方法如下:

# 下载插件wget https://raw.githubusercontent.com/RealityNet/hotoloti/master/volatility/mimikatz.py# 安装插件cp mimikatz.py /opt/volatility/plugins/# 赋予可执行权限chmod +x /opt/volatility/plugins/mimikatz.py
Bash

插件使用测试如下:

带你走进volatility内存取证的世界

bitlocker.py

bitlocker.py 插件可在内存中检索 全卷加密密钥(FVEK)。然后,FVEK 可用于 Dislocker 来解密加密卷。该插件已在从 Windows 7 到 Windows 10 的所有 64 位 Windows 版本上进行过测试,与 Dislocker 完全兼容。(仅支持 DD 镜像)安装方法如下:

# 下载插件wget https://raw.githubusercontent.com/breppo/Volatility-BitLocker/master/bitlocker.py# 安装插件cp bitlocker.py /opt/volatility/plugins/# 赋予可执行权限chmod +x /opt/volatility/plugins/bitlocker.py
Bash
  • 使用方法

查找内存中的 FVEK:

vol.py --plugin=/opt/volatility/plugins -f ~/memdump_win7.mem --profile Win7SP1x64 bitlocker
Bash

带你走进volatility内存取证的世界

要使用 Dislocker 测试 FVEK,可以添加参数 --dislocker 并指定 FVEK 输出路径:

# 创建用于存放 FVEK 的文件夹mkdir ~/dump# 导出 FVEKvol.py --plugin=/opt/volatility/plugins -f ~/memdump_win7.mem --profile Win7SP1x64 bitlocker --dislocker ~/dump
Bash

带你走进volatility内存取证的世界

然后使用 Dislocker 来加载磁盘:

dislocker -k ~/dump/0xfa80348f6c10-Dislocker.fvek ~/win7disk.dd ~/dislockermount ~/dislocker/dislocker-file /mnt/
Bash

usbstor.py

usbstor.py 用于扫描注册表,查找接入过系统的 USB 设备信息。安装方法如下:

# 下载插件wget https://raw.githubusercontent.com/kevthehermit/volatility_plugins/main/vol2/usbstor/usbstor.py# 安装插件cp usbstor.py /opt/volatility/plugins/# 赋予可执行权限chmod +x /opt/volatility/plugins/usbstor.py
Bash

使用方法:

vol.py --plugin=/opt/volatility/plugins -f ~/memdump_win7.mem --profile Win7SP1x64 usbstor
Bash

带你走进volatility内存取证的世界

volatility3

volatility3 基于 python3 编写,目前

volatility3 安装

主程序安装:

# 下载源码git clone https://github.com/volatilityfoundation/volatility3.git# 安装依赖python3 -m pip install -r requirements.txt# 构建并安装 volatility3python3 setup.py build
python3 setup.py install
Bash

符号表安装

使用对应 linux/mac/windows 插件之前,请先下载对应的符号表(最好下载所有的符号包):

  • https://downloads.volatilityfoundation.org/volatility3/symbols/windows.zip

  • https://downloads.volatilityfoundation.org/volatility3/symbols/mac.zip

  • https://downloads.volatilityfoundation.org/volatility3/symbols/linux.zip

下载后将其解压放入 volatility/symbols 目录下,目前主程序已经安装到系统中,所以要寻找其在系统中的安装位置:

sudo updatedblocate volatility3/symbols
Bash

由此得到在我的系统中符号表文件夹为:/usr/local/lib/python3.11/dist-packages/volatility3-2.7.0-py3.11.egg/volatility3/symbols

带你走进volatility内存取证的世界

解压完成后修改文件夹权限为普通用户权限,使得 vol3 在后续需要调用文件时不会出现权限错误:

# 修改权限sudo chown -R kali:kali /usr/local/lib/python3.11/dist-packages/volatility3-2.7.0-py3.11.egg/volatility3/symbols# 查看权限情况ll /usr/local/lib/python3.11/dist-packages/volatility3-2.7.0-py3.11.egg/volatility3/symbols
Bash

带你走进volatility内存取证的世界

volatility3 使用

基础使用:

# # 查看镜像信息vol -f xxx.mem windows.info# 查看镜像进程vol -f xxx.mem windows.pslist
vol -f xxx.mem windows.psscan
vol -f xxx.mem windows.pstree# 查看指定 pid 的进程vol -f xxx.mem windows.pslist --pid 1234# 进程转储vol -o ./outputdir/ -f xxx.mem windows.pslist --pid 1234 --dump# 内存转储vol -o ./outputdir/ -f xxx.mem windows.memmap --pid 1234 --dump# 查看网络端口vol -f xxx.mem windows.netscan# 查看完整的结果,但可能包含垃圾信息和虚假信息 (谨慎使用)vol -f xxx.mem windows.netscan --include-corrupt# 查看句柄vol -f xxx.mem windows.handles
vol -f xxx.mem windows.handles --pid 1234# 查看 DLLvol -f xxx.mem windows.dlllist
vol -f xxx.mem windows.dlllist --pid 1234# DLL 转储vol -o ./outputdir/ -f xxx.mem windows.dlllist --pid 1234 --dump# 查看命令行vol -f xxx.mem windows.cmdline
vol -f xxx.mem windows.cmdline --pid 1234# 查看注册表信息vol -f xxx.mem windows.registry.hivescan
vol -f xxx.mem windows.registry.hivelist# 查看指定过滤器 (文件夹) 下的注册表信息vol -f xxx.mem windows.registry.hivelist --filter FILTER# 注册表信息转储vol -o ./outputdir/ -f xxx.mem windows.hivelist --filter FILTER --dump# 查看注册表键值对vol -f xxx.mem windows.registry.printkey# 查看指定过滤器 (文件夹) 下的注册表信息,但需要 hivelist 提供的 offsetvol -f xxx.mem windows.registry.printkey --offset OFFSET# 查看指定键下的注册表值vol -f xxx.mem windows.registry.printkey --key KEY# 打印所有键的信息vol -f xxx.mem windows.registry.printkey --recurse# 查看文件信息vol -f xxx.mem windows.filescan# 建议通过 powershell 的 Select-String 或者 bash 的 grep 进行搜索,如:vol -f xxx.mem windows.filescan | grep "flag"vol -f xxx.mem windows.filescan | Select-String "flag"# 文件转储,需要 pslist 提供的 pidvol -o ./outputdir/ -f xxx.mem windows.dumpfiles --pid 1234(推荐) 需要 filescan 提供的 offset (一般来说为 physaddr)vol -o ./outputdir/ -f xxx.mem windows.dumpfiles --virtaddr 0xee1122
vol -o ./outputdir/ -f xxx.mem windows.dumpfiles --physaddr 0xee1122# 查找恶意注入代码vol -f xxx.mem windows.malfind
vol -f xxx.mem windows.malfind --pid 1234# 恶意注入代码转储vol -o ./outputdir/ -f xxx.mem windows.malfind --pid 1234 --dump
Bash

windows.hashdump 抓取内存中的用户mm hash(LM/NTLM):

带你走进volatility内存取证的世界

volatility3 中新增了 -r 参数指定输出样式

windows.cmdline

带你走进volatility内存取证的世界

windows.netscan 查看网络连接情况,相当于 Windows 中查看 netstat -ano

带你走进volatility内存取证的世界

带你走进volatility内存取证的世界

 带你走进volatility内存取证的世界

敬请各位大佬关注:小谢取证

点赞、好看的你带你走进volatility内存取证的世界最好看
↓↓↓

原文始发于微信公众号(小谢取证):带你走进volatility内存取证的世界

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月12日14:13:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   带你走进volatility内存取证的世界https://cn-sec.com/archives/2946365.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息