
Ferramenta portátil de aquisição de RAM para Linux, voltada para perícia forense e resposta a incidentes, capturando imagens compatíveis com LiME com compactação opcional e streaming remoto.
Uma ferramenta portátil de aquisição de memória volátil para Linux.
AVML é uma ferramenta de aquisição de memória volátil em espaço de usuário para X86_64 escrita em Rust, projetada para ser implantada como um binário estático. AVML pode ser usado para adquirir memória sem conhecer a distribuição do sistema operacional alvo ou o kernel a priori. Nenhuma compilação ou fingerprinting no alvo é necessário.
Se a fonte de memória não for especificada na linha de comando, o AVML percorrerá as fontes de memória para encontrar uma fonte funcional.
NOTA: Se o recurso do kernel kernel_lockdown estiver habilitado, o AVML não conseguirá adquirir memória.
avml é um único binário com subcomandos. Cada subcomando é controlado por
um recurso Cargo, para que uma compilação mínima inclua apenas a capacidade que você precisa:
Compile um binário mínimo somente de aquisição com cargo build --release --no-default-features.
No host de destino:
avml acquire --compress output.lime.compressed
No host de destino:
avml acquire output.lime
Em um host seguro com credenciais do az cli, gere uma 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})
No host de destino, execute o avml com o token SAS gerado.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Para hosts onde gravar o snapshot em um arquivo local primeiro é indesejável
(raiz somente leitura, disco limitado, preocupações com cadeia de custódia forense), use
o subcomando stream. Ele escolhe a fonte de memória uma vez no início (mesma
ordem de preferência do caminho /dev/stdout do acquire — /proc/kcore, depois
/dev/crash, depois /dev/mem; use --source para substituir) e grava
os bytes sequencialmente no destino escolhido. A fonte não pode ser
alterada no meio da transmissão, portanto não há fallback automático de fonte.
avml stream blob ${SAS_URL}
--sas-block-size (MiB) atua como
um piso; se o mínimo derivado for maior, o valor maior vence.--sas-block-concurrency limita o número de chamadas stage_block
em andamento. O pico de RAM é de aproximadamente (concurrency + 1) * block_size.No host coletor:
nc -l 9000 > snapshot.lime
No host de destino:
avml stream tcp collector.example.com:9000
O avml conecta uma vez e grava o snapshot sequencialmente. Se a conexão cair no meio da transmissão, o snapshot é abortado; não há retomada. Sem TLS — utilize um túnel SSH ou stunnel para confidencialidade e integridade, se necessário.
avml upload put ./output.lime ${URL} # HTTP PUT
avml upload blob ./output.lime ${SAS_URL} # Azure Block Blob
Em um host seguro com credenciais do az cli, faça o seguinte:
config.json contendo as seguintes informações:{
"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
Em um host seguro, gere uma URL pré-assinada do S3 ou gere uma URL pré-assinada do GCP.
No host de destino, execute o avml com a URL pré-assinada gerada.
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)
Execute avml <COMMAND> --help para obter opções por 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
Os scripts de teste criarão, usarão e limparão vários grupos de recursos, máquinas virtuais e uma conta de armazenamento.
az loginEste projeto recebe contribuições e sugestões. A maioria das contribuições exige que você concorde com um Contrato de Licença de Contribuidor (CLA) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.
Ao enviar um pull request, um bot de CLA determinará automaticamente se você precisa fornecer um CLA e decorará o PR adequadamente (por exemplo, etiqueta, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Código Aberto da Microsoft. Para mais informações, consulte as Perguntas frequentes sobre o Código de Conduta ou entre em contato com [email protected] com quaisquer perguntas ou comentários adicionais.
Problemas de segurança e bugs devem ser relatados em particular, por e-mail, ao Microsoft Security Response Center (MSRC) em [email protected]. Você deve receber uma resposta em até 24 horas. Se por algum motivo não receber, envie um e-mail de acompanhamento para garantir que recebemos sua mensagem original. Mais informações, incluindo a chave PGP do MSRC, podem ser encontradas no Security TechCenter.
| Subcomando | Recurso | Padrão | O que faz |
|---|
acquire | (sempre) | sim | Captura um snapshot da memória para um arquivo local (upload opcional depois). |
convert | convert | sim | Converte entre formatos AVML / LiME / bruto. |
upload | upload | sim | Envia um arquivo local via HTTP PUT ou para o Azure Block Blob. |
stream | stream | sim | Transmite um snapshot diretamente para um destino, sem arquivo local. |