== Was sind das? == Fork-Bombs sind eine Unterkategorie von [[http://en.wikipedia.org/wiki/Wabbit|Wabbits]], Programme deren einziges Ziel die massenhafte Selbstreplikation ist. In einer Endlosschleife wird fortlaufend eine Kopie des eigenen Programms erzeugt, welche wiederum eigene Kopien erzeugt usw. - dies geschieht solange, bis die Ressourcen des Compuersystems aufgebraucht sind. Fork-Bombs speziell nutzen zur Replikation die Fork-Funktion (fork, engl. = Gabelung, Verzweigung). == Was bewirken sie? == Durch die rasante Selbstreplikation ist die maximal mögliche Zahl der simultan laufenden Prozesse schnell überschritten - somit können keine weiteren gestartet werden. Alle diese Kinder-Prozesse der Eltern-Fork-Bomb fressen Arbeitsspeicher und CPU-Leistung die damit anderen Prozessen fehlt. Dies führt von der Ausbremsung des gesamten Systems bis zur kompletten Unbenutzbarkeit (nix geht mehr). In diesem Fall ist ein kompletter Reboot des Systems die einzige Möglichkeit alle Instanzen der Fork-Bomb zu killen. == Gegenmaßnahmen == Unter GNU/Linux kann in einer Konfigurationsdatei die maximale Anzahl an Prozessen, die ein user gleichzeitig starten kann begrenzt werden. Dazu müssen in der ''/etc/security/limits.conf'' entsprechde Einträge hinzugefügt werden. 1. root werden {{{ schmalz@ohr:~$ su Password: ohr:/home/schmalz# }}} 2. Konfigurationsdatei mit einem Texteditor öffnen {{{ ohr:/home/schmalz# nano /etc/security/limits.conf }}} 3. Prozess-Limits in die Datei schreiben {{{ schmalz soft nproc 300 schmalz hard nproc 500 # End of file }}} So kann schmalz maximal 500 Prozesse gleichzeitug ausführen - der Verstopfung des Ohres mit Schmalz ist somit ein Riegel vorgeschoben. Falls der user 'tinnitus' auch eine Prozessbegrenzung erhalten soll, müssen entsprechende Einträge hinzugefügt werden. Gehören beide der Gruppe 'users' an, kann auch für alle Mitglieder dieser Gruppe eine Prozessbegrenzung gesetzt werden. Dabei ist der username durch @users zu ersetzten. == Fork-Bomb Gallerie == === Bash Bombs === {{{ :(){ :|:& };: }}} {{{ (:(){ :|:;};:) }}} === unter C === {{{ #include int main(void) { while(1) { fork(); } return 0; } }}} === Python Forks === {{{ #/usr/bin/python import os while(1): os.fork() }}} === Batch-Datei unter Windoze === {{{ :s start %0 goto s }}}