
أداة محمولة لالتقاط ذاكرة الوصول العشوائي (RAM) في لينكس لأغراض التحليل الجنائي الرقمي والاستجابة للحوادث، تلتقط صورًا متوافقة مع LiME مع دعم الضغط الاختياري والبث عن بُعد.
أداة محمولة للحصول على الذاكرة المتطايرة لنظام Linux.
AVML هي أداة للحصول على الذاكرة المتطايرة في وضع المستخدم لمعمارية X86_64 مكتوبة بلغة Rust، ومصممة للنشر كملف ثنائي ثابت. يمكن استخدام AVML للحصول على الذاكرة دون معرفة توزيعة نظام التشغيل الهدف أو النواة مسبقًا. لا حاجة إلى ترجمة أو تحديد بصمة على الهدف.
إذا لم يتم تحديد مصدر الذاكرة على سطر الأوامر، سيتنقل AVML عبر مصادر الذاكرة للعثور على مصدر فعّال.
ملاحظة: إذا كانت ميزة النواة kernel_lockdown مفعّلة، فلن يتمكن AVML من الحصول على الذاكرة.
مصفوفة اختبار Azure VM معرّفة في eng/images.txt وتغطي حاليًا:
avml هو ملف ثنائي واحد بأوامر فرعية. كل أمر فرعي محكوم بميزة
Cargo بحيث يتضمن البناء الأدنى فقط القدرة التي تحتاجها:
| الأمر الفرعي | الميزة | افتراضي | ما يفعله |
|---|---|---|---|
acquire | (دائمًا) | نعم | أخذ لقطة للذاكرة إلى ملف محلي (مع رفع اختياري بعد ذلك). |
convert | convert | نعم | التحويل بين تنسيقات AVML / LiME / الخام. |
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.json المحددaz 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
ستنشئ نصوص الاختبار وتستخدم وتنظف عددًا من مجموعات الموارد والأجهزة الافتراضية وحساب تخزين.
az loginيرحب هذا المشروع بالمساهمات والاقتراحات. تتطلب معظم المساهمات منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تُقر بأن لديك الحق في، وتمنحنا فعليًا، حقوق استخدام مساهمتك. للتفاصيل، زُر https://cla.microsoft.com.
عند تقديم طلب سحب، سيحدد روبوت CLA تلقائيًا ما إذا كنت بحاجة إلى تقديم CLA ويزيّن طلب السحب بشكل مناسب (مثل التسمية والتعليق). ما عليك سوى اتباع الإرشادات التي يقدمها الروبوت. ستحتاج إلى القيام بذلك مرة واحدة فقط عبر جميع المستودعات التي تستخدم CLA الخاصة بنا.