مدونة كورتكس هكر 4 5 24
اكتب ما تود البحت عنه و اضغط Enter
معذرة، فالصفحة التي تبحث عنها في هذه المدونة ليست متوفرة.

الأربعاء، 9 يناير 2019

اكتشاف ثغرات الفيض البوفر اساسيات ومصطلحات Buffer Overflow

سعيد

اكتشاف ثغرات الفيض البوفر اساسيات ومصطلحات Buffer Overflow

ما هي ثغرات الفيض اساسيات ومصطلحات |  Buffer Overflow Basic

سنتعرف في هذا المقال على اساسيات مهمة لثغرات الفيض Buffer Overflow ومصطلحات أساسية تحتاجها في مجال تطوير واكتشاف ثغرات الفيض, وهذا يسهل عليك طريق اكتشافه واستخدام ثغرات الفيض , لمدى خطورتها وطرق استغلالها كالمحترفين.
  • ان اغلب انظمة Linux  والبرامج الحديثة مكتوبه بلغة البرمجة السي والاسمبلي C/C++,ASM، فنظام اللينكس مفتوح المصدر ويمكننا من الوصول السهل للـ compiler و  assembler و débugger , ايضا اكتشاف واستغلال الثغرات في انظمة اليونكس اسهل وابسط للفهم من وجه نظر الكثير من المبرمجين ، ولهذا أنصح باستخدام  نظام اللينكس في استغلال واكتشاف ثغرات الفيض لأنه أسهل بكثير من الويندوز في هذا المجال بالذات

مصطلحات ومفاهيم حول ثغرات الفيض والذاكرة

قبل التعرف على ثغرة الفيض يجب أن ندرس بعض المفاهيم الأساسية ومصطلحات  ستقابلنا كثيرا في مشوارنا.
يتكون جهاز الكمبيوتر من قسمين أساسين :
 العالج : CPU هو السؤول عن تنفيذ العمليات الحسابية في الجهاز.
الذاكرة العشوائية  : Memory يتم تخزين البيانات فيها مؤقتا وعند اطفاء الجهاز واعادة تشغيله تفقد البيانات،

ماهي المسجلات Registers

عبارة عن ذاكرة صغيرة داخل وحدة المعالجة المركزية,  تتميز بسرعة عمليات الوصول اليها مقارنة بالذواكر الأخرى، أي أنها تتيح للمعالج الوصول إلى البيانات المخزنة في السـّـِـجــِـلاّت بشكل سريع جدًا.
يتمثل دور السجلات فيما يلي:
تسخدم السـّـِـجــِـلاّت (registers) غالباً كمكان تخزين مؤقت للتعليمات والبيانات الجاري تنفيذها إضافة لاستخدامات خاصة مثل عنونة الذاكرة والتحكم في مسار تنفيذ التعليمات والقيام بتنفيذ مهام متخصصة.
أهميتها تكمن في تخزين قيم ونواتج العمليات الحسابية بشكل سريع جداً لان هذه السـّـِـجــِـلاّت داخلة في تركيبة المعالج بعكس الذاكرة الرئيسة أو الرام وحتى الذاكرة الخبيئة الكاش (cache).
لقرب السـّـِـجــِـلاّت من وحدة التنفيذ (execute unit) في المعالج؛ بالتالي لا يوجد تأخير في جلب البيانات والنتائج المؤقتة.

أنواع المسجلات Registers في CPU

هذه المسجلات خاصة بأنظمة التشغيل 32 بت فقط

EAX
Extended Accumulator Register
يستخدم لتخزين العمليات الحسابية

EBX
Extended Base Register
ليس له هدف محدد ، يستخدم لتخزين البيانات ليس له أي علقة بالـ EBP

ECX
Extended Counter Register
يستخدم لعمليات التكرارloop

EDX
Extended Data Register
يستخدم ك مؤشر لجهزة الدخال والخراج

ESP
Stack Pointer
يستخدم للاشارة على قيمة في الستاك stack

EBP
Base pointer
يستخدم للشارة لعناوين الدوال

EIP
Instruction pointer
يستخدم للاشارة لعنوان الذاكرة التالي الذي سيتم تنفيذه

تنويه : 
المؤشر EIP يهمنا كثيرا في اكتشاف ثغرات الفيض

