
sk4la/volatility3本仓库提供基于Alpine Linux的即用型Docker镜像,内置Volatility框架,包括最新的Volatility 3。更多信息请查看官方Volatility和Volatility 3仓库。
所有镜像均可在Docker Hub直接获取:
顺便一提,为何这些镜像尚未成为官方镜像?
sk4la/volatility3 ⭐(版本2.26.2,2025年9月发布)
:warning: 由于许多社区插件是一次性概念验证贡献或由各自作者独立维护,此镜像仅包含volatilityfoundation/community3仓库明确引用的代码,不一定包含所引用插件的实际代码。
latest和stable标签以及具体版本号(如2.26.2)均指向最新官方发布版。为跟踪Volatility 3的开发周期,添加了edge标签,指向master分支的当前状态,可能不稳定。高级用户可自行使用此标签。sk4la/volatility3和sk4la/volatility3:edge镜像每周构建,以包含最新符号表。
sk4la/volatility
sk4la/dwarf2json
如发现缺少内容或希望添加其他功能,请告知。
构建和/或使用这些镜像需要在系统上安装Docker。有关安装和使用Docker工具链的详细信息,请参考官方文档。
由于这些镜像通过GitHub Actions构建,构建步骤未在此处详细记录。如希望本地构建,请直接参考CI工作流。
:warning: 请注意,Volatility 3的符号包直接嵌入
sk4la/volatility3镜像,导致镜像体积较大。有关详情,请查看我在官方仓库的拉取请求。
拉取(或构建)镜像后,可使用docker run命令在新容器中实例化,例如:
shdocker run -v $PWD:/workspace sk4la/volatility3
更完整的示例:
shdocker run -v $PWD:/workspace sk4la/volatility3 -f /workspace/volatile.mem windows.pslist
如需使用Volatility shell(即volshell)或其他入口点,实例化容器时使用--entrypoint选项:
shdocker run -it -v $PWD:/workspace --entrypoint volshell sk4la/volatility3 -f /workspace/volatile.mem
需要
--interactive和--tty选项(或其短格式-i和-t)以保持终端打开,以便与容器化应用交互。
请注意,除非使用卷或绑定挂载(如示例中使用--volume选项),否则所有生成的文件都将丢失。
由于确定正确的内存布局通常需要一些时间,以交互方式运行Volatility(即使用
--interactive标志实例化容器)是首选,尽管也可通过卷检索配置文件。有关实际用例,请参见示例。
这些镜像可交互使用,也可作为一次性解决方案处理特定问题。
以下是使用Volatility 3(具体为sk4la/volatility3 Docker镜像)从易失性内存镜像中提取进程可执行文件的实际示例。
:bulb: 此处特意使用长选项。有关Docker CLI的更多详情,请参考官方文档。
首先,基于sk4la/volatility3镜像实例化新容器:
shdocker container run --entrypoint ash --interactive --tty --volume "$PWD:/workspace" --workdir /workspace sk4la/volatility3
然后,在新创建的容器内,使用Volatility 3解析内存镜像并将配置写入磁盘:
shvolatility3 --file volatile.mem --log volatile.mem.log --renderer pretty --save-config volatile.mem.json windows.info
配置文件volatile.mem.json可作为后续运行的基础,使用--config标志,使Volatility无需再次扫描镜像以查找正确结构。
接下来,使用先前生成的配置再次执行Volatility 3,提取进程列表:
shvolatility3 --config volatile.mem.json --file volatile.mem --log volatile.mem.log --renderer pretty windows.pslist
为便于后处理,通常将结果转储为CSV或JSON格式:
shmkdir volatile.mem.results volatility3 --config volatile.mem.json --file volatile.mem --log volatile.mem.log --quiet --renderer csv windows.pslist | tee -a volatile.mem.results/pslist.csv
文件~/workspace/volatile.mem.results/pslist.csv应包含windows.pslist.PsList插件的CSV格式结果。
要转储进程镜像,首先创建一个目录用于存放所有后续提取内容,然后再次执行Volatility,使用相同的windows.pslist.PsList插件,但添加--dump标志:
shmkdir volatile.mem.dat volatility3 --config volatile.mem.json --file volatile.mem --log volatile.mem.log --output-dir volatile.mem.dat --renderer pretty windows.pslist --dump --pid 2700
二进制样本应位于~/workspace/volatile.mem.dat目录中,可供***工程师分析。
实际上,所有“转储器”插件(即能够从内存镜像中转储原始内容的Volatility插件)都应支持--output-dir选项,这在分析工作流中非常方便。
Volatility虽详细但错误提示不一定精确。当出现错误时,应提高详细级别(例如使用
-vvv)以获取最大详细信息,如有必要,可在官方Volatility 3仓库提交问题。
pdbconv为特定NT内核构建生成ISF文件这非常简单,只需使用pdbconv入口点实例化基于sk4la/volatility3镜像的新容器:
shdocker container run --entrypoint pdbconv --volume "$PWD:/workspace" --workdir /workspace sk4la/volatility3 --guid ce7ffb00c20b87500211456b3e905c471 --keep --pattern ntkrnlmp.pdb
这将在当前工作目录中生成中间符号文件(ISF) ce7ffb00c20b87500211456b3e905c47-1.json.xz,提示Volatility如何处理此特定构建以检索信息。
注意,这将从官方Microsoft Internet Symbol Server获取正确的PDB文件,因此此方法在隔离环境中无法使用。有关如何从自己的二进制文件中检索GUID以及在隔离环境中使用Volatility 3的更多详情,请参见JPCERTCC的仓库和博客文章。
ISF文件必须放置在主符号目录(默认位于$INSTALL_PREFIX/lib/volatility3/volatility3/symbols/windows)或当前工作目录的symbols子目录中(例如./symbols/windows/ntkrnlmp.pdb/ce7ffb00c20b87500211456b3e905c47-1.json.xz)。也可结合使用--symbol-dirs选项和Docker的--volume选项,向Volatility提供新创建的ISF文件。
本节说明如何在隔离(或断开连接)环境中使用Docker镜像。这在隔离取证实验室中分析易失性内存样本时非常有用。
:bulb: 此过程并非特定于此仓库中的Docker镜像,可用于任何Docker镜像。
首先,在本地获取镜像(此处以sk4la/volatility3为例):
shdocker image pull sk4la/volatility3
然后,将其导出为压缩tar存档:
shdocker image save sk4la/volatility3 | gzip --best --stdout > sk4la-volatility3-latest.tar.gz
压缩(此处使用GNU
gzip)不是必需的,但对于较大的镜像通常建议使用,因为它通常可以节省大量空间,尽管会牺牲速度。
生成的存档应在当前目录中显示为sk4la-volatility3-latest.tar.gz。
然后可将此压缩镜像传输到隔离工作站(例如使用USB闪存驱动器),并按如下方式加载:
shgzip --decompress --stdout sk4la-volatility3-latest.tar.gz | docker image load
然后镜像应准备就绪。可通过运行以下命令检查系统上镜像的存在:
shdocker image list
如果认为原始镜像缺少有用内容,可通过提交工单提出建议,或自行基于基础镜像构建以适应需求。
为此,只需创建一个基于此仓库中某个镜像的新Dockerfile,例如sk4la/volatility3:
dockerFROM sk4la/volatility3 USER root RUN apk add $STUFF USER unprivileged
默认情况下,此仓库中提供的所有镜像均不以
root用户运行,而是以unprivileged用户运行。对于需要超级用户权限的操作,需临时切换用户,如示例所示。
然后,通过执行docker image build --tag volatility3-overloaded .命令构建镜像。新创建的Docker镜像应出现在本地仓库中。
如需了解设置方式,可查看原始
Dockerfile。
sk4la/volatility镜像包含来自官方volatilityfoundation/community仓库的所有社区插件。默认情况下,这些插件存储在/usr/local/share/volatility/plugins/community。
可使用
--help或--info标志列出所有包含的插件(例如podman run sk4la/volatility:edge --plugins=/usr/local/share/volatility/plugins --info)。加载顺序不确定,有些插件因缺少依赖项(有些不再在PyPI上)或设计不适合分发而无法加载,因此可能需要多次运行才能加载所需插件。建议单独使用每个插件,以避免加载功能异常的插件。
要加载特定社区插件(以JPCERT的APT17插件为例):
shdocker container run sk4la/volatility:edge --plugins /usr/local/share/volatility/plugins/community/JPCERT apt17scan --help
请注意,许多为Volatility 2开发的插件已多年未维护,可能无法正常工作。
sk4la/volatility3和sk4la/volatility3:edge镜像包含来自官方volatilityfoundation/community3仓库的所有社区插件。默认情况下,这些插件存储在/usr/local/share/volatility3/plugins/community3。
可使用
--help标志列出所有包含的插件(例如podman run sk4la/volatility3:edge --plugin-dirs=/usr/local/share/volatility3/plugins --help)。请注意,许多插件已长时间未维护,可能无法正常工作。建议单独使用每个插件,以避免加载功能异常的插件。
要加载特定社区插件(以Multi YARA插件为例):
shdocker container run sk4la/volatility3:edge --plugin-dirs /usr/local/share/volatility3/plugins/community3/Silva_Multi_Yara/ multiyara --help
如遇到与这些Docker镜像相关的问题或想提出新功能建议,请提交工单。也欢迎拉取请求。
本软件根据Volatility软件许可证授权。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务