Wednesday, June 23, 2021

Dirty COW تطبيق عملي على ثغرة الـ

أسعد الله أوقاتكم بكل خير ..


استكمالًا للمقال السابق عن الـ Dirty COW ، سوف نقوم بتطبيقه بشكل عملي مع إرفاق كافة الادوات و الملفات الخاصة بها.




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



الأدوات المستخدمة:

  • Ubuntu 12.04 VM: 
             https://seedsecuritylabs.org/labsetup.html
  • cow_attack.c (ملف يحتوي على الثغرة بلغة الـ C).
  • ملف المهام ( من المهم الاطلاع عليه) :


بسم الله على بركة الله نبدأ


ينقسم المهام المراد عملها الى مهمتين، و هي كالتالي:


الأولى Modify a Dummy Read-Only File :

الهدف من هذه المهمة هو الكتابة إلى ملف للقراءة فقط باستخدام ثغرة Dirty COW.

نحتاج أولاً إلى تحديد ملف الهدف بالرغم من أن هذا الملف يمكن أن يكون أي ملف للقراءة فقط في النظام ، إلا أننا سنستخدم ملف وهمي (Dummy File); و السبب حتى لو ارتكبنا اخطاء لا نسبب الضرر على ملف النظام.

سنقوم بالبداية بإنشاء ملف يسمى zzz و تغيير صلاحيته للقراءة فقط للمستخدم العادي، وباستخدام امر الـ gedit سنكتب نصًا كالاتي:

111111222222333333





 نحاول الكتابة كمستخدم عادي باضافة (999999) للملف ، و نلاحظ آنه يرفض لعدم وجود صلاحية الكتابة. ومع ذلك ، بسبب ثغرة Dirty COW في النظام ، يمكننا إيجاد طريقة للكتابة على هذا الملف.

هدفنا التالي هو استبدال النمط "222222" بـ "******".

  • عند فتح ملف الثغرة (cow_attack.c) يمكننا ملاحظة الملف المستهدف و الجز المستهدف في الملف.



  • هذا الجزء مهمته استبدال ب"******" بحيث انه لن يعدل على الملف الاساسي فقط النسخة منه.




حتى نقوم بتشغيل الثغرة، سيتم إجراء استدعاء النظام madvise () بينما لا يزال استدعاء نظام write () قيد التشغيل في Loop لاينتهي. بعدها نستخدم الامر (gcc cow_attack.c -lpthread) حتى يحولي من لغة الـ C الى لغة الالة و تكون جاهزة لتشغيل.
و بعد ذلك نستخدم امر (a.out/.) لتشغيل الثغرة لبضع ثوان و بعدها نوقفه و نتأكد من نجاح الهجوم.





الثاني Modify the Password File to Gain the Root Privilege | تعديل على ملف Password للتصعيد الصلاحيات:




هدفنا الان على ملف نظام حقيقي ، حتى نتمكن من الحصول على صلاحيات الـ  Root.
ملف / etc / passwd هو الهدف. يحتوي الملف على معلومات حساب المستخدم ، سجل واحد لكل مستخدم.
اهم سجل هو الـ (UID) المخصصة للمستخدم. وهي المسؤولة الفعلية عن التحكم في الوصول في Linux ، لذا فإن هذه القيمة مهمة جدً في الـ security.


سنقوم بإنشاء حساب جديد يسمى charlie ، وسنحول هذا المستخدم العادي إلى root باستخدام هجوم Dirty COW.

  • إضافة حساب جديد يكون باستخدام الأمر adduser.

 بعد إنشاء الحساب ، يتم إضافة record جديد إلى / etc / passwd. انظر ما يلي:



  •  المهمة التالية:
         سنقوم بالتعديل على مدخل بيانات charlie في / etc / passwd ، لذا يتم تغيير الحقل الثالث من 1001 إلى 0000 ، مما يؤدي أساسًا إلى تحويل charlie إلى حساب root. الملف غير قابل للكتابة على charlie ، لكن يمكننا استخدام هجوم Dirty COW للكتابة على هذا الملف. يمكننا تعديل برنامج cow attack.c من المهمة 1 لتحقيق هذا الهدف. 





 إذا قمنا بتبديل المستخدم إلى charlie ، يجب أن نكون قادرين على رؤية علامة # في terminal، وهو مؤشر على وصولنا لصلاحيات الـ root. إذا قنا بتشغيل الأمر id ، فيجب أن نكون قادرين على رؤية أننا قد حصلت على صلاحيات الـ root .



في الختام تم رفع التطبيق على اليوتيوب يمكننكم الاطلاع عليه، اقرأ و ابحث و تعلم.

تطبيق عملي على اليوتيوب:

اضغط هُنا


المصادر:

  1. https://seedsecuritylabs.org/Labs_20.04/Software/Dirty_COW/
  2. https://dirtycow.ninja
  3. https://www.youtube.com/watch?v=Lj2YRCXCBv8














No comments:

Post a Comment