
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 flüchtiger Speicherinhalte für Linux.
AVML ist ein X86_64-Userspace-Tool zur Erfassung flüchtiger Speicherinhalte, geschrieben in Rust, das als statische Binärdatei bereitgestellt werden soll. AVML kann verwendet werden, um Speicherinhalte zu erfassen, ohne die Ziel-OS-Distribution oder den Kernel im Voraus zu kennen. Es ist keine Kompilierung oder Fingerprinting auf dem Zielsystem erforderlich.
Wenn die Speicherquelle nicht auf der Kommandozeile angegeben wird, iteriert AVML über die Speicherquellen, um eine funktionierende Quelle zu finden.
HINWEIS: Wenn die Kernel-Funktion kernel_lockdown aktiviert ist, kann AVML keinen Speicher erfassen.
Die Azure-VM-Testmatrix ist in eng/images.txt definiert und umfasst derzeit:
avml ist eine einzelne Binärdatei mit Unterbefehlen. Jeder Unterbefehl ist durch
ein Cargo-Feature abgesichert, sodass ein minimaler Build nur die benötigte Funktionalität enthält:
| Unterbefehl | Feature | Standard | Was er tut |
|---|---|---|---|
acquire | (immer) | ja | Speicher in eine lokale Datei sichern (optional anschließend hochladen). |
convert | convert | ja | Zwischen AVML- / LiME- / Rohformaten konvertieren. |
upload | upload | ja | Eine lokale Datei per HTTP PUT oder in Azure Block Blob hochladen. |
stream | stream | ja | Einen Snapshot direkt an ein 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
Auf einem sicheren Host mit az cli-Anmeldeinformationen eine SAS-URL generieren.
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})
Auf dem Zielhost avml mit dem generierten SAS-Token ausführen.
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, begrenzter Speicherplatz, forensische
Chain-of-Custody-Bedenken), verwenden Sie den Unterbefehl stream. Er wählt die
Speicherquelle einmalig im Voraus aus (gleiche Präferenzreihenfolge wie der
/dev/stdout-Pfad von acquire — /proc/kcore, dann /dev/crash, dann
/dev/mem; übergeben Sie --source, um dies zu überschreiben) und schreibt
Bytes sequenziell an das gewählte Ziel. Die Quelle kann nicht mitten im Stream
geändert werden, daher gibt es keinen automatischen Quell-Fallback.
avml stream blob ${SAS_URL}
--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 gleichzeitig laufender stage_block-
Aufrufe. Der Spitzen-RAM-Verbrauch 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 einmal und schreibt den Snapshot sequenziell. Wenn die Verbindung mitten im Stream abbricht, wird der Snapshot abgebrochen; es gibt keine Wiederaufnahme. 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-Anmeldeinformationen 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 pro Befehl 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