0

جلوگیری از حمله سر ریز بافر در آلپاین

آلپاین از Grsecurity استفاده می‌نماید.

Grsecurity یک مجموعه‌ی متن باز و رایگان از وصله‌های کرنل لینوکس است که بر افزایش امنیت سیستم تاکید دارد. Grsecurity شامل چند ویژگی اصلی می‌باشد که یکی از مهمترین آن‌ها وصله‌ی PaX است. PaX یک وصله‌ی کرنلی برای سیستم‌عامل لینوکس است که سیاست حداقل امتیازات را پیاده‌سازی می‌کند. PaX با اعمال کنترل‌های دسترسی به حافظه و تصادفی‌سازی نقشه‌ی حافظه (ASLR) از اجرای بعضی از حمله‌ها جلوگیری می‌کند.

جلوگیری از حمله سر ریز بافر با SPF

این ویژگی در کلیه پکیج‌های آلپاین پیاده سازی شده است و به برنامه‌های سرریز شده پشته اجازه می‌دهد تا به جای خراب کردن مسیر اجرای برنامه، با کمال میل از برنامه خارج شوند. این کار معمولاً با ساختن یک گزینه کامپایلر C/C++ ویژه اجرا می‌شود، که قناری های پشته را به کد برنامه اضافه می‌کند. اینها متغیرهای ایجادشده در کامپایلر هستند که به انتهای قاب پشته اختصاص داده شده و هر عملکرد را علامت می‌گذارند و در صورت عبور بیش از حد اطلاعات، نشان می‌دهد که پشته سرریز شده و مشکلی پیش آمده است. با گسترش روز افزون نرم‌افزارها روی پلتفرم های مختلف، امنیت نرم‌افزار بیش از پیش مورد توجه قرار گرفته است. وجود آسیب پذیری در یک نرم‌افزار می‌تواند اهداف یک مهاجم را تحقق بخشد، این اهداف می‌توانند شامل دسترسی به اطلاعات شخصی یک فرد در رایانه، دسترسی به شبکه خصوصی یک شرکت، سرقت اطلاعات موجود در تلفن همراه، مختل سازی یک سرور و صدها هدف دیگر باشند. شاید یک برنامه به ظاهر، کم اهمیت و ساده جلوه داده شود اما وجود آسیب پذیری در آن ممکن است به خطری جدی برای کاربران آن تبدیل شود. زیرا وجود آسیب پذیری مذکور، به تنهایی برای برآورده ساختن اهداف مهاجم کافی است. از این روی، برنامه نویسی ایمن یک برنامه در هر سطح و ابعادی، امری ضروری به شمار می‌رود.حملات سرریزی بافر ناشی از اشتباهات برنامه‌نویس در استفاده از توابع زبان‌های برنامه‌نویسی مثل C می‌باشند. در برخی از زبان‌های برنامه‌نویسی محدوده‌ی داده‌های ورودی/خروجی بسیاری از توابع توسط خود تابع کنترل نمی‌شود. به همین علت سرریزی بافر به راحتی در کدهای آسیب‌پذیری که حاوی این توابع باشند، قابل رخ دادن است. برخی از این توابع آسیب‌پذیر عبارتند از:strcat(), strcpy() sprintf(), strnopy(), gets() .
با توجه به اهمیت امنیت نرم‌افزار، شرکت های بزرگ دنیا به ارائه راهکارهایی همچون طراحی زبان ها و محیط‌های برنامه نویسی، مفسر و مترجم‌‌هایی با قابلیت‌های کنترل امنیتی و نیز راهکارهای امنیتی روی سیستم‌عامل و بسیاری از راهکارهای دیگر پرداخته اند، اما با توجه به عدم توانایی راهکارها در کنترل تمامی موارد امنیتی، عدم امکان پیاده سازی راهکارهای امنیتی روی برخی ساختارها، ایجاد محدودیت برای دسترسی به برخی منابع و امکانات، و سایر مشکلات کوچک و بزرگ موجود، برنامه نویسی امن یک برنامه، بهترین راهکار برای محافظت از آن برنامه به شمار می‌رود. یکی از زبان هایی که علاوه بر محبوبیت فراوان در میان برنامه نویسان، همیشه از زبان های پر بحث در برنامه نویسی ایمن بوده است، خانواده زبان C و به خصوص در میان آن‌ها زبان C++ است. در این زبان ها، عمده مدیریت منابع به برنامه نویس واگذار شده است، که در صورت عدم مدیریت درست آن‌ها، آسیب پذیری های مختلفی رخ میدهد. در این راستا، برنامه ها توسط ابزارهایی خاص مورد سنجش امنیتی قرار می‌گیرند تا در صورت وجود آسیب پذیری، مالکان را مطلع گردانند. اما، هیچ یک از راهکارهای فوق به طور کامل کارآمد نیستند. بهترین راهکار برای جلوگیری از بروز آسیب پذیری نرم‌افزارها، برنامه نویسی پدافندی و ایمن مبنای آن نرم‌افزار است.
امروزه این روش، از ارکان اصلی شرکت های نرم‌افزاری است و آموزش برنامه نویسی پدافندی و ایمن به برنامه نویسان ضروری می‌باشد. همچنین، شرکت‌های ارائه دهنده راهکارهای امنیتی، سرویس‌های آموزش برنامه نویسی پدافندی و ایمن را به برنامه نویسان و شرکت های نرم‌افزاری ارائه می‌دهند.
در گذشته C وC++ بیشتر توسط دانشگاهیان مورداستفاده قرار می‌گرفتند. حمله به سیستم‌های رایانه ای نادر بود، زیرا انگیزه زیادی برای آن وجود نداشت، بنابر این لازم نبود امنیت و استحکام مورد توجه زیاد قرار گیرد. امروزه طرحهای امنیتی یک ضرورت است. در دو دهه گذشته آسیب پذیری های امنیتی زیادی در این گونه برنامه‌ها کشف شده است که اغلب می‌توانند به راحتی مورد سوء استفاده قرار بگیرند. سخت کردن سیستم‌عامل باعث افزایش مقاومت در برابر حملات تلاش برای سوء استفاده از چنین خطاهای دسترسی به حافظه و انواع دیگر خطاها می‌شود.

ارسال دیدگاه