
Outil portable d'acquisition de la RAM sous Linux pour la forensique et la réponse aux incidents, capturant des images compatibles LiME avec compression optionnelle et streaming à distance.
Un outil portable d'acquisition de mémoire volatile pour Linux.
AVML est un outil X86_64 d'acquisition de mémoire volatile en espace utilisateur écrit en Rust, conçu pour être déployé en tant que binaire statique. AVML peut être utilisé pour acquérir la mémoire sans connaître au préalable la distribution du système d'exploitation cible ni le noyau. Aucune compilation sur la cible ni prise d'empreintes n'est nécessaire.
Si la source de mémoire n'est pas spécifiée en ligne de commande, AVML parcourt les sources de mémoire pour trouver une source fonctionnelle.
REMARQUE : Si la fonctionnalité du noyau kernel_lockdown est activée, AVML ne pourra pas acquérir la mémoire.
avml est un binaire unique avec des sous-commandes. Chaque sous-commande est conditionnée par une fonctionnalité Cargo, de sorte qu'une compilation minimale n'inclut que la capacité dont vous avez besoin :
Compilez un binaire minimal d'acquisition seule avec cargo build --release --no-default-features.
Sur l'hôte cible :
avml acquire --compress output.lime.compressed
Sur l'hôte cible :
avml acquire output.lime
Sur un hôte sécurisé avec les informations d'identification az cli, générez une 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})
Sur l'hôte cible, exécutez avml avec le jeton SAS généré.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Pour les hôtes où il n'est pas souhaitable d'écrire d'abord l'instantané dans un fichier local (racine en lecture seule, espace disque limité, considérations de chaîne de possession), utilisez la sous-commande stream. Elle sélectionne la source de mémoire une seule fois au départ (même ordre de préférence que le chemin /dev/stdout de acquire — /proc/kcore, puis /dev/crash, puis /dev/mem ; passez --source pour remplacer) et écrit les octets séquentiellement vers la destination choisie. La source ne peut pas être modifiée en cours de diffusion, il n'y a donc pas de repli automatique de source.
avml stream blob ${SAS_URL}
--sas-block-size (MiB) agit comme un plancher ; si le minimum dérivé est plus grand, la valeur la plus grande l'emporte.--sas-block-concurrency plafonne le nombre d'appels stage_block en vol. La RAM maximale est d'environ (concurrency + 1) * block_size.Sur l'hôte collecteur :
nc -l 9000 > snapshot.lime
Sur l'hôte cible :
avml stream tcp collector.example.com:9000
avml se connecte une fois et écrit l'instantané séquentiellement. Si la connexion est interrompue en cours de diffusion, l'instantané est annulé ; il n'y a pas de reprise. Pas de TLS — associez-le à un tunnel SSH ou à stunnel pour la confidentialité et l'intégrité si nécessaire.
avml upload put ./output.lime ${URL} # HTTP PUT
avml upload blob ./output.lime ${SAS_URL} # Azure Block Blob
Sur un hôte sécurisé avec les informations d'identification az cli, procédez comme suit :
config.json contenant les informations suivantes :{
"commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
"fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
config.json spécifiéaz vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
Sur un hôte sécurisé, générez une URL pré-signée S3 ou une URL pré-signée GCP.
Sur l'hôte cible, exécutez avml avec l'URL pré-signée générée.
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)
Exécutez avml <COMMAND> --help pour les options de chaque commande.
# 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
Les scripts de test créeront, utiliseront et nettoieront des groupes de ressources, des machines virtuelles et un compte de stockage.
az loginCe projet accueille favorablement les contributions et suggestions. La plupart des contributions nécessitent que vous acceptiez un contrat de licence de contributeur (CLA) déclarant que vous avez le droit d'accorder, et que vous accordez effectivement, les droits d'utilisation de votre contribution. Pour plus de détails, consultez https://cla.microsoft.com.
Lorsque vous soumettez une pull request, un CLA-bot détermine automatiquement si vous devez fournir un CLA et décore la PR en conséquence (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez à le faire qu'une seule fois dans tous les dépôts utilisant notre CLA.
Ce projet a adopté le Code de conduite open source de Microsoft. Pour plus d'informations, consultez la FAQ sur le Code de conduite ou contactez [email protected] pour toute question ou tout commentaire supplémentaire.
Les problèmes et bogues de sécurité doivent être signalés en privé, par courrier électronique, au Microsoft Security Response Center (MSRC) à l'adresse [email protected]. Vous devriez recevoir une réponse sous 24 heures. Si, pour une raison quelconque, ce n'est pas le cas, veuillez relancer par courrier électronique pour vous assurer que nous avons bien reçu votre message initial. De plus amples informations, y compris la clé PGP du MSRC, sont disponibles dans le Security TechCenter.
| Sous-commande | Fonctionnalité | Défaut | Description |
|---|
acquire | (always) | oui | Capture un instantané de la mémoire dans un fichier local (envoi facultatif ensuite). |
convert | convert | oui | Convertit entre les formats AVML / LiME / brut. |
upload | upload | oui | Téléverse un fichier local via HTTP PUT ou vers Azure Block Blob. |
stream | stream | oui | Diffuse un instantané directement vers une destination, sans fichier local. |