السلام عليكم ورحمة الله وبركاته اليوم راح أتكلم عن هجوم Ret2plt لتخطي حماية ASLR و NX

حسابي في التويتر هنا


البداية

هناك نوعين من البرامج في لينكس statically linked و dynamically linked

أيش هو statically linked ؟

هو ان البرنامج ينسخ كل مايحتاجه من functions وكل شيء دون ألاستعانة بمكتبة خارجية يتم نسخ كل المكتبات داخل البرنامج من قبل compiler و Linker وعندما يتم تشغيل البرنامج لأيحتاج الى ملف آخر كل شيء داخله

أيش هو dynamically linked ؟

عندما يتم تشغيل البرنامج سوف ينسخ محتويات المكتبات الخارجية التي يحتاجها الى RAM

دعونا نأخذ مثال كي تسهل المعلومة عندما تستخدم puts function في برنامجك كي تطبع بعض من المعلومات تعد puts function جزء من system C Library موجودة في أنظمة GNU/Linux وتسمى GNU Libc Library وعشان تعرف مكان puts عندما يستدعيها البرنامج يتم أنشاء jump table و poniter لموقع puts function من compiler لأاستدعاها عندما يتم تشغيل البرنامج

العنوان حق Libc يتغير بسبب حماية ASLR فا كيف البرنامج يعرف العنوان الخاص با libc كي يستعمل بعض Functions التي يحتاجها ؟ هنا يجي دور Global Offset Table (GOT) و Procedure Linkage Table (PLT)

أيش هو GOT ؟

يكون داخله العنوان الخاص بfunction التي نريد أستعمالها وعندما يتم ألقفز إليه بواسطة PLT سوف يتم تشغيل الfunction

أيش هو PLT؟

كما أخبرتكم في dynamically linked  لاتكون موجودة libc داخل البرنامج هنا يأتي دور Procedure Linkage Table أو PLT

هو مسؤول عن أستدعاء الFunction المطلوبة أثناء وقت تشغيل البرنامج او في حالة عدم معرفة ذلك ويتم القفز الى puts@got التي داخلها العنوان الحقيقي الخاص بfunction puts

نرا هنا ان داخل puts@plt يتم القفز الى puts@got.plt التي تحتوي على العنوان الخاص بfunction puts داخلها عندما يتم القفز الى puts@got.plt سوف يتم تنفيذ puts

أنا كا مهاجم ماذا سوف أستفيد من GOT/PLT اولاً يمكننا تغير العنوان الذي داخل GOT وعندما يتم القفز إليه لتشغيل function يتم تنفيذ function ثانيه وممكن ان نحصل على RCE ولقد تكلمت عنها هنا لكن اليوم كيف ممكن ان نتخطى حماية ASLR بواسطة GOT/PLT


حماية ASLR تمنعنا من تنفيذ هجوم ret2libc بسبب انها تغير العنوان الخاص باLibc وعندها سوف يتغير العنوان الخاص بأي function نستعملها عند تشغيل البرنامج هنا يأتي دور ret2plt

Join