
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 el espacio de usuario (userland) para X86_64, escrita en Rust, pensada para desplegarse como un binario estático. AVML se puede utilizar para adquirir memoria sin conocer de antemano la distribución del sistema operativo objetivo ni el kernel. No se necesita compilación en el objetivo ni identificación del sistema (fingerprinting).
Si no se especifica la fuente de memoria en la línea de comandos, AVML recorrerá 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.
avml es un único binario con subcomandos. Cada subcomando está controlado por una feature de Cargo, de modo que una compilación mínima solo incluye la funcionalidad que necesitas:
Compila un binario mínimo solo de adquisición con cargo build --release --no-default-features.
En el host de destino:
avml acquire --compress output.lime.compressed
En el host de destino:
avml acquire output.lime
En un host seguro con credenciales de az cli, genera una URL 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 de destino, ejecuta avml con el token SAS generado.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Para hosts donde escribir primero la captura en un archivo local no es deseable (raíz de solo lectura, disco limitado, problemas de cadena de custodia forense), usa el subcomando stream. Este elige la fuente de memoria una vez al inicio (el mismo orden de preferencia que la ruta /dev/stdout de acquire: primero /proc/kcore, luego /dev/crash, después /dev/mem; pasa --source para anularlo) y escribe los bytes secuencialmente en el destino elegido. La fuente no se puede cambiar 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, gana el valor mayor.--sas-block-concurrency limita el número de llamadas stage_block en curso. El pico de RAM es aproximadamente (concurrency + 1) * block_size.En el host recolector:
nc -l 9000 > snapshot.lime
En el host de destino:
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. No hay 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 pre-firmada de S3 o una URL pre-firmada de GCP.
En el host de destino, ejecuta avml con la URL pre-firmada 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
Los scripts de prueba crearán, usarán y limpiarán varios grupos de recursos, máquinas virtuales y una cuenta de almacenamiento.
az loginEste proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que aceptes un Contrato de Licencia de Colaborador (CLA) que declara que tienes el derecho de otorgarnos los derechos para usar tu contribución, y de hecho lo haces. Para más detalles, visita https://cla.microsoft.com.
Cuando envías una solicitud de extracción (pull request), un bot de CLA determinará automáticamente si necesitas proporcionar un CLA y decorará el PR adecuadamente (por ejemplo, con etiquetas o comentarios). Simplemente sigue las instrucciones del bot. Solo tendrás que hacerlo una vez en todos los repositorios que usen nuestro CLA.
Este proyecto ha adoptado el Código de Conducta de Código Abierto de Microsoft. Para obtener más información, consulta las Preguntas frecuentes del Código de Conducta o contacta a [email protected] si tienes preguntas o comentarios adicionales.
Los problemas de seguridad y errores deben informarse de forma privada, por correo electrónico, al Microsoft Security Response Center (MSRC) en [email protected]. Deberías recibir una respuesta dentro de 24 horas. Si por alguna razón no la recibes, envía un correo de seguimiento para asegurarte de que hayamos recibido tu mensaje original. Más información, incluida la clave PGP del MSRC, se puede encontrar en el Security TechCenter.
| Subcomando | Feature | Predeterminado | Qué hace |
|---|
acquire | (siempre) | sí | Captura la memoria en un archivo local (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. |