قنبلة شوكية

يكمن المفهوم وراء قنبلة الشوكة في أن العمليات تتكرر باستمرار، مما قد يتسبب في حرمان من الخدمة.

قنبلة التشعب (وتسمى أيضًا فيروس الأرنب أو فيروس الهيدرا ) هي هجوم حجب الخدمة (DoS) ضد جهاز كمبيوتر حيث تقوم عملية ما بتكرار نفسها باستمرار لاستنزاف موارد النظام المتاحة، مما يؤدي إلى إبطاء النظام أو تعطله بسبب نقص الموارد .

تاريخ

في حوالي عام 1978، تم الإبلاغ عن نسخة مبكرة من قنبلة شوكية تُدعى "وابيت" تعمل على جهاز "سيستم/360" . ويُحتمل أن تكون هذه القنبلة قد تطورت من هجوم مماثل يُدعى "رابيتس" تم الإبلاغ عنه عام 1969 على جهاز "بوروز 5500" في جامعة واشنطن . [ 1 ]

منذ عام 2011، أصبح لدى نظام لينكس حد افتراضي لعدد العمليات (nproc) يمكن إدراجه ulimit -uللتخفيف من هجمات التفرع (fork bombs) والمشاكل ذات الصلة.

تطبيق

عرض توضيحي لقنبلة التفرع في نظام التشغيل Arch Linux

تعمل قنابل التفرع من خلال استهلاك وقت وحدة المعالجة المركزية أثناء عملية التفرع ، ومن خلال إغراق جدول عمليات نظام التشغيل . [ 2 ] [ 3 ] يتمثل التنفيذ الأساسي لقنبلة التفرع في حلقة لا نهائية تُطلق نسخًا جديدة من نفسها بشكل متكرر.

في أنظمة التشغيل الشبيهة بنظام يونكس ، تُكتب قنابل التفرع عادةً باستخدام استدعاء النظام fork . [ 3 ] ولأن العمليات المتفرعة هي نسخ من البرنامج الأصلي، فبمجرد استئناف تنفيذها من العنوان التالي عند مؤشر الإطار ، تستمر في التفرع بلا نهاية ضمن نسختها الخاصة من نفس الحلقة اللانهائية. وهذا يؤدي إلى نمو هائل في عدد العمليات. ولأن أنظمة يونكس الحديثة تستخدم عمومًا تقنية إدارة الموارد " النسخ عند الكتابة" عند تفرع عمليات جديدة، [ 4 ] فإن قنبلة التفرع لا تُشبع ذاكرة هذا النظام عادةً.

لا تمتلك أنظمة تشغيل مايكروسوفت ويندوز وظائف مكافئة لاستدعاء النظام fork في يونكس؛ [ 5 ] لذلك، يجب على قنبلة fork في مثل هذا النظام إنشاء عملية جديدة بدلاً من التفرع من عملية موجودة، كما هو الحال مع عمليات الدفعات.echo %0^|%0 > $_.cmd & $_في هذا البرنامج النصي الدفعي، %0|%0يتم كتابة البيانات إلى $_.cmd، والتي يتم تنفيذها بعد ذلك بواسطة & $_. [ 6 ]

من الأمثلة الكلاسيكية على قنبلة التفرع تلك المكتوبة بلغة يونكس شل:(){ :|:& };:، ويعود تاريخها إلى عام 1999 على الأقل، [ 7 ] والتي يمكن فهمها بسهولة أكبر على النحو التالي

fork () { fork | fork & } ; شوكة 

في ذلك، يتم تعريف الدالة ( fork()) على أنها تستدعي نفسها ( fork)، ثم تقوم بتوجيه ( |) نتيجتها إلى نفسها، كل ذلك في مهمة خلفية ( &).

لا يُعدّ استخدام النقطتين الرأسيتين كاسم :للدالة في سطر الأوامر (shell) وفقًا لمعيار POSIX، الذي لا يسمح إلا بالأحرف والأرقام والشرطات السفلية في أسماء الدوال. [ 8 ] ومع ذلك، يُسمح باستخدامه في GNU Bash كإضافة. [ 9 ]

التنفيذ التقليدي بلغة C (باستخدام رؤوس POSIX ) هو:

#include <unistd.h>int main () { while ( true ) { fork (); } }

يستدعي هذا fork()الأمر الدالة بشكل متكرر، مما يؤدي إلى تكرار العملية الحالية، في ملف الترويسة <unistd.h> . وقد تم ابتكار أشكال مختلفة من قنبلة التفرع هذه. [ 10 ]

وقاية

بما أن آلية عمل قنبلة التفرع تعتمد كلياً على إنشاء عمليات جديدة، فإن إحدى طرق منعها من التأثير بشكل كبير على النظام بأكمله هي تحديد الحد الأقصى لعدد العمليات التي يمكن لمستخدم واحد امتلاكها. في نظام لينكس، يمكن تحقيق ذلك باستخدام أداة ulimit ؛ على سبيل المثال، سيحد الأمر ulimit -u 30المستخدم المتأثر بحد أقصى ثلاثين عملية يمتلكها. [ 11 ] في الأنظمة التي تدعم PAM ، يمكن أيضاً ضبط هذا الحد في [ 12 ]/etc/security/limits.conf ، وفي أنظمة *BSD، يمكن لمسؤول النظام وضع حدود في [ 13 ] . كما تتيح أنظمة لينكس الحديثة إمكانية منع قنابل التفرع بشكل أدق من خلال مجموعات التحكم ( cgroups ) ووحدات التحكم في عدد العمليات (PID). [ 14 ]/etc/login.conf

انظر أيضاً

مراجع

  1. ^ ريموند ، إريك س. (1 أكتوبر 2004). "وابيت" . معجم المصطلحات. مؤرشفة من الأصلي في 15 أيار (مايو) 2012 . تم الاسترجاع 15 أكتوبر، 2013 .
  2. يي، نونغ (2008). أنظمة الحاسوب والشبكات الآمنة: النمذجة والتحليل والتصميم . جون وايلي وأولاده. ص 16. ISBN  978-0470023242.
  3. 1 2 جيلين، دونغ (2007). قاموس الشبكة . ص 200. ISBN  978-1602670006.
  4. دهامدهير، دانانجاي م. (2006). أنظمة التشغيل: منهج قائم على المفاهيم . ماكجرو هيل للتعليم العالي. ص 285. ISBN  0-07-061194-7.
  5. هاموند، مارك (2000). برمجة بايثون على نظام التشغيل ويندوز 32: دليل لمبرمجي ويندوز . دار نشر أورايلي ميديا، ص 35. رقم ISBN  1565926218.
  6. إندرمان (2024-06-26). @echo.%0^|%0›$^_^.c^md&$_›nul . تم الاطلاع عليه بتاريخ 2024-06-30 عبر يوتيوب.
  7. ميخال زاليفسكي (1999-08-19). "[RHSA-1999:028-01] تجاوز سعة المخزن المؤقت في libtermcap tgetent()" . مجموعة الأخبار : muc.lists.bugtraq . تاريخ الاسترجاع: 2022-12-10 . bash$ :(){ :|:&};:}
  8. "مواصفات المجموعة المفتوحة الأساسية، الإصدار 7، طبعة 2018، معيار IEEE 1003.1-2017، القسم 3.235" . المجموعة المفتوحة/IEEE. الاسم: في لغة أوامر الصدفة، كلمة تتكون فقط من شرطات سفلية وأرقام وحروف من مجموعة الأحرف المحمولة. الحرف الأول من الاسم ليس رقمًا.
  9. "دليل مرجع GNU Bash، القسم 3.3" . تم الاطلاع عليه بتاريخ 11-12-2022 . عندما يكون الصدفة في وضع POSIX (انظر وضع Bash POSIX)، يجب أن يكون fname اسم صدفة صالحًا، ولا يجوز أن يكون مطابقًا لأحد الدوال المضمنة الخاصة (انظر الدوال المضمنة الخاصة). في الوضع الافتراضي، يمكن أن يكون اسم الدالة أي كلمة صدفة غير مُقتبسة لا تحتوي على علامة الدولار ($).
  10. مايكل كيريسك (2025). "cgroups/fork_bomb.c (من "واجهة برمجة لينكس MC")" . man7.org . تدريب على برمجة أنظمة لينكس/يونكس.
  11. كوبر، مندل (2005). دليل متقدم لكتابة البرامج النصية بلغة باش . الصفحات 305-306 . ISBN  1430319305.
  12. سوينكا، ويل (2012). إدارة لينكس: دليل للمبتدئين . ماكجرو هيل بروفيشنال. الصفحات 364-365 . ISBN  978-0071767590.
  13. لوكاس، مايكل و. (2007). FreeBSD المطلق: الدليل الكامل لنظام FreeBSD . دار نشر نو ستارش. الصفحات 198-199 . ISBN  978-1593271510.
  14. "متحكم رقم العملية في الوثائق/ كما ورد في نواة لينكس 5.3" . 2019-10-08. مؤرشف من الأصل في 8 أكتوبر 2019. تم الاطلاع عليه في 8 أكتوبر 2019 .