خلاصة:
آسیبپذیری در نرمافزار هنگامی اهمیت پیدا میکند که قابل بهرهبرداری یا به عبارت دیگر قابل اکسپلویت باشد. این بهرهبرداری میتواند انواع مختلفی داشته باشد که مهمترین آنها در اختیار گرفتن کنترل اجرای برنامه آسیبپذیر است. امروزه ارائه اکسپلویت برای آسیبپذیری برنامههای کاربردی با توجه به وجود محافظهای گوناگون بسیار دشوار شده است و درنتیجه تولید خودکار آن بهمراتب پیچیدهتر و دشوارتر خواهد بود. تحقیقات درزمینة تولید خودکار اکسپلویت (به معنی در اختیار گرفتن کنترل اجرای برنامه) بسیار محدود بوده است و آنچه صورت گرفته نیز دارای محدودیتهای فراوانی است. در این مقاله راهکاری برای تولید خودکار اکسپلویت برای دو نوع آسیبپذیری سرریز بافر در پشته و بازنویسی اشارهگر تابع در برنامههای کاربردی در بستر سیستمعاملهای 32 بیتی اکسپی و ویندوز7 ارائه میشود. اکسپلویت¬های تولیدشده به این روش، با عبور از محافظهای کوکی پشته، محافظ جلوگیری از اجرای کد در بخش داده و محافظ تصادفی نمودن فضای آدرس برنامه، امکان در اختیار گرفتن اجرا را در برنامه آسیبپذیر خواهد داد. اگرچه این راهکار، تمام آسیبپذیریها را پوشش نخواهد داد ولی چارچوبی ارائه میکند که میتوان در بستر آن، برای آسیبپذیریهای دیگر نیز اکسپلویت تولید نمود.
ملخص الجهاز:
در این مقاله راهکاری برای تولید خودکار اکسپلویت برای دو نوع آسیبپذیری سرریز بافر در پشته و بازنویسی اشارهگر تابع در برنامههای کاربردی در بستر سیستمعاملهای 32 بیتی اکسپی و ویندوز7 ارائه میشود.
اکثر آسیبپذیریها با روشی به نام فازینگ کشف میشوند که در این روش سازوکار کشف آسیبپذیری از طریق تولید دادههای مختلف، تزریق آن به برنامه، اجرای برنامه و ثبت وقایع، همگی بهصورت خودکار انجام میگیرد؛ اما در تولید اکسپلویت به دلیل وجود چالشهای گوناگون، امر خودکارسازی با مشکلات فراوانی روبرو است.
در مورد آسیبپذیری سرریز بافر در پشته و توده میتوان به کتابها و مقالات مختلفی مراجعه نمود که یکی از معروفترین آنها کتاب "The Shellcoder’s Handbook" است [7].
در طرح پیشنهادی، امکان تولید خودکار اکسپلویت برای دو نوع آسیبپذیری سرریز بافر در پشته و همچنین بازنویسی اشارهگر تابع در سیستمعاملهای ویندوز اکسپی و ویندوز 7 وجود خواهد داشت.
همچنین امکان در اختیار گرفتن کنترل اجرای برنامه نیز بررسی گردیده و سپس روشهای دور زدن محافظهای احتمالی مشخصشده و مکان مناسب برای کد پوسته تعیین گردیده است.
در حالت اول از آسیبپذیری سرریز بافر در پشته، کنترل اجرا بهراحتی هنگام اجرای دستور RET در اختیار ما قرار میگیرد ولی در حالت دوم باید از محافظ GS عبور نماییم که در گام بعدی توضیح داده میشود.
نمونه کد ایجاد زنجیره آدرسهای مربوط به ROP یکی دیگر از محافظهایی که باید برای هر نوع آسیبپذیری از آن عبور نمود (در صورت وجود)، محافظ ASLR است.