تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
شرح ثغرة Stack overflow
#1
[للامانة  تم اقتباس بعض الاشياء من موضوع للاخ JASS وواحد نسيت اسمه من منتدى arabteam2000 + مدونة علي عبدالغني + مصادر اجنبية]

اعتقد ان الاغلب قد سمع بهذه الثغرة و التي قد تم اختراق الكثير من السيرفرات عبرها  
فهذه لا تتطلب مطلقا اي تغيير في كود البرنامج او تحميله في المنقح لاننا سناثر على عمله عبر استغلاننا "ثغرة" تسمح لنا بكتابة shell code عبره
اول ظهور لها كان عام 1988
كانت تدعى the Morris Internet worm او ربما دودة الانترنت او ماشابه
ومثل هذه الهجمات يمكن استخدامها local اي  محلي تؤثر على عمل برنامج او على خادمات المواقع وتعرف باسم "هجمات الحرمان من الخدمات" أو يمكن استعمالها في اختراق الخادم بشكل كامل ومع صلاحيات قد تصل
إلى root أحيانا وهذا النوع من الثغرات يعد الأخطر على الإطلاق وحتى الآن لا يوجد لها حل فعال بل فقط يتم الانتباه من الوقوع فيها من قبل المبرمجين.
يحدث عندما تتجاوز سعة المكدس ويطلب المزيد من الذاكرة
ولمن لا يعرف جيدا Stack او المكدس
ال stack : عبارة عن مكان في الذاكرة RAM يستخدمه المبرمج للتخزين
المؤقت او عند استدعاء دالة معينة يمكن تمرير البارمترات للدالة عن طريق
المكدس. كما ان البرنامج نفسه يستخدمه مثلا عندما يصل المعالج
 الى امر قطع interrupt المعالج يقوم بتخزين الرايات flags ومؤشر الاوامر IP عنوان الرجوع وايضا قبل استدعاء
 دالة معينة يجب تخزين عنوان الرجوع في المكدس حتى يستطيع المعالج الرجوع الى الامر التالي
فمثلا عند كتابتك اي دالة ك puts() , gets() , printf()  وتمرر لها بارامترات يتم تخزين البارامترات في المكدس  
و
يعتمد حجم المكدس على امور عدة منها
-نظام التشغيل
– ذاكرة الكمبيوتر
– لغة البرمجة المستخدمة في كتابة البرنامج
– طراز المعالج
________________________
نعود للموضوع
ويحدث التاثير عند الكتابة فوق الذاكرة "يتم الكتابة فوق الذاكرة بتلك البيانات التي طلب المكدس لها مكان في الذاكرة "
(لا تقلق ستفهم مع المثال التطبيقي)
طبعاؤ هناك انواع مختلفة ل buffer overflow
 stack, heap, format, integer, and 0-day
 بهذا الموضوع سنتكلم عن stack overflow


1- Infinite recursion
وهي استدعاء الدالة لنفسها الي ما لا نهاية
مما يؤدي الي استهلاك حجم المكدس

هذا مثال بلغة سي لهذه المشكلة

int foo()
{
return foo();
}

هذه الدالة تقوم باستدعاء نفسها و الدوال التي يتم استدعاءها تقوم ب استدعاء نفسها ايضاً من ما يؤدي الي فيض في المكدس

2- Very deep recursion

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

void function (argument)
{
if (condition)
function (argument);
}

يفضل استخدام الحلقة بدلً من ذلك الكود

لكي لا تحدث مشاكل

و من اسباب حدوث علة stack overflow هو تعريف متغيرات كبيرة الحجم خارج قابلية المكدس( تعريف مصفوفة بحجم كبير)
لهذا ينصح الكثير من المبرمجين بستخدام الذاكرة الديناميكية
مثال لمتغير كبير الحجم بلغة سي

int foo()
{
double x[1000000];
}
مثال بسيط جدا
هذا ربما من ابسط الطرق لعمل overflow
كود بسيط جدا في السي 

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]) {
char var[10];
 strcpy( var, "AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHJJJJJJJLLLLLMMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ\n" );
printf( var );

    return 0;
}


كما ترى فها قمنا بتعريف مصفوفة var[10] وقد خزنا فيها النص الذي  يحتاج لمصفوفة اكبر
مما ادى الى فيضان المكدس
حمل الملف في olly
and braeakpoint 401543
و اعمل run ليتوقف
وستلاخظ عنوان الرجوع في المكدس
 [صورة مرفقة: YXM17Os.png]




و ما الذي سيحدث بعدها !
حسنا تابع وتخطى تعليمةRET

كما  عنوان الرجوع (وهو العنوان التعليمة الذي بعد CALL لهذه الدالة) قد تم  الكتابة عليه
بعدها انظر لمسجل التعليمات  EIP = 4C4C4C4C
=ASCI LLLL
[صورة مرفقة: zwhXXo6.png]


حسنا ماذا لو استبدلنا ال LLLL بعنوان تعليمة ما ثم بعدها وضعنا ال ٍshellcode
بالتاكيد ممكن


وهذا سيكون على   myexpo الذي ستجده في المرفقات
يجب ان تنشئ info.txt لانه فقط يقرا الملف الذي اسمه هكذا
بعدها اكتب الاحرف من A to Z لكي تعرف من اين يبدا بكتابة العنوان
ستجد انه يبدأ من اخر اربع حروف قبل ال Q كما ادخلت انا ABCDEFGHIJKLMNOPQRSTUVWXYZ
حسنا الان افتح HEX editor انا استعمل HxD.exe
فرضا اننا نريد ان ننقله الى العنوان
004014ِ8E
غير كما يلي من خلال قسم الهكس وليس الاسكي
[صورة مرفقة: fOMis1n.png]


فمثلا البي يقابلها 50 غير كما يلي
الذي يقابل P   ب 00
الذي يقابل  O  ب 40
الذي يقابل   N ب 14
الذي يقابل    Mب 8E

و ثم حمل القارء ب ollydbg
then
ضع نقطة توقف كما في الصورة
حيث دالة ReadFile )RFile(
[صورة مرفقة: yotTnOc.png]


ثم سترى المسجل التعليمات اشار الى التعليمة التي نريدها اي ذلك العنوان

[صورة مرفقة: vDvgWjo.png]








كما تلاحظ بالصورة فقد انتقل مسجل التعليمات ليشير الى تلك التعليمة و اظنك ستلاحظ ان المؤشر ESP شير الى ما بعد P و هناك بامكاننا نضع ال shellcode
هذا مثال
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\xA4\xFB\x12\x00"
"\x90\x90\x90\x90\x90\x90\x90\x90"
"\x6A\x00\x68\x00\x00\x00\x00\x68"
"\xC4\xFB\x12\x00\x50\xFF\x15\xA0"
"\x40\x40\x00\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90"
"XxXx  Virus.exe is loading....."
"\x00\x00\x90\x90\x90\x90";

طبعا كما ترى بدايته 90 والتي تعني nop
طبعا يجب ان اردت كتابته يجب ان تكتبه بدون "x\ ويجب تحويله لاسكي
كما وضحت كل هذا بملف txt بالمرفقات

 المرفقات مهمة جدا
بها امثلة عملية
كما وصعت كتاب يشرح ذلك به مثال
طبعا عند التطفل لجهاز عبر هذه الثغرة يكتب سكريبت ارسال/استقبال بالبايثون كما تم توضيح هذا في الكتاب و تستطيع استعمال اداة Metasploit المشهورة
رابط المرفقات :
https://1drv.ms/u/s!AgqexnHLomZ0b97sCCHA...o?e=5Iflgj

كتاب مفيد يشرح Buffer Overflow و كتابة shellcode for windows من بعد الصفحة 317 لمن يعرف الأساسيات
http://index-of.es/Varios/Securite/BoF_Attacks.pdf
أعضاء أعجبوا بهذه المشاركة : mohamad , farfes , the9am3 , ExCodeMaker , Cyros , الباحث , rce3033
#2
إقتباس :حمل الملف في olly
and braeakpoint at
00401500
تقصد أي ملف؟
( وَفِىٓ أَنفُسِكُمْ ۚ أَفَلَا تُبْصِرُونَ )
أعضاء أعجبوا بهذه المشاركة :
#3
copy code
from  C compiler > Project > Console application
past code
F9
بعدها رح تحصل على ملف تنفيذي
أعضاء أعجبوا بهذه المشاركة :
#4
بارك الله فيك
ولكن لغات البرمجة الآن سدت هذه الثغرات يعني ممكن نقول مستحيل وجود ثغرات الفيض الان والله  أعلم
أعضاء أعجبوا بهذه المشاركة :
#5
(17-08-2020, 04:02 PM)الباحث كتب : ولكن لغات البرمجة الآن سدت هذه الثغرات يعني ممكن نقول مستحيل


ان كنت تقصد جافا فربما معك حق لان جافا تقوم تلقائيا بالتحقق من طول المصفوفة وحدودها ولكن يمكن
ان يحدث buffer overflows  في حالات قليلة فقط
بالنسبة ل  C#
بامكانك ان تقول نعم لانها لا تضمن المعالجة الصحيحة للاستثنائات
مثلا اذا قام مستخدم بادخال اسم اكتر من 30 لبرنامج يقبل 20 سيظهر استثناء
ولكنها ممكنة في بعض الحالات القليلة
كتعطيل التحقق من طول المصفوفة او حتى استعمال unsafe keyword وايضا يوجد طرائق اخرى
ولكن تذكر ان  اكثر اللغات انتشارا  C++ وهذا ممكن فيها
ماعدا برامج بعض المطورين الذي تكون عادة ب C# و القليل يكتب  بالجافا
ولكن لا تستغرب ابدا ان رأيت مثلي برامج من مطورين عرب خصوصا القديمة التي تعود لمابين 2005 - 2015 فينك اتطبق عليها هذه الثغرة
"الغرب برمجياتهم بيتم تطويرا لانو بيكتشفو ثغرات جديدة والبرامج العربية تبقى الى زمن غير معلوم حتى يتم اكتشاف ثغرة
واصدار تحديث(اذا كات الاصدار  بنية اضافة شيئ جديد بدون العلم بالثغرة)"
وايضا هناك ثغرات بالنظمة يتم اكتشاف buffer overflow بها
كثغرة  Windows Lsasrv.dll RPC buffer overflow Remote التي اكتشفت بحدود  2004
على الرغم من قدم ال buffer overflow 1988
اقصد على الرغم من قدم هذه الثغرة )1988( الا ان الشركات كمايكروسوفت يمكن ان ايجاد مثل هذه الثغرة ببرمجيتها
https://www.giac.org/paper/gcih/613/micr...orm/101788
https://www.exploit-db.com/exploits/293
____
صورة نوضح كم الاصابات اثر buffer overflow منذ عام 2001
3059000 جهاز
[صورة مرفقة: pCbigG4.png]
أعضاء أعجبوا بهذه المشاركة : Cyperior , الباحث , TeRcO
#6
المعلومة دائما مفيدة حتى وان تم سد الثغرة. فهي تبني القدرات وتنميها.

مشكور اخي الكريم على جهودك
أعضاء أعجبوا بهذه المشاركة :
#7
ألا يوجد طرق حديثة للعثور على الأخطاء أو الثغرات في البرامج؟
مع العلم أن الكثير الآن أصبح يستخدم الهاتف أي من الافضل الاهتمام بأنظمة الأندرويد
أعضاء أعجبوا بهذه المشاركة :
#8
إقتباس :ألا يوجد طرق حديثة للعثور على الأخطاء أو الثغرات في البرامج؟
معرفة آلية عمل البرنامج + تحليله وفهمه بشكل جيد
ساعطيك أمثلة
  ​​​​تحليل دوال الـNative API  (التي لم تقدم مايكروسوفت شرح عنها)
وفهمها لانها   مكتبة هامة جداً فى الوندوز تعتمد عليها باقى المكتبات امثال user32.dll و Kernel32.dll وGDI32.dll التي اغلب البرامج لا يمكن او مستحيل ان يستغنو عن هذه المكتبات
بامكأنك القراءة حول  Windows Kernel debugging exploit وستفهم الكثير عن بنية النظام 
طبعا هناك نوع من الثغرات كالتي تعتمد على
 تغيير مؤشر لدوال تنفيذ الأكواد ( 
CallWindowProcA,CreateThread.....) من أجل تغير عنوان العودة  والخ...
 وأيضا هناك ثغرة linux 2 .4 unsigned
خطأ برمجي في احدى دوال RPC إختصار remote procedure calls
في ملف linux-2.4.2.*/fs/nfsd/nfs3xdr.c
كل الثغرات نتجت عن معرفة عمل البرنامج وتحليلها ومعرفة جيدة platform يلي هو شغال عليه
إقتباس :الاندرويد
قبل 3 شهور بدأت اقرأ كتاب عن برمجة apk على Android studio   و بعدها صرت ابحث عن
samli Assembly language for android
حتى لم ارى فيديوهات على اليوتيوب أحد يشرح عن small التي ينتج هذا الملفات main.small
R.small
etc
 حين تفك apk ب apktool 

 وجدت المصادر قليلة (مصادر RE android ) 
والمصادر العربية معدومة

هناك  كتاب  فيه شرح عن Nativ api 
اسمه secrets of reverse engineering
أعضاء أعجبوا بهذه المشاركة :
#9
جزاك الله خيرا
بالفعل يجب معرفة ألية عمل البرنامج للبحث  عن الأخطاء وهذا ليس بالأمر السهل 
حاليا أحاول تعلم فهم برامج الاندرويد للبحذ عنا الأخطاء فأكيد النظام أو البرامج لا تخلو من ثغرات وبما أنك سبق لك وبحثت بماذا تنصحني أن أبدأ؟ هل من مراجع أبدأ بها أو فيديوات؟
أما بخصوص المراجع العربية للأسف هناك الكثير من يمتلكون خبرة كبيرة ولكن لا يكتبون مقالات أو شورحات في ها المجال حتى وإن كتبو تجدها بالانجليزية

وبخصوص الاسملي الخاص بالأندريود هل هو دوما للمعالج  ARM؟
أعضاء أعجبوا بهذه المشاركة :
#10
(ليس لدي خبرة بمجال RE for android او malware for android)
ولكن من خلال بحثي
اظن يجب ان يكون لك علم ب Reverse engineering for android  و smali وفهم كبرنل النظام  Android kernel development

وبالنسبة للمراجع هناك سؤال مطروح في StackOverflow وستجد مصادر هناك
https://stackoverflow.com/questions/5656...vm-opcodes
اضافة لهذا (RE)
https://maddiestone.github.io/AndroidApp...ntals.html
وسترى ايضا ان بحثت بجوجل عن بعض المقالات على شكل pdf  يشرح code injection for apk (RE)
وبالنسبة ل ARM Assembly for android لا اعرف لاني لم اقرأ/ابحث عنه
أعضاء أعجبوا بهذه المشاركة :


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 3 ) ضيف كريم