Yousef Alfakih
Yousef Alfakih

@0xclient

23 تغريدة 68 قراءة Dec 05, 2022
Stack-Based Buffer Overflow
في هذا الثريد بنعرف :
- ايش هي ثغرة ال Buffer overflow
- وايش تصيب
- وايش ضررها
- كيف يتم استغلالها ( يمكن اخليها في ثريد اخر لان شرحها طويل جدا ويبغالك تكون فهمت شرح اليوم واكثر)
- وكيف يتم حماية البرامج والانظمة من هذي الثغرة
قبل لا نبدا فيه اشياء مهمة لازم نفهمها ونعرفها ف اذا تعرفها وملم فيها بشكل كويس سوي سكيب
- Numbers
- CPU
- instructions
- Registers
- Machine Code
- Assembly language
- Memory
- Stack
الحين بنشرح ذي الاشياء بشكل مبسط جدا ومراح نتعمق فيها مره بعطيكم فقط الاشياء الي بنحتاجها
Central processing unit ( CPU )
طيب عندنا المعالج مقسم لعدة اقسام زي ال
- Arithmetic Logic Unit (ALU)
- Control Unit (CU)
- Registers
واشياء جدا كثيرة لكن مراح نتطرق حاليا غير لل Registers او بالتحديد ال General Purpose Registers
طيب ايش هو ال registers يبو كلاينت ؟
الريجسترز ياطويل العمر هي عبارة عن وحدات تخزينه صغيررررة جدا وسريعة داخل المعالج بتقولي طيب وش فايدتها بقولك مع كمية الاشياء الي المعالج يسويها والعمليات بيحتاج مساحة قريبة منه وسريعة بحيث يقدر ينفذ عمليات اسرع في وقت اقل وهكذا
ما ابغا اتعمق اكثر في موضوع الرجيسترز حاليا عشان لا تتشتت لكن بتعرف وش فايدة ال registers قدام لما نكمل ، طيب الحين نتكلم عن الرام او الميموري
" تنوية " الريجسترز تختلف من CPU للثاني على حسب ال architecture سواء كان x64(64-bit) او x86(32-bit)
Random Access Memory (RAM)
الرام معروفة هي عبارة عن وحدة تخزينه مؤقته يتخزن فيها بيانات طيب الرامات بعد داخلها او مقسمة لاشياء ثانية عندنا ال
- .text
- .data
- .bss
- heap
- stack
وطبعا اهم شي بنتكلم عنه حاليا والي بخص البفر هو جزئية ال stack وبنفهم اكثر بعدين لا تستعجل
وطبعا الرام يكون لها عنوانين ال low address memory وال high address memory زي ما هو موضح في الصورة الي فوق
- High Address Memory
(0xFFFFFFFF)
- Low Address Memory (0x00000000)
طيب اهم شي بنتعامل معه حاليا هو ال stack طيب ايش هو ال stack هو عبارة عن مكان يتم فيه تخزين البيانات داخل الرام زي ماشفنا في الصورة وال stack يكبر بالعكس يعني اذا قلنا اذا قاعدة ال stack 100 مثلا ف سقف ال stack بيكون 50 ف هو يكبر من تحت لفوق يعني عشان يكبر مثلا بنقول بنطرح
-4 byte واذا نبغاه يصغر بنزود 4 byte وتقدر تقول كل مازاد كل مانقص والعكس والخ
ادري انك مليت وممكن ماتكون فاهم شي للحين بس معليش طبيعي في الاول ماتفهم اي شي او انا شرحي خلى الموضوع اسوء واسوء 😂 لكن المهم الحين بنتكلم عن شي مهم بعد والي هو موضوع ال numbers
وش تقصد بال numbers يبو كلاينت !
اقصد ياطويل العمر الي هم ال
- Binary
(معروفة يا 0 يا 1 وال base حقها 2 )
- Octal
( 0,1,2,3,4,5,6,7 وال base حقها 8 لان ال 0 يعتبر digit ونبدا من 0 )
- Decimal
(والي هي الارقام العادية من 0 الى 9 وال base حقها 9 )
- Hexadecimal
( 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F وال base حقها 16 ) ودايم صيغة ال hex تبدا ب 0x ف اذا شفت شي يبدا ب0x تعرف ان هذا hex
ادري انك طفشت والله وحاب اهنيك اذا وصلت لهنا صراحة وقاعد تكمل قرآه بس ماعليك اصمل معي قربنا 😂💔
واخر شي بتكلم عنه قبل لا ندخل على جزئيةالBOF
وهي ال Assembly بكل اختصار هي لغة low level تحول ال machine code من شي الانسان مايقدر يقراه ولا يفهمه للغة الاسمبلي الي الانسان يقدر يفهم منها ال instructions الي صارت ومن ذي الامور
طيببببب نجي هنا ونبدا عاد طولنا والله بس معليش عشان الكل يستفيد ف الاشياء الي بنركز عليها الحين هي ال
- CPU ( Registers )
- RAM ( Stack )
طيببب ايش هي ثغرة البفر اوفر فلو عشان ابسطها عليك ياصديقي الجميل بقولك الحين لو عندي الحين مساحة داخل الميموري حجمها مثلا 10 byte
ف المفروض انك تعطي البفر ال 10 byte لان فقط هذي هي المساحة الي هو بيقدر يتحملها غير كذا مراح يقدر لاسف يتحمل طيييب لو قلنا اني عطيته 20 byte مثلا ايش راح يصير ؟ لو البرنامج غير مصاب بياخذ ال 10byte الي هو يقدر يتحملهم فقط ويرمي الباقي بيقولك انا مقدر اتحمل والله
لكن اذا مصااااب بياخذ ال 10 byte والباقي بيبدا يصير له overflow او overwrite للبيانات هذي وبتطلع برا البفر وبتبدا تدخل على عناوين ثانية وتصير مشلكة كأني قاعد اقولك بعطيك 100 طفل تحطهم في فصل يكفي 25 طالب فقط طبيعي الفصل بينملي وبتحصل طالب جالسة برا الفصل لان مافي مكان !!
ف تقدر تقول بكل اختصار ان ثغرة ال Buffer overflow هي عبارة عن خطأً برمجي يتيح للمهاجم انه يدخل مدخلات اكثر من الي مسموح داخل الميموري وفي نفس الوقت البرنامج المصاب مايسوي تحقق لعدد المدخلات الي هو محددها او حاطت لها حد
طيب ايش الضرر منها ؟
- System crashes
- Access control loss
- Further security issues
واكثر لغتين برمجة متسببين لل BOF هم ال C/C++
طيب عندنا ٣ انواع مهمة من ال registers بنركز عليهم والي هم
- ESP ( Extended Stack Pointe )
وهذا الي يأشر او يسوي pointing على قمة ال stack
- EBP ( Extended Base Pointer )
وهذا الي يأشر على قاع ال stack
وبم ان عندنا قاع وقمة ف تكون شي اسمه stack frame
وعندنا ال
-EIP ( Extended Instruction Pointer )
وهذا يأشر على التعليمة او ال instruction الي بينفذها ال CPU بعد العملية او ال instruction الي قاعد ينفذها حاليا
How to Prevent Buffer Overflows :
- Address space randomization ( ASLR )
- Data execution prevention
- Structured exception handler overwrite protection (SEHOP)
وطبعا اي شي يتخزن في الميموري ياخذ address او عنوان عشان ال CPU يعرف مكان ال instruction والخ
وبس والله ادري الشرح شوي عشوائي وفيه اشياء ماذكرتها لان مستحيل اتكلم من الصفر لل exploitation في تويتر كتابة لكن حاولت على قد ما اقدر ابسط فكرة ال BOF لان فيه ناس ممكن يكون عندها صعوبة في فهمها غير ان شرحي سيء ادري انا ماعرف اشرح صراحة لكن حاولت واتمنى انكم استفدتم لو شي بسيط ❤️

جاري تحميل الاقتراحات...