- بواسطة x32x01 ||
هجوم Buffer Overflow - شرح بسيط ومفيد للمطورين والأمن 
نفترض إن عندك كوب ماء وبتملّيه لحد ما يفيض - فكرة تجاوز سعة المخزن المؤقت (Buffer Overflow) شبه كده: برنامج بيحاول يحط بيانات أكتر من اللي المخصص في مكان معين في الذاكرة، فبتتكتب البيانات على أماكن تانية وتسبب مشاكل كبيرة.إيه هي مشكلة Buffer Overflow ببساطة؟
في الكود، الـ مخزن مؤقت (buffer) ممكن يكون مصفوفة أحرف أو مجموعة أعداد أو أي مساحة مخصصة في الذاكرة. لما واحد يحاول يكتب فيها أكثر من سعتها أو يكتب بعد نهايتها، ده بيخلي البيانات تمتد على مناطق مجاورة - وده ممكن يخرّب بيانات تانية، يوقف البرنامج، أو يسمح لتعليمات خبيثة إنها تتنفّذ.ليه الثغرات دي بتطلع؟ (الجذور)
- في لغات زي C و C++ فيه دوال بتتعامل مع الذاكرة من غير تحقق تلقائي من الطول (مثال: بعض استخدامات strcpy, gets, scanf لو اتتعاملت غلط).
- مبرمج ممكن يفترض إن المدخل دايمًا بنفس الطول، أو يدخل بيانات من مصدر غير موثوق من غير فحص.
- تركيبة المعطيات والافتراضات الخاطئة عن حجم الداتا بتسبب معظم مشكلات الفيض.
مثال توضيحي مُبسّط (فكرة مش تنفيذ)
لو عندنا كود بياخد نص ويخزنه في مصفوفة حجمها 8 أحرف، وبعدين نكتب في المصفوفة نص أطول من 8 حروف، البرنامج ممكن يطبع حاجة أكبر من اللي المفروض، لإن البيانات اتعدّت على مواقع تانية في الذاكرة.
(الفكرة اللي في المثال إن دوال بدون فحص الحدود بتسمح للبيانات تتعدى وتكتب أماكن مش متوقعة - وده اللي بيخلق فيضان الـ buffer.)
ليه المهاجمين بيستغلوا Buffer Overflow؟
- تنفيذ كود: لو المهاجم عرف تخطيط الذاكرة، ممكن يكتب بيانات تحرف عنوان العودة (return address) وتخلي البرنامج ينفّذ كود بتاعه.
- إتلاف أو سرقة بيانات: ممكن يغيّر قيم مهمّة في الذاكرة، أو يقصي مكونات أمان.
- الاستمرار في النظام: بدل ما يبقى في عملية منفصلة، ممكن يغير سلوك برنامج موجود ويشتغل من جوه.
لغات أكتر عرضة وأقل عرضة - ليه؟
- اللغات زي C و C++ معرضة أكتر لأن التحكم في الذاكرة يدوي ومافيش فحص طول تلقائي.
- لغات زي Java, C#, Python, JavaScript, Perl بتقدملك آليات حماية (مثل إدارة الذاكرة والتحقق من الأطوال) فتقلل خطر فيضان المخزن المؤقت، لكن مش بتقضي كل المخاطر (فيها ثغرات من نوع تاني).
إزاي تمنع مشاكل Buffer Overflow؟ (نصايح عملية للمطورين) 
استخدم دوال آمنة وتحقق دائمًا من الطول
متستخدمش دوال قديمة بتتعامل من غير حد للطول. استعمل دوال مؤمنة أو تابع طول المدخل قبل نسخه.اعتمد على لغات أو مكتبات توفر حماية
لو تقدر تختار لغة أعلى مستوى أو مكتبات تعالج الإدخالات بأمان، ده يقلل المشاكل.تفعيل آليات الحماية في وقت التنفيذ
فعِّل تقنيات زي DEP (Data Execution Prevention) وASLR (Address Space Layout Randomization) لأنهم يقللوا من نجاح هجمات حقن الكود.تدقيق الكود وفحص الثغرات (Code Review & Fuzzing)
راجع الكود، وافحص نقاط الإدخال باستمرار باستخدام أدوات فحص تلقائي (fuzzers) عشان تلاقي مدخلات غير متوقعة.اختبارات أمان قبل الطرح (Security Testing)
اعمل اختبارات قبل الإطلاق، وادرب فرق التطوير على كيفية كتابة كود آمن.سياسة أقل الصلاحيات (Least Privilege)
شغِّل الخدمات والتطبيقات بأقل صلاحيات مطلوبة - لو حصل استغلال قدرته هتقل.أدوات واستراتيجيات للـ Ops وفرق الـ SOC
- راقب الأخطاء (crashes) والسجلات اللي بتدل على إدخال غير متوقع أو تلاعب بالذاكرة.
- نفّذ تحديثات (patching) بسرعة على المكتبات والبرمجيات اللي فيها ثغرات.
- استخدم حلول كشف السلوك (EDR) عشان تلاقي محاولات استغلال مبكرة.
- جهز خطة استجابة للحوادث تتضمن تحليل الذاكرة (memory forensics) لو حصل استغلال.
التعديل الأخير: