Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Linpmem — برنامج تشغيل نواة لينكس لاقتناء الذاكرة الفعلية، يتيح الوصول للقراءة إلى أي عنوان فعلي بما في ذلك الذاكرة المحجوزة وثغرات الذاكرة، مع معلومات CR3 وخدمات الترجمة من الظاهري إلى الفعلي. | Kitploit
أدوات/GitHubGitHub/velocidex/linpmem
تحليل الذاكرة الجنائيالتحقيق الجنائي الرقميالتحاليل الرقمية الجنائيةالاستجابة للحوادث
GitHubvelocidex/linpmem

Linpmem

برنامج تشغيل نواة لينكس لاقتناء الذاكرة الفعلية، يتيح الوصول للقراءة إلى أي عنوان فعلي بما في ذلك الذاكرة المحجوزة وثغرات الذاكرة، مع معلومات CR3 وخدمات الترجمة من الظاهري إلى الفعلي.

عرض المستودع
10512منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Linpmem -- أداة الحصول على الذاكرة الفعلية لنظام لينكس

alt text

Linpmem هي أداة خاصة بنظام لينكس 64 بت لقراءة الذاكرة الفعلية.

مثل نظيرتها في ويندوز، Winpmem، هذه الأداة ليست أداة تفريغ ذاكرة تقليدية. توفر Linpmem واجهة برمجة تطبيقات للقراءة من أي عنوان فعلي، بما في ذلك الذاكرة المحجوزة وثغرات الذاكرة، ولكن يمكن استخدامها أيضًا لتفريغ الذاكرة العادي. علاوة على ذلك، يوفر المشغل (driver) مجموعة متنوعة من أوضاع الوصول لقراءة الذاكرة الفعلية، مثل byte و word و dword و qword و buffer access mode، حيث يكون وضع الوصول العازلي مناسبًا في معظم الحالات القياسية. إذا كانت القراءة تتطلب قراءة محاذاة للبايت/الكلمة/الكلمة المزدوجة/الكلمة الرباعية، فإن Linpmem ستفعل ذلك بدقة.

حاليًا، تتضمن ميزات Linpmem:

  1. القراءة من عنوان فعلي (وضع الوصول byte أو word أو dword أو qword أو buffer)
  2. خدمة معلومات CR3 (تحديد العملية المستهدفة بواسطة pid)
  3. خدمة ترجمة العنوان الافتراضي إلى الفعلي

سيتم إضافة التحكم في الذاكرة المخبأة (Cache Control) في المستقبل لدعم أوضاع القراءة المتخصصة.

جدول الملخص

  • بناء مشغل النواة
  • تحميل المشغل
  • الاستخدام
    • الكود التجريبي
    • أداة واجهة سطر الأوامر
    • المكتبة
    • أداة تفريغ الذاكرة
  • المكتبة
  • توزيعات لينكس المختبرة
  • التعامل مع الإقلاع الآمن
  • المشكلات المعروفة
  • قيد العمل
  • العمل المستقبلي
  • الشكر والتقدير

بناء مشغل النواة

على الأقل في الوقت الحالي، يجب عليك ترجمة مشغل Linpmem بنفسك. طريقة لتحميل مشغل Linpmem مُجمَّع مسبقًا على أنظمة لينكس الأخرى قيد العمل حاليًا، ولكنها لم تُكتمل بعد. ومع ذلك، فإن ترجمة مشغل Linpmem ليست صعبة، فهي ببساطة تنفيذ الأمر 'make'.

الخطوة 1 - الحصول على ملفات الرأس الصحيحة

أنت بحاجة إلى make ومُترجم لغة C. (نوصي باستخدام gcc، لكن clang يجب أن يعمل أيضًا).

تأكد من تثبيت حزمة linux-headers (باستخدام أي مدير حزم لتوزيعة لينكس المستهدفة). قد يختلف اسم الحزمة الدقيق حسب توزيعتك. طريقة سريعة (مستقلة عن التوزيعة) للتحقق مما إذا كانت الحزمة مثبتة:

root@kitploit:~
ls -l /usr/lib/modules/`uname -r`/

هذا كل شيء، يمكنك المتابعة إلى الخطوة 2.

نظام خارجي: حاليًا، إذا كنت ترغب في ترجمة المشغل لـ نظام آخر، على سبيل المثال، لأنك تريد إنشاء تفريغ ذاكرة ولكن لا يمكنك الترجمة على النظام المستهدف، يجب عليك تنزيل حزمة الرأس مباشرة من مستودعات الحزم الخاصة بتوزيعة لينكس لذلك النظام. تحقق جيدًا من أن إصدار الحزمة يطابق تمامًا الإصدار وإصدار النواة العاملين على النظام الخارجي. في حالة استخدام النظام الآخر لنواة مُجمَّعة ذاتيًا، يجب عليك الحصول على نسخة من دليل بناء تلك النواة. ثم، ضع مسار أي من الدليلين في متغير البيئة KDIR.

root@kitploit:~
export KDIR=path/to/extracted/header/package/or/kernel/root

الخطوة 2 - make

ترجمة المشغل بسيطة، فقط اكتب:

root@kitploit:~
make

يجب أن ينتج عن ذلك ملف linpmem.ko في دليل العمل الحالي.

قد ترغب في مراجعة ملف precompiler.h مسبقًا واختيار ما إذا كنت تريد الترجمة للإصدار النهائي أو للتصحيح (على سبيل المثال، مع طباعة التصحيح). لا توجد الكثير من إعدادات المعالج المسبق الأخرى الآن.

تحميل المشغل

يمكن تحميل الوحدة النمطية linpmem.ko باستخدام الأمر insmod path-to-linpmem.ko، وإلغاء تحميلها باستخدام rmmod path-to-linpmem.ko. (سيؤدي هذا إلى تحميل المشغل فقط لفترة تشغيل هذه الجلسة.) إذا قمت بالترجمة للتصحيح، فاطلع أيضًا على سجل dmesg.

بعد التحميل، للتحدث مع المشغل، تحتاج إلى إنشاء الجهاز:

root@kitploit:~
mknod /dev/linpmem c 42 0

إذا لم تتمكن من التحدث مع المشغل، فتحقق من سجل dmesg للتأكد من أن '42' هو بالفعل الرقم الرئيسي المسجل:

root@kitploit:~
[12827.900168] linpmem: registered chrdev with major 42

على الرغم من أن النواة عادةً ما تحاول تعيين هذا الرقم بالفعل.

يمكنك استخدام الأمر chown على الجهاز لمنحه لمستخدمك، إذا كنت لا تريد أن تترك وحدة تحكم الجذر مفتوحة طوال الوقت. (أو استمر في استخدامها في وحدة تحكم الجذر.)

  • راقب مخرجات dmesg. يُرجى الإبلاغ عن الأخطاء إذا رأيت أيًا منها!
  • تحذير: إذا كانت هناك رسالة خطأ من Linpmem في dmesg تطلب إعادة التشغيل، فمن الأفضل القيام بذلك فورًا.
  • تحذير: هذا إصدار مبكر.

الاستخدام

الكود التجريبي

يوجد كود مثال يوضح ويشرح (بالتفصيل) كيفية التفاعل مع المشغل. يمكن العثور على مرجع واجهة برمجة التطبيقات في مساحة المستخدم أيضًا في ملف ./userspace_interface/linpmem_shared.h.

  1. cd demo
  2. gcc -o test test.c
  3. (sudo) ./test // <= تحتاج إلى sudo إذا لم تستخدم chown على الجهاز.

هذا الكود مهم، إذا كنت تريد فهم كيفية التفاعل المباشر مع المشغل بدلاً من استخدام مكتبة. يمكن استخدامه أيضًا كاختبار وظيفي قصير.

أداة واجهة سطر الأوامر

توجد أداة واجهة سطر أوامر أساسية (اختيارية) لـ Linpmem، وهي أداة pmem CLI. يمكن العثور عليها هنا: https://github.com/vobst/linpmem-cli. بجانب الكود المصدري، هناك أيضًا أداة CLI مُجمَّعة مسبقًا بالإضافة إلى المكتبة الثابتة المُجمَّعة مسبقًا وملفات الرأس التي يمكن العثور عليها هنا (موقعة). ملاحظة: هذا إصدار أولي، تأكد من التحقق من وجود تحديثات، حيث ستتبع العديد من الإضافات والتحسينات قريبًا.

يمكن استخدام أداة pmem CLI لاختبار الوظائف المختلفة لـ Linpmem بطريقة (آمنة نسبيًا) ومريحة. يمكن أيضًا تحميل Linpmem باستخدام هذه الأداة بدلاً من استخدام insmod/rmmod، مع بعض الخيارات الإضافية في المستقبل. وهذا له أيضًا ميزة أن pmem يقوم تلقائيًا بإنشاء الجهاز المناسب لك للاستخدام الفوري. إنها محمولة للغاية وتعمل على أي نظام لينكس (وفي الواقع، تم اختبارها حتى على نظام لينكس 2.6).

root@kitploit:~
$ ./pmem -h
Command-line client for the linpmem driver

Usage: pmem [OPTIONS] [COMMAND]

Commands:
  insmod  Load the linpmem driver
  help    Print this message or the help of the given subcommand(s)

Options:
  -a, --address <ADDRESS>            Address for physical read operations
  -v, --virt-address <VIRT_ADDRESS>  Translate address in target process' address space (default: current process)
  -s, --size <SIZE>                  Size of buffer read operations
  -m, --mode <MODE>                  Access mode for read operations [possible values: byte, word, dword, qword, buffer]
  -p, --pid <PID>                    Target process for cr3 info and virtual-to-physical translations
      --cr3                          Query cr3 value of target process (default: current process)
      --verbose                      Display debug output
  -h, --help                         Print help (see more with '--help')
  -V, --version                      Print version

إذا كنت تريد ترجمة أداة cli بنفسك، انتقل إلى دليلها واتبع التعليمات في ملف Readme (لـ cli) لبناءها. وإلا، فما عليك سوى تنزيل البرنامج المُجمَّع مسبقًا، ويجب أن يعمل على أي نظام لينكس. لتحميل مشغل النواة باستخدام أداة cli:

root@kitploit:~
# pmem insmod path/to/linpmem.ko

ميزة استخدام أداة pmem لتحميل المشغل هي أنك لا تحتاج إلى إنشاء ملف الجهاز بنفسك، وستوفر (في الإصدارات القادمة) خيار اختيار من يملك جهاز linpmem.

المكتبات

واجهة سطر أوامر pmem هي مجرد غلاف رفيع حول مكتبة Rust صغيرة تعرض واجهة برمجة تطبيقات للتواصل مع المشغل. يمكن للمستخدمين المتقدمين أيضًا استخدام هذه المكتبة. يتم تجميع المكتبة تلقائيًا (كمكتبة محمولة ثابتة) جنبًا إلى جنب مع أداة pmem cli عند الترجمة من https://github.com/vobst/linpmem-cli، ولكنها أيضًا مضمنة (مُجمَّعة مسبقًا) هنا (موقعة). ملاحظة: هذا إصدار أولي، المزيد قريبًا.

إذا كنت لا تريد استخدام مكتبة وضع المستخدم وتفضل التفاعل مع المشغل مباشرة بنفسك، يمكنك العثور على واجهة برمجة التطبيقات/الواجهة الخاصة به في مساحة المستخدم والتوثيق في ملف ./userspace_interface/linpmem_shared.h. نقدم أيضًا كود مثال في demo/test.c يشرح كيفية استخدام المشغل مباشرة.

الغلاف (Wrapper) بلغة بايثون

LinPyMem: غلاف بلغة بايثون لمشغل linpmem. متاح على PyPI.

أداة تفريغ الذاكرة

لم تُنفذ بعد.

توزيعات لينكس المختبرة

  • Debian، مُجمَّع ذاتيًا 6.4.X، Qemu/KVM، غير مُحاكى بشكل كامل (not paravirtualized).
    • PTI: off/on
  • Debian 12، Qemu/KVM، مُحاكى بشكل كامل (fully paravirtualized).
    • PTI: on
  • Ubuntu server، Qemu/KVM، غير مُحاكى بشكل كامل.
    • PTI: on
  • Fedora 38، Qemu/KVM، مُحاكى بشكل كامل.
    • PTI: on
  • اختبار لينكس على المعدن العاري (Baremetal)، AMI BIOS: Linux 6.4.4
    • PTI: on
  • اختبار لينكس على المعدن العاري، HP: Linux 6.4.4
    • PTI: on
  • المعدن العاري، Arch[-hardened]، Dell BIOS، Linux 6.4.X
  • المعدن العاري، Debian، 6.1.X
  • المعدن العاري، Ubuntu 20.04 مع تفعيل الإقلاع الآمن. يعمل، ولكن قم بتوقيع المشغل أولاً.
  • المعدن العاري، Ubuntu 22.04، Linux 6.2.X

التعامل مع الإقلاع الآمن

إذا أبلغ النظام عن رسالة الخطأ التالية عند تحميل الوحدة، فقد يكون ذلك بسبب الإقلاع الآمن:

root@kitploit:~
$ sudo insmod linpmem.ko
insmod: ERROR: could not insert module linpmem.ko: Operation not permitted

هناك طرق مختلفة لتحميل الوحدة على الرغم من ذلك. الطريقة الواضحة هي تعطيل الإقلاع الآمن في إعدادات UEFI الخاصة بك.

إذا كانت توزيعتك تدعم ذلك، فإن الحل الأكثر أناقة هو توقيع الوحدة قبل استخدامها. يمكن القيام بذلك باستخدام الخطوات التالية (تم اختبارها على Ubuntu 20.04).

  1. تثبيت mokutil:
    root@kitploit:~
    $ sudo apt install mokutil
    
  2. إنشاء مواد مفتاح التوقيع:
    root@kitploit:~
    $ openssl req -new -newkey rsa:4096 -keyout mok-signing.key -out mok-signing.crt -outform DER -days 365 -nodes -subj "/CN=Some descriptive name/"
    
    تأكد من ضبط الخيارات حسب احتياجاتك. خاصةً، ضع في اعتبارك طول المفتاح (‎-newkey) وفترة الصلاحية (‎-days) وخيار تعيين عبارة مرور للمفتاح (‎-nodes؛ اتركها إذا كنت تريد تعيين عبارة مرور) والاسم الشائع الذي سيتم تضمينه في الشهادة (‎-subj).
  3. تسجيل MOK الجديد:
    root@kitploit:~
    $ sudo mokutil --import mok-signing.crt
    
    سيُطلب منك كلمة مرور، وهي مطلوبة في الخطوة التالية. يُنصح باستخدام كلمة مرور يمكنك كتابتها على تخطيط لوحة مفاتيح أمريكي.
  4. أعد تشغيل النظام. سيدخل في قائمة تسجيل MOK. اتبع التعليمات لتسجيل مفتاحك الجديد.
  5. قم بتوقيع الوحدة بمجرد تسجيل MOK، يمكنك توقيع الوحدة الخاصة بك.
    root@kitploit:~
    $ /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 path/to/mok-singing/MOK.key path/to//MOK.cert path/to/linpmem.ko
    

بعد ذلك، يجب أن تكون قادرًا على تحميل الوحدة.

لاحظ أنه من منظور الجاهزية الجنائية، يجب عليك تحضير وحدة موقعة قبل أن تحتاج إليها، حيث سيعيد النظام التشغيل مرتين أثناء العملية الموصوفة أعلاه، مما يؤدي إلى تدمير معظم بياناتك المتطايرة في الذاكرة.

المشكلات المعروفة

  • قراءة الصفحة الضخمة غير مطبقة. يتعرف Linpmem على الصفحة الضخمة ويرفض القراءة، في الوقت الحالي.
  • سيتم القراءة من مساحة الإدخال/الإخراج المعينة و DMA مع تمكين التخزين المؤقت لوحدة المعالجة المركزية.
  • لا يتم أخذ أي أقفال أثناء التجول في جدول الصفحات. قد يؤدي ذلك إلى نتائج غريبة عندما تحدث تعديلات متزامنة. هذه مشكلة عامة و(غير قابلة للحل في الغالب) لقراءة ذاكرة الوصول العشوائي الحية، دون إيقاف نظام التشغيل بالكامل.
  • الإقلاع الآمن (Ubuntu): يُرجى توقيع مشغلك قبل الاستخدام.
  • أي تشفير للذاكرة مدعوم بوحدة المعالجة المركزية، مثل AMD SME، Intel SGX/TDX، ...
  • رقائق Pluton؟

(يُرجى الإبلاغ عن المشكلات المحتملة إذا واجهت أي شيء.)

قيد العمل

  • تحميل مشغل مُجمَّع مسبقًا على أي نظام لينكس.
  • التحكم في ذاكرة التخزين المؤقت للمعالج. مثال: للقراءة غير المخزنة مؤقتًا لمساحة الإدخال/الإخراج المعينة و DMA.

العمل المستقبلي

  • دعم Arm/Mips. (عمل مستقبلي بعيد)
  • النوى القديمة (مثل 2.6)، النوى المستندة إلى يونكس

الشكر والتقدير

Linpmem، وكذلك Winpmem، لما كانت موجودة بدون عمل أسلافنا من مشروع REKALL (الذي تم إيقافه الآن): https://github.com/google/rekall.

  • نود أن نشكر Mike Cohen و Johannes Stüttgen على عملهما الرائد ومساهمتهما مفتوحة المصدر في إعادة تعيين PTE، وهي تقنية لا تزال قيد الاستخدام بعد 10 سنوات.

مساهمونا مفتوحو المصدر:

  • Viviane Zwanger
  • Valentin Obst
تنزيل الأداة