شرح ثغرة Stack overflow - نسخة قابلة للطباعة +- الفريق العربي للهندسة العكسية (https://www.at4re.net/f) +-- قسم : منتديات الهندسة العكسية - Reverse Engineering Forums (https://www.at4re.net/f/forum-4.html) +--- قسم : مختبر الفايروسات - Virus & Malware Labs (https://www.at4re.net/f/forum-30.html) +--- الموضوع : شرح ثغرة Stack overflow (/thread-2003.html) الصفحات:
1
2
|
شرح ثغرة Stack overflow - SeGNMeNT - 17-08-2020 [للامانة تم اقتباس بعض الاشياء من موضوع للاخ 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 وهي استدعاء الدالة لنفسها الي ما لا نهاية مما يؤدي الي استهلاك حجم المكدس هذا مثال بلغة سي لهذه المشكلة
هذه الدالة تقوم باستدعاء نفسها و الدوال التي يتم استدعاءها تقوم ب استدعاء نفسها ايضاً من ما يؤدي الي فيض في المكدس 2- Very deep recursion وهي دالة تستدعي نفسها ولكن تتوقف بحدوث شرط ما هذا النوع من الدوال قد يحدث في بعض الاحيان فيض في المكدس لأن من الصعب ايقاف الدالة ف عندما يقوم النظام ب ايقاف دالة تستدعي الدالة المستدعات دالة اخرى و هذا مثال بلغة سي لكود قد يسبب مشكلة
يفضل استخدام الحلقة بدلً من ذلك الكود لكي لا تحدث مشاكل و من اسباب حدوث علة stack overflow هو تعريف متغيرات كبيرة الحجم خارج قابلية المكدس( تعريف مصفوفة بحجم كبير) لهذا ينصح الكثير من المبرمجين بستخدام الذاكرة الديناميكية مثال لمتغير كبير الحجم بلغة سي مثال بسيط جداهذا ربما من ابسط الطرق لعمل overflow كود بسيط جدا في السي
كما ترى فها قمنا بتعريف مصفوفة var[10] وقد خزنا فيها النص الذي يحتاج لمصفوفة اكبر مما ادى الى فيضان المكدس حمل الملف في olly and braeakpoint 401543 و اعمل run ليتوقف وستلاخظ عنوان الرجوع في المكدس و ما الذي سيحدث بعدها ! حسنا تابع وتخطى تعليمةRET كما عنوان الرجوع (وهو العنوان التعليمة الذي بعد CALL لهذه الدالة) قد تم الكتابة عليه بعدها انظر لمسجل التعليمات EIP = 4C4C4C4C =ASCI LLLL حسنا ماذا لو استبدلنا ال LLLL بعنوان تعليمة ما ثم بعدها وضعنا ال ٍshellcode بالتاكيد ممكن وهذا سيكون على myexpo الذي ستجده في المرفقات يجب ان تنشئ info.txt لانه فقط يقرا الملف الذي اسمه هكذا بعدها اكتب الاحرف من A to Z لكي تعرف من اين يبدا بكتابة العنوان ستجد انه يبدأ من اخر اربع حروف قبل ال Q كما ادخلت انا ABCDEFGHIJKLMNOPQRSTUVWXYZ حسنا الان افتح HEX editor انا استعمل HxD.exe فرضا اننا نريد ان ننقله الى العنوان 004014ِ8E غير كما يلي من خلال قسم الهكس وليس الاسكي فمثلا البي يقابلها 50 غير كما يلي الذي يقابل P ب 00 الذي يقابل O ب 40 الذي يقابل N ب 14 الذي يقابل Mب 8E و ثم حمل القارء ب ollydbg then ضع نقطة توقف كما في الصورة حيث دالة ReadFile )RFile( ثم سترى المسجل التعليمات اشار الى التعليمة التي نريدها اي ذلك العنوان كما تلاحظ بالصورة فقد انتقل مسجل التعليمات ليشير الى تلك التعليمة و اظنك ستلاحظ ان المؤشر 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!AgqexnHLomZ0b97sCCHA5YisNPo?e=5Iflgj كتاب مفيد يشرح Buffer Overflow و كتابة shellcode for windows من بعد الصفحة 317 لمن يعرف الأساسيات http://index-of.es/Varios/Securite/BoF_Attacks.pdf RE: شرح ثغرة Stack overflow - Cyros - 17-08-2020 إقتباس :حمل الملف في ollyتقصد أي ملف؟ RE: شرح ثغرة Stack overflow - SeGNMeNT - 17-08-2020 copy code from C compiler > Project > Console application past code F9 بعدها رح تحصل على ملف تنفيذي RE: شرح ثغرة Stack overflow - الباحث - 17-08-2020 بارك الله فيك ولكن لغات البرمجة الآن سدت هذه الثغرات يعني ممكن نقول مستحيل وجود ثغرات الفيض الان والله أعلم RE: شرح ثغرة Stack overflow - SeGNMeNT - 17-08-2020 (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/microsoft-lsass-buffer-overflow-exploit-worm/101788 https://www.exploit-db.com/exploits/293 ____ صورة نوضح كم الاصابات اثر buffer overflow منذ عام 2001 3059000 جهاز RE: شرح ثغرة Stack overflow - ExCodeMaker - 18-08-2020 المعلومة دائما مفيدة حتى وان تم سد الثغرة. فهي تبني القدرات وتنميها. مشكور اخي الكريم على جهودك RE: شرح ثغرة Stack overflow - الباحث - 18-08-2020 ألا يوجد طرق حديثة للعثور على الأخطاء أو الثغرات في البرامج؟ مع العلم أن الكثير الآن أصبح يستخدم الهاتف أي من الافضل الاهتمام بأنظمة الأندرويد RE: شرح ثغرة Stack overflow - SeGNMeNT - 18-08-2020 إقتباس :ألا يوجد طرق حديثة للعثور على الأخطاء أو الثغرات في البرامج؟معرفة آلية عمل البرنامج + تحليله وفهمه بشكل جيد ساعطيك أمثلة تحليل دوال الـ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 RE: شرح ثغرة Stack overflow - الباحث - 19-08-2020 جزاك الله خيرا بالفعل يجب معرفة ألية عمل البرنامج للبحث عن الأخطاء وهذا ليس بالأمر السهل حاليا أحاول تعلم فهم برامج الاندرويد للبحذ عنا الأخطاء فأكيد النظام أو البرامج لا تخلو من ثغرات وبما أنك سبق لك وبحثت بماذا تنصحني أن أبدأ؟ هل من مراجع أبدأ بها أو فيديوات؟ أما بخصوص المراجع العربية للأسف هناك الكثير من يمتلكون خبرة كبيرة ولكن لا يكتبون مقالات أو شورحات في ها المجال حتى وإن كتبو تجدها بالانجليزية وبخصوص الاسملي الخاص بالأندريود هل هو دوما للمعالج ARM؟ RE: شرح ثغرة Stack overflow - SeGNMeNT - 19-08-2020 (ليس لدي خبرة بمجال RE for android او malware for android) ولكن من خلال بحثي اظن يجب ان يكون لك علم ب Reverse engineering for android و smali وفهم كبرنل النظام Android kernel development وبالنسبة للمراجع هناك سؤال مطروح في StackOverflow وستجد مصادر هناك https://stackoverflow.com/questions/5656804/whats-the-best-way-to-learn-smali-and-how-when-to-use-dalvik-vm-opcodes اضافة لهذا (RE) https://maddiestone.github.io/AndroidAppRE/app_fundamentals.html وسترى ايضا ان بحثت بجوجل عن بعض المقالات على شكل pdf يشرح code injection for apk (RE) وبالنسبة ل ARM Assembly for android لا اعرف لاني لم اقرأ/ابحث عنه |