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

В вычислительной технике ( форк-бомба также называемая кроличьим вирусом ) представляет собой атаку типа «отказ в обслуживании» (DoS) , при которой процесс постоянно воспроизводит себя, истощая доступные системные ресурсы, замедляя или приводя к сбою системы из-за нехватки ресурсов .
История [ править ]
Примерно в 1978 году сообщалось, что ранний вариант вилочной бомбы под названием «ваббит» работал на System/360 . Возможно, это произошло в результате аналогичной атаки под названием RABBITS, о которой сообщалось в 1969 году на Burroughs 5500 в Вашингтонском университете . [1]
Реализация [ править ]
Форк-бомбы действуют как за счет потребления процессорного времени в процессе разветвления , так и за счет насыщения операционной системы . таблицы процессов [2] [3] Базовая реализация вилочной бомбы — это бесконечный цикл , который неоднократно запускает новые копии самого себя.
В Unix -подобных операционных системах вилочные бомбы обычно пишутся с использованием системного вызова fork . [3] Поскольку разветвленные процессы также являются копиями первой программы, как только они возобновляют выполнение со следующего адреса в указателе кадра , они продолжают бесконечно разветвляться внутри своей собственной копии того же бесконечного цикла; это приводит к экспоненциальному росту процессов. Поскольку современные системы Unix обычно используют метод управления ресурсами копирования при записи при создании новых процессов, [4] вилочная бомба обычно не насыщает память такой системы.
Операционные системы Microsoft Windows не имеют функций, эквивалентных системному вызову Unix fork; [5] Поэтому форк-бомба в такой операционной системе должна создавать новый процесс, а не ответвление от существующего.
Классический пример вилочной бомбы — написанный в оболочке Unix. :(){ :|:& };:
, возможно датируемый 1999 годом, [6] что легче понять как
fork() {
fork | fork &
}
fork
В нем определена функция ( fork()
) как называющий себя ( fork
), затем трубопровод ( |
) его результат в себя, все в фоновом задании ( &
).
Код с использованием двоеточия :
поскольку имя функции недопустимо в оболочке, как определено POSIX, который допускает только буквенно-цифровые символы и символы подчеркивания в именах функций. [7] Однако его использование разрешено в GNU Bash в качестве расширения. [8]
Профилактика [ править ]
Поскольку режим работы форк-бомбы полностью инкапсулируется путем создания новых процессов, одним из способов предотвратить серьезное влияние форк-бомбы на всю систему является ограничение максимального количества процессов, которыми может владеть один пользователь. В Linux этого можно добиться с помощью утилиты ulimit ; например, команда ulimit -u 30
ограничит затронутого пользователя максимум тридцатью собственными процессами. [9]
В системах с поддержкой PAM это ограничение также можно установить в /etc/security/limits.conf
, [10]
а в *BSD системный администратор может установить ограничения /etc/login.conf
. [11]
Современные системы Linux также позволяют более детально предотвращать разветвление бомбы с помощью контрольных групп и контроллеров номера процесса (PID). [12]
См. также [ править ]
Ссылки [ править ]
- ^ Раймонд, Эрик С. (1 октября 2004 г.). "ваббит " Жаргонный лексикон. Архивировано из оригинала 15 мая . Получено 15 . октября
- ^ Йе, Нонг (2008). Безопасные компьютерные и сетевые системы: моделирование, анализ и проектирование . Джон Уайли и сыновья. п. 16. ISBN 978-0470023242 .
- ^ Jump up to: а б Цзелин, Донг (2007). Сетевой словарь . п. 200. ИСБН 978-1602670006 .
- ^ Дхамдере, Дхананджай М. (2006). Операционные системы: концептуальный подход . Высшее образование МакГроу-Хилл. п. 285. ИСБН 0-07-061194-7 .
- ^ Хаммонд, Марк (2000). Программирование на Python в Win32: помощь для программистов Windows . «О'Рейли Медиа, Инк.». п. 35. ISBN 1565926218 .
- ^ Михал Залевский (19 августа 1999 г.). «[RHSA-1999:028-01] Переполнение буфера в libtermcap tgetent()» . Группа новостей : muc.lists.bugtraq . Проверено 10 декабря 2022 г.
bash$ :(){ :|:&};:}
- ^ «Базовые спецификации открытой группы, выпуск 7, издание IEEE Std 1003.1™-2017, 2018 г., раздел 3.235» . Открытая группа/IEEE.
Имя: на командном языке оболочки — слово, состоящее исключительно из символов подчеркивания, цифр и букв переносимого набора символов. Первый символ имени не является цифрой.
- ^ «Справочное руководство GNU Bash, раздел 3.3» . Проверено 11 декабря 2022 г.
Когда оболочка находится в режиме POSIX (см. Режим Bash POSIX), fname должно быть допустимым именем оболочки и не может совпадать с одним из специальных встроенных модулей (см. Специальные встроенные функции). В режиме по умолчанию именем функции может быть любое слово оболочки без кавычек, не содержащее символа $.
- ^ Купер, Мендель (2005). Расширенное руководство по написанию сценариев Bash . стр. 305–306. ISBN 1430319305 .
- ^ Сойинка, Уэйл (2012). Администрирование Linux: Руководство для начинающих . МакГроу Хилл Профессионал. стр. 364–365. ISBN 978-0071767590 .
- ^ Лукас, Майкл В. (2007). Абсолютная FreeBSD: Полное руководство по FreeBSD . Нет крахмального пресса. стр. 198–199. ISBN 978-1593271510 .
- ^ «Контроллер номеров процессов в документации/как появился в ядре Linux 5.3» . 8 октября 2019 года. Архивировано из оригинала 8 октября 2019 года . Проверено 8 октября 2019 г.