
ملاحظات الاسترداد لاستشارة proxmox بالمعرّف: PSA-2026-00043-1 (CVE-2023-54391)
الاسترداد من برنامج مسح (wiper) تظاهر بأنه برنامج فدية، بعد هجوم على بنية تحتية لـ Proxmox معرّضة للإنترنت (PSA-2026-00043-1 / CVE-2023-54391).
قام المهاجم بمسح الضيوف (guests) وترك أنظمة الملفات تالفة. مساران للاسترداد اعتمادًا على نوع الضيف:
هذه هي الأدوات والمنهجية، معمّمة بحيث تكون مفيدة لأي شخص في نفس الموقف. للقراءة فقط من المصدر، CC0. لا تتضمن أي بيانات مستردة حقيقية؛ المخرجات المثال تستخدم عناصر نائبة.
القرص التالف هو الآن نسختك الوحيدة مما تبقى. لا تقم بإصلاحه. قم بتصويره (Image it).
blockdev --setro /dev/<source> # 1. للقراءة فقط، فورًا
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. تصوير إلى تخزين آمن
# 3. لا تقم بـ fsck، أو التركيب للكتابة (mount rw)، أو "الإصلاح"؛ فهذا يستبدل الكتل التي يحتاجها أداة الاستخراج
# 4. لف كل تمريرة مصدر في scripts/source_guard.sh
# 5. استرد من الصورة فقط، أبدًا من الأصل
انضباط مشترك، أدوات استخراج منفصلة. شغّل أيًا منها مع -h. Python 3.8+ / bash، بدون حزم خارجية. يتطلب Linux .
source_guard.sh/proc/diskstats| السكربت | المسار | ما يفعله |
|---|---|---|
scripts/source_guard.sh | مشترك | يلف أمر استرداد؛ يثبت أن المصدر بقي للقراءة فقط عبر فرق عدّاد الكتابة. يفشل عند أي كتابة على المصدر. |
scripts/wt_leaf_carve.py | قاعدة البيانات | يستخرج BSON من صفحات WiredTiger الورقية الخام. حجم الصفحة عبر فك الترميز، وليس الملاءمة؛ تحكم إيجابي إلزامي. |
scripts/bson_frame.py | قاعدة البيانات | يعدّ/يتحقق من مستندات BSON عبر التأطير على القرص. الملف الكامل افتراضيًا؛ العينة تُعلَّم كـ حد أدنى (FLOOR). |
scripts/fs_carve_classify.py | نظام الملفات | يصنّف شظايا الملفات المستخرجة عبر المحتوى، وليس اسم الملف؛ يكتب بيانًا لكل ملف؛ فحص شامل للأسرار. |
scripts/sensitivity_scan.py | مشترك | يدرّج البيانات المستردة RED/AMBER/GREEN لتعرض بيانات الاعتماد/المعلومات الشخصية. يطبع الأعداد، أبدًا القيم. |
scripts/integrity_verify.py | مشترك | يثبت أن النسخة المعاد تنظيمها مطابقة للمصدر. مفتاح المحتوى (ينجو من إعادة التسمية)؛ يقرأ عمودي OK/FAILED، وليس رموز الخروج. |
scripts/make_demo.py | — | يولّد تجهيزات BSON اصطناعية (بدون بيانات حقيقية) لاختبار مجموعة الأدوات. |
python3 scripts/make_demo.py
python3 scripts/bson_frame.py --total demo/*.bson
python3 scripts/sensitivity_scan.py demo/*.bson
python3 scripts/integrity_verify.py --compare demo/source demo/copy
نُفّذت بهذا الترتيب. خطوة الاستخراج تتفرع حسب الضيف؛ حاصرتا setro/image والتحقق بمفتاح المحتوى متماثلتان في الحالتين.
القرص التالف ──setro+image──► صورة للقراءة فقط
│
قاعدة البيانات ──────────►│◄────────── نظام الملفات
استخراج صفحات WT │ استخراج الملفات
عدّ المستندات │ تصنيف بالمحتوى + بيان
│
تصنيف التعرض (RED/AMBER/GREEN)
التحقق من النسخة (مفتاح المحتوى)
│
الاسترداد
find | sort | xargs sha256sum | sha256sum يجزّئ المسارات والإعدادات المحلية أيضًا. استخدم LC_ALL=C، أو بيانًا لكل ملف.sha256sum -c يخرج بـ 0 بينما يطبع FAILED. اقرأ الأعمدة، وليس $?.نقاط بداية، وليست حلولًا جاهزة. WiredTiger الإنتاجي يستخدم ضغط الصفحات (snappy/zstd) وترميز الخلايا الذي تهمله أداة الاستخراج العامة. اربط وحدة فك ترميز قوية خاصة بك للصفحات المضغوطة. تحقق من كل رقم مقابل تحكم إيجابي وأداة ثانية مختلفة: أداتان تشتركان في افتراض تتفقان بسبب الافتراض، وليس لأنه صحيح؛ قراءة البايتات هي ما يكتشف ذلك.
إذا لم تكن بياناتك مماثلة (قاعدة بيانات أو تطبيق أو نظام ملفات مختلف)، فإن المنهجية ما زالت صالحة: اجعل المصدر للقراءة فقط، صوّره، استخرج من النسخة، تحكم إيجابيًا قبل تصديق الصفر، عدّ الكل، تحقق بالمحتوى. استبدل أداة الاستخراج؛ حافظ على الانضباط.
حصّن السبب الجذري: واجهة Proxmox على :8006 يجب ألا تكون قابلة للوصول من الإنترنت. اتبع النشرات الأمنية الرسمية لـ Proxmox:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
شرح أكثر سهولة مع نصائح المؤلف العامة حول الاسترداد والتحصين: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / ملكية عامة. انظر LICENSE.