
Tragbares Linux-Tool zur RAM-Erfassung für Forensik und Incident Response, das LiME-kompatible Images mit optionaler Komprimierung und Remote-Streaming erfasst.
Ein portables Tool zur Erfassung von flüchtigem Speicher für Linux.
AVML ist ein Tool zur Erfassung von flüchtigem Speicher im X86_64-Userland, geschrieben in Rust, das für die Bereitstellung als statische Binärdatei vorgesehen ist. AVML kann zum Erfassen von Speicher verwendet werden, ohne die Ziel-OS-Distribution oder den Kernel a priori zu kennen. Es ist keine Kompilierung auf dem Zielsystem oder Fingerprinting erforderlich.
Wenn die Speicherquelle nicht in der Befehlszeile angegeben wird, iteriert AVML über die Speicherquellen, um eine funktionierende Quelle zu finden.
HINWEIS: Wenn das Kernel-Feature kernel_lockdown aktiviert ist, kann AVML keinen Speicher erfassen.
avml ist eine einzelne Binärdatei mit Unterbefehlen. Jeder Unterbefehl wird durch ein Cargo-Feature abgesichert, sodass ein minimaler Build nur die benötigte Funktionalität enthält:
| Unterbefehl | Feature | Default | Funktion |
|---|---|---|---|
acquire | (immer) | yes | Speicher-Snapshot in einer lokalen Datei sichern (optional anschließender Upload). |
convert | convert | yes | Zwischen AVML-, LiME- und Raw-Formaten konvertieren. |
upload | upload | yes | Eine lokale Datei per HTTP PUT oder an Azure Block Blob hochladen. |
stream | stream | yes | Snapshot direkt zu einem Ziel streamen, ohne lokale Datei. |
Erstellen Sie eine minimale Nur-Acquire-Binärdatei mit cargo build --release --no-default-features.
Auf dem Zielhost:
avml acquire --compress output.lime.compressed
Auf dem Zielhost:
avml acquire output.lime
Generieren Sie auf einem sicheren Host mit az cli-Anmeldedaten eine 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})
Führen Sie auf dem Zielhost avml mit dem generierten SAS-Token aus.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Für Hosts, bei denen das vorherige Schreiben des Snapshots in eine lokale Datei unerwünscht ist (schreibgeschütztes Root-Dateisystem, begrenzter Speicherplatz, Bedenken bezüglich der forensischen Beweiskette), verwenden Sie den Unterbefehl stream. Dieser wählt die Speicherquelle einmal zu Beginn aus (gleiche Präferenzreihenfolge wie der /dev/stdout-Pfad von acquire — /proc/kcore, dann /dev/crash, dann /dev/mem; --source zum Überschreiben) und schreibt die Bytes sequenziell an das gewählte Ziel. Die Quelle kann mitten im Stream nicht gewechselt werden, daher gibt es keinen automatischen Fallback auf eine andere Quelle.
--sas-block-size (MiB) fungiert als Untergrenze; wenn das abgeleitete Minimum größer ist, gewinnt der größere Wert.--sas-block-concurrency begrenzt die Anzahl der gleichzeitig laufenden stage_block-Aufrufe. Der RAM-Spitzenwert beträgt ungefähr (concurrency + 1) * block_size.Auf dem Collector-Host:
nc -l 9000 > snapshot.lime
Auf dem Zielhost:
avml stream tcp collector.example.com:9000
avml verbindet sich einmalig und schreibt den Snapshot sequenziell. Wenn die Verbindung mitten im Stream abbricht, wird der Snapshot abgebrochen; ein Fortsetzen ist nicht möglich. Kein TLS — kombinieren Sie es bei Bedarf mit einem SSH-Tunnel oder stunnel für Vertraulichkeit und Integrität.
avml upload put ./output.lime ${URL} # HTTP PUT
avml upload blob ./output.lime ${SAS_URL} # Azure Block Blob
Führen Sie auf einem sicheren Host mit az cli-Anmeldedaten Folgendes aus:
config.json mit den folgenden Informationen:{
"commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
"fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
config.json ausaz vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
Generieren Sie auf einem sicheren Host eine S3-vorsignierte URL oder eine GCP-vorsignierte URL.
Führen Sie auf dem Zielhost avml mit der generierten vorsignierten URL aus.
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)
Führen Sie avml <COMMAND> --help aus, um die Optionen der jeweiligen Befehle anzuzeigen.
# 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