
フォレンジックおよびインシデントレスポンス向けのポータブルLinux RAM取得ツールで、オプションの圧縮とリモートストリーミングに対応したLiME互換イメージをキャプチャします。
Linux用のポータブル揮発性メモリ取得ツール。
AVMLは、Rustで書かれたX86_64ユーザーランド揮発性メモリ取得ツールで、静的バイナリとして配備することを目的としています。 AVMLは、対象OSのディストリビューションやカーネルを事前に知らなくてもメモリを取得できます。ターゲット上でのコンパイルやフィンガープリンティングは不要です。
コマンドラインでメモリソースが指定されていない場合、AVMLはメモリソースを順に試し、機能するソースを見つけます。
注: カーネル機能kernel_lockdownが有効になっている場合、AVMLはメモリを取得できません。
avmlはサブコマンドを持つ単一のバイナリです。各サブコマンドはCargoフィーチャーによって制御されるため、最小限のビルドには必要な機能だけが含まれます。
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サブコマンドを使用します。このコマンドは、メモリソースを事前に1つ選択し(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ボットがCLAの提供が必要かどうかを自動的に判断し、PRに適切なラベルやコメントを付けます。ボットから提供される指示に従ってください。この手続きは、当社のCLAを使用するすべてのリポジトリで一度だけ行う必要があります。
このプロジェクトは、Microsoftオープンソースの行動規範を採用しています。 詳細については、行動規範FAQを参照するか、追加の質問やコメントがある場合は[email protected]までお問い合わせください。
セキュリティ問題やバグは、[email protected]宛てにメールでマイクロソフトセキュリティレスポンスセンター(MSRC)へ非公開で報告してください。24時間以内に返信が届きます。何らかの理由で返信が届かない場合は、こちらのメールが確実に届いていることを確認するため、メールでフォローアップしてください。MSRC PGPキーを含む詳細情報は、Security TechCenterに記載されています。
| サブコマンド | フィーチャー | デフォルト | 機能 |
|---|
acquire | (常に) | はい | メモリスナップショットをローカルファイルに保存します(保存後にオプションでアップロード)。 |
convert | convert | はい | AVML / LiME / raw形式間の変換を行います。 |
upload | upload | はい | ローカルファイルをHTTP PUTまたはAzure Block Blobにアップロードします。 |
stream | stream | はい | スナップショットをローカルファイルに書き込まず、直接宛先にストリーミングします。 |