گنو/لینوکس

Fork Bomb چیست؟

نوشته شده توسط اروند طباطبایی

اگر مدتی کاربر گنو/لینوکس بوده‌اید احتمالاً اسم Fork Bomb را شنیده اید. Fork Bomb مجموعه ی چند دستور است که در نهایت منجر می شود سیستم کرش کند. ساخت و اجرای این بمب بسیار ساده است، کافی است این استرینگ را در ترمینال نوشته و دکمه ی اینتر را بزنید:

:(){ :|:& };:

این استرینگ همان Fork Bomb معروف است. در این پست کمی بیشتر با آن آشنا می‌شویم.

Fork Bomb دقیقاً چیست؟

Fork_bomb

در سیستم عامل های یونیکس و لینوکس وقتی یک پروسس جدید مانند پروسه ی اصلی می سازید عمل Fork را انجام داده اید.

Fork Bomb همین کار را با یک تابع به صورت بی نهایت و سریع انجام می‌دهد تا اینکه منابع سیستم کاملاً درگیر شده و در نهایت سیستم کرش کند. این نوع کارکرد و نتیجه ی آن(درگیری زیاد و غیر قابل استفاده شدن منابع سیستم ظرف یک مدت کوتاه) باعث می‌شود تا Fork Bomb جز دسته ی حملات DOS قرار گیرد.

همه ی این کاراکتر ها در سیستم‌های شبه یونیکیس معنای خاصی دارند. اگر بخواهم خیلی کلی بگویم که این بمب چگونه این همه پروسس را ایجاد می‌کند با گفت که این بمب به نوعی یه تابع بازگشتی بی نهایت به زبان بش دارد که باعث می‌شود تا جایی که در توان دارد عملیات فورک را انجام دهد.

یک تابع در بش چنین سینتکسی دارد:

 

function_name()
{
Commands
}

Fork Bomb دقیقاً چگونه کار می کند؟

در این این بمبی که ما معرفی کردیم ”:” نامی برای تابع است که پس آن علامت های ”()” می آیند. علامت ”}” نشان دهنده ی شروع بدنه ی تابع است، و ”:;|:که بدنه ی تابع ماست بدین معنی است که تابع ”:” را اجرا کن و خروجی آن را دوباره به ”:” بفرست. علامت “&” تمام این‌ها را به بک گراند سیستم بفرست در نتیجه دیگر با Ctrl + C نمی‌توان جلوی این عملیات را گرفت. ”{” که پس از آن ”:;” آمده هم به این اشاره می‌کند که تعرف تابع تمام شده و تابع باید اجرا شود.

پس اجرای این بمب، سیستم شروع به کند شدن می‌کند و پس از مدت زمانی سیستم کاملاً کرش می کند. اینکه این مدت زمان چقدر است بستگی به سخت‌افزار شما دارد. تعداد هسته های CPU، حجم RAM و حتی گاهی Swap تأثیر گذار خواهند بود.

نکته‌ای که باید بدانید این است که Fork Bomb فقط مختص به شبه یونیکس ها نیست. تکنیک ساخت یک پروسه ی جدید در ویندوز هم وجود دارد پس چنین چیزی ر در ویندوز هم می‌ توان به کمک زبان های برنامه نویسی مختلف، مانند C و  ++C پیاده کرد. برای مثال کد زیر را ببینید:

FORK BOMB IN C
#include
int main(void) {
    for(;;)
    fork();
    return 0;
}

همانطور که گفته شد Fork Bomb با ساختن تعداد زیادی پروسس باعث کرش کردن سیستم می شود، قسمت بد ماجرا اینجاست که کاربر بدون دسترسی روت هم می‌تواند این کار را کند ، در نتیجه محدود کردن تعداد پروسس های یک کاربر می‌تواند جلوی این بمب را بگیرد( حد اقل بمب هایی که کاربران معمولی آن‌ها را اجرا می کنند). تعداد پروسس های یک کاربر معمولاً بین ۲۰۰ تا ۳۰۰ است اما گاهی ممکن است به ۱۰۰۰ هم برسد، پس بهتر است وقتی تعداد پروسس های یک کاربر را محدود می‌کنیم، حد آن را بین ۱۰۰۰ – ۴۰۰۰ بگذاریم. نحوه انجام این کار مورد بحث این پست نیست اما می‌توانید نگاهی به این فایل و مستنداتش بیندازید:

/etc/security/limits.conf

 

درباره نویسنده

اروند طباطبایی

بنیانگذار دیجی اسپارک: اولین مرجع تخصصی امبدد سیستم به زبان فارسی / کارشناس سئو و تولید محتوا

هرچه می آموزم میبینم که خیلی کم آموختم. علاقه به رباتیک و تکنولوژی دارم. امیدوارم بتونم دانشی را که آموخته‌ام، به روش‌های مختلفی به کاربران علاقمند منتقل کنم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه