
用于取证和应急响应的便携式 Linux 内存采集工具,可捕获与 LiME 兼容的内存镜像,并支持可选压缩与远程流式传输。
一款适用于 Linux 的可移植易失性内存采集工具。
AVML 是一款使用 Rust 编写的 X86_64 用户态易失性内存采集工具,旨在以静态二进制文件的形式部署。 AVML 可用于在事先不了解目标操作系统发行版或内核的情况下采集内存。无需在目标上进行编译或指纹识别。
如果未在命令行中指定内存来源,AVML 将遍历内存来源以查找可用的来源。
注意:如果启用了内核特性 kernel_lockdown,AVML 将无法采集内存。
Azure VM 测试矩阵定义在 eng/images.txt 中,目前涵盖:
avml 是一个带有子命令的单一二进制文件。每个子命令都由一个 Cargo feature 控制,因此最小化构建只包含你所需的功能:
| 子命令 | Feature | 默认 | 功能说明 |
|---|---|---|---|
acquire | (始终包含) | 是 | 将内存快照保存到本地文件(之后可选上传)。 |
convert | convert | 是 | 在 AVML / LiME / 原始格式之间转换。 |
upload | upload | 是 | 通过 HTTP PUT 或上传到 Azure Block Blob 上传本地文件。 |
stream | stream | 是 | 将快照直接流式传输到目标位置,不生成本地文件。 |
使用 cargo build --release --no-default-features 构建仅含采集功能的最小化二进制文件。
在目标主机上:
avml acquire --compress output.lime.compressed
在目标主机上:
avml acquire output.lime
在具有 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 的 /dev/stdout 路径相同的
优先级顺序——先是 /proc/kcore,然后是
/dev/crash,最后是 /dev/mem;可通过 --source 覆盖),并将
字节按顺序写入所选目标。来源在流式传输过程中无法
更改,因此没有自动来源回退。
avml stream blob ${SAS_URL}
--sas-block-size(MiB)作为
下限;如果推导出的最小值更大,则以较大值为准。--sas-block-concurrency 限制进行中的 stage_block
调用数量。峰值 RAM 约为 (concurrency + 1) * block_size。在收集主机上:
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
在具有 az cli 凭据的安全主机上,执行以下操作:
config.json:{
"commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
"fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
config.json 执行 customScript 扩展az vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
在安全主机上,生成一个 S3 预签名 URL 或生成一个 GCP 预签名 URL。
在目标主机上,使用生成的预签名 URL 执行 avml。
avml acquire --url ${URL} --delete output.lime
avml convert ./compressed.lime ./uncompressed.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 查看各命令的选项。
# Install MUSL
sudo apt-get install musl-dev musl-tools musl
# Install Rust via rustup
curl https://sh.rustup.rs -sSf | sh -s -- -y
# Add the MUSL target for Rust
rustup target add x86_64-unknown-linux-musl
# Build
cargo build --release --target x86_64-unknown-linux-musl
# Build without upload functionality
cargo build --release --target x86_64-unknown-linux-musl --no-default-features
测试脚本将创建、使用并清理若干资源组、虚拟机和存储账户。
az login本项目欢迎贡献和建议。大多数贡献要求你 同意一份贡献者许可协议(CLA),声明你有权 并且确实授予我们使用你的贡献的权利。有关详情,请访问 https://cla.microsoft.com。
当你提交拉取请求时,CLA-bot 将自动判断你是否需要 提供 CLA 并相应地装饰 PR(例如标签、评论)。只需遵循 机器人提供的说明即可。在所有使用我们 CLA 的仓库中,你只需执行一次。
本项目已采用 Microsoft 开源行为准则。 有关更多信息,请参阅 行为准则 FAQ 或通过 [email protected] 联系我们,提出任何其他问题或评论。
安全问题和漏洞应通过电子邮件私下报告给 Microsoft 安全 响应中心(MSRC),邮箱为 [email protected]。你应 在 24 小时内收到回复。如果由于某种原因你没有收到,请通过 电子邮件跟进,以确保我们收到了你的原始消息。更多信息,包括 MSRC PGP 密钥,可在 Security TechCenter 中找到。