
Портативный инструмент сбора оперативной памяти Linux для криминалистики и реагирования на инциденты, снимающий совместимые с LiME образы с опциональным сжатием и удалённой потоковой передачей.
Портативный инструмент сбора энергозависимой памяти для Linux.
AVML — это инструмент сбора энергозависимой памяти в пользовательском пространстве для архитектуры X86_64, написанный на Rust и предназначенный для развёртывания в виде статического бинарного файла. AVML позволяет собирать память без предварительного знания дистрибутива целевой ОС или ядра. Не требуется ни компиляция на целевой машине, ни fingerprinting.
Если источник памяти не указан в командной строке, AVML перебирает источники памяти, пока не найдёт работоспособный.
ПРИМЕЧАНИЕ. Если включена функция ядра kernel_lockdown, AVML не сможет собрать память.
avml — это один бинарный файл с подкомандами. Каждая подкоманда включается фичей Cargo, поэтому минимальная сборка содержит только необходимые вам возможности:
Соберите минимальный бинарный файл только с подкомандой acquire: 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 (МиБ) действует как нижняя граница; если вычисленный минимум оказывается больше, используется большее значение.--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
На защищённой машине создайте предварительно подписанный URL S3 или предварительно подписанный URL GCP.
На целевой машине выполните avml с полученным предварительно подписанным 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
Тестовые скрипты создают, используют и удаляют несколько групп ресурсов, виртуальных машин и учётную запись хранения.
az loginЭтот проект приветствует вклад и предложения. Для большинства вкладов требуется согласие с лицензионным соглашением участника (CLA), подтверждающее, что вы имеете право и действительно предоставляете нам права на использование вашего вклада. Подробнее: https://cla.microsoft.com.
Когда вы отправляете pull request, CLA-бот автоматически определит, нужно ли вам оформить CLA, и соответствующим образом оформит PR (например, добавит метку или комментарий). Просто следуйте инструкциям бота. Вам нужно будет сделать это только один раз во всех репозиториях, использующих наше CLA.
Этот проект принял Правила поведения для проектов с открытым исходным кодом Microsoft. Дополнительную информацию см. в FAQ по Правилам поведения или обращайтесь по адресу [email protected] с любыми дополнительными вопросами или комментариями.
О проблемах безопасности и ошибках следует сообщать конфиденциально по электронной почте в Центр реагирования на угрозы безопасности Microsoft (MSRC) по адресу [email protected]. Вы должны получить ответ в течение 24 часов. Если по какой-то причине этого не произошло, отправьте повторное письмо, чтобы убедиться, что мы получили ваше исходное сообщение. Дополнительная информация, включая ключ MSRC PGP, доступна в Security TechCenter.
| Подкоманда | Фича | По умолчанию | Назначение |
|---|
acquire | (всегда) | да | Создаёт снимок памяти в локальном файле (опционально с последующей загрузкой). |
convert | convert | да | Конвертирует между форматами AVML / LiME / raw. |
upload | upload | да | Загружает локальный файл через HTTP PUT или в Azure Block Blob. |
stream | stream | да | Передаёт снимок напрямую в пункт назначения, без локального файла. |