ماهو الاختلاف بين مسجلات 32 بت و 64 بت
الاختلاف في المسجلات في نظام  32 بت و  64 بت هو أن مسجلات نظام  64 بت لها أسماء مختلفة :
EAX, EBX, ECX, EDX
تصبح في نظام 64 بن
RAX, RBX, RCX, RDX

طبعا هناك مسجلات محصورة فقط على نظام  64 بت وهي :
R8, R9, R10, R11, R12, R13, R14, R15

وهذا من باب المعرفة فقط ولن نتطرق لنظام  64 بت في هذا المقال.

ماهو البفر Buffer

البفر هو مكان تخزين أو ذاكرة  يتم فيها تجميع وتخزين البيانات مؤقتا, يستعمله البرنامج للوصول للبيانات بشكل اسرع.

ماهو الفيض Overflow :

الفيض أو الطفح يحدث عندما تحمّل شيئ اكثر من حجم استيعابه. مثل قيامك بملأ  كأس من الماء اكثر من قدرة استيعابه مما يؤدي لبلوغ المياه حافة الكأس, ثم تبدأ بالتسرب أو الفيض.
​مثال برمجي:
هذا كود مصدري Source-Code لبرنامج بسيط جدا, يطلب من المستخدم ادخال اسمه username,
بحيث عرفنا مصفوفة من نوع Char (أي حروف) طولها 8 بايت, ستخزن بداخلها اسم المستخدم
ماهو الفيض Overflow

قام المستخدم باخال كلمة معينة وهي: username12 طولها عشرة حروف 10 chars, وكما لاحظت عد الحروف أكثر من  الحجم المخصص له (البفر باللون الاخضر), هناك حرفان زائدان باللون الاحمر, وهنا المشكلة التي سببت الفيض أو Overflow. وهذا يؤدي للكتابة على عناوين اخرى للذاكرة مما يسبب فساد الذاكرة.وعند استغلاله يمكننا اختراق النظام عبره.

نقاط الضغف Points Vulnerability :

هو الخلل البرمجي الذي يتسبب في الاختراق أو الحصول على صلاحيات أعلى تتجاوز صلاحياتك. مثل تنفيذ أوامر خطيرة أو قراءة ملف لا يجب على الزائر رؤيته...

ماهو المكدس و الكومة Stack vs Heap


ما هو المكدّس الـ Stack ؟

الـ Stack في الحقيقة هو بنية لتخزين العناصر في الذاكرة هذه البنية تعتمد على نمط معين يسمى (LIFO) إختصارا لـ last in first out أي "آخر من يدخل هو أول من يخرج" كلمة Stack يمكن أن تترجم بالعربية لمكدس أو (رصّة).
كل المتغيرات (value-types) كالـ int, byte إلخ تخزن في هذا المكدس، عندما يتم إستدعاء دالة في البرنامج يحجز جزء في أعلى المكدس للمتغيرات المحلية في الدالة و عندما تعود هذه الدالة (تكمل عملها) يصبح هذا الجزء متاح مجددا لكتلة أخرى من الكود و هكذا هذا هو نمط الـمكدس آخر جزء تم حجزه هو أول من يخرج.
 last in first out stack
يستخدم Stack ايضا في عملية Program Crash . ويعني فيض في عملية استدعاء الدوال .
  • يوجد على الستاك عمليتين فقط PUSH و POP
PUSH : اضافة أو ادخال عنصر Insert
POP : ازالة أواخراج عنصر ونقله لمكان آخر Delete
وهذي صورة تخيلية للستاك داخل النظام
وهذه صورته الحقيقية التي سنتعامل معها في قادم الدروس

stack edb

ما هي الكومة الـ Heap ؟

Heap  يمكن لبرنامج أن يخصص لنفسه عدة "كومات"، هذا الجزء الذي يطلق عليه  (Heap) لا يتبع أي مبدأ كما يفعل الـ Stack بل هو جزء حر تخزن فيه الكائنات (Reference-types)
في أي وقت شئت و تحررها وقتما شئت أيضا (هذا لا ينطبق على منصة الـ NET. لأنها من تتحكم بهذا)ـ
الـ Heap أيضا عالمية أي يمكن لأي Thread أن تصل إليها (Thread-safe)، الـ Heap تحرر عندما ينتهي كامل البرنامج بينما الـ Stack يحرر حالما تنتهي الـ Thread الخاصة به.​

ماهو عنوان العودة Returning Address

يختصرونه بــ RET وهو امر يستخدم داخل البرنامج ليتم الرجوع بعد ذلك لنقطة الادخال .
لاحظ الصورة

الذاكرة Memory


الذاكرة هي أهم جزء عندما نأتي لوضوع ثغرات الفيض، وفهمك لهذا الجزء سيمهد لك الطريق لفهم بقية الموضوع وسأتطرق لأدق التفاصيل هنا.
  • يجب أن تعلم هذه النقاط المهمة حول ادارة الذاكرة:
  • عندما تقوم بتشغيل برنامج ما على نظام اللينكس أو الويندوز يطلق عليه عملية Process
  • كل بروسيس يتم تخصيص جزء خاص له في الذاكرة
  • كل بروسيس يستخدم الجهاز وكأنه البروسيس الوحيد في الذاكرة, فهو يتمتع بكامل الذاكرة
  • الذاكرة مقسمة إلى  خمسة أجزاء أساسية :  
  1. text
  2. data
  3. bss
  4. heap
  5. stack

وسوف نتطرق لكل جزئية منها.
  • كل بروسيس له  .textو  .dataو  .bssو  heapو  stack خاص به

عناوين الذاكرة RAM

يجب أن تعلم أن الذاكرة تستخدم العناوين MEMORY ADDRESSES  في عملها. وهذه العناوين مكتوبة بصيغة سداسية عشرية HEXADECIMAL هكذا:
0xFFFFFFFF
وكل خانتين تساوي 1 بايت
مثلا   0xFFFFFFFF هو عبارة عن  4 بايت ===> لأن كل حرفين تساوي بايت FF FF FF FF
تبدأ الذاكرة من أصغر عنوان هو  0x0000000 إلى أعلى عنوان 0xFFFFFFFF

تقسم الذاكرة إلى 5 أقسام :
  • text تخزن فيه تعليمات البرنامج
  • data يخزن فيه المتغيرات المعرفة initialized data مثل:

int x = 10;
  • bss يخزن فيه المتغيرات غير المعرفة
مثال :
int x; (uninitialized data)
  • heap تخزن فيه البيانات من نوع  ، dynamic واذا كان لديك معرفة بلغة  C فالامر malloc يتعامل مع الـ heap
  • stack أو ما يعرف بالمكدس ، يخزن فيه المتغيرات الداخلية. local variables
  • السجل  ESP يشير إلى قمة الستاك ، ودائما قمة الستاك هي عند أقل عنوان
memory-ram-structure

• السهم الأحمر في الستاك يدل على أن الستاك يزداد للأسفل وتقل معه العناوين
• السهم البنفسجي في ال heap يدل على أن الheap يزداد للاعلى وتزداد معه العناوين.

المنقح GDB :

يتم استخدامه لفحص وتنقيح البرامج ومعرفة الدوال الموجودة بداخلها واستكشاف الاخطاء وتحليل الفيروسات .
في الويندوز نستعمل OLLYDBG اما على الكالي لينكس فنستخدم منقح EDB او GDB بدون واجهة رسومية. هذا شكل المنقح EDB وأقسامه الرئيسية التي نحتاجها في عملنا

edb-exploit-buffer كورتكس هكر ثغرات

الى هنا ينتهي موضوعنا اليوم
ان كان هناك تفاعل سأتطرق لبقية الدروس, حتى نصل لعملية الاختراق
في أمان الله

شارك الموضوع عبر :

سعيد
الكاتب:

سعيد من الجزائر, مؤسس مدونة كورتكس هكر, مهتم بأمن المعلومات واختبار الاختراق وأنظمة اللينكس.

ليست هناك تعليقات:

إرسال تعليق

كورتكس هكر: شروحات اللينكس واختبار الاختراق والحماية | CortexHacker
كورتكس هكر هي مدونة تهتم بطرح مواضيع اختبار الاختراق وأمن المعلومات, وطرق اكتشاف الثغرات بالبرامج والمواقع و كيفية الحماية منها, وطرق التخفي وأسرار الديب ويب وكل ما يخص الاختراق الأخلاقي
جميع الحقوق محفوظة ل كورتكس هكر | Cortex Hacker
صمم وكود بكل من طرف