Создание Fork Bomb в Unix/Linux

Концепция Fork Bomb — коварная маленькая программа, которая порождает себя n-раз, отбросив цепную реакцию (рекурсия) и тем самым быстро исчерпав ресурсы системы.

Примеры создания  Fork Bomb в Unix/Linux

WARNING! Эти примеры могут привести к сбою вашего компьютера в случае его выполнения.

Примеры создания  Fork Bomb с использованием bash

И так, код выглядит так:

Где:

  • :() — Определение функции.
  • {  — Открытие функции.
  • :|: — Далее, загружает копию функции «:» в память тем самым, будет вызывать само себя с использованием техники программирования ( так называемая рекурсия) и передает результат на другой вызов функции.
  • ‘:’ — Худшая часть — функция, вызываемая два раза, чтобы «бомбить» вашу систему.
  • & — Помещает вызов функции в фоновом режиме, чтобы fork (дочерний процесс) не мог «умереть» вообще, тем самым это начнет есть системные ресурсы.
  • } — Закрытие функции.
  • ; — Завершите определение функции. Т.е является разделителем команд, (такой как и &&).
  • : — Запускает функцию которая порождает fork bomb().

Это рабочий код, но не очень читабельный. Вот пример нормального, читаемого кода:

Идем дальше.

Примеры создания  Fork Bomb с использованием perl

Пример встроенной оболочки с использованием интерпретатора Perl:

Примеры создания  Fork Bomb с использованием Python

Пример кода:

Примеры создания  Fork Bomb с использованием Ruby

И так, вот код:

Примеры создания  Fork Bomb с использованием C/C++

Код будет выглядеть:

Примеры Defusing Fork Bomb в Unix/Linux

Defusing — так званое разминирование fork bomb. Из-за их характера, такие бомбы трудно оставновить после их запуска. Чтобы остановить такую бомбу, нужно  завершить все рабочих копий, чего может быть трудно достичь. Одна из проблем заключается в том, что данная команда не может быть выполнена из-за того, что таблица процессов полностью забита. Вторая серьезная проблема заключается в том,  на момент поиска процессов для прекрашения потратилось время за которое могло создатся еще пару форков программы.

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

Когда у системы мало свободных PID (в Linux максимальное количество PID-ов можно получить получено из /proc/sys/kernel/pid_max), «разрядка» form bomb-ы становится более сложной:

Можно получить ошибку:

В этом случае разрядка бомбы возможна только в том случае, если хотя бы одна оболочка открыта. Процессы могут не разветвляться, но можно выполнить любую программу из текущей оболочки. Как правило, возможна только одна попытка.

Команда «killall -9» не выполняется непосредственно из оболочки, потому что команда не является атомарной и не удерживает блокировки в списке процессов, поэтому к тому времени когда она закончится, fork bomb наплодит еще ПИДов. Поэтому нужно запустить несколько процессов killall, например:

Еще пример, — т.к таблица процессов достапна в Linux через ФС (/proc), то можно обезвредить данный форк бомбы с помощью встроенных функций bash, которые не требуют развертывания новых процессов.

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

Как-то так!

Надеюсь это было увлекательно и познавательно, особенно — если об этом не знали. А у меня все, статья «Создание Fork Bomb в Unix/Linux» завершена.

Создание Fork Bomb в Unix/Linux
Метки:                    

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Мы тоже используем куки на своих сайтах и поддоменах, потому что без них вообще весь интернет работал бы через жопу
Прекрасно