البرمجة الموجهة نحو الإرجاع (ROP)
اربط أدوات ROP لتجاوز NX/DEP وبناء استغلالات دون shellcode.
البرمجة الموجهة نحو الإرجاع (ROP) درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
سبب وجود ROP
مع NX/DEP، لا يمكن تنفيذ shellcode المحقون. تتجاوز البرمجة الموجهة بالعودة (ROP) ذلك من خلال ربط تسلسلات تعليمات صغيرة موجودة مسبقًا (gadgets) تنتهي بتعليمات ret. ولا يجري حقن أي تعليمات جديدة — بل يُستخدم المكدس والتعليمات الموجودة فقط.
ما هو ROP Gadget؟
إن gadget هو تسلسل قصير من التعليمات ينتهي بـ ret، ويُعثر عليه في الملف الثنائي أو في المكتبات المحمّلة. ومن أمثلته: pop rdi; ret، وpop rsi; ret، وmov eax, 0; ret. وتُعد gadgets اللبنات الأساسية لسلاسل ROP.
العثور على Gadgets
أدوات للعثور على ROP gadgets في الملفات الثنائية:
# ROPgadget:
ROPgadget --binary ./vuln --rop
# ropper:
ropper -f ./vuln --search "pop rdi"
# pwntools:
from pwn import *
elf = ELF("./vuln")
rop = ROP(elf)
rop.find_gadget(["pop rdi", "ret"])بناء سلسلة ROP
سلسلة ROP هي تسلسل من عناوين العودة على المكدس. عند الوصول إلى عنوان العودة المستبدل، يقفز التنفيذ إلى gadget 1 (الذي ينفذ شيئًا مفيدًا ثم ينفذ ret)، فيسحب العنوان التالي ويقفز إلى gadget 2، وهكذا.
ret2plt واستبدال GOT
تستدعي ret2plt الدوال عبر PLT (جدول ربط الإجراءات)، وهو مفيد لاستدعاء puts() لتسريب عناوين libc، ثم استخدام تلك العناوين لاستدعاء system(). وتكون بنيتا PLT/GOT قابلتين للتنبؤ حتى مع ASLR بالنسبة إلى الملف الثنائي الرئيسي (من دون PIE).
التغلب على ASLR باستخدام ROP
يمكن لـ ROP تسريب عنوان دالة في libc من GOT باستخدام gadget يستدعي puts(GOT_entry). ويكشف العنوان المسرّب العنوان الأساسي لـ libc. احسب إزاحة system(): system_addr = leak - libc.symbols["puts"] + libc.symbols["system"].
SROP: البرمجة الموجهة بإرجاع الإشارة
تستخدم SROP استدعاء النظام sigreturn لتحميل إطار sigcontext مزيف، فتضبط جميع السجلات على قيم يتحكم بها المهاجم باستخدام gadget واحد. وتفيد هذه التقنية عند توفر عدد قليل من gadgets.
متغيرا JOP وCOP
إلى جانب ROP:
- JOP (البرمجة الموجهة بالقفز) — تربط gadgets تنتهي بـ
jmpبدلًا منret - COP (البرمجة الموجهة بالاستدعاء) — تربط gadgets تنتهي بـ
call
وتهدف وسائل الحماية مثل CFI (سلامة تدفق التحكم) إلى منع جميع هذه الأساليب.
سلامة تدفق التحكم (CFI)
تفرض CFI ألا تقفز الفروع غير المباشرة (الاستدعاءات وعمليات العودة) إلا إلى أهداف صالحة. وتكسر ROP من خلال التحقق من هدف العودة مقابل مكدس ظلي أو قائمة سماح. وتنفذ Intel CET (تقنية فرض تدفق التحكم) آلية CFI على مستوى العتاد.
مثال عملي على ROP
ret2libc باستخدام ROP على نظام 64 بت:
# pwntools ROP chain example:
from pwn import *
p = process("./vuln")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
elf = ELF("./vuln")
rop = ROP(elf)
# Leak puts GOT to get libc base
rop.puts(elf.got["puts"])
rop.main()ملخص آليات التخفيف
آليات الحماية من ROP:
- CFI — تتحقق من أهداف الفروع
- المكدس الظلي (CET) — نسخة من عنوان العودة محمية بواسطة العتاد
- RELRO (الكامل) — يجعل GOT للقراءة فقط ويمنع الاستبدالات
- PIE — يجعل العنوان الأساسي للملف الثنائي عشوائيًا، ويتطلب تسريبًا للعثور على gadgets
تحقق سريع: ROP
ما هو ROP gadget؟
مراجعة الدرس
تتجاوز ROP آليتي NX/DEP من خلال ربط تسلسلات تعليمات موجودة مسبقًا (gadgets تنتهي بـ ret)، من دون الحاجة إلى حقن shellcode. ومن أدوات العثور على gadgets: ROPgadget وropper. وتسرّب ret2plt عناوين libc للتغلب على ASLR. وتشمل وسائل الحماية: CFI، والمكدسات الظلية (Intel CET)، وPIE، وRELRO الكامل. وتُعد ROP أساس استغلال الملفات الثنائية الحديث.
الأسئلة الشائعة
هل درس «البرمجة الموجهة نحو الإرجاع (ROP)» مجاني؟
نعم — نص درس «البرمجة الموجهة نحو الإرجاع (ROP)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ماذا ستتعلم في «البرمجة الموجهة نحو الإرجاع (ROP)»؟
اربط أدوات ROP لتجاوز NX/DEP وبناء استغلالات دون shellcode. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟
لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «البرمجة الموجهة نحو الإرجاع (ROP)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟
نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تجاوزات مخزن المكدس
- البرمجة الموجهة نحو الإرجاع (ROP)
- ثغرات سلاسل التنسيق
- استغلال الكومة: Use-After-Free وHeap Spraying