PDA

View Full Version : OverFlow در دلفی



ICEMAN
جمعه 12 اسفند 1384, 16:09 عصر
سلام .........
برنامه های دلفی و کلا زبانهای جدید از طرف خود Compiler یه کارایی برای جلوگیری از این حملات انجام میدن ولی باز هم از نرمافزار ها نوشته شده با این زبونها شاهد آسیب پذیری هستیم

1) چطور این کار ها با توجه به امنیت در نظر گرفته باز هم آسیب پذیری وجود داره
2) راه پیشگیری


با تشکر

saeedIRHA
دوشنبه 07 فروردین 1385, 19:21 عصر
سلام،

در زبان هایه مثله Java ,.NET,Delphi شما هیچ جور نمی توانی برنامه رو Exploit کنی!
حالا دلیلش:
1.شما که Delphi کاری باید بدونی که همه چیز در این زبون هم به صورته Pointer تعریف
میشه که از قبل memory براش Allocate شده ،و با new که معادل malloc در ++C/C هست ازشن استفاده میکنی
ودیگه Limit خاصی نداره!
2.در این زبان ها ،هر Function در قسمت Prologue و Epilogue ش EBP و EIP چک میشه که Overwrite نشده باشه
رو این حساب نمیتونی برنامه رو ببری به Address خاصی از Memory! و نهایت کاری که بتونی بکنی
یه حمله DOS هست یا اینکه Access Violation. طبق کتاب Buffer Oveflow Attack and Defence
با این صفات امکان نداره که تو بتونی یک Exploit برایه این برنامه ها تو اینترنت پیدا کنی!!!!!!!!

Inprise
دوشنبه 07 فروردین 1385, 20:20 عصر
متاسفانه مطلب قبلی ات رو به دلیل توهین آمیز بودن حذف کردم . قاعدتا" بین یک سایت که محلی برای تبادل نظر و بحث فنیه با کوچهء پشتی یک دبیرستان پائین شهر که محل دعوا و کل کل باید تفاوتهائی وجود داشته باشه . بهتره همگی تلاش کنیم با هم مودبانه برخورد کنیم .

اما در مورد مقاله ات و چند خطی که این بالا نوشتی : یک اتفاق خوب اینه که ابتدا لااقل الفبای یک چیز رو بشناسی ، بعد اگه فرصت شد در باره اش مقاله بنویسی و به سوالات جواب بدی و غیره .

الف. دلفی هم مانند VC از انواع داده مختلف حمایت میکنه . "همه چیز بصورت پوینتر تعریف میشه" رو فقط جائی میشه شنید که اونجا کسی حتی معنی پوینتر رو نمیدونه . داده هائی که صراحتا" تعریف بشه ، بسته به تعریف از حافظه استفاده میکنند . مثلا" var i:integer یک متغیر عددی 32 بیتی روی Stack تولید میکنه و اگه قرار باشه اشاره گری به یک متغیر عددی 32 بیتی تولید بشه از var pI:^integer استفاده میشه که باعث میشه 32 بیت ( بصورت unalligned ) روی Heap برای اشاره گر در نظر گرفته بشه . سایر انواع داده ای دلفی هم همینطور هستند . تفاوتی بین دلفی یا بورلند سی یا ویژوال سی از این لحاظ موجود نیست .

ب. اپیلوگ و پرولوگ فریم های استک ارتباط به overflow و مفهوم مربوطه ندارند . تلاش کن از کلمات بی ربطی که جاهای مختلف میشنوی ، سناریوی فنی نسازی . شاید این توضیح مختصر بهت کمک کنه :

overflow ها بصورت خلاصه دو نوع اند . Stack based و Heap based ؛ و اگر توابعی که قراره از بافر استفاده کنند ، چه اون بافر روی استک باشه ، چه روی هیپ ، بصورت غیر ایمن نوشته شده باشند ، overrun اتفاق میفته ، و کافیه که آدرس بازگشت تابع یا پرشی نزدیک به بازگشت تابع ، به CRT ( روی ویندوز msvcrt و روی لینوکس glibc به عنوان مثال ) یا مکان دیگری در فضای ادرسی پروسه پرش کنه تا payload مورد نظر اجرا بشه .

ج. Skype که پرکاربرد ترین نرم افزار پیام رسان اینترنتیه و نسخه ویندوزی اش با دلفی 7 نوشته شده دارای نقاط ضعف (http://secunia.com/advisories/13191/) متعددی از نوع Stack overrun هست که هر وقت مطالعه ات واقعی تر شد و از حد بکاربردن یک سری لفظ نامربوط کنار هم برای تظاهر به دانشی که وجود نداره ، میتونه برای کسب اطلاع بیشتر کمکت کنه . یه مثال کوچک و دم دست برای دلفی .

د. وقتتون رو بجای بحثهای بیهوده و کودکانه و کل کل های مضحک دربارهء چیزهائی که باهاشون غریبه هستید ، به فعالیتهای مفید اختصاص بدید . عمر زود میگذره .


سلام .........
برنامه های دلفی و کلا زبانهای جدید از طرف خود Compiler یه کارایی برای جلوگیری از این حملات انجام میدن ولی باز هم از نرمافزار ها نوشته شده با این زبونها شاهد آسیب پذیری هستیم

1) چطور این کار ها با توجه به امنیت در نظر گرفته باز هم آسیب پذیری وجود داره
2) راه پیشگیری


کامپایلر دلفی قابلیت خاصی برای کاهش ریسک نقاط ضعف عمومی و متداول مانند overrun ها یا Race Condition ها و امثالهم نداره . از VC 7 به بعد یک پیاده سازی مستقل از StackGuard بصورت داخلی به کامپایلر ویژوال سی اضافه شد که در موارد قابل توجهی جلوی Stack overrun رو خواهد گرفت ، CRT های اصطلاحا" Safe ای هم وجود دارند که توابع تهدید آمیزی مانند vsprintf رو بجای اجرای مستقیم ، به پیاده سازی های ایمن تر redirect میکنند ، تدابیری هم برای بررسی اجمالی کد و اخطار به توسعه گر در نظر گرفته شده ، که خصوصا" روی Format String Bug ها مفید و قابل استفاده هست ، اما هیچ کدام از این امکانات نسخه مشابهی برای دلفی ندارند . بورلند سرگرم توسعهء دات نت و از طرف دیگه تنظیم مجدد کسب و کارش هست و بیشتر از اونکه لااقل این روزها به کیفیت یا قابلیت رقابت محصولاتش فکر کنه ، به ویژگیهای پررنگی که میشه تو آگهی های تبلیغاتی در موردشون حرف زد فکر میکنه ؛ و بهر حال برنامه هائی که با دلفی نوشته میشه ، از حفاظ و ایمنی به خصوصی برخوردار نیستند ، نه چیزی بیشتر از دانش و سواد خود برنامه نویس . DevCPP که IDE رایگان و محبوبی برای MingW روی ویندوز است و با دلفی نوشته شده دارای نقیصه ای (http://seclists.org/lists/bugtraq/2005/Aug/0255.html) بود که با سوء استفاده از اون مدتی قبل یک Worm با مزه از طریق لیست پستی معروف Full Disclosure منتشر شد ، ادیتور مورد استفاده بسادگی ورودی های باینری رو پردازش میکرد و در شرایط خاصی ( چیزی شبیه به Shatter Attack های قدیمی ) میشد با یک Windows Message کنترل برنامه رو به Payload ای که بصورت باینری به ادیتور IDE تزریق شده بود منتقل کرد و ...

saeedIRHA
سه شنبه 08 فروردین 1385, 02:52 صبح
شما هم که قصده کمک دارین ممنون میشام که یک Exploit به من معرفی کنین که برای یک برنامه از زبون هایه Java,.NET نوشته شده باشه،و در اون Memory Overwrite شده باشه و Payload اجرا شده باشه!!!!

با تشکر

---
Edited

Inprise
سه شنبه 08 فروردین 1385, 03:13 صبح
به نظر میاد عنوان تاپیک به دلفی مربوطه و نوشته تو هم همینطور و جواب من نیز هم .
اما برای جاوا و دات نت هم نا امیدت نمیکنم . چون برنامه های جاوا و دات نت حافظه رو به سبک خودشون مدیریت میکنند ، مفهوم استک و هیپ و اشاره گر ، به همان شکلی که بصورت Native مطرحه وجود نداره ، اما بستر اجرای جاوا ( JRE‌ ) و بستر اجرای دات نت ( dotNET Framework‌ ) هنوز برنامه هائی محلی و Native هستند که میتونن بسته به مورد مبتلا به نقائص امنیتی متعددی باشند . با یک جستجوی ساده میتونی گزارشهای بیشماری روی Memory-Related باگهای JRE پیدا کنی ( از Stack overflow تا Heap Corruption ) . قسمت مثبت و امیدوار کننده داستان اینه که وقتی دربارهء برنامه های Native ای که با سی یا دلفی نوشته شده حرف میزنیم ، تهدیدهای امنیتی میتونن به تعداد نرم افزارهای موجود باشن ، اما وقتی در مورد برنامه های مبتنی بر جاوا یا دات نت حرف میزنیم ، تهدیدهای امنیتی به خود بستر جاوا و دات نت محدوده و چون هزینه و تمرکز خوبی مصروف این محیطها شده ، بهر ترتیب دغدغه های امنیتی کمتری دارن ، و در نتیجه بله ؛ اگر برنامه ای مبتنی بر دات نت باشه ، نمیتونه دارای نقیصه ای شبیه به Stack overflow‌های سنتی و متداول باشه ؛ و در هر حال این مباحث ارتباطی با دلفی ندارند .

ICEMAN
چهارشنبه 09 فروردین 1385, 13:09 عصر
منم طی جستجویی که داشتم اینو پیدا کردم و این طور که من فهمیدم
نوشته راه خاصی نداره که با صحبت های Inprise فرق داره

Inprise
چهارشنبه 09 فروردین 1385, 16:03 عصر
طبیعیه که تو میتونی با سی یا هر کامپایلر دیگه ای به لطف کتابخانه های موجود برنامه ات رو طوری بنویسی که ریسک امنیتی کمتری داشته باشه . به عنوان مثال اگر هنگام برنامه نویسی با سی ، بطور کامل از قواعد STL طبیعیت کنی و کدت رو مبتنی بر اون بنویسی به تقریب خوبی درگیر هیچکدام از نقائص امنیتی متداول نمیشی ، اما آیا این مساله بدین معناست که هر برنامه نوشته شده با سی لزوما" ایمن هست ؟ برای دلفی هم اوضاع همینطوره . مقاله ای که ضمیمه کردی هر چند جانبدارانه و غیر فنی نوشته شده ، اما نمونه خوبیه از لحاظ نکات امنیتی برای توسعه برنامه با دلفی ، اما باز هم همین سوال ساده و روشن وجود داره : اگر میشه با دلفی برنامه امن نوشت ، آیا همه برنامه های نوشته شده با دلفی لزوما" امن هستند ؟ که جوابش بسادگی منفیه . نقطهء ضعف معروف Skype که تو نوشته قبلی بهش لینک دادم یک نمونه خیلی واضح از یک Stack - based overrun ساده که نشون میده برنامه های دلفی ، همانقدر آسیب پذیر هستند که برنامه های سی آسیب پذیرند ، یعنی به اندازهء سواد برنامه نویس . و برای نمونه های دیگه :


Skype Multiple Buffer Overflow Vulnerabilities (http://secunia.com/advisories/17305/)