البرمجة الموجهة للعودة

**البرمجة الموجهة نحو العودة** (**ROP**) هي تقنية استغلال أمان الكمبيوتر التي تسمح للمهاجم بتنفيذ التعليمات البرمجية في وجود دفاعات أمنية مثل حماية مساحة الملف القابل للتنفيذ وتوقيع التعليمات البرمجية.

في هذه التقنية، يكتسب المهاجم السيطرة على مكدس النداء لاختطاف تدفق التحكم في البرنامج ثم يقوم بتنفيذ تسلسلات تعليمات الآلة المختارة بعناية والتي توجد بالفعل في ذاكرة الآلة، والتي تسمى "الأدوات". تنتهي كل أداة عادةً بتعليمات الإرجاع وتوجد في برنامج فرعي داخل البرنامج الحالي و/أو كود المكتبة المشتركة. عند ربط هذه الأدوات معًا، فإنها تسمح للمهاجم بإجراء عمليات عشوائية على جهاز يستخدم دفاعات تحبط الهجمات الأبسط.

## خلفية
يسار|تصغير| مثال على تخطيط مكدس النداء. أُستدعي البرنامج الفرعي <code>DrawLine</code> بواسطة <code>DrawSquare</code>. لاحظ أن المكدس ينمو إلى الأعلى في هذا الرسم التخطيطي.
البرمجة الموجهة نحو العودة هي نسخة متقدمة من هجوم تحطيم المكدس. بشكل عام، تنشأ هذه الأنواع من الهجمات عندما يقوم الخصم بالتلاعب بمكدس النداء من خلال الاستفادة من خطأ في البرنامج، وغالبًا ما يكون تجاوز سعة المخزن المؤقت. في حالة تجاوز سعة المخزن المؤقت، فإن الوظيفة التي لا تقوم بإجراء فحص صحيح للحدود قبل تخزين البيانات المقدمة من المستخدم في الذاكرة ستقبل بيانات إدخال أكثر مما يمكنها تخزينه بشكل صحيح. إذا كُتبت البيانات على المكدس، فقد تتجاوز البيانات الزائدة المساحة المخصصة لمتغيرات الوظيفة (على سبيل المثال، "المتغيرات المحلية" في مخطط المكدس إلى اليمين) وتكتب فوق عنوان الإرجاع. سيستخدم هذا العنوان لاحقًا بواسطة الوظيفة لإعادة توجيه تدفق التحكم إلى المتصل. إذا كُتبت فوقه، سيحول تدفق التحكم إلى الموقع المحدد بواسطة عنوان الإرجاع الجديد.

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

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

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

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

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

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

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

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

### حول هندسة x86
على الرغم من إمكانية تنفيذ هجمات البرمجة الموجهة للعودة على مجموعة متنوعة من البنيات التحتية، فإن ورقة شاكام وأغلب الأعمال اللاحقة تركز على بنية Intel x86. هندسة x86 عبارة عن مجموعة تعليمات CISC ذات طول متغير. تستفيد البرمجة الموجهة نحو العودة على x86 من حقيقة أن مجموعة التعليمات "كثيفة" للغاية، أي أن أي تسلسل عشوائي من البايتات من المحتمل أن يكون قابلاً للتفسير كمجموعة صالحة من تعليمات x86.

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

طورت أداة آلية للمساعدة في أتمتة عملية تحديد موقع الأدوات وبناء هجوم ضد نظام ثنائي. تبحث هذه الأداة، المعروفة باسم ROPgadget، في ملف ثنائي عن أدوات مفيدة محتملة، وتحاول تجميعها في حمولة هجومية تولد غلافًا لقبول أوامر عشوائية من المهاجم.

### حول التوزيع العشوائي لتخطيط مساحة العنوان
تخطيط مساحة العنوان العشوائية لديه أيضًا نقاط ضعف. وفقًا لورقة Shacham et al، فإن ASLR على البنيات المكونة من 32 بت محدودة بعدد البتات المتاحة لتوزيع العناوين بشكل عشوائي. تتوفر 16 بتة فقط من أصل 32 بت عنوان للعشوائية، ويمكن التغلب على 16 بتة من العشوائية في العنوان عن طريق هجوم القوة الغاشمة في دقائق. تتمتع معماريات 64 بت بالمزيد من القوة، حيث يتوفر 40 بت من أصل 64 بت للتوزيع العشوائي. من الممكن أن يُشن هجوم بالقوة الغاشمة ضد التوزيع العشوائي المكون من 40 بت، ولكن من غير المرجح أن يمر دون أن يلاحظه أحد. بالإضافة إلى هجمات القوة الغاشمة، توجد تقنيات لإزالة العشوائية.

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

### بدون استخدام تعليمات الإرجاع
وفقًا لورقة Checkoway et al، من الممكن إجراء برمجة موجهة نحو العودة على معماريات x86 وARM دون استخدام تعليمة العودة (0xC3 على x86). وبدلاً من ذلك، استخدموا تسلسلات تعليمات مصممة بعناية وموجودة بالفعل في ذاكرة الجهاز لتتصرف مثل تعليمات الإرجاع. تحتوي تعليمات الإرجاع على تأثيرين: أولاً، تقوم بقراءة القيمة المكونة من أربعة بايتات في أعلى المكدس، وتضبط مؤشر التعليمات إلى تلك القيمة، وثانياً، تقوم بزيادة قيمة مؤشر المكدس بمقدار أربعة بايتات (ما يعادل عملية البوب). في بنية x86، يمكن لتسلسلات تعليمات jmp وpop أن تعمل بمثابة تعليمات إرجاع. في ARM، يمكن لتسلسلات تعليمات التحميل والفرع أن تعمل بمثابة تعليمات إرجاع.

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

## الدفاعات

### خالي من الجي
طورت تقنية G-Free بواسطة كان أونارلي أوغلو، وليلى بيلج، وأندريا لانزي، وديفيد بالزاروتي، وإنجين كيردا. إنه حل عملي ضد أي شكل ممكن من أشكال البرمجة الموجهة نحو العودة. يعمل الحل على إزالة جميع تعليمات الفرع الحر غير المتوافقة (تعليمات مثل RET أو CALL والتي يمكن للمهاجمين استخدامها لتغيير تدفق التحكم) داخل ملف تنفيذي ثنائي، ويحمي تعليمات الفرع الحر من أن يستخدمها المهاجم. الطريقة التي تحمي بها G-Free عنوان الإرجاع تشبه طريقة XOR Canary التي ينفذها StackGuard. علاوة على ذلك، فإنه يتحقق من صحة استدعاءات الوظيفة عن طريق إضافة كتلة التحقق من الصحة. إذا لم يُعثر على النتيجة المتوقعة، فإن G-Free يتسبب في تعطل التطبيق.

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

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

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

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

### سيهوب
تعتبر حماية الكتابة فوق معالج الاستثناءات المنظم ميزة من ميزات Windows تعمل على الحماية ضد هجمات تجاوز سعة المكدس الأكثر شيوعًا، وخاصةً ضد الهجمات على معالج الاستثناءات المنظم.

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

### ضد أدوات الجذر الموجهة نحو العودة
في عام 2010، اقترح جينكو لي وآخرون أن المترجم المعدل بشكل مناسب يمكنه التخلص من "الأدوات" الموجهة للعودة عن طريق استبدال كل  مع تسلسل التعليمات ` ; ` وكل  مع تسلسل التعليمات ` ; `، حيث يمثل  جدولًا ثابتًا لجميع عناوين العودة "الشرعية" في البرنامج ويمثل  فهرسًا محددًا في هذا الجدول. يمنع هذا إنشاء أداة موجهة نحو الإرجاع والتي تعود مباشرة من نهاية وظيفة إلى عنوان عشوائي في منتصف وظيفة أخرى؛ بدلاً من ذلك، يمكن للأدوات العودة فقط إلى عناوين الإرجاع "المشروعة"، مما يزيد بشكل كبير من صعوبة إنشاء أدوات مفيدة. زعم لي وآخرون أن "تقنية الإرجاع غير المباشر التي استخدمناها *تُعيد* البرمجة الموجهة نحو الإرجاع إلى النمط القديم من الإرجاع إلى مكتبة libc." وقد تضمن مُجمِّع إثبات المفهوم الخاص بهم مرحلة تحسين ثقب الباب للتعامل مع "تعليمات آلية معينة تحتوي على شفرة الإرجاع في شفراتها أو متغيراتها المباشرة،" مثل .

### رموز مصادقة المؤشر (PAC)
يقدم تصميم ARMv8.3-A ميزة جديدة على مستوى الأجهزة تستفيد من البتات غير المستخدمة في مساحة عنوان المؤشر لتوقيع عناوين المؤشر تشفيريًا باستخدام تشفير كتلة قابل للتعديل مصمم خصيصًا والذي يوقع القيمة المطلوبة (عادةً، عنوان الإرجاع) جنبًا إلى جنب مع قيمة "السياق المحلي" (على سبيل المثال، مؤشر المكدس).

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

من الجدير بالذكر أن شرائح Apple A12 المستخدمة في أجهزة iPhone ترقت إلى ARMv8.3 وتستخدم PACs. حصل لينكس على دعم لمصادقة المؤشر داخل النواة في الإصدار 5.7 الذي أُصدر في عام 2020؛ وأُضيف الدعم لتطبيقات مساحة المستخدم في عام 2018.

في عام 2022، نشر باحثون في معهد ماساتشوستس للتكنولوجيا هجومًا جانبيًا ضد PACs أطلقوا عليه اسم PACMAN.

### تحديد هدف الفرع (BTI)
يقدم تصميم ARMv8.5-A ميزة جديدة أخرى على مستوى الأجهزة تعمل على تحديد الأهداف الصالحة لتعليمات الفرع بشكل صريح. يقوم المترجم بإدراج تعليمة خاصة، رمز العملية المسمى "BTI"، في كل نقطة هبوط متوقعة لتعليمات الفرع غير المباشرة. تشتمل وجهات الفروع المحددة هذه عادةً على نقاط إدخال الوظائف وكتل رمز التبديل/الحالة.

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

تمثل الوجهات المحددة التي أُدرج فيها تعليمات BTI ما يقرب من 1% من جميع التعليمات في كود التطبيق المتوسط. لذلك، فإن استخدام BTI يزيد من حجم الكود بنفس المقدار.

تتواجد الأدوات التي يُستخدم في هجوم ROP في أي مكان في كود التطبيق. لذلك، في المتوسط، 99% من الأدوات تبدأ بتعليمات ليست BTI. يؤدي التفرع إلى هذه الأدوات بالتالي إلى حدوث خطأ. إذا أخذنا في الاعتبار أن هجوم ROP يتكون من سلسلة من الأدوات المتعددة، فإن احتمال أن تكون جميع الأدوات في السلسلة جزءًا من 1% التي تبدأ بـ BTI منخفض جدًا.

PAC وBTI عبارة عن آليات تكميلية لمنع حقن التعليمات البرمجية المارقة باستخدام هجمات البرمجة الموجهة للعودة والموجهة للقفز. بينما يركز PAC على مصدر عملية الفرع (مؤشر موقّع)، يركز BTI على وجهة الفرع.

## انظر أيضا

* برمجة عمياء موجهة نحو العودة
* تجاوز عدد صحيح
* الرش في الوقت المناسب
* البرمجة الموجهة نحو الإرجاع (SROP)
* الكود المترابطالبرمجة الموجهة نحو العودة هي إعادة اكتشاف الكود المترابط

## مراجع

## روابط خارجية

* 
*  
* AntiJOP: a program that removes JOP/ROP vulnerabilities from assembly language code

تصنيف:استغلالات أمن الحاسوب
تصنيف:صفحات بترجمات غير مراجعة