Разбираемся в работе fork бомбы

Можете ли вы объяснить как работает fork бомба на bash?

:(){ :|:& };:

Fork бомба - один из видов DoS атак (атака на отказ в обслуживании).

:(){ :|:& };: - ни что иное, как простая bash-функция. Она запускается рекурсивно. Ее часто используют системные администраторы для проверки настройки лимита количества процессов для пользователя. Лимиты могут быть настроены в /etc/security/limits.conf и PAM для избежания разрушительных действий fork бомбы.

Как только fork бомба запущена - система перестанет нормально функционировать. Остается только перезагрузить хост, т.к. другого способа убить все процессы, клонирующие себя, просто нет.

ВНИМАНИЕ!!! Следующие примеры могут привести к нежелательным последствиям.

Понимание кода

:() - определяем функцию с именем :. Эта функция не принимает аргументов. Синтаксис функциях в bash такой:

foo(){
 arg1=$1
 arg2=$2
 echo 'Bar..'
 #do_something on $arg argument
}

fork бомбу можно записать так:

:(){
 :|:&
};:

:|: - эта часть вызывает саму себя и передает результат работы функции в следующий вызов той же функции :. Таким образом достигается рекурсивный вызов. Худшая часть этой функции то, что она запускается дважды за один вызов.

& - отправляет работу функции в фон, так что потомки не умирают, а начинают отъедать ресурсы системы.

; - заканчивает определение функции.

: - вызывает (запускает) функцию.

Вот переписанный для более читабельного вида код:

bomb() {
 bomb | bomb &
}; bomb

Правильно сконфигурированная система не должна исчерпывать ресурсы после запуска бомбы.



Комментарии: