اقدم لكم درس يشرح ما معنى الـ Buffer Overflows .. وانشالله تستفيدون منه
يله نبدأ
محتويات الدرس:
1- ما هو الـ Buffer Overflow ؟
>--------------------------
2- المعالجه(Proccess)
>-----------------
3- إدارة الذاكره (Memory management)
>--------------------------------
4-استغلال ماذكر في الـ Buffer Overflow
>----------------------------------
* ماذا يجب أن أعرف قبل أن أقرأ هذه المقالة؟
ليس الكثير،،، فهذا دليل اساسي لك اذن فقط تحتاج ان تكون لديك معرفة أساسية بمفهوم برامج الحاسوب وإدارة الذاكرة
1-ما هو الـ Buffer Overflow؟
>-----------------------<
Buffer Overflow حالة تحدث لبرنامج بسبب برمجة سيئة أو بمعنى اخر برمجة تحمل أخطاء.
احدث ثغرة يمكنك أستغلالها من نوع Buffer Overflow تسمى فايروس 'code red' ، التي أستغلت في خادم IIS لمايكروسوفت -MS web server -
عموما، يحدث Buffer Overflow عندما يظهر برنامج ما متغيّر بحجم ثابت (على سبيل المثال،حجم 20 بايت) و القيمة التي خصّصت إلى هذه المتغيّر أكبر من حجم المتغيّر.
خذ هذا المثال:
يظهر برنامجي على الشاشة هذه الجملة: "رجاء إطبع اسمك الأول: "ثم سيأخذ برنامجي من المستخدم البيانات التي سيدخلها وهي (اسمه الأول) ثم توضع في متغير فتظهر في برنامجي او تخزن.
المشكلة هنا تكمن في انه إذا كان المتغيّر مخصص لتخزين بيانات حجمها الأقصى يساوي 15 بايت والبيانات هنا(وهي اسم المستخدم)حجمها 25 بايت التي ستخزن في المتغير (يتضح لنا ان اسم المستخدم وضع في مكان اقل من حجمه ).
اذن ماذا سيحدث للبيانات الزائدة عن 15 بايت من المؤكد انها سـ"تطفح Overflow" على الذاكرة التي خصّصت لمتغيّر الاسم.
عندما يبدأ البرنامج، تخصّص الذاكرة :
10b 6b 15b
(var 1 وvar 2 متغيّرات ليست لها علاقة بالأسم المدخل ,vname المتغيّر الذي حجمه 15 بايت
وهو الذي سيحتوي الاسم الذي سيدخله المستخدم)
نفترض ان المستخدم سيدخل الاسم " abcabcabcabcabcabcabcabca
bc" حينها ستبدو الذاكره هكذا:
somevalue2avalusabcabcabc
abcabcabcabcabcabc
اذا ماذا حدث ؟؟ المتغيّر vname "طفح overflowed" بسبب البيانات المدخلة عليه من قبل المستخدم و قيمة "other things in memory أشياء اخرى في الذاكره" تغيّرت بسبب فيض(overflow) الحروف من ادخال المستخدم.
اذن كيف أستغلّ هذا الخطأ؟؟؟
قبل أن نصل إلى الجواب، هناك بعض الأشياء الأساسية المهمة التي يجب علينا أن نعرفها حول تركيب وبنية الحاسوب .
في هذه المقالة سنناقش نظام لينكس linux، لكن المفهوم مماثل لباقي الأنظمة.
2-المعالجه(Proccess):
>----------------<
إنّ الوحدة الوظيفية الأساسية في حاسوب يعمل هي عملية المعالجه (Proccess).في الحاسوب هنالك العديد من العمليات ونظام التشغيل مسؤول عن تقسيم القوّة التي تجعل العديد من العمليات تعمل في نفس الوقت في الحاسوب.
ليس هناك شيء إسمه "متعددالعمليات Multi- proccesses" صحيح... كيف اذن؟؛ انَّ وحدة المعالجة المركزية(CPU) تنتقل بين العمليات كلُُ على حده بسرعة كبيره بحيث تبدو مثل العديد من المهام التي تعمل في وقت واحد،
اذا تبدو لنا كأن العمليات تعمل في وقت واحد وهذه من خدع الحاسوب التي يؤديها علينا ..
كلّ عملية لها عنوان فاضي من الذاكره ، ولايمكن لأي عمليةآخرى تدخل في هذا المكان الفاضي من الذاكرة. وهذا يرشدنا الى شي اخر يجب ان تفهمه وهو:
3-إدارة الذاكره (Memory management):
>------------------------------<
تدير أنظمة التشغيل-operating systems-الحديثة ذاكرة افتراضية virtual memory(تخيلية).
ذلك يعني بأنّه لايمكن لأي تطبيق (برنامج مثلا) الوصول مباشرة إلى الذاكرة الحقيقية.لماذا؟؟
انظمة التشغيل Operating System تمتلك جدول تخطيط "تحويل العناوين الحقيقية من الذاكرة الى عناوين افتراضية(تخيلية)" .
وعندما تقوم ذاكرة الـ OS (نظام التشغيل)بتحديد مكان في الذاكرة لبرنامج معين لتشغيله ،يأخذ البرنامج العنوان التخيليّ فقط ، وليس العنوان الطبيعي.
و هنالك استخدام اخر للذاكرة الإفتراضية(التخيليّة) وهي انه من المعلوم أن الذاكرة الحقيقية لا ترتبط مباشرة بكل عملية (أو برنامج)، فنظام التشغيل يستخدم مساحة على القرص الصلب كذاكرة،
والتطبيق لا يمكنه أبدا معرفة مكان الذاكرة ( مكان الذاكرة الحقيقة )،ذلك لأن المساحة المخصصة للذاكرة في القرص الصلب تتبدل وتتغير.
توضيح :. ان الذاكرة لا تنقسم الى ذاكرة حقيقة وذاكرة افتراضية بل أنهما ينتميان لذاكرة واحد
اذن ما فائدة التسمية الى حقيقية وافتراضية ؟؟ الجواب هو للمتييز فقط ، حيث ان الذاكرة الحقيقة تمثل مساحة معينة من القرص الصلب (ومكان هذه المساحة في تغير مستمر) لذلك سميت حقيقية او بمعنى اخر طبيعية (اي بأستطاعتك لمس مكان الذاكرة الطبيعية بيدك على القرص الصلب)
وفائدة الذاكرة الإفتراضية هي إعطاء عنوان افتراضي (غير حقيقي ) للذاكرة الحقيقية اي يعطي عنوان كأسم فقط لمكان مساحة الذاكرة الطبيعية في القرص الصلب ، وإن تغير مكان المساحة المخصصة للذاكرة يظل العنوان الإفتراضي(التخيلي) ثابت.
4-استغلال ماذكر في الـ Buffer Overflow
>---------------------------------<
الآن نصل إلى الجزء الأهم والمرح
كيف نستفيد من الذي قلنا عن المعالجة وإدارة الذاكرة للوصول والدخول الى الجذر (Root) وأختراق النظام؟ تذكّر نحن قلنا في وقت سابق بأنّه عندما يكون الإدخال(البيانات) من المستخدم أكبر حجما من الذاكرة التي خصّصت لهذه البيانات، البيانات الزائدة ستفيض (overflow) في الذاكرة التي بعد الاسم المتغيّر؟ هذا المكان من الذاكرة هو المكان الذي نستفيد منه في الأختراق.
ماذا نعمل في ذلك المكان: داخل خط (مكان) البيانات التي يدخلها المستخدم (في المثال السابق وهو الاسم الأول الذي يطلب من قبل البرنامج ثم أدخلناه ) نضع الأوامر الأكثر شعبية للحاسوب، حيث هذه الأوامر تجعل الحاسوب يحدث(ينتج) هيكل نستطيع استخدامه فيما بعد للقيام بالسيطرة الكاملة للنظام المستغلّ. القيام بهذا العمل ليس بيسطا كما يبدو لك، إذن لو أردت معرفة كيف يعمل ، أنت يجب أن تقرأ المقالة القادمة حول Buffer Overflows، الذي سيصف بالضبط كيف لإستغلال واحده من الـBuffer Overflows في الإختراق.
اخيرا اتمنى انكم فهمتوا الدرس زين وعرفتوا ايش معنى Buffer Overflow واللي فهم الدرس نص نص يعيد قرائته اكثر من مرة مع التدقيق وانشالله يفهم.
انتهى،،،