x32x01
أدارة أكتب كود
- بواسطة x32x01 ||
هجوم تجاوز سعة المخزن المؤقت Buffer Overflow !
تخيل ان لديك كوب من الماء وتقوم بملئه بالماء وبعد ثوان قليله تجد ان الكوب امتلئ ولكن انت مازلت تضع الماء فيه علي الرغم من امتلائه ونتيجة لذلك تجد ان الماء بدء يفيض من الكوب وهذه في فكرة تجاوز السعة التخزينية المؤقته .توجد حالة تجاوز سعة المخزن المؤقت عندما يحاول برنامج وضع بيانات في مخزن مؤقت أكثر مما يمكنه الاحتفاظ به أو عندما يحاول برنامج وضع البيانات في منطقة ذاكرة بعد المخزن المؤقت. في هذه الحالة ، المخزن المؤقت هو قسم تسلسلي من الذاكرة مخصص لاحتواء أي شيء من سلسلة أحرف إلى مجموعة من الأعداد الصحيحة. يمكن أن تؤدي الكتابة خارج حدود كتلة من الذاكرة المخصصة إلى إتلاف البيانات أو تعطل البرنامج أو التسبب في تنفيذ تعليمات برمجية ضارة دعني اشرح لك الامر بشكل اوسع.
على مستوى الكود ، عادةً ما تتضمن نقاط الضعف في تجاوز سعة المخزن المؤقت انتهاكًا لافتراضات المبرمج. العديد من دوال معالجة الذاكرة في C و C ++ لا تقوم بفحص الحدود ويمكنها بسهولة الكتابة فوق الحدود المخصصة للمخازن المؤقتة التي تعمل بها. حتى الدوال المقيدة ، مثل دالة strncpy () ، يمكن أن تسبب نقاط ضعف عند استخدامها بشكل غير صحيح. مزيج من التلاعب بالذاكرة والافتراضات الخاطئة حول حجم أو تركيب جزء من البيانات هو السبب الجذري لمعظم فيضان المخزن المؤقت.
يقرأ هذا الكود التالي الإدخال لمصفوفة من الأحرف ، وينسخها في المخزن المؤقت لنوع الحرف. حجم هذا المخزن المؤقت ثمانية أحرف. بعد ذلك ، يتم عرض محتويات المخزن المؤقت ووينتهي الكود.
Code:
#include <stdio.h>
int main(int argc, char **argv)
{
char buf[8];
gets(buf);
printf("%s\n", buf);
return 0;
}
الفكره ان البرنامج يستدعي دالة، والتي تعمل على المخزن المؤقت لنوع char ولا يقوم بأي فحوصات ضد تجاوز الحجم المخصص لهذا المخزن المؤقت. نتيجة لذلك ، من الممكن تخزين المزيد من البيانات عن قصد أو عن غير قصد في المخزن المؤقت ، مما يؤدي إلى حدوث خطأ. يطرح السؤال التالي: يخزن المخزن المؤقت ثمانية أحرف فقط ، فلماذا تعرض الدالة printf () اثني عشر حرفًا ؟. الجواب يأتي من تنظيم الذاكرة العملية. أربعة أحرف تجاوزت المخزن المؤقت تقوم أيضًا بالكتابة فوق القيمة المخزنة في أحد السجلات ، وهو أمر ضروري لإرجاع الوظيفة الصحيحة. نتج عن استمرارية الذاكرة طباعة البيانات المخزنة في منطقة الذاكرة هذه.
ونتيجة لذلك يستغل المهاجمون مشكلات تجاوز سعة المخزن المؤقت عن طريق الكتابة فوق ذاكرة أحد التطبيقات. يؤدي ذلك إلى تغيير مسار تنفيذ البرنامج ، مما يؤدي إلى حدوث استجابة تؤدي إلى إتلاف الملفات أو الكشف عن المعلومات الخاصة. على سبيل المثال ، قد يقدم المهاجم كودًا إضافيًا ، ويرسل تعليمات جديدة إلى التطبيق للوصول إلى نظام التشغيل.
إذا كان المهاجمون يعرفون تخطيط الذاكرة لأحد البرامج ، فيمكنهم عن قصد تغذية المدخلات التي لا يستطيع المخزن المؤقت تخزينها ، والكتابة فوق المناطق التي تحتوي على تعليمات برمجية قابلة للتنفيذ ، واستبدالها برمز خاص بهم. على سبيل المثال ، يمكن للمهاجم أن يكتب في object (كائن) يشير إلى منطقة أخرى في الذاكرة) ويوجهه إلى حمولة استغلال ، للسيطرة على البرنامج.
ولمنع تجاوز سعة المخزن المؤقت ، يجب على مطوري تطبيقات C / C ++ تجنب وظائف المكتبة القياسية التي لم يتم التحقق من الحدود ، مثل get و scanf و strcpy.
وتعد لغات البرمجة الاكثر عرضة لهذه المخاطر هي c , c++ بينما تستخدم لغات مثل PERL و Java و JavaScript و C # آليات أمان مدمجة تقلل من احتمالية تجاوز سعة المخزن المؤقت.