24 个版本 (13 个破坏性更新)
0.14.0 | 2024 年 4 月 24 日 |
---|---|
0.13.0 | 2023 年 10 月 2 日 |
0.12.0 | 2023 年 8 月 16 日 |
0.11.4 | 2023 年 6 月 22 日 |
0.1.1 | 2019 年 6 月 14 日 |
#40 in 命令行工具
每月 705 次下载
88KB
2K SLoC
AVML (Acquire Volatile Memory for Linux)
摘要
Linux 的便携式易失性内存获取工具。
AVML 是一个用 Rust 编写的 X86_64 用户空间易失性内存获取工具,旨在作为静态二进制文件部署。AVML 可用于获取内存,而不需要事先知道目标操作系统分布或内核。无需在目标上编译或指纹。
功能
- 通过 Azure Blob 存储或 HTTP PUT 将记录的图像保存到外部位置
- 自动重试(在出现网络连接问题时),上传到 Azure Blob 存储时使用指数退避
- 可选使用 Snappy 进行页面级压缩。
- 使用 LiME 输出格式(在未使用压缩的情况下)。
内存源
- /dev/crash
- /proc/kcore
- /dev/mem
如果未在命令行上指定内存源,AVML 将遍历内存源以找到功能源。
注意:如果启用了内核功能 kernel_lockdown,AVML 将无法获取内存。
测试过的发行版
- Ubuntu: 12.04, 14.04, 16.04, 18.04, 18.10, 19.04, 19.10, 20.04, 21.04, 22.04
- Centos: 6.5, 6.6, 6.7, 6.8, 6.9, 6.10, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.9
- RHEL: 6.7, 6.8, 6.9, 7.0, 7.2, 7.3, 7.4, 7.5, 7.7, 8.5, 9.0
- Debian: 8, 9, 10, 11, 12
- Oracle Linux: 6.8, 6.9, 6.10, 7.3, 7.4, 7.5, 7.6, 7.9, 8.5, 9.0
- CBL-Mariner: 1.0, 2.0
入门
捕获压缩内存镜像
在目标主机上
avml --compress output.lime.compressed
捕获未压缩内存镜像
在目标主机上
avml 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 --sas-url ${SAS_URL} --delete output.lime
使用虚拟机扩展捕获Azure虚拟机的内存镜像
在具有 az cli
凭据的安全主机上,执行以下操作
- 生成一个SAS URL(见上文)
- 创建包含以下信息的
config.json
{
"commandToExecute": "./avml --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
上传到AWS S3或GCP云存储
在安全主机上,生成一个 S3预签名URL 或生成一个 GCP预签名URL。
在目标主机上,使用生成的预签名URL执行avml。
avml --put ${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
Usage: avml [OPTIONS] <FILENAME>
Arguments:
<FILENAME>
name of the file to write to on local system
Options:
--compress
compress via snappy
--source <SOURCE>
specify input source
Possible values:
- /dev/crash:
Provides a read-only view of physical memory. Access to memory using this device must be paged aligned and read one page at a time
- /dev/mem:
Provides a read-write view of physical memory, though AVML opens it in a read-only fashion. Access to to memory using this device can be disabled using the kernel configuration options `CONFIG_STRICT_DEVMEM` or `CONFIG_IO_STRICT_DEVMEM`
- /proc/kcore:
Provides a virtual ELF coredump of kernel memory. This can be used to access physical memory
--max-disk-usage <MAX_DISK_USAGE>
Specify the maximum estimated disk usage (in MB)
--max-disk-usage-percentage <MAX_DISK_USAGE_PERCENTAGE>
Specify the maximum estimated disk usage to stay under
--url <URL>
upload via HTTP PUT upon acquisition
--delete
delete upon successful upload
--sas-url <SAS_URL>
upload via Azure Blob Store upon acquisition
--sas-block-size <SAS_BLOCK_SIZE>
specify maximum block size in MiB
--sas-block-concurrency <SAS_BLOCK_CONCURRENCY>
specify blob upload concurrency
[default: 10]
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
在Ubuntu上构建
# 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
在Azure上测试
测试脚本将创建、使用和清理多个资源组、虚拟机和存储账户。
- 安装 az cli
- 使用以下命令登录到您的Azure订阅:
az login
- 构建avml(见上文)
- ./eng/test-on-azure.sh
贡献
本项目欢迎贡献和建议。大多数贡献都需要您同意一份贡献者许可协议(CLA),声明您有权,并且实际上确实授予我们使用您的贡献的权利。有关详细信息,请访问 https://cla.microsoft.com。
当您提交拉取请求时,CLA机器人将自动确定您是否需要提供CLA,并相应地装饰PR(例如,标签,注释)。只需遵循机器人提供的说明即可。您只需要在整个使用我们CLA的所有存储库中做一次。
本项目采用了 Microsoft开源行为准则。有关更多信息,请参阅 行为准则FAQ 或联系 [email protected] 以获取任何额外的问题或评论。
报告安全问题
安全问题应通过电子邮件私下报告给微软安全响应中心(MSRC),邮箱地址为 [email protected]。您应在24小时内收到回复。如果由于某些原因您没有收到回复,请通过电子邮件跟进,以确保我们已经收到您原始的消息。更多信息,包括 MSRC PGP 密钥,可以在 安全技术中心 找到。
依赖关系
~3–19MB
~269K SLoC