0Pricing
Cyber Security Academy · درس

استغلال الكومة: Use-After-Free وHeap Spraying

افهم الأجزاء الداخلية لـ glibc malloc، وحالات use-after-free، وتقنيات رش الكومة.

استغلال الكومة: Use-After-Free وHeap Spraying درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.

الكومة

الكومة هي ذاكرة ديناميكية تُخصّص أثناء التشغيل عبر malloc()/free()/new/delete. وعلى خلاف المكدس، يتحدد تخطيط الكومة وفق أنماط التخصيص وإلغاء التخصيص، لا وفق مكدس الاستدعاءات. وتشيع ثغرات الكومة في المتصفحات والمحللات وخدمات الشبكة.

الاستخدام بعد التحرير (UAF)

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

مثال على UAF

نمط UAF:

// Vulnerable C code:
struct Object *obj = malloc(sizeof(*obj));
free(obj);
// Later, attacker causes a new malloc to fill the freed region
// with their data...
obj->method();  // now calls attacker's function pointer!

تنسيق الكومة

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

رشّ الكومة

رشّ الكومة يخصّص كميات كبيرة من البيانات التي يتحكم بها المهاجم (shellcode ومسارات NOP) في أنحاء الكومة. ومع امتلاء جزء كبير من الكومة، يُرجح أن يصل مؤشر غير صالح إلى بيانات المهاجم. ويُستخدم هذا الأسلوب غالبًا مع أخطاء UAF أو أخطاء التباس النوع.

// JavaScript heap spray:
var spray = [];
for(var i = 0; i < 100000; i++) {
  spray[i] = unescape("%90%90...shellcode...");
}

التحرير المزدوج

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

تجاوز سعة مخزن الكومة المؤقت

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

التباس النوع

يحدث التباس النوع عندما تُستخدم منطقة من الذاكرة خُصصت لنوع معين باعتبارها نوعًا مختلفًا. ويشيع ذلك في محركات JavaScript وشيفرة C++. وإذا تمكن المهاجم من التحكم في ترتيب التخصيصات، فيمكنه جعل المحرك يتعامل مع بيانات المهاجم باعتبارها كائنًا موثوقًا.

العمليات الداخلية لـ ptmalloc وtcmalloc

يساعد فهم مخصّص الكومة في تطوير الاستغلالات. يستخدم ptmalloc في glibc حاويات (غير مرتبة وصغيرة وكبيرة) وحاويات سريعة. ويُعد tcache (ذاكرة التخزين المؤقت لكل مؤشر ترابط) مصدر التخصيص الأول. وغالبًا ما تستهدف الاستغلالات إفساد الحاويات للتحكم في عناوين التخصيصات المستقبلية.

آليات التخفيف

آليات التخفيف من استغلال الكومة:

  • عشوائية الكومة (جزء من ASLR) — تجعل العنوان الأساسي للكومة عشوائيًا
  • إلغاء الربط الآمن — يتحقق من مؤشرات التقدم/التراجع قبل إلغاء الربط
  • اكتشاف تسميم tcache — أُضيف في glibc 2.32
  • تعمية المؤشرات — تعمّي المؤشرات المخزنة في tcache
  • اللغات الآمنة من ناحية الذاكرة — تمنع Rust الاستخدام بعد التحرير وقت الترجمة

استغلالات كومة المتصفح

تتضمن معظم ثغرات اليوم صفر في المتصفحات ثغرات في الكومة داخل محركات JavaScript (V8 وSpiderMonkey). وتبني المتصفحات الحديثة سلاسل لتجاوز العزل: ثغرة في كومة عملية العرض ← تجاوز العزل إلى عملية المتصفح ← تصعيد صلاحيات نظام التشغيل. وتتطلب كل خطوة أسلوبها الخاص.

تحقق سريع: استغلال الكومة

ما الثغرة التي تسمح للمهاجم بالتحكم في تنفيذ البرنامج باستخدام مؤشر قديم يشير إلى ذاكرة حُررت بالفعل ثم أُعيد تخصيصها ببيانات يتحكم بها المهاجم؟

مراجعة الدرس

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

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

هل درس «استغلال الكومة: Use-After-Free وHeap Spraying» مجاني؟

نعم — نص درس «استغلال الكومة: Use-After-Free وHeap Spraying» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.

ماذا ستتعلم في «استغلال الكومة: Use-After-Free وHeap Spraying»؟

افهم الأجزاء الداخلية لـ glibc malloc، وحالات use-after-free، وتقنيات رش الكومة. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟

لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «استغلال الكومة: Use-After-Free وHeap Spraying»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟

نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تجاوزات مخزن المكدس
  2. البرمجة الموجهة نحو الإرجاع (ROP)
  3. ثغرات سلاسل التنسيق
  4. استغلال الكومة: Use-After-Free وHeap Spraying
← العودة إلى Cyber Security Academy