أمن وحماية السيرفراتمواضيع ومقالات

مقال : مدخل الى ثغرات الفيض Buffer Overflow

تم أرشفة هذا المحتوى


السلام عليكم

نستعرض اليوم اساسيات مهمة لثغرات الفيض Buffer Overflow ونوضح استخدامتها ومدى خطورتها وطرق استغلالها.

تحدث ثغرات الفيض Buffer Overflow عندما يتم كتابة بيانات زائدة  فى البفر اكثر مما ينبغى وتحدث نتيجة عدم التحقق من مدخلات المستخدم الذى استطاع ان يضيف بيانات اكثر مما يحمله البفر. اكثر تعريف مبسط لهذه الثغرة هو انه عندما تملىء كوب ماء عن اخره فيحدث فيض للماء خارج الكوب .

0

هذه الثغرة تلزم معرفة بلغة السى ولغة الأسمبلى .

البفر buffer هو جزء من الذاكرة لحمل البيانات بشكل مؤقت وله حجم ثابت.

الهيب heap هو جزء من الذاكرة وحجمه يتغير بحسب متطلبات وعمليات البرنامج.

الستاك “المكدس” stack  هو جزء من الذاكرة والتى تستخدمه دوال البرنامج .PUSH تضيف بيانات الى stack .وPOP تحذف بيانات من stack.

مثال مبسط لتوضيح الفكرة “لاحظ الكود التالى” :

1

المصفوفة buffer تتكون من 10 بايت .عندما نريد اضافة اى بيانات ف index لدينا من صفر الى 9 .لكننا استخدمنا 10 من اجل اضافة القيمة i فيحدث الفيض فالمصوفة فاضت عن حجمها الطبيعى .

لنوضح اكثر “لاحظ الكود التالى” :

2

سنملىء المصفوفة buffer بما يزيد عن حجمها الطبيعى لذا استخدمنا الدالة srtcpy لإضافة هذه السلسلة النصية Buffer Overflow isecur1ty وبالطبع حجمها اكبر من حجم المصفوفة وبالتالى سيحدث خطأ فى الذاكرة ويتوقف البرنامج لحدوث crash.

خطورة ثغرات الفيض Buffer Overflow :

ثغرات الفيض تسبب توقف البرنامج وتقوم بتنفيذ اكواد خبيثة “shell code” خارج نطاق اكواد البرنامج مما تسبب الحصول على صلاحيات اعلى او  الإختراق الكامل.

تستخدم ايضا فى هجمات حرمان الخدمة dos attack على المواقع.

انواع ثغرات الفيض Buffer Overflow :

Stack Overflow

Heap Overflow

Format String Overflow

منها اللوكال local داخل الشبكة المحلية او سيرفر لك صلاحيات عليه

ومنها الريموت remote خارج الشبكة وفيه يتم الإختراق عن طريق ip وله شروط اخرى.

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

ثانيا:سنحتاج تحديد المكان اللازم لحقن الشيل كود وذلك عن طريق استخدام المنقح وليكن مثلا GDB

5

مثال1 من نوع Stack Overflow

3

هذا البرنامج يأخذ مدخلات المستخدم ثم يقوم بطباعتها وعرضها
 عند تشغيل البرنامج وادخال اقل من 256 بايت يعمل البرنامج ويطبع القيمة المخزنة فى buffer ولكن ماذا اذا كانت القيمة اكبر من 256 بايت :سيظهر الخطأ التالى

4

 يمكنك ان تفتح البرنامج بالمنقح وتكتشف ما المشكلة .

مثال2 من نوع Stack Overflow

6

برنامج بسيط يطلب الباسود من المستخدم .اذا كان الباسورد هو isecur1ty يعرض لك ان الباسورد صحيح ويمنحك صلاحيات الروت واى باسورد اخر سيعرض لك Wrong Password

لكن لو حجم  الباسورد اكبر من حجم buffer سيعرض لك Wrong Password ولكنه سيمنحك صلاحيات كاملة كما لو كنت الأدمن وبدون معرفة لكلمة المرور الصحيحة

وذلك لأن الدالة ()gets  مصابة فلا تتحقق من القيم .

اساسيات GDB:

افتح الترمنال واكتب gdb واضغط انتر

7

اهم الأوامر :

run:لتشغيل البرنامج المراد تنقيحه

quit:لغلق المنقح

break:لعمل نقطة توقف مثلا عن السطر رقم 20 break buffer.c:20

info break:لعرض نقاط التوقف

list :لعرض السورس كود

continue :لإستكمال تشغيل البرنامج

backtrace:لعرض المكدس stack

info registers:لعرض المسجلات registers

help:لعرض الأوامر وشرحها

لمنع ثغرات الفيض :

1/استبدل الدوال التقليدية بدوال امنة

مثلا استخدم ()fgets بدلا من ()gets

و ()strncmp بدلا من ()strcmp

()strncpy بدلا من ()strcpy

2/استخدام ادوات لفحص الكود تلقائيا مثل its4

3/استخدام ادوات لمراقبة العمليات فى الذاكرة مثل valgrind memcheck

4/استخدام اداوت تتحقق من stack مثل StackGuard

 الى هنا ينتهى المقال اى استفسار لا تتردد فى السؤال.

 

محمود رضا

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

مقالات ذات صلة

‫19 تعليقات

  1. السلام عليكم
    مقالة رائعة بفعل
    لكن كنت افضل انها اتكون علي هيئة دورة بسيطة تعريف بالاساسيات المتعبة لمعرفة الثغرة و انشاء الشيل كود و عمل اكسبلويت كامله لثغرة
    و اتمني منكم فعل ذلك
    وشكراً
    مع مزيد من التقدم

      1. راجع السؤال، |ممكن توضيح كيف الدالة strcmp ممكن تكون ضارة عبر مثال؟|

        أنت كتبت: وذلك لأن الدالة ()gets مصابة فلا تتحقق من القيم .

        أتكلم عن strcmp :/

  2. بوست اكتر من رآئع احودة
    بس كدا انتا زاولتنى بين الهندسة العكسية والبفر لما دخلت فى حتة الـ stack
    يعنى انا لو بفهم هندسة عكسية هيبقى ساهل بالنسبالى البفر
    او بمعنى اخر
    هل فى علاقة بين الاوفر فلو والهندسة العكسية ؟

  3. بارك الله فيك، شرح أكثر من رائع للأساسيات
    وفي انتظار الدروس القادمة، وأرجو أن يتم التطرق إلى ماهية ال stack protections وكيفية تجاوزها
    وال Format String وال heap overflow

  4. عزبزي اولا تسلم على المجهود الرائع الذي تقدمه لخدمة المحتوى العربي التوعوي والارشادي لكل ما يتعلق بامن المعلومات
    ثانيا عندي تنبيه وهو المثال السابق بخصوص كلمة السر اعتقد جنابك كاتبها بالعكس يعني كاتب اذا كانت الكلمة isecur1ty فاكتب كلمة السر خاطئة
    تحياتي لك

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى