stringtranslate.com

Вилочная бомба

Концепция вилочной бомбы: процессы постоянно воспроизводят себя, что может привести к отказу в обслуживании.

В вычислительной технике форк -бомба (также называемая кроличьим вирусом ) представляет собой атаку типа «отказ в обслуживании» (DoS), при которой процесс постоянно воспроизводит себя, истощая доступные системные ресурсы, замедляя или приводя к сбою системы из-за нехватки ресурсов .

История

Примерно в 1978 году сообщалось, что ранний вариант вилочной бомбы под названием «ваббит» работал на System/360 . Возможно, это произошло в результате аналогичной атаки под названием RABBITS , о которой сообщалось в 1969 году на Burroughs 5500 в Вашингтонском университете . [1]

Выполнение

Форк-бомбы действуют как за счет потребления процессорного времени в процессе разветвления , так и за счет насыщения таблицы процессов операционной системы . [2] [3] Базовая реализация вилочной бомбы — это бесконечный цикл , который неоднократно запускает новые копии самого себя.

В Unix -подобных операционных системах вилочные бомбы обычно пишутся с использованием системного вызова fork . [3] Поскольку разветвленные процессы также являются копиями первой программы, как только они возобновляют выполнение со следующего адреса в указателе кадра , они продолжают бесконечно разветвляться внутри своей собственной копии того же бесконечного цикла; это приводит к экспоненциальному росту процессов. Поскольку современные системы Unix обычно используют метод управления ресурсами копирования при записи при создании новых процессов, [4] вилочная бомба обычно не перегружает память такой системы.

Операционные системы Microsoft Windows не имеют функций, эквивалентных системному вызову Unix fork; [5] поэтому форк-бомба в такой операционной системе должна создавать новый процесс вместо ответвления от существующего, например, с помощью пакета @echo.%0^|%0›$^_^.c^md&$_›nul , который можно более четко записать как echo %0^|%0 > $_.cmd & $_. В нем %0|%0записывается $.cmd, который затем выполняется & $_. [6]

Классическим примером вилочной бомбы является программа, написанная в оболочке Unix :(){ :|:& };: , возможно, датируемая 1999 годом [7] , которую легче понять как

вилка () { вилка | вилка & }     вилка

В нем функция определяется ( fork()) как вызывающая сама себя ( fork), а затем передающая ( |) свой результат в себя, и все это в фоновом задании ( &).

Код, использующий двоеточие :в качестве имени функции, недопустим в оболочке, определенной стандартом POSIX, который допускает в именах функций только буквенно-цифровые символы и символы подчеркивания. [8] Однако его использование разрешено в GNU Bash в качестве расширения. [9]

Профилактика

Поскольку режим работы форк-бомбы полностью инкапсулируется путем создания новых процессов, одним из способов предотвратить серьезное влияние форк-бомбы на всю систему является ограничение максимального количества процессов, которыми может владеть один пользователь. В Linux этого можно добиться с помощью утилиты ulimit ; например, команда ulimit -u 30ограничит затронутого пользователя максимум тридцатью принадлежащими ему процессами. [10] В системах с поддержкой PAM это ограничение также можно установить в /etc/security/limits.conf, [11] а в *BSD системный администратор может установить ограничения в /etc/login.conf. [12] Современные системы Linux также позволяют более детально предотвращать разветвление бомбы с помощью контрольных групп и контроллеров номера процесса (PID). [13]

Смотрите также

Рекомендации

  1. Раймонд, Эрик С. (1 октября 2004 г.). "ваббит". Жаргонный лексикон. Архивировано из оригинала 15 мая 2012 года . Проверено 15 октября 2013 г.
  2. ^ Йе, Нонг (2008). Безопасные компьютерные и сетевые системы: моделирование, анализ и проектирование . Джон Уайли и сыновья. п. 16. ISBN 978-0470023242.
  3. ^ аб Цзелин, Донг (2007). Сетевой словарь . п. 200. ИСБН 978-1602670006.
  4. ^ Дхамдере, Дхананджай М. (2006). Операционные системы: концептуальный подход . Высшее образование МакГроу-Хилл. п. 285. ИСБН 0-07-061194-7.
  5. ^ Хаммонд, Марк (2000). Программирование на Python в Win32: помощь для программистов Windows . «О'Рейли Медиа, Инк.». п. 35. ISBN 1565926218.
  6. Эндерман (26 июня 2024 г.). @echo.%0^|%0›$^_^.c^md&$_›nul . Проверено 30 июня 2024 г. - через YouTube.
  7. ^ Михал Залевский (19 августа 1999 г.). «[RHSA-1999:028-01] Переполнение буфера в libtermcap tgetent()». Группа новостей : muc.lists.bugtraq . Проверено 10 декабря 2022 г.bash$ :(){ :|:&};:}
  8. ^ «Базовые спецификации открытой группы, выпуск 7, 2018 г., издание IEEE Std 1003.1™-2017, раздел 3.235» . Открытая группа/IEEE. Имя: на командном языке оболочки — слово, состоящее исключительно из символов подчеркивания, цифр и букв переносимого набора символов. Первый символ имени не является цифрой.
  9. ^ «Справочное руководство GNU Bash, раздел 3.3» . Проверено 11 декабря 2022 г. Когда оболочка находится в режиме POSIX (см. Режим Bash POSIX), fname должно быть допустимым именем оболочки и не может совпадать с одним из специальных встроенных модулей (см. Специальные встроенные функции). В режиме по умолчанию именем функции может быть любое слово оболочки без кавычек, не содержащее символа $.
  10. ^ Купер, Мендель (2005). Расширенное руководство по написанию сценариев Bash . стр. 305–306. ISBN 1430319305.
  11. ^ Сойинка, Уэйл (2012). Администрирование Linux: Руководство для начинающих . МакГроу Хилл Профессионал. стр. 364–365. ISBN 978-0071767590.
  12. ^ Лукас, Майкл В. (2007). Абсолютная FreeBSD: Полное руководство по FreeBSD . Нет крахмального пресса. стр. 198–199. ISBN 978-1593271510.
  13. ^ «Контроллер номеров процессов в документации/как появился в ядре Linux 5.3» . 8 октября 2019 года. Архивировано из оригинала 8 октября 2019 года . Проверено 8 октября 2019 г.

Внешние ссылки