Форк-бомба
Что такое Форк-бомба?
Форк-бомбаМетод отказа в обслуживании, при котором процесс многократно порождает свои копии, исчерпывая таблицу процессов, память и CPU.
Форк-бомба — это вредоносный или случайный код, который рекурсивно порождает дочерние процессы, удваивая их число на каждом цикле, пока не будут исчерпаны лимиты ядра, память или процессор и система не перестанет отвечать. Классическая POSIX-однострочка :(){ :|:& };: определяет функцию с именем :, которая направляет две свои копии в фоновый режим по конвейеру, а затем вызывает себя; каждое поколение удваивает число процессов, поэтому таблица процессов заполняется за считанные секунды. Идея появилась задолго до Unix — одно из её ранних названий, «wabbit» (кролик), по имеющимся данным, наблюдалось на мейнфрейме Burroughs в Университете Вашингтона примерно в 1969–1974 годах.
Форк-бомбы не распространяются по сети как черви; это локальные атаки на исчерпание ресурсов, но очень эффективные на общих многопользовательских узлах, CI-раннерах и в контейнерах, где один непривилегированный пользователь может лишить обслуживания всех остальных.
Меры защиты ограничивают ресурсы, которые может потреблять дерево процессов, а не блокируют системный вызов. В Linux ключевые средства управления — это ulimit -u / PAM pam_limits (nproc) для ограничения числа процессов на пользователя и контроллер cgroups pids (pids.max) — который Docker и Kubernetes предоставляют через --pids-limit — для ограничения числа задач в контейнере. Изоляция учётных записей, песочницы для недоверенного кода и выделенные исполнители CI дополнительно сокращают радиус поражения.
flowchart TD
A[":() функция<br/>вызывает себя дважды"] --> B[Потомок 1]
A --> C[Потомок 2]
B --> D[Внук]
B --> E[Внук]
C --> F[Внук]
C --> G[Внук]
D --> H["... экспоненциальный рост ..."]
E --> H
F --> H
G --> H
H --> I{"pids.max / ulimit -u<br/>достигнут?"}
I -->|Лимита нет| J[Таблица процессов исчерпана — узел зависает]
I -->|Лимит задан| K[Новые форки завершаются с EAGAIN — узел выживает]● Примеры
- 01
Известная bash-однострочка `:(){ :|:& };:` как учебный пример DoS.
- 02
Багованные CI-скрипты, случайно вызывающие fork в бесконечном цикле.
● Частые вопросы
Что такое Форк-бомба?
Метод отказа в обслуживании, при котором процесс многократно порождает свои копии, исчерпывая таблицу процессов, память и CPU. Относится к категории Вредоносное ПО в кибербезопасности.
Что означает Форк-бомба?
Метод отказа в обслуживании, при котором процесс многократно порождает свои копии, исчерпывая таблицу процессов, память и CPU.
Как защититься от Форк-бомба?
Защита от Форк-бомба обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Форк-бомба?
Распространённые альтернативные названия: Wabbit, Кролик-вирус.