Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
avml — 用于取证和应急响应的便携式 Linux 内存采集工具,可捕获与 LiME 兼容的内存镜像,并支持可选压缩与远程流式传输。 | Kitploit
工具/GitHubGitHub/microsoft/avml
内存取证取证分析数字取证事件响应数字取证 分类第 10 名取证分析 分类第 10 名事件响应 分类第 11 名内存取证 分类第 3 名
GitHub
1.1k95911天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
microsoft/avml

avml

用于取证和应急响应的便携式 Linux 内存采集工具,可捕获与 LiME 兼容的内存镜像,并支持可选压缩与远程流式传输。

查看仓库

AVML(Acquire Volatile Memory for Linux)

摘要

一款面向 Linux 的可移植易失性内存采集工具。

AVML 是一款用 Rust 编写的 Linux 用户态易失性内存采集工具,旨在以静态二进制文件的形式部署。AVML 可以在事先不知道目标操作系统发行版或内核的情况下采集内存。无需在目标机上编译或进行指纹识别。

发布版本针对 x86-64、AArch64、ARMv7 小端硬浮点以及兼容旧版 ARMv6 的大端系统构建。ARMv7 采集目前假定内存页大小为 4096 字节。

功能特性

  • 通过 Azure Blob 存储或 HTTP PUT 将录制的镜像保存到外部位置
  • Azure Blob 存储上传会通过 Azure SDK 的默认指数退避策略重试瞬时故障(8 次尝试,总耗时上限为一分钟)。
  • 可选的页级压缩,使用 Snappy。
  • 使用 LiME 输出格式(不使用压缩时)。

内存来源

  • /dev/crash
  • /proc/kcore
  • /dev/mem

在产生输出之前,AVML 会验证来源的内存范围并读取其第一个数据块(最多 16 MiB)。如果未指定来源,它会依次尝试 /proc/kcore、/dev/crash、/dev/mem,直到验证成功。选定的来源句柄和缓冲数据块会被保留用于采集。后续的读取或写入失败会终止采集;AVML 在验证之后不会切换来源。

本地采集和转换输出必须尚不存在。AVML 以独占方式创建它们,并拒绝已存在的文件、硬链接和目标符号链接。仅在 Unix 上,恰好 /dev/null 和 /dev/stdout 会以写入方式打开,且不创建或截断。采集失败可能会留下部分本地输出;请使用新路径或在重试前删除该文件。

注意:如果启用了内核特性 kernel_lockdown,AVML 将无法采集内存。

已测试的发行版

Azure VM 测试矩阵定义在 eng/images.txt 中,目前涵盖:

  • Ubuntu:16.04、18.04、20.04、22.04、24.04、26.04
  • CentOS:7.9
  • RHEL:7.9、8.5、8.10、9.0、9.8、10.2
  • Debian:11、12、13
  • Oracle Linux:8.10、9.8、10.2
  • CBL-Mariner:2.0
  • Azure Linux:3.0
  • SUSE Linux Enterprise Server:12 SP5、15 SP7、16.0
  • AlmaLinux:8、9、10

子命令

avml 是一个带有子命令的单一二进制文件。每个子命令都由一个 Cargo 特性控制,因此最小构建只包含你所需的功能:

子命令特性默认功能说明
acquire(始终启用)是将内存快照保存到本地文件(之后可选上传)。
convertconvert是在 AVML / LiME / 原始格式之间转换。
uploadupload是通过 HTTP PUT 或上传到 Azure Block Blob 上传本地文件。
streamstream是将快照直接流式传输到目标位置,不生成本地文件。

使用 cargo build --release --no-default-features 构建仅含采集功能的最小二进制文件。

快速开始

采集压缩的内存镜像

在目标主机上:

avml acquire --compress output.lime.compressed

捕获未压缩的内存镜像

在目标主机上:

avml acquire output.lime

捕获内存镜像并上传至 Azure Blob 存储

在具有 az cli 凭据的安全主机上,生成一个 SAS URL。

EXPIRY=$(date -d '1 day' '+%Y-%m-%dT%H:%MZ')
SAS_URL=$(az storage blob generate-sas --account-name ACCOUNT --container CONTAINER test.lime --full-uri --permissions c --output tsv --expiry ${EXPIRY})

在目标主机上,使用生成的 SAS 令牌执行 avml。

avml acquire --sas-url ${SAS_URL} --delete output.lime

无需写入本地磁盘即可流式传输内存镜像

对于不希望先将快照写入本地文件的主机(只读根文件系统、磁盘空间有限、取证链监管方面的顾虑),请使用 stream 子命令。它使用与 acquire 相同的源验证和选择机制(传入 --source 可覆盖),并将字节按顺序写入所选目标。源仅在验证阶段尝试,且在任何输出字节发送之前完成。流式传输过程中无法更改源。

传输至 Azure 块 Blob 存储

avml stream blob ${SAS_URL}
  • 块大小会自动推导,以便快照符合 Azure 每个 blob 50,000 个块的限制。--sas-block-size(MiB)作为下限;如果推导出的最小值更大,则以较大的值为准。
  • --sas-block-concurrency 限制同时进行的 stage_block 调用数量。峰值内存约为 (concurrency + 1) * block_size。
  • 如果快照在上传过程中失败,已暂存的块会被放弃而不会被提交;Azure 会按照其标准策略自动丢弃它们。

到远程 TCP 监听器

在收集器主机上:

nc -l 9000 > snapshot.lime

在目标主机上:

avml stream tcp collector.example.com:9000

avml 只连接一次并顺序写入快照。如果连接在传输中途断开,快照会中止;不支持断点续传。不使用 TLS——如有需要,可配合 SSH 隧道或 stunnel 来保证机密性和完整性。

上传先前捕获的快照

avml upload put  ./output.lime ${URL}              # HTTP PUT
avml upload blob ./output.lime ${SAS_URL}          # Azure Block Blob

使用 VM 扩展捕获 Azure VM 的内存镜像

在具有 az cli 凭据的安全主机上,执行以下操作:

  1. 生成 SAS URL(见上文)
  2. 创建包含以下信息的 config.json:
{
    "commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
    "fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
  1. 使用指定的 config.json 执行 customScript 扩展
az vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json

上传到 AWS S3 或 GCP Cloud Storage

在安全主机上,生成一个 S3 预签名 URL 或生成一个 GCP 预签名 URL。

在目标主机上,使用生成的预签名 URL 执行 avml。

avml acquire --url ${URL} --delete output.lime

解压 AVML 压缩镜像

avml convert ./compressed.lime ./uncompressed.lime

压缩未压缩的 LiME 镜像

avml convert --source-format lime --format lime_compressed ./uncompressed.lime ./compressed.lime

用法

A portable volatile memory acquisition tool for Linux

Usage: avml <COMMAND>

Commands:
  acquire  Acquire a memory snapshot to a local file (and optionally upload it)
  convert  Convert between AVML and LiME snapshot formats and a raw memory image
  upload   Upload an already-acquired snapshot file to remote storage
  stream   Stream a memory snapshot directly to remote storage, without writing it to a local file
  help     Print this message or the help of the given subcommand(s)

运行 avml <COMMAND> --help 查看各命令的选项。

在 Ubuntu 上构建

# 安装 MUSL
sudo apt-get install musl-dev musl-tools musl

# 通过 rustup 安装 Rust
curl https://sh.rustup.rs -sSf | sh -s -- -y

# 为 Rust 添加 MUSL 目标
rustup target add x86_64-unknown-linux-musl

# 构建
cargo build --release --target x86_64-unknown-linux-musl

# 构建不含上传功能的版本
cargo build --release --target x86_64-unknown-linux-musl --no-default-features

ARMv7 硬浮点产物需要 ARM musl 交叉工具链。仓库的构建脚本会创建固定版本的工具链,并构建完整版和最小化的静态二进制文件:

eng/build-armv7.sh

在 Azure 上测试

测试脚本将创建、使用并清理若干资源组、虚拟机和存储账户。

  1. 安装 az cli
  2. 使用以下命令登录你的 Azure 订阅:az login
  3. 构建 avml(见上文)
  4. ./eng/test-on-azure.sh

贡献

本项目欢迎贡献和建议。大多数贡献要求你同意一份贡献者许可协议(CLA),声明你有权并且确实授予我们使用你的贡献的权利。详情请访问 https://cla.microsoft.com。

当你提交拉取请求时,CLA-bot 会自动判断你是否需要提供 CLA,并相应地装饰 PR(例如添加标签、评论)。只需按照机器人提供的说明操作即可。在所有使用我们 CLA 的仓库中,你只需执行一次。

本项目已采用 Microsoft 开源行为准则。 更多信息请参阅行为准则常见问题,或通过 [email protected] 联系我们,提出其他问题或意见。

报告安全问题

安全问题和缺陷应通过电子邮件私下报告给 Microsoft 安全响应中心(MSRC):[email protected]。你应在 24 小时内收到回复。如果由于某种原因未收到,请通过电子邮件跟进,以确保我们收到了你的原始消息。更多信息,包括 MSRC PGP 密钥,可在安全技术中心找到。

下载工具