Saturday, September 25, 2010

Memory Protection (live with more safety) #2

به نام دوست

در ادامه مباحث مربوط به محافظت حافظه موضوع Position Independent Execution را بررسی میکنیم.
برنامه‌ای که با این روش که اصطلاحا PIE نامیده میشود، کامپایل شده باشد به سیستم‌عامل اجازه میدهد که قسمتهای مختلف process را در مکانهای گوناگون حافظه load کند.
اصل موضوع آن است که حدس زدن قسمتهای یک process کمک شایانی به یک hacker میکند و به صورت معمولی (کامپایل بدون PIE) مکانهای لود قسمتهای یک process‌ در لینوکس ثابت هستند.
شیوه استفاده از این روش در هنگام کامپایل به این شرح است:
gcc -pie   or gcc -fPIE

در هسته(kernel)های جدید امکان لود قسمتهای یک پردازش که به صورت PIE کامپایل نشده باشد به صورت random در حافظه وجود دارد. برای این موضوع باید مقدار پارامتر /proc/sys/kernel/randomize_va_space به شیوه مناسب تنظیم شود.
اگر مقدار آن ۲ باشد stack و heap و درخواستهای mmap را به صورت تصادفی انتخاب خواهد کرد و اگر مقدار آن یک باشد فقط فضای اstack تصادفی خواهد بود.
مقدار صفر نیز به معنای غیر فعال شدن آن است.

PIE تاثیر اندکی بر روی performance دارد که از این منظر معمولا بر روی برنامه‌های مهم فعال است.

منابع:
طبق پست قبلی

No comments: