
フォレンジックおよびインシデントレスポンス向けのポータブルLinux RAM取得ツールで、オプションの圧縮とリモートストリーミングに対応したLiME互換イメージをキャプチャします。
Linux 向けのポータブルな揮発性メモリ取得ツール。
AVML は Rust で書かれた X86_64 ユーザーランド向けの揮発性メモリ取得ツールであり、静的バイナリとしてデプロイされることを想定しています。 AVML は、対象の OS ディストリビューションやカーネルを事前に知らなくてもメモリを取得するために使用できます。ターゲット上でのコンパイルやフィンガープリンティングは不要です。
コマンドラインでメモリソースが指定されていない場合、AVML はメモリソースを順に試して機能するソースを探します。
注: カーネル機能 kernel_lockdown が有効になっている場合、AVML はメモリを取得できません。
Azure VM のテストマトリクスは eng/images.txt で定義されており、現在以下をカバーしています:
avml はサブコマンドを備えた単一のバイナリです。各サブコマンドは
Cargo のフィーチャーで制御されるため、最小構成のビルドには必要な機能だけが含まれます:
| サブコマンド | フィーチャー | デフォルト | 動作 |
|---|---|---|---|
acquire | (常時) | はい | メモリをローカルファイルにスナップショット(任意でその後アップロード)。 |
convert | convert | はい | AVML / LiME / raw 形式間の変換。 |
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 を使用して Azure サブスクリプションにログインしますこのプロジェクトはコントリビューションと提案を歓迎します。ほとんどのコントリビューションでは、 あなたがコントリビューションを使用する権利を有しており、実際に当社にその権利を付与すること を宣言するコントリビューターライセンス契約(CLA)に同意する必要があります。詳細については、 https://cla.microsoft.com をご覧ください。
プルリクエストを送信すると、CLA-bot が自動的に CLA を提供する必要があるかどうかを判断し、 PR を適切に装飾します(例: ラベル、コメント)。ボットから提供される指示に従うだけで結構です。 これは、当社の CLA を使用するすべてのリポジトリを通じて一度だけ行う必要があります。
このプロジェクトは Microsoft Open Source Code of Conduct を採用しています。 詳細については Code of Conduct FAQ を参照するか、 追加の質問やコメントがある場合は [email protected] までお問い合わせください。
セキュリティ問題やバグは、Microsoft Security Response Center (MSRC) に [email protected] 宛てのメールで 非公開で報告してください。24 時間以内に回答が届くはずです。何らかの理由で届かない場合は、 元のメッセージを受信したことを確認するためにメールでフォローアップしてください。 MSRC PGP キーを含む詳細情報は、 Security TechCenter にあります。