أسلوب وآلية وطرق منع الـ buffer overflows attack

ملخص

في الآونة الأخيرة بدأ انتشار الهجوم على شبكات و أجهزة الكمبيوتر بشكل واضح, و قد نوع مرتكبوها في أساليبهم وطرقهم مما أدى إلى صعوبة اكتشافها ومنعها. أساسيات الهجوم (BASIC ATTACKS), تعد إحدى أشهر تلك الأساليب و أوسعها انتشارا, وهي تلك الطرق التي يلجأ إليها غالبا من لا يملكون مهارات تقنية عالية أو أسس علمية يتبعونها, بل يتبعون أسلوب التخمين و الدهاء في التخريب بالإضافة إلى إجادتهم استخدام بعض البرامج و الأدوات و استغلال الثغرات الجاهزة. استغلال ثغرات البرامج (SOFTWARE EXPLOITATION) هو أحد أنواع هذا الأسلوب, و يعتمد على استغلال الثغرات الموجودة في البرنامج والتي تشكل نقطة ضعف فيه, تنتج هذه الثغرات عن خطأ برمجي موجود في برنامج أو نظام تشغيل ارتكبه و غفل عنه المبرمج أثناء كتابة البرنامج. ويعد (BUFFER OVER FLOW ATTACK), أو الهجوم بإغراق ذاكرة التخزين المؤقت, من أكثر أنواع هذا الأسلوب شيوعا وانتشارا. ويتم عن طريق إدخال المهاجم(ATTACKER ) بيانات تفوق سعة الـ (BUFFER) وهي :جزء من الذاكرة مسئول عن تخزين البيانات بشكل مؤقت, وبالتالي قد يؤدي ذلك إلى عطل أو تعليق  في الجهاز أو إظهار نتائج غير صحيحة و أخطاء في الوصول إلى الذاكرة و غيرها الكثير. فعلى المستخدم تركيب و استخدام وسائل الوقاية والأمان, والحرص على تحديث البرامج المستخدمة التي من الممكن أن الأخطاء والثغر الموجودة بها قد صححت, وذلك ليجنب نفسه وشبكته التعرض لمثل هذا الهجوم.

 

مخرجات الورقة و المستفيدين منها

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

 

مقدمة

كما أن الأجهزة و وسائل الحماية مستمرة في التطور, فإن المهاجمين (attackers) كذلك طوروا من وسائلهم وأساليب هجومهم حتى بات من الصعب على المستخدم وبرامج الحماية اكتشافها و منعها. و بلا شك معرفة تلك الأساليب وكيفية عملها, يساهم في التصدي لهم وحماية الشبكات و الأجهزة منهم.
في هذا المقال سوف أتطرق إلى الحديث عن آلية(Buffer overflow)و محاولة منعها.
الـ  (over flow) كمفهوم هو: الإفاضة أو تحميل الشيء فوق سعته, أما الـ (Buffer) هي: جزء من الذاكرة تعمل على تخزين البيانات أو المدخلات (inputs) مثل كلمة السر واسم المستخدم و غيرها  بشكل مؤقت, وتكون سعتها محددة مسبقا و معرفة في البرنامج أو نظام التشغيل.
إذن فالـ (Buffer overflow)أو الهجوم بإغراق ذاكرة التخزين المؤقت هو: “أسلوب التحميل الزائد للبيانات المدخلة, داخل مساحة محددة سلفا في منطقة حفظ البيانات المؤقتة (Buffer) مما يؤدي إلى احتمالية الكتابة فوق الكتابة الموجودة أصلا في الذاكرة.” [1]. هذه الحالة تحدث نتيجة خطأ برمجي ارتكب أثناء كتابه البرنامج, “وأكثر لغات البرمجة الشائعة التي ارتبطت بـ  ( (Buffer Overflowهي لغة C++/C لأن المبرمجين لم يزودوها بأية حماية داخلية ضد وصول أو إعادة كتابة البيانات الإضافية في أي جزء من الذاكرة.” [3]إذن فالبرمجة الضعيفة أو غير الدقيقة للبرامج, تسمح للمهاجمين بإحداث ثغرة فيها من نوع (Buffer overflow) أو (Code red worm)– “وهو دودة(worm) يستغل ثغرات البرامج, و يستطيع أن ينشر نفسه باستخدام ثغرة (Buffer overflow) الشائعة, ظهر لأول مرة عام 2001. “[4] -, و بالطبع يملك المهاجم معرفة أساسية بمفهوم برامج الحاسوب والبرمجة و إدارة الذاكرة , حتى يتمكن من استغلال هذه الثغرة و تنفيذ أوامر غير مرغوبة من باب التخريب أو التسلية أحيانا ! [2]
أسلوب وآلية عمل(Buffer overflow attack)
كما ذكرنا سابقا, بأن الـ Buffer  لها سعة محددة لتخزين كمية من البيانات, فإذا أدخلت بيانات تفوق سعتها سعة الـ Buffer, فإنها ستكتب فوق (overwrite) البيانات والأوامر الموجودة في المناطق المجاورة لها.
مثال بسيط: إذا كان المتغير (variable) في الـ Buffer مخصص لتخزين بيانات حجمها كحد أقصى يساوي (6 Characters) أي 6 حروف مثلا.
 

Computer Instructions

Buffer

6

5

4

3

2

1

Print

Run program

Accept keyboard inputs

 

 

 

 

 

 

جدول 1: الـ Buffer  ومنطقة الأوامر(instructions space)

Computer Instructions

Buffer

6

5

4

3

2

1

Shut Down

F

E

D

C

B

A

Run program

Accept keyboard inputs

 

 

 

 

 

 

و بحكم معرفة المهاجم بإدارة الذاكرة وطريقة الوصول إليها, فانه سيقصد إدخال بيانات تفوق هذه السعة رغبة منه بتنفيذ أوامر تخريبية و غير مرغوبة, كان يدخل “ABCDEFSHUTDOWN”.
جدول 2: فيBuffer overflow attack  سيتم الكتابة فوق منطقة الأوامر (instructions space)
“ABCDEF” في البداية ستكتب بأول 6 أماكن مخصصة لها,أما  “SHUT DOWN” وهي الهدف فإنها ستكتب فوق الأمر (Print) الموجود في المنطقة المجاورة و بذلك يعطي الجهاز أمر مفاجئ و غير مرغوب به وهو أمر إيقاف التشغيل, أو غيره الكثير من الأوامر التخريبية ![6]
هناك نوعان من الـ (Buffer overflow ) هما: 1- (heap overflow) البيانات الفائضة هنا ستنتقل و تفسد مواقع أخرى من الذاكرة وبالتالي ستصبح ثغرة يمكن استغلالها. النوع الأخر هو 2- (stack overflow) وهو الأكثر شيوعا, يحدث عندما يتم نقل بيانات إلىBuffer  وحجمها يكون اكبر من الحجم المخصص لها, عندما يفيض المكدس (stack) فانه يمحى أو يستبدل عنوان الرجوع من الإجراء بتالي سيسمح بتنفيذ شفرة تحكمية. [8].
في عام 2000 م اكتشفت ثغرة الـ (Buffer overflow) في مايكروسوفت أوتلوك (Microsoft outlook)والتي سمحت للمهاجم بتنفيذ تعليمات برمجية عشوائية على جهاز التضحية, وجدت هذه الثغرة عندما يتصل الـ outlook  بالخادم (Exchange server in online mode) و على عكس الفيروسات التقليدية, لا يمكن للمستخدم في ثغرة Buffer overflow بان يحمي نفسه بمجرد عدم فتح المرفق. طبقت مايكروسوفت بعدها (patch) وهو برنامج لإصلاح الثغرات الأمنية, للحد من هذا الهجوم . [7]

 

طرق منع الـ (Buffer overflow attacks)

هناك بعض الطرق التي تساعد في الحد لمثل هذا الهجوم:
•    تقييد و تحديد جميع مدخلات المستخدم: إذا صمم البرنامج مثلا لقبول 60 حرفا من المستخدم و من ثم إضافتها إلى قاعدة البيانات, و لكن المستخدم أدخل 75 حرفا! فهنا ادخل إلى قاعدة البيانات أكثر مما تستوعب, و بذلك تكون معرضة لمثل هذا الهجوم. لذا يجب مقارنه طول ما يدخله المستخدم مع الحد الأقصى المسموح به من المدخلات و اقتطاع الزائد إذا لزم الأمر.[5]
•    تدقيق الكود: يجب على المبرمج والمراجعين تدقيق و مراجعة كود البرنامج آليا و يدويا حتى يتمكنوا من اكتشاف الأخطاء الدقيقة والثغرات ومن ثم تصحيحها.
•    تدريب المطورين و تنبيههم: “على فحص الحدود المسموحة من الذاكرة و استعمالات التوابع غير الآمنة و المعايير القياسية .” [3]
•    استخدام لغة برمجة آمنة و قوية: مثل Java ,Perl  أو Ruby ,COBOL والتي تمنع الوصول المباشر للذاكرة. والابتعاد عن اللغات الغير آمنة مثل: C/C++, Assembly.
•    فحص التطبيق بشكل دوري: “بواحدة أو أكثر من الفاحصات المتوفرة و التي تبحث عن أخطاء الـ buffer overflow  في منتجات الخادم (server) و تطبيقات الويب المتخصصة.” [3]
•    تحديث البرامج المستخدمة باستمرار: على المستخدم تحديث و تحميل أخر الإصدارات من البرامج التي يستخدمها, و التي من الممكن أن الثغرات و الأخطاء الموجودة بها قد صححت.
•    عدم استخدام وتحميل برامج مجهولة أو غير موثوق فيها.
•    تعطيل الخدمات (services) والمداخل (ports) التي لا لزوم لها.
•    الحرص على تحميل برامج مكافحة الفيروسات (Antivirus) و الـ (Patch) وتحديثها بشكل مستمر.

الخلاصة

بعد استعراضنا لل (Buffer overflow attacks) ومدى خطورته على الشبكات و أجهزة المستخدمين فما علينا كمستخدمين إلا أن نأخذ الحيطة والحذر في استخدام البرامج و محاولة حماية الأجهزة و الشبكات لمثل هذا الهجوم و غيره.

الكاتب ayman

ayman

مواضيع متعلقة

اترك رداً