
Herramienta portátil de adquisición de RAM de Linux para análisis forense y respuesta a incidentes, que captura imágenes compatibles con LiME con compresión opcional y transmisión remota.
Una herramienta portátil de adquisición de memoria volátil para Linux.
AVML es una herramienta de adquisición de memoria volátil en espacio de usuario para X86_64 escrita en Rust, pensada para ser desplegada como un binario estático. AVML puede usarse para adquirir memoria sin conocer de antemano la distribución del SO objetivo ni el kernel. No se necesita compilación ni fingerprinting en el objetivo.
Si la fuente de memoria no se especifica en la línea de comandos, AVML iterará sobre las fuentes de memoria para encontrar una fuente funcional.
NOTA: Si la característica del kernel kernel_lockdown está habilitada, AVML no podrá adquirir memoria.
La matriz de pruebas de VM de Azure se define en eng/images.txt y actualmente cubre:
avml es un único binario con subcomandos. Cada subcomando está controlado por
una característica de Cargo, de modo que una compilación mínima solo incluye la capacidad que necesitas:
| Subcomando | Característica | Predeterminado | Qué hace |
|---|---|---|---|
acquire | (siempre) | sí | Captura la memoria en un archivo local (con subida opcional después). |
convert | convert | sí | Convierte entre formatos AVML / LiME / raw. |
upload | upload | sí | Sube un archivo local mediante HTTP PUT o a Azure Block Blob. |
stream | stream | sí | Transmite una captura directamente a un destino, sin archivo local. |
Compila un binario mínimo solo para adquisición con cargo build --release --no-default-features.
En el host objetivo:
avml acquire --compress output.lime.compressed
En el host objetivo:
avml acquire output.lime
En un host seguro con credenciales de az cli, genera una URL de SAS.
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})
En el host objetivo, ejecuta avml con el token SAS generado.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Para hosts en los que no es deseable escribir primero la captura en un archivo local
(raíz de solo lectura, disco limitado, preocupaciones de cadena de custodia forense), usa
el subcomando stream. Selecciona la fuente de memoria una vez al principio (mismo
orden de preferencia que la ruta /dev/stdout de acquire — /proc/kcore, luego
/dev/crash, luego /dev/mem; pasa --source para sobrescribir) y escribe
los bytes secuencialmente en el destino elegido. La fuente no puede
cambiarse a mitad de la transmisión, por lo que no hay respaldo automático de fuente.
avml stream blob ${SAS_URL}
--sas-block-size (MiB) actúa como
un mínimo; si el mínimo derivado es mayor, prevalece el valor mayor.--sas-block-concurrency limita el número de llamadas stage_block en vuelo.
El pico de RAM es aproximadamente (concurrency + 1) * block_size.En el host recolector:
nc -l 9000 > snapshot.lime
En el host objetivo:
avml stream tcp collector.example.com:9000
avml se conecta una vez y escribe la captura secuencialmente. Si la conexión se cae a mitad de la transmisión, la captura se aborta; no hay reanudación. Sin TLS — combínalo con un túnel SSH o stunnel para confidencialidad e integridad si es necesario.
avml upload put ./output.lime ${URL} # HTTP PUT
avml upload blob ./output.lime ${SAS_URL} # Azure Block Blob
En un host seguro con credenciales de az cli, haz lo siguiente:
config.json con la siguiente información:{
"commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
"fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
config.json especificadoaz vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
En un host seguro, genera una URL prefirmada de S3 o genera una URL prefirmada de GCP.
En el host objetivo, ejecuta avml con la URL prefirmada generada.
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)
Ejecuta avml <COMMAND> --help para ver las opciones de cada comando.
# 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