• بواسطة x32x01 ||
هجوم تجاوز سعة المخزن المؤقت Buffer Overflow !
0*TH9CGzvXkpRA_1AO.jpg
تخيل ان لديك كوب من الماء وتقوم بملئه بالماء وبعد ثوان قليله تجد ان الكوب امتلئ ولكن انت مازلت تضع الماء فيه علي الرغم من امتلائه ونتيجة لذلك تجد ان الماء بدء يفيض من الكوب وهذه في فكرة تجاوز السعة التخزينية المؤقته .

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

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

يقرأ هذا الكود التالي الإدخال لمصفوفة من الأحرف ، وينسخها في المخزن المؤقت لنوع الحرف. حجم هذا المخزن المؤقت ثمانية أحرف. بعد ذلك ، يتم عرض محتويات المخزن المؤقت ووينتهي الكود.
Code:
#include <stdio.h>
int main(int argc, char **argv)
{
char buf[8];
gets(buf);
printf("%s\n", buf);
return 0;
}
عند تشغيل الكود نكتب 1235678 وتري الناتج 1235678 و الان نحاول تجاوز السعة التخزينيه نشغل الكود ثم ندخل 12 رقما 123456789012 وبعدها نلاحظ ان النتيجه هي نفس الرقم الذي ادخلناه .

الفكره ان البرنامج يستدعي دالة، والتي تعمل على المخزن المؤقت لنوع char ولا يقوم بأي فحوصات ضد تجاوز الحجم المخصص لهذا المخزن المؤقت. نتيجة لذلك ، من الممكن تخزين المزيد من البيانات عن قصد أو عن غير قصد في المخزن المؤقت ، مما يؤدي إلى حدوث خطأ. يطرح السؤال التالي: يخزن المخزن المؤقت ثمانية أحرف فقط ، فلماذا تعرض الدالة printf () اثني عشر حرفًا ؟. الجواب يأتي من تنظيم الذاكرة العملية. أربعة أحرف تجاوزت المخزن المؤقت تقوم أيضًا بالكتابة فوق القيمة المخزنة في أحد السجلات ، وهو أمر ضروري لإرجاع الوظيفة الصحيحة. نتج عن استمرارية الذاكرة طباعة البيانات المخزنة في منطقة الذاكرة هذه.
ونتيجة لذلك يستغل المهاجمون مشكلات تجاوز سعة المخزن المؤقت عن طريق الكتابة فوق ذاكرة أحد التطبيقات. يؤدي ذلك إلى تغيير مسار تنفيذ البرنامج ، مما يؤدي إلى حدوث استجابة تؤدي إلى إتلاف الملفات أو الكشف عن المعلومات الخاصة. على سبيل المثال ، قد يقدم المهاجم كودًا إضافيًا ، ويرسل تعليمات جديدة إلى التطبيق للوصول إلى نظام التشغيل.

إذا كان المهاجمون يعرفون تخطيط الذاكرة لأحد البرامج ، فيمكنهم عن قصد تغذية المدخلات التي لا يستطيع المخزن المؤقت تخزينها ، والكتابة فوق المناطق التي تحتوي على تعليمات برمجية قابلة للتنفيذ ، واستبدالها برمز خاص بهم. على سبيل المثال ، يمكن للمهاجم أن يكتب في object (كائن) يشير إلى منطقة أخرى في الذاكرة) ويوجهه إلى حمولة استغلال ، للسيطرة على البرنامج.
ولمنع تجاوز سعة المخزن المؤقت ، يجب على مطوري تطبيقات C / C ++ تجنب وظائف المكتبة القياسية التي لم يتم التحقق من الحدود ، مثل get و scanf و strcpy.

وتعد لغات البرمجة الاكثر عرضة لهذه المخاطر هي c , c++ بينما تستخدم لغات مثل PERL و Java و JavaScript و C # آليات أمان مدمجة تقلل من احتمالية تجاوز سعة المخزن المؤقت.
 

المشاركات المتشابهة

الردود
0
المشاهدات
12
الردود
0
المشاهدات
10
الردود
0
المشاهدات
11
الردود
0
المشاهدات
13
الردود
0
المشاهدات
15
الوسوم : الوسوم
buffer overflow
عودة
أعلى