
Портативный инструмент сбора оперативной памяти Linux для криминалистики и реагирования на инциденты, снимающий совместимые с LiME образы с опциональным сжатием и удалённой потоковой передачей.
Портативный инструмент для сбора энергозависимой памяти в Linux.
AVML — это инструмент для сбора энергозависимой памяти в пользовательском пространстве для X86_64, написанный на Rust и предназначенный для развёртывания в виде статического бинарного файла. AVML можно использовать для сбора памяти без предварительного знания дистрибутива или ядра целевой ОС. Компиляция или фингерпринтинг на целевой системе не требуются.
Если источник памяти не указан в командной строке, AVML перебирает источники памяти, чтобы найти рабочий.
ПРИМЕЧАНИЕ: Если включена функция ядра kernel_lockdown, AVML не сможет собрать память.
Матрица тестирования виртуальных машин Azure определена в eng/images.txt и в настоящее время охватывает:
avml — это единый бинарный файл с подкомандами. Каждая подкоманда управляется
функцией Cargo, поэтому минимальная сборка включает только нужную вам возможность:
| Подкоманда | Функция | По умолчанию | Что делает |
|---|---|---|---|
acquire | (всегда) | да | Создаёт снимок памяти в локальный файл (с опциональной загрузкой после). |
convert | convert | да | Конвертирует между форматами AVML / LiME / raw. |
upload | upload | да | Загружает локальный файл через HTTP PUT или в Azure Block Blob. |
stream | stream | да | Передаёт снимок напрямую в место назначения, без локального файла. |
Соберите минимальный бинарный файл только для сбора с помощью cargo build --release --no-default-features.
На целевом хосте:
avml acquire --compress output.lime.compressed
На целевом хосте:
avml acquire output.lime
На защищённом хосте с учётными данными az cli сгенерируйте SAS URL.
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})
На целевом хосте выполните avml с сгенерированным SAS-токеном.
avml acquire --sas-url ${SAS_URL} --delete output.lime
Для хостов, где предварительная запись снимка в локальный файл нежелательна
(корень только для чтения, ограниченное дисковое пространство, вопросы сохранности цепочки доказательств),
используйте подкоманду stream. Она выбирает источник памяти один раз заранее (тот же
порядок предпочтения, что и у пути /dev/stdout в acquire — /proc/kcore, затем
/dev/crash, затем /dev/mem; передайте --source для переопределения) и записывает
байты последовательно в выбранное место назначения. Источник нельзя
изменить в середине потока, поэтому автоматического переключения на резервный источник нет.
avml stream blob ${SAS_URL}
--sas-block-size (MiB) действует как
нижняя граница; если вычисленный минимум больше, побеждает большее значение.--sas-block-concurrency ограничивает количество одновременных вызовов stage_block.
Пиковое потребление ОЗУ составляет примерно (concurrency + 1) * block_size.На хосте-коллекторе:
nc -l 9000 > snapshot.lime
На целевом хосте:
avml stream tcp collector.example.com:9000
avml подключается один раз и записывает снимок последовательно. Если соединение обрывается в середине потока, снимок прерывается; возобновления нет. TLS отсутствует — при необходимости используйте SSH-туннель или stunnel для конфиденциальности и целостности.
avml upload put ./output.lime ${URL} # HTTP PUT
avml upload blob ./output.lime ${SAS_URL} # Azure Block Blob
На защищённом хосте с учётными данными az cli выполните следующее:
config.json, содержащий следующую информацию:{
"commandToExecute": "./avml acquire --compress --sas-url <GENERATED_SAS_URL> --delete",
"fileUris": ["https://FULL.URL.TO.AVML.example.com/avml"]
}
config.jsonaz vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
На защищённом хосте сгенерируйте S3 pre-signed URL или сгенерируйте GCP pre-signed URL.
На целевом хосте выполните avml со сгенерированным pre-signed URL.
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)
Запустите avml <COMMAND> --help для получения параметров конкретной команды.
# 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
Тестовые скрипты создадут, используют и удалят ряд групп ресурсов, виртуальных машин и учётную запись хранилища.