volatility3安装和入门教程(win+Linux)

小九
ID: 1133
16542 次访问
135 次下载
volatility3安装和入门教程(win+Linux)
取证工具取证技术文章

安装准备工作

  • python3
  • pip3

安装教程

  • 安装完python后,运行:python -m pip install volatility3
  • 如果你的电脑中同时存在python2和python3,那么你需要运行:python3 -m pip install volatility3
  • 如果你的电脑中,存在单独的pip3,或者pip,则你需要使用:pip install volatility3.
  • 如果你电脑中同时存在pip和pip3,则你需要使用:pip3 install volatility3

正常情况都可以用的安装方式

  • Windows\Linux\Macos均可用的安装方式
  • 终端运行命令:python -m pip install volatility3

安装的时候可能会出现下面的问题:

~> python -m pip install volatility3
Collecting volatility3
  Downloading volatility3-2.26.2-py3-none-any.whl.metadata (7.4 kB)
Collecting pefile>=2024.8.26 (from volatility3)
  Downloading pefile-2024.8.26-py3-none-any.whl.metadata (1.4 kB)
Downloading volatility3-2.26.2-py3-none-any.whl (1.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 6.1 MB/s  0:00:00
Downloading pefile-2024.8.26-py3-none-any.whl (74 kB)
Installing collected packages: pefile, volatility3
  Attempting uninstall: pefile
    Found existing installation: pefile 2023.2.7
    Uninstalling pefile-2023.2.7:
      Successfully uninstalled pefile-2023.2.7
   ━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━ 1/2 [volatility3]  WARNING: The scripts vol.exe and volshell.exe are installed in 'H:\huanjing\python\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pefile-2024.8.26 volatility3-2.26.2
# 这个时候,我们就需要注意,WARNING: The scripts vol.exe and volshell.exe are installed in '路径',这里的路径.
# 我们以windows举例
# 先复制路径如我这里的:H:\huanjing\python\Scripts
# 然后点击:Windows 10/11:右键点击「此电脑」→「属性」→「高级系统设置」→「环境变量」;
# 系统变量中找到Path → 点击「编辑」→「新建」→ 粘贴刚才复制的路径 → 一路点击「确定」保存;
# 然后重启终端,输入:vol --version 如果输出格式与下方类似,则说明安装成功
Volatility 3 Framework 2.26.2

Widnows入门教程

获取内存

volatile3本身并不提供获取内存的能力。内存可以通过多种工具获取,以下是一些示例,但还有其他工具:

列表插件

以下列出Volatility 3可用的部分Windows插件,但并不完整,未来可能会添加更多插件。如需完整插件列表,请参阅Volatility 3插件列表。如有插件需求,请提交问题并详细描述所需插件。

python3 vol.py --help | grep windows | head -n 4
    windows.bigpools.BigPools
    windows.cmdline.CmdLine
    windows.crashinfo.Crashinfo
    windows.dlllist.DllList
  • 笔记这里,该命令通过管道传递给 grep 和 head,以提供可用 Windows 插件列表的开头。

使用插件

以下是运行 Volatility CLI 的语法。

python3 vol.py -f <path to memory image> plugin_name plugin_option

例子

windows.pslist

在这个例子中,我们将使用来自 PragyanCTF’22 的内存转储。我们将讨论范围限定于 Volatility 3 的内存取证,而不会扩展到挑战的其他部分。

在 Volatility 3 中使用 Windows 插件时,所需的 ISF 文件通常可以从 Microsoft 服务器自动下载的 PDB 文件生成,因此不需要查找或将特定的 ISF 文件添加到 Volatility 3 符号目录中。

python3 vol.py -f MemDump.DMP windows.pslist | head -n 10

    Volatility 3 Framework 2.0.1    PDB scanning finished

    PID     PPID    ImageFileName   Offset(V)       Threads Handles SessionId       Wow64   CreateTime          ExitTime            File output

    4       0           System              0xfa8000cbc040  85          492     N/A         False   2022-02-07      16:30:12.000000         N/A     Disabled
    276     4           smss.exe        0xfa8001e04040      2           29      N/A         False   2022-02-07      16:30:12.000000         N/A     Disabled
    352     336         csrss.exe       0xfa8002110b30      9           375     0           False   2022-02-07      16:30:13.000000         N/A     Disabled
    404     336         wininit.exe     0xfa800219f060      3           74      0           False   2022-02-07      16:30:13.000000         N/A     Disabled
    412     396         csrss.exe       0xfa80021c5b30      9           224     1           False   2022-02-07      16:30:13.000000         N/A     Disabled
    468     396         winlogon.exe    0xfa8002284060      5           113     1           False   2022-02-07      16:30:14.000000         N/A     Disabled

windows.pslist帮助列出在进行内存转储时正在运行的进程。

windows.pstree

python3 vol.py -f MemDump.DMP windows.pstree | head -n 20
    Volatility 3 Framework 2.0.1    PDB scanning finished

    PID     PPID    ImageFileName   Offset(V)       Threads Handles SessionId       Wow64   CreateTime      ExitTime

    4       0       System  0xfa8000cbc040  85      492     N/A     False   2022-02-07 16:30:12.000000      N/A
    * 276   4       smss.exe        0xfa8001e04040  2       29      N/A     False   2022-02-07 16:30:12.000000      N/A
    352     336     csrss.exe       0xfa8002110b30  9       375     0       False   2022-02-07 16:30:13.000000      N/A
    404     336     wininit.exe     0xfa800219f060  3       74      0       False   2022-02-07 16:30:13.000000      N/A
    * 504   404     services.exe    0xfa80022ccb30  7       190     0       False   2022-02-07 16:30:14.000000      N/A
    ** 960  504     svchost.exe     0xfa8001c17b30  39      1003    0       False   2022-02-07 16:30:14.000000      N/A
    ** 1216 504     svchost.exe     0xfa80026e0b30  18      311     0       False   2022-02-07 16:30:15.000000      N/A
    ** 1312 504     svchost.exe     0xfa8002740380  19      287     0       False   2022-02-07 16:30:15.000000      N/A
    ** 1984 504     taskhost.exe    0xfa8002eb1b30  8       129     1       False   2022-02-07 16:30:27.000000      N/A
    ** 804  504     svchost.exe     0xfa80024ca5f0  20      450     0       False   2022-02-07 16:30:14.000000      N/A
    *** 100 804     audiodg.exe     0xfa80025b4b30  6       131     0       False   2022-02-07 16:30:14.000000      N/A
    ** 1568 504     SearchIndexer.  0xfa800254b480  12      616     0       False   2022-02-07 16:30:32.000000      N/A
    ** 744  504     svchost.exe     0xfa8002477b30  8       265     0       False   2022-02-07 16:30:14.000000      N/A
    ** 1096 504     svchost.exe     0xfa800260db30  14      357     0       False   2022-02-07 16:30:14.000000      N/A
    ** 616  504     svchost.exe     0xfa8002b86ab0  13      314     0       False   2022-02-07 16:32:16.000000      N/A
    ** 624  504     svchost.exe     0xfa8002410630  10      350     0       False   2022-02-07 16:30:14.000000      N/A

windows.pstree有助于显示进程之间的父子关系。

  • 笔记这里将命令通过管道传递给 head 以提供更小的输出,这里只列出前 20 个。

windows.hashdump

python3 vol.py -f MemDump.DMP windows.hashdump
Volatility 3 Framework 2.0.3
Progress:  100.00           PDB scanning finished
User        rid     lmhash  nthash

Administrator       500         aad3b435b51404eeaad3b435b51404ee    31d6cfe0d16ae931b73c59d7e0c089c0
Guest               501         aad3b435b51404eeaad3b435b51404ee    31d6cfe0d16ae931b73c59d7e0c089c0
Frank Reynolds      1000    aad3b435b51404eeaad3b435b51404ee        a88d1e18706d3aa676e01e5943d15911
HomeGroupUser$      1002    aad3b435b51404eeaad3b435b51404ee        af10ecac6ea817d2bb56e3e5c33ce1cd
Dennis              1003    aad3b435b51404eeaad3b435b51404ee        cf96684bbc7877920adaa9663698bf54

windows.hashdump有助于列出系统中用户的哈希值。

Linux入门教程

获取内存

Volatility3 本身并不提供获取内存的功能。以下是一个可用于在 Linux 系统上获取内存的工具示例:

可能还有其他工具,但请在使用前确认其维护状态以及与 volatility3 的兼容性。

创建 Linux 符号表的步骤

建议首先查看volatility3-symbols仓库,其中提供了预生成的 JSON.xz 符号表文件。该仓库按内核版本整理了适用于 Debian、Ubuntu 和 AlmaLinux 等主流 Linux 发行版的文件。

如果找不到适合您内核版本的符号表,请参考Mac 或 Linux 符号表手动创建一个。

文件创建完成后,将其放置在该目录下volatility3/symbols。Volatility3 将自动检测并使用该位置的符号表。

列表插件

Volatility3 目前支持 40 多个 Linux 专用插件,涵盖广泛的取证分析需求,例如进程枚举、内存映射文件检查、已加载模块和内核跟踪功能。

一些代表性的插件包括:

  • linux.pslist列出正在运行的进程及其 PID 和 PPID。
  • linux.bash:从内存中恢复 bash 命令历史记录。
  • linux.lsmod显示已加载的内核模块。
  • linux.kmsg:从内核日志缓冲区读取消息。
  • linux.elfs列出所有内存映射的 ELF 文件。
  • linux.check_creds检查可疑的凭证结构。
  • linux.vmayarascan:使用 YARA 签名扫描进程内存。

要查看所有支持的插件列表,请运行以下命令:

python3 vol.py --help | grep -i linux.

笔记

您还可以使用更复杂的模式或工具(例如grepawk、 )来筛选和检查可用的插件,或者直接浏览 下的源代码volatility3/framework/plugins/linux

使用插件

以下是运行 Volatility CLI 的语法。

python3 vol.py -f <path to memory image> <plugin_name> <plugin_option>

举例

横幅

在本例中,我们将使用来自 Insomni’hack 2020 CTF 挑战赛预告题 Getdents 的内存转储文件。我们将讨论范围限定于 Volatility 3 的内存取证,不会扩展到挑战赛的其他部分。感谢stuxnet提供此内存转储文件和相关说明

python3 vol.py -f memory.vmem banners

    Volatility 3 Framework 2.26.0

    Progress:  100.00               PDB scanning finished
    Offset  Banner

    0x141c1390      Linux version 4.15.0-42-generic (buildd@lgw01-amd64-023) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018 (Ubuntu 4.15.0-42.45-generic 4.15.18)
    0x63a00160      Linux version 4.15.0-72-generic (buildd@lcy01-amd64-026) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 (Ubuntu 4.15.0-72.81-generic 4.15.18)
    0x6455c4d4      Linux version 4.15.0-72-generic (buildd@lcy01-amd64-026) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 (Ubuntu 4.15.0-72.81-generic 4.15.18)
    0x6e1e055f      Linux version 4.15.0-72-generic (buildd@lcy01-amd64-026) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 (Ubuntu 4.15.0-72.81-generic 4.15.18)
    0x7fde0010      Linux version 4.15.0-72-generic (buildd@lcy01-amd64-026) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 (Ubuntu 4.15.0-72.81-generic 4.15.18)

上述命令可以帮助我们从内存转储中识别内核版本和发行版。利用这些信息,按照“为 Linux 创建符号表”中的说明生成所需的 ISF 文件。创建完成后,将该文件放置在volatility3/symbolsVolatility3 可以自动识别的目录下。

linux.boottime

此插件提供从内存中提取的系统启动时间。它有助于建立时间线,尤其是在分析事件响应场景或确定系统正常运行时间时。

python3 vol.py -f memory.vmem linux.boottime

    Volatility 3 Framework 2.26.0
    Progress:  100.00               Stacking attempts finished

    TIME NS Boot Time

    -       2022-02-10 06:50:16.450008 UTC

该时间戳可作为关联系统事件(例如进程启动时间、日志或恶意活动)的参考点。

linux.pslist

此插件通过遍历内存中的任务列表来列出活动进程。它提供每个进程的详细元数据,包括标识符和用户/组信息。

python3 vol.py -f memory.vmem linux.pslist

    Volatility 3 Framework 2.26.0
    Progress:  100.00               Stacking attempts finished
    OFFSET (V)      PID     TID     PPID    COMM    UID     GID     EUID    EGID    CREATION TIME   File output

    0x8ca6db1aac80  1       1       0       systemd 0       0       0       0       2022-02-10 06:50:16.364213 UTC  Disabled
    0x8ca6db1a9640  2       2       0       kthreadd        0       0       0       0       2022-02-10 06:50:16.364213 UTC  Disabled
    0x8ca6db1ac2c0  3       3       2       rcu_gp  0       0       0       0       2022-02-10 06:50:16.372213 UTC  Disabled
    ...

这种详细的视图使调查人员能够比以前更精确地关联用户权限、启动时间和进程之间的关系。

linux.pstree

该插件将流程层级结构以树状图的形式呈现,清晰地显示了流程之间的父子关系。

python3 vol.py -f memory.vmem linux.pstree

    Volatility 3 Framework 2.26.0
    Progress:  100.00               Stacking attempts finished
    OFFSET (V)      PID     TID     PPID    COMM

    0x8ca6db1aac80  1       1       0       systemd
    * 0x8ca6db3342c0        278     278     1       systemd-journal
    * 0x8ca6d005ac80        315     315     1       systemd-udevd
    * 0x8ca6d0eac2c0        478     478     1       systemd-resolve
    * ...
    *** 0x8ca67108c2c0      1507    1507    1438    gdm-x-session
    **** 0x8ca671215900     1527    1527    1507    Xorg
    **** 0x8ca671210000     1608    1608    1507    gnome-session-b
    ***** 0x8ca66fba42c0    1765    1765    1608    ssh-agent

它有助于识别异常或可疑的进程结构,例如孤立子进程、合法父进程下注入的子进程或过长的 shell 执行链。树状视图对于通过检查意外的父子关系来发现进程启动序列或权限提升中的异常情况尤其有用。

linux.bash

现在,我们使用以下方法查找在 bash shell 中运行的命令linux.bash

python3 vol.py -f memory.vmem linux.bash

    Volatility 3 Framework 2.26.0
    Progress:  100.00               Stacking attempts finished
    PID     Process CommandTime     Command

    1733    bash    2020-01-16 14:00:36.000000      sudo reboot
    1733    bash    2020-01-16 14:00:36.000000      AWAVH��
    1733    bash    2020-01-16 14:00:36.000000      sudo apt upgrade
    1733    bash    2020-01-16 14:00:36.000000      sudo apt upgrade
    1733    bash    2020-01-16 14:00:36.000000      sudo reboot
    1733    bash    2020-01-16 14:00:36.000000      uname -a
    1733    bash    2020-01-16 14:00:41.000000      chmod +x meterpreter
    1733    bash    2020-01-16 14:00:42.000000      sudo ./meterpreter

linux.ip.Addr 和 linux.ip.Link

网络配置是内存取证的重要组成部分。分析网络接口及其 IP 地址分配可以揭示活动连接、配置错误的设置,甚至是恶意活动的痕迹。

Volatility3 提供了以下两个插件来检查这些信息:

linux.ip.Addr显示每个接口的 IP 相关元数据,包括 IPv4/IPv6 地址、MAC 地址、作用域和接口状态。

python3 vol.py -f memory.vmem linux.ip.Addr

    NetNS   Index   Interface       MAC     Promiscuous     IP      Prefix  Scope Type      State
    4026531992      2       enp0s3  08:00:27:8a:4d:eb       False   10.0.2.15       24      global  UP
    ...

linux.ip.Link显示底层链路信息,例如 MTU、Qdisc 和接口标志。

python3 vol.py -f memory.vmem linux.ip.Link

    NS      Interface       MAC     State   MTU     Qdisc   Qlen    Flags
    4026531992      enp0s3  08:00:27:8a:4d:eb       UP      1500    fq_codel        1000    BROADCAST,LOWER_UP,MULTICAST,UP

这些插件共同帮助调查人员评估系统的网络暴露情况,并识别异常情况,例如多个网络命名空间、意外的 IP 地址或处于混杂模式的活动接口。

linux.malfind

此插件会扫描进程内存,查找可能表明存在代码注入或恶意载荷的可疑可执行区域。它尤其适用于检测无文件恶意软件、注入的 shellcode 或与磁盘上合法二进制文件不对应的已解压运行时载荷。

python3 vol.py -f memory.vmem linux.malfind

    Volatility 3 Framework 2.26.0
    Progress:  100.00               Stacking attempts finished
    PID     Process Start   End     Path    Protection      Hexdump Disasm

    540     networkd-dispat 0x7f1506482000  0x7f1506483000  Anonymous Mapping       rwx
    00 00 00 00 00 00 00 00 43 00 00 00 00 00 00 00 ........C.......
    4c 8d 15 f9 ff ff ff ff 25 03 00 00 00 0f 1f 00 L.......%.......
    ...
    0x7f1506482000: add     byte ptr [rax], al
    0x7f1506482002: add     byte ptr [rax], al
    ...
    0x7f1506482013: stc

在此输出中:

  • PID / 进程:标识目标进程(在本例中为networkd-dispat,PID 540)
  • 起始/结束:可疑区域的内存地址范围
  • 路径:表示该区域是匿名内存映射(即,没有文件支持)
  • 保护措施:该区域被标记为rwx(读写执行),这在合法的内存区域中并不常见。
  • 反汇编:显示在该内存区域中找到的反汇编机器代码

需要重点关注的关键指标:

  • 匿名映射 + 读写执行:未绑定到任何文件且具有执行权限的内存通常用于注入代码。
  • 反汇编模式:重复的加法指令、空操作指令或不寻常的指令序列可能是 shellcode、打包器存根或 JIT 编译代码的遗留产物。
  • 进程上下文:可疑内存位于系统服务networkd-dispat中——如果该服务不应拥有动态可执行内存区域,则可能已被入侵。

在调查初期使用此插件,可以标记需要深入检查的流程。

原文教程请点击 查看资源

资源下载 或 查看