
أداة محمولة لالتقاط ذاكرة الوصول العشوائي (RAM) في لينكس لأغراض التحليل الجنائي الرقمي والاستجابة للحوادث، تلتقط صورًا متوافقة مع LiME مع دعم الضغط الاختياري والبث عن بُعد.
أداة محمولة لالتقاط الذاكرة المتطايرة لنظام Linux.
AVML هي أداة لالتقاط الذاكرة المتطايرة من فضاء المستخدم (userland) مُصممة لبنية X86_64، مكتوبة بلغة Rust، والغرض منها أن تُنشر كملف ثنائي ثابت (static binary). يمكن استخدام AVML لالتقاط الذاكرة دون معرفة توزيعة نظام التشغيل الهدف أو نواتها (kernel) مسبقًا. لا حاجة إلى ترجمة على الجهاز المستهدف أو بصمته (fingerprinting).
إذا لم يُحدد مصدر الذاكرة في سطر الأوامر، سيتنقل AVML عبر مصادر الذاكرة ليعثر على مصدر يعمل.
ملاحظة: إذا كانت خاصية kernel 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 (MiB) كحد
أدنى؛ إذا كان الحد الأدنى المشتق أكبر، فالقيمة الأكبر هي التي تنتصر.--sas-block-concurrency من عدد استدعاءات stage_block
قيد التنفيذ. يبلغ الحد الأقصى للذاكرة العشوائية (RAM) تقريبًا (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 المُولَّد.
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 وسيزين طلب السحب وفقًا لذلك (مثل التصنيف والتعليق). ما عليك سوى اتباع التعليمات التي يقدمها الروبوت. ستحتاج إلى القيام بذلك مرة واحدة فقط عبر جميع المستودعات التي تستخدم اتفاقية CLA الخاصة بنا.
اعتمد هذا المشروع مدونة قواعد السلوك مفتوحة المصدر من Microsoft. لمزيد من المعلومات، راجع الأسئلة الشائعة حول مدونة قواعد السلوك أو تواصل مع [email protected] لأي أسئلة أو تعليقات إضافية.
يجب الإبلاغ عن المشكلات الأمنية والأخطاء بشكل خاص، عبر البريد الإلكتروني، إلى مركز استجابة الأمان من Microsoft (MSRC) على [email protected]. يجب أن تصلك استجابة خلال 24 ساعة. إذا لم تصلك لسبب ما، فيُرجى المتابعة عبر البريد الإلكتروني للتأكد من استلامنا رسالتك الأصلية. يمكن العثور على مزيد من المعلومات، بما في ذلك مفتاح MSRC PGP، في المركز التقني للأمان.
| الأمر الفرعي | الميزة | الافتراضي | الوظيفة |
|---|
acquire | (دائمًا) | نعم | التقاط لقطة من الذاكرة إلى ملف محلي (مع رفع اختياري بعد ذلك). |
convert | convert | نعم | التحويل بين تنسيقات AVML / LiME / الخام (raw). |
upload | upload | نعم | رفع ملف محلي عبر HTTP PUT أو إلى Azure Block Blob. |
stream | stream | نعم | بث لقطة مباشرة إلى وجهة، دون حفظ ملف محلي. |