• 0
Ahmed18

ما معنى فيض المكدس Buffer Overflow

سؤال

الإسهاب في مصطلح فيض الذاكرة المؤقتة (Buffer Overflows)

5/ ما معنى فيض المكدس 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) فهي التي تفحص الثغرات الأمنية في أنظمة الهدف بغية استغلال هذه الثغرات و تنفيذ الشفرة فإذا ما كانت الثغرة محل رفض لتنفيذ الشفرة فسيعمل البريمج على تحطيم النظام و إذا ما أمكن تنفيذ الشفرة فسيعمل البريمج على اجتياح ثغرة الهدف و تفريخ غلاف نظام يمكن النظام الغازي من الاتصال بالهدف لاحقا.

تطبيق عملي:

كشف وإستغلال ثغرات أنظمة التشغيل

والمثال المتطبق علية الدرس مرفق

والدرس كامل مرفق بصيغة doc

myexp0a.zip

Buffer_Overflows_Attacks.rar

تم تعديل بواسطه Xacker
إضافة السؤال
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

13 إجابة على هذا السؤال .

  • 0

أظن أنا في اللغات الحديثة خرجنا من هذا الموضوع

على الأقل هذا غير موجود في جافا على حسب علمي

إن كان أحد لديه فكرة عن وجوده في الجافا

أرجو أن يبلغنا

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعني ++C لغة قديمة ؟ :D

أنت أعلم مني بالجافا، اسأل نفسك، هل هناك استخدام خاطئ لشئ ما عند التصريح عن متحولات ونسخ قيم ما في الذاكرة من مكان لآخر يمكن أن يسبب خطأ في البرنامج إن لم يتم وضع بعض الشروط من قبل المبرمج ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حسب تجربتي المتواضعة في الجافا

اللغة لا تسمح بمثل هذه التجاوزات التي لن تتم ترجمة أي كود يحتويها (جرب و أعلن عن جدول من n عنصر و حاول الولوج إلى العنصر n+1 فتظهر لك راسلة خطأ)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ليس الفكرة محاولة الدخول إلى عنصر يتجاوز مكانه الطبيعي، لكن افرض n مصفوفة من 100 حرف، هل يمكن كتابة 101 حرف فيها؟ لا أكيد هذه من البديهيات التي يقوم بها كومبايلر الجافا. طيب هل هناك أمور أخرى يجب الحذر منها عند الكتابة بجافا؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالتأكيد لا

لأسباب كهذه تجد الجافا تمنع استخدامات pointer

لكني قلت لعل وعسى فالإنسان ما يفتأ يتعلم كل يوم شيء جديد

بالنسبة لموضوع اللغات الحديثة

قصدت اللغات التي تقوم على vm

أو للدقة التي تجعل التعامل بين البرامج والعتاد يتم من خلال طبقة وسيطة

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

موضوع جميل

طبعا ذكرت ان هناك عدة انواع من الفيض

ولكن اتوقع ان الفيض الوحيد القادر على تحويل مسار التنفيذ الى مسار آخر هو فيض المكدس فقط

طبعا كما ذكرت سابقا فانه يطمس عنوان الرجوع ويغير ......

ولكن باقي انواع الفيض لا يحدث بوقوعها القدرة على تحويل مسار التنفيذ

ما رايك بالمقولة السابقة؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا استطيع ان اجيبك علي سؤالك لاني لم اتعامل مع باقي الانواع لكن نظريا لا يمكن استغلال الثغرة الا اذا تم تعديل عنوان الرجوع الي الشيل كود وتحويل مسار البرنامج كما يحدث في فيض المكدس

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنا آسف الى أني لن أضيف شيئا الى المعلومات الخاصة بهذا الموضوع ولكني أريد أن اسأل :-

هل يرى أحد غيري أن ترجمة الكلمات الأجنبية شيء خاطيء (فيض المكدس) ؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حسب علمي (وهو قليل جدا لاني مبرمج هزيل :lol:) ان اللغات امثال جافا ازالت POINTER و اضافت تقنية معالجة EXCEPTION (اعرف انها توجد في جميع اللغات -_-) لكنها مميزة في JAVA بسبب وجود الالة الافتراضية التي في حالة وجود خطا توقف البرنامج وتظهر رسالة الخطا اما في برامج التي يكون كودها NATIVE فان الثغرة تعمل بسهولة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم.

ولكن اتوقع ان الفيض الوحيد القادر على تحويل مسار التنفيذ الى مسار آخر هو فيض المكدس فقط

طبعا كما ذكرت سابقا فانه يطمس عنوان الرجوع ويغير ......

ولكن باقي انواع الفيض لا يحدث بوقوعها القدرة على تحويل مسار التنفيذ

ما رايك بالمقولة السابقة؟؟

لا ليس الأمر كذلك هنالك طرق كثيرة لو تلاحظ اثناء تسمية الثغراة وخاصة الثغرات الخاصة بميكروسوفت تجد الإسم Remote Code Execution هذه العبارة لها معنين المعنى التقليدي وهو تشغيل اكواد عن طريق تغير سير التنفيذ بالكتابة على عنوان العودة وهنالك معنى آخر وهو الآن رائج في ثغرات المتصفح هو Arbitrary DWORD Overwrite اي انه وبطريقة ما سواءا كان بثغرة Heap Overflow او خطأ يستطيع الوصول إلى المسجلات والتحكم فيها (مثلا EDX و EAX) ويجعلها تشير إلى عنوان ما ويعتمد على تعليمة mov للكتابة على بينات مهمة في الذاكرة او مشرات لنقل سير التنفيذ،البرنامج مثلا به خطأ في التعليمة التالية

mov dword ptr ds:[edx],eax

اذا استطعت التحكم في المسجلين EAX و EDX ساجعل EAX

يشير إلى عنوان الشل كود الخاص بي و EDX يشير إلى Pointer لدالة معينة يستخدمها البرنامج او اقوم بالكتابة على مؤشر UnhandledExceptionFilter وهذه هي الطريقة الشائعة في إستثمار ثغرات Heap.

وهنالك موضوع كتبت عنه هنا في المنتدى وهو الكتابة على مؤشرات او الكتابة على برامترات لدوال تقوم بتشغيل الشل كود.

تجده هنا

http://www.arabteam2000-forum.com/index.php?showtopic=178668

تم تعديل بواسطه DATA_SNIPER
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فعلا Data Sniper الثغرة التي اكتشفتها انت وقمت بشرحها تستخدم قيم في Memory وليس ال Stack وهو مثال حي

اذا استطعت التحكم في المسجلين EAX و EDX ساجعل EAX

يشير إلى عنوان الشل كود الخاص بي و EDX يشير إلى Pointer لدالة معينة يستخدمها البرنامج او اقوم بالكتابة على مؤشر UnhandledExceptionFilter وهذه هي الطريقة الشائعة في إستثمار ثغرات Heap.

هنا كيف ستستطيع ان تغير محتويات احد المسجلات، الا اذا كان احد هذه المسجلات ياخذ قيمه من ذاكرة قد تم الوصول اليها والعبث بمحتوياتها ثم تكون هناك تعليمة مثل:

mov		   eax,dword ptr [memory address that its content modified]

كيف ستقوم بالكتابة على مؤشر UnhandledExceptionFilter هل لديك مثال حي استفيد منه؟

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
هنا كيف ستستطيع ان تغير محتويات احد المسجلات، الا اذا كان احد هذه المسجلات ياخذ قيمه من ذاكرة قد تم الوصول اليها والعبث بمحتوياتها ثم تكون هناك تعليمة مثل:

كود

mov eax,dword ptr [memory address that its content modified]

نعم هذا امر حتمي و إلا فكيف سيحدث ذلك :)

كيف ستقوم بالكتابة على مؤشر UnhandledExceptionFilter هل لديك مثال حي استفيد منه؟

في نظام ويندوز XP SP1 تستطيع ذلك من خلال معرفته عن طريق تحليل الدالة SetUnhandledExceptionFilter وإستخراج العنوان يمكنك ان تجد مثال حي عن ذلك هنا

http://www.milw0rm.com/video/watch.php?id=56

فيما يخص الأنظمة الحديثة و الحزم الجديدة فالأمر معقد.

السلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك DATA_SNIPER

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .