#安全 #azure-blob #输出格式 #Linux #云存储 #网络 #内存取证

程序+库 avml

便携式易失性内存获取工具

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 命令行工具

Download history 317/week @ 2024-04-30 333/week @ 2024-05-07 256/week @ 2024-05-14 102/week @ 2024-05-21 152/week @ 2024-05-28 263/week @ 2024-06-04 243/week @ 2024-06-11 269/week @ 2024-06-18 108/week @ 2024-06-25 162/week @ 2024-07-02 115/week @ 2024-07-09 225/week @ 2024-07-16 151/week @ 2024-07-23 179/week @ 2024-07-30 106/week @ 2024-08-06 227/week @ 2024-08-13

每月 705 次下载

MIT 许可证

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 凭据的安全主机上,执行以下操作

  1. 生成一个SAS URL(见上文)
  2. 创建包含以下信息的 config.json
{
    "commandToExecute": "./avml --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云存储

在安全主机上,生成一个 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上测试

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

  1. 安装 az cli
  2. 使用以下命令登录到您的Azure订阅:az login
  3. 构建avml(见上文)
  4. ./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