ما معنى فيض المكدس Buffer Overflow
مقدمة:
(Buffer Overflows) أو فيض الذاكرة المؤقتة أو فيض البفر هو مصطلح دائما ما نسمع عنه هذه الأيام ويترادف مع مصطلحات أخرى كالثغرات الأمنية (Vulnerabilities) و بريمجات تفعيل و استغلال هذه الثغرات (Exploits). هذا المصطلح هو كابوس يهدد أمن و حماية حاسبك الآلي حتى مع وجود أحدث و أفضل برامج الحماية. فيض البفر هو الدليل على العلم الواهن لدى رجالات علم الحاسوب و البرامج بل هو نتاج البرامج الغير متقنة و التي تحتوي على عيوب كعيب فيض البفر.
ما هو فيض الذاكرة:
تخيل لديك كأس يتم ملأه قطرة قطرة حين يمتلأ ماذا سيحدث؟؟؟ أكيد سيفيض ومن هنا يأتي مصطلح الفيض, حسنا ذلك الفيض سنجعله ماء ساخن ونكون قد إستفدنا منه لكن ليس كثيرا من الأفضل إضافة بعض الأشياء للحصول على كأس شاي أظن قد فقهمت المغزى . لنوضح أكثر:
البرنامج كما تعلمون هو أوامر تنفذ بالترتيب وبغاية الدقة والمعالجة... تخيل لديك بريمج يطلب إسم ويجب للإسم أن يكون أقل من 5 أحرف جميل, ماذا لو أعطيناه 6 سيقوم بمعالجة 5 والآخر ماذا سيفعل به؟؟؟؟ لاادري حسن سأشرح
كل شيء منظم في الذاكرة وبأحجام محدودة مسبقا عندما نقوم بتعريف متغير من حجم 5 بايت ونعطيه 6 سينتقل الى المتغير الذي بجانبه أي سيفيض على الآخر وماذا لو تحتاج الآخر كمتغير يحتوي قيم العودة أكي سيكون خطأ لأنه تم حجز قيمة من المتغير السابق لمصلحته يقع خلط و في الأخير يحصل خطأ وبالتالي هناك ثغرة في البرنامج.
انواع فيض الذاكرة:
فيض البفر يكون إما فيض في مكدس البرنامج (stack overflows)أو فيض الذاكرة المخصصة للبرنامج أثناء تنفيذه(heap corruption) أو كخلل أثناء تعريف النصوص (format string bugs).
فيض البفر قد يكون موجود محليا (في جهازك) في برامج كالتقويم أو الآلة الحاسبة أو في تطبيقات ميكروسوفت أوفيس أو قد يكون موجود في برامج خارجية كسرفرات الايمايل و الانترنت. و تذكر أن من بين البرامج التي تحتوي على فيض البفر فان البرامج المعروفة و المستخدمة بكثرة هي التي تجلب اهتمام الهاكرز كتطبيقات ميكروسوفت مثلا.
• Buffer Overflow يحدث فيض البفر عندما يتم نسخ حجم من البيانات إلى البفر بأكثر من حجم الذاكرة المخصصة له. هناك نوعان من الفيض وهما فيض ذاكرة المكدس و فيض ذاكرة الهيب.
• Format String Bug عند استخدام وظائف تنسيق مخرجات النصوص كوظائف ((printf و (fprintf) و (syslog) فلابد من تحديد تنسيق النصوص بوضوح أما إذا أمكن للمستخدم بإدخال بيانات إلى الوظيفة فيمكن إنشاء بفر و من ثم التحكم في البرنامج. علما بأن هذه الوظائف أصبحت قليلة الاستخدام لسهولة كشفها واستغلالها.
• Heap Corruption غالبا ما يشار إلى فيض ذاكرة الهيب بمصطلح خلل فساد ذاكرة الهيب (bug (Heap Corruption لأنه عندما يفيض بفر المكدس فان البيانات تفيض إلى بفر آخر أما في حالة فيض ذاكرة الهيب فان البيانات الفائضة ستجتاح وتفسد مواقع أخرى من الذاكرة و مواقع الذاكرة هذه قد تكون أو لا تكون مهمة أو قابلة للاستفادة. فإذا ما فاضت البيانات إلى موقع ذاكرة هيب آخر فإنها تصبح حينئذ ثغرة يمكن استغلالها. هناك صور لخلل فساد ذاكرة الهيب وهذه الصور تشمل احد تطبيقات وظيفة Malloc وفيضان البفر الثابت. وبعكس فيض المكدس فيجب توفر عدة متطلبات حتى يتم استغلال فيض ذاكرة الهيب.
• Off-by-One بزايد واحد وهو فيض يحدث عندما يتم نقل بيانات إلى ذاكرة البفر بمقدار بايت واحد زيادة عن حجم البفر المحدد. عادة ما يحدث هذا عندما لا يتم حساب البايت الذي يمثل الصفر.
• Stack Overflow يحدث فيض المكدس عندما يتم نسخ حجم من البيانات إلى البفر بأكثر من حجم الذاكرة المخصصة للمكدس. عندما يفيض المكدس فانه يطمس أو يستبدل عنوان الرجوع من الإجراء مما يسمح بتنفيذ شفرة تحكمية. أكثر عملية استغلال للثغرات حدوثا هي عملية استغلال فيض المكدس..
أمن البرامج:
هندسة البرامج هي مهمة صعبة و مهنة مهندسي البرامج هي الأصعب بين قرنائها من المهن فهي أساسا تطلب المستوى العالي من حيث التصميم بالإضافة إلى تقييم و اختيار عنصر الطرف الثالث و اختيار وسيلة الاتصال الأنسب و الأهم من هذا كله أنها تحتاج إلى علم و دراية متينة بأنظمة التشغيل ولغات البرمجة مع نقاط قوتها و ضعفها من حيث تنفيذ برامجها على الأجهزة أو المعالجات المختلفة. أضف إلى ذلك كله الضغوط المتزايدة لتصميم برامج مرنة و غير قابلة للاختراق من قبل ماكري الهاكرز.
الثغرات الأمنية قد تستغل عن بعد بتنفيذ شفرة برمجية لأداء مهمة ما و غالبا ما تستغل لإنشاء فيروسات أو ما يعرف بديدان الانترنت. دودة الساسر (Sasser worm) هي من أكثر هذه الديدان شهرة و تدميرا والتي تكاثرت عبر ثغرات أمنية من نوع فيض البفر والتي وجدت في أنظمة تشغيل ميكروسوفت آنذاك.
الفيروسات تتكون من أربعة عناصر:
• فحص الثغرات الأمنية
• استغلال
• نسخ
• تكاثر
فحص الثغرات الأمنية يسهم في إيجاد منافذ استغلال حيث يقوم الهاكرز بحقن شفرة برمجية (كود) إلى هذه الثغرة في الجهاز الهدف و من ثم تقوم هذه الشفرة بنسخ نفسها على الجهاز الهدف وتتكاثر و تنتشر باستخدام نفس التقنية إلى أجهزة أخرى.
زيادة عدد ثغرات فيض الذاكرة المؤقتة:
من الصعب تحديد زيادة أو نقصان عدد ثغرات فيض البفر فقد زلت مؤسسة مايتر (Mitre) في بحثها في تحديد عدد ثغرات فيض البفر والتي حدثت خلال الفترة من عام 2001 وحتى عام 2004 رغم قضاء حوالي تسعة أشهر في جمع المعلومات حيث تشير إحصائيتها إلى تناقص عدد ثغرات فيض البفر خلال تلك السنوات. والمشكلة تكمن هنا في أن معلومات المؤسسة أخذت من سجلات حكومية فقط بينما تشير مؤسسة سكيوريتي فوكاس (Security Focus) إلى عدد اكبر من ذلك.
يشكل فيض البفر حوالي 20% من مجموع الثغرات الأمنية. وهي كما تعلم نوع من أنواع الثغرات الأمنية أما عملية استخدام هذه الثغرة لاختراق نظام تسمى استغلال نظام (Exploiting a system) أما بريمجات الاستغلال (Exploits) فهي التي تفحص الثغرات الأمنية في أنظمة الهدف بغية استغلال هذه الثغرات و تنفيذ الشفرة فإذا ما كانت الثغرة محل رفض لتنفيذ الشفرة فسيعمل البريمج على تحطيم النظام و إذا ما أمكن تنفيذ الشفرة فسيعمل البريمج على اجتياح ثغرة الهدف و تفريخ غلاف نظام يمكن النظام الغازي من الاتصال بالهدف لاحقا.