
Strumento portatile per l'acquisizione della RAM su Linux per attività forensi e risposta agli incidenti, in grado di catturare immagini compatibili con LiME con compressione opzionale e streaming remoto.
Uno strumento portabile per l'acquisizione della memoria volatile per Linux.
AVML è uno strumento di acquisizione della memoria volatile in userland per X86_64 scritto in Rust, pensato per essere distribuito come binario statico. AVML può essere utilizzato per acquisire la memoria senza conoscere a priori la distribuzione del sistema operativo target o il kernel. Non è necessaria alcuna compilazione sul target né alcun fingerprinting.
Se la sorgente di memoria non viene specificata dalla riga di comando, AVML scorre le sorgenti di memoria per trovarne una funzionante.
NOTA: se la funzionalità del kernel kernel_lockdown è abilitata, AVML non sarà in grado di acquisire la memoria.
avml è un singolo binario con sottocomandi. Ogni sottocomando è controllato da una feature Cargo, così una build minimale include solo la funzionalità di cui hai bisogno:
Compila un binario minimale di sola acquisizione con cargo build --release --no-default-features.
Sull'host di destinazione:
avml acquire --compress output.lime.compressed
Sull'host di destinazione:
avml acquire output.lime
Su un host sicuro con le credenziali di az cli, genera un 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})
Sull'host di destinazione, esegui avml con il token SAS generato.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Per gli host in cui scrivere prima l'istantanea in un file locale è indesiderabile (root in sola lettura, disco limitato, preoccupazioni forensi sulla catena di custodia), usa il sottocomando stream. Seleziona la sorgente di memoria una sola volta all'inizio (stesso ordine di preferenza del percorso /dev/stdout di acquire — /proc/kcore, poi /dev/crash, poi /dev/mem; passa --source per sovrascriverlo) e scrive i byte in sequenza verso la destinazione scelta. La sorgente non può essere cambiata a metà trasmissione, quindi non esiste un fallback automatico della sorgente.
avml stream blob ${SAS_URL}
--sas-block-size (MiB) funge da limite minimo; se il minimo derivato è maggiore, prevale il valore più grande.--sas-block-concurrency limita il numero di chiamate stage_block in corso. Il picco di RAM è approssimativamente (concurrency + 1) * block_size.Sull'host di raccolta:
nc -l 9000 > snapshot.lime
Sull'host di destinazione:
avml stream tcp collector.example.com:9000
avml si connette una sola volta e scrive l'istantanea in sequenza. Se la connessione cade a metà trasmissione, l'istantanea viene interrotta; non è possibile riprenderla. Nessun TLS — abbinalo a un tunnel SSH o a stunnel per riservatezza e integrità, se necessario.
avml upload put ./output.lime ${URL} # HTTP PUT
avml upload blob ./output.lime ${SAS_URL} # Azure Block Blob
Su un host sicuro con le credenziali di az cli, procedi come segue:
config.json contenente le seguenti informazioni:{
"commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
"fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
config.json specificatoaz vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
Su un host sicuro, genera un URL pre-firmato S3 oppure genera un URL pre-firmato GCP.
Sull'host di destinazione, esegui avml con l'URL pre-firmato generato.
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)
Esegui avml <COMMAND> --help per le opzioni di ciascun 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
Gli script di test creeranno, utilizzeranno e ripuliranno un certo numero di gruppi di risorse, macchine virtuali e un account di archiviazione.
az loginQuesto progetto accoglie contributi e suggerimenti. La maggior parte dei contributi richiede di accettare un Contributor License Agreement (CLA) che dichiara che hai il diritto di concederci, e di fatto ci concedi, i diritti di utilizzo del tuo contributo. Per i dettagli, visita https://cla.microsoft.com.
Quando invii una pull request, un CLA-bot determinerà automaticamente se devi fornire un CLA e decorerà la PR di conseguenza (ad es. etichetta, commento). Segui semplicemente le istruzioni fornite dal bot. Dovrai farlo solo una volta in tutti i repository che utilizzano il nostro CLA.
Questo progetto ha adottato il Microsoft Open Source Code of Conduct. Per maggiori informazioni, consulta le FAQ del Code of Conduct oppure contatta [email protected] per qualsiasi domanda o commento aggiuntivo.
I problemi di sicurezza e i bug devono essere segnalati privatamente, via email, al Microsoft Security Response Center (MSRC) all'indirizzo [email protected]. Dovresti ricevere una risposta entro 24 ore. Se per qualche motivo non la ricevi, contattaci via email per assicurarti che abbiamo ricevuto il tuo messaggio originale. Ulteriori informazioni, inclusa la chiave PGP del MSRC, sono disponibili nel Security TechCenter.
| Sottocomando | Feature | Predefinito | Descrizione |
|---|
acquire | (always) | sì | Cattura un'istantanea della memoria in un file locale (caricamento opzionale successivo). |
convert | convert | sì | Converte tra i formati AVML / LiME / raw. |
upload | upload | sì | Carica un file locale tramite HTTP PUT o su Azure Block Blob. |
stream | stream | sì | Trasmette un'istantanea direttamente a una destinazione, senza file locale. |