
포렌식 및 침해 대응을 위한 휴대용 Linux RAM 수집 도구로, 선택적 압축 및 원격 스트리밍을 지원하며 LiME 호환 이미지를 캡처합니다.
Linux용 휴대용 휘발성 메모리 획득 도구.
AVML은 Rust로 작성된 X86_64 사용자 영역(userland) 휘발성 메모리 획득 도구로, 정적 바이너리로 배포되도록 설계되었습니다. AVML은 대상 OS 배포판이나 커널을 사전에 알지 못해도 메모리를 획득할 수 있습니다. 대상 시스템에서의 컴파일이나 핑거프린팅이 필요하지 않습니다.
메모리 소스가 명령줄에 지정되지 않은 경우, AVML은 메모리 소스를 순회하여 사용 가능한 소스를 찾습니다.
참고: 커널 기능 kernel_lockdown이 활성화되어 있으면 AVML은 메모리를 획득할 수 없습니다.
avml은 하위 명령어를 포함하는 단일 바이너리입니다. 각 하위 명령어는 Cargo 기능(feature)으로 제어되므로 최소 빌드에는 필요한 기능만 포함됩니다:
획득(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})
대상 호스트에서 생성된 SAS 토큰으로 avml을 실행합니다.
avml acquire --sas-url ${SAS_URL} --delete output.lime
스냅샷을 먼저 로컬 파일로 쓰는 것이 바람직하지 않은 호스트(읽기 전용 루트 파일시스템, 디스크 공간 제한, 포렌식 증거 관리(chain-of-custody) 문제)에서는 stream 하위 명령어를 사용하세요. 이 명령은 메모리 소스를 처음에 한 번 선택하고(acquire의 /dev/stdout 경로와 동일한 우선순위 순서 — /proc/kcore, 그다음 /dev/crash, 마지막으로 /dev/mem; 재정의하려면 --source를 전달) 선택한 대상에 바이트를 순차적으로 기록합니다. 스트리밍 중에는 소스를 변경할 수 없으므로 자동 소스 대체(fallback)는 없습니다.
avml stream blob ${SAS_URL}
--sas-block-size(MiB)는 최소값으로 작동하며, 계산된 최소값이 더 크면 더 큰 값이 적용됩니다.--sas-block-concurrency는 동시 진행 중인 stage_block 호출 수를 제한합니다. 최대 RAM 사용량은 약 (concurrency + 1) * block_size입니다.수집 호스트에서:
nc -l 9000 > snapshot.lime
대상 호스트에서:
avml stream tcp collector.example.com:9000
avml은 한 번 연결하여 스냅샷을 순차적으로 기록합니다. 스트리밍 중 연결이 끊어지면 스냅샷은 중단되며 재개(resume) 기능은 없습니다. 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.json으로 customScript 확장을 실행합니다.az vm extension set -g RESOURCE_GROUP --vm-name VM_NAME --publisher Microsoft.Azure.Extensions -n customScript --settings config.json
보안 호스트에서 S3 사전 서명 URL 또는 GCP 사전 서명 URL을 생성합니다.
대상 호스트에서 생성된 사전 서명 URL로 avml을 실행합니다.
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을 사용하여 Azure 구독에 로그인이 프로젝트는 기여와 제안을 환영합니다. 대부분의 기여는 기여 내용을 사용할 권리를 당사에 부여할 자격이 있으며 실제로 그 권리를 부여한다는 내용의 기여자 라이선스 계약(CLA)에 동의해야 합니다. 자세한 내용은 https://cla.microsoft.com을 방문하세요.
풀 리퀘스트를 제출하면 CLA-bot이 CLA 제공이 필요한지 자동으로 판단하고 적절히 PR을 처리합니다(예: 라벨, 코멘트). 봇이 제공하는 지침을 따르기만 하면 됩니다. 이 작업은 당사의 CLA를 사용하는 모든 저장소에서 한 번만 수행하면 됩니다.
이 프로젝트는 Microsoft 오픈소스 행동 강령을 채택했습니다. 자세한 내용은 행동 강령 FAQ를 참조하거나 추가 질문이나 의견이 있으면 [email protected]으로 문의하세요.
보안 문제와 버그는 이메일을 통해 Microsoft 보안 대응 센터(MSRC) [email protected]로 비공개로 신고해 주세요. 24시간 이내에 응답을 받을 수 있습니다. 어떤 이유로든 응답을 받지 못한 경우, 원래 메시지를 받았는지 확인할 수 있도록 이메일로 후속 연락을 취해 주시기 바랍니다. MSRC PGP 키를 포함한 추가 정보는 Security TechCenter에서 확인할 수 있습니다.
| 하위 명령어 | 기능(feature) | 기본값 | 설명 |
|---|
acquire | (항상) | 예 | 메모리를 로컬 파일로 스냅샷(선택적으로 이후 업로드). |
convert | convert | 예 | AVML / LiME / raw 형식 간 변환. |
upload | upload | 예 | 로컬 파일을 HTTP PUT 또는 Azure Block Blob으로 업로드. |
stream | stream | 예 | 스냅샷을 로컬 파일 없이 대상으로 직접 스트리밍. |