[vc_row][vc_column][vc_column_text]
حملات Buffer OverFlow یا سرریز بافر چیست ؟
× بافر چیست ؟
بافر قسمتی از حافظه است که به طور موقت برای نگه داری اطلاعات یک نرم افزار اختصاص یافته است. اطلاعات پیش از رسیدن به محل اصلی در مکانی به نام بافر به صورت موقت ذخیره میشوند. بافر معمولا یک ظرفیت از پیش مشخص شده دارد که توسط برنامه نویس تعیین می شود.
» حمله سرریز بافر یکی از اولین و خطرناک ترین حملات به برنامه های کاربردی می باشد !
اولین مورد برای حمله به یک سیستم هدف گرفتن پشته سیستم عامل است. سرریز پشته می تواند منجر به مختل شدن یک برنامه کاربردی یا سیستم عامل شود، گونه بسیار پیچیده و خطرناکی از حمله به پشته آن است، که نفوذگر بتواند پس از سرریز شدن، کنترل اجرای آن برنامه یا پروسه را در اختیار گیرد. امروزه حمله سرریز پشته یکی از یکی از روش های مهلک و رایج حمله علیه ماشین های آسیب پذیر محسوب می شود. هر برنامه یا پروسه که در بخشی از کد خود از پشته یا بافر استفاده کند، ممکن است در اثر سرریز شدن به ناگاه مختل شود. این نوع حملات شبیه حملات Dos و DDos هستند با این تفاوت که که Dos باعث Down شد سرور میشود و..
ساخت اسکریپت دیداس با استفاده از زبان پایتون کلیک کنید !
» نفوذ پروسه هایی را که به نحوی از پشته یا بافر استفاده کرده اند ولی تمهیدی نیندیشیده اند !
کشف می کند و آنها را مورد هدف قرار می دهد. متاسفانه برخی از سرویس دهنده های حساس شبکه قبل از عرضه به دقت آزمایش نشده اند و اگر یک رشته خاص و طولانی برای آنها ارسال شود، به ناگاه در هم می شکنند. زیرا سرریز شدن بافر در آنها منجر به نقض حریم حافظه شده و رون اجرای آنها توسط سیستم عامل متوقف می شود. گونه بسیار پیچیده و خطرناکی از حمله به پشته آن است که نفوذگر بتواند پشته را به نحوی سرریز کند که پس از سرریز شدن، کنترل اجرای آن برنامه یا پروسه را در اختیار بگیرد !
~ جلوگیری از حملات Buffer OverFlow !
» در هنگام برنامهنویسی باید از این توابع استفاده نشود !
این توابع بدون بررسی کردن حجم بافر آنها را بازنویسی میکنند که این مسئله میتواند دیگر مقادیر موجود در پشته مانند همان آدرس برگشت تابع را بازنویسی کند..
نام تابع | دلیل |
---|---|
strcpy(char *dest, const char *src)
|
ممکن است بافر dest سرریز شود |
strcat(char *dest, const char *src)
|
ممکن است بافر dest سرریز شود. |
getwd(char *buf)
|
ممکن است بافر buf سرریز شود. |
gets(char *s)
|
ممکن است بافر s سرریز شود |
[vf]scanf(const char *format, …)
|
تمام آرگومانها در معرض سرریز شدن قرار دارند |
realpath(char *path, char resolved_path[])
|
ممکن است بافر path سرریز شود. |
sprintf(char *str, const char *format, …)
|
ممکن است بافر str سرریز شود. |
» جای تابع Strcpy میتوان از Strncpy و به جای تابع Strcat میتوان از Strncat استفاده کرد که این توابع با بررسی حدود بافر مقصد باعث جلوگیری از وقوع سرریز بافر میشوند. همینطور تابع Fgets هم برای ورودی و خروجی استاندارد مناسب است و..
دانلود کتاب حملات سرریز بافر کلیک کنید !
[/vc_column_text][/vc_column][/vc_row]