Forkbombs – oder wie man sich selbst in den Fuß schießt

Mai 25, 2014 um 1:09 pm | Veröffentlicht in Bash, Programmieren, Ubuntuusers | 1 Kommentar

Als eine Forkbomb bezeichnet man ein außer Kontrolle geratenes Programm oder Skript. Das fragliche Programm „forkt“ sich ununterbrochen, erzeugt also immer neue Prozesse. Dadurch erhalten wichtige Prozesse weniger CPU-Zeit und wichtige Daten werden nach und nach aus dem RAM in den Swap übertragen. Mit anderen Worten: das System wird in die Knie gezwungen. Als Form einer DDoS-Attacke kann eine Forkbomb zum Angriff auf ein System verwendet werden. Manchmal passiert es einem aber auch, dass man sich unabsichtlich eine Konstruktion baut, welche wie eine Forkbomb agiert.

Vor etwa 18 Monaten schrieb ich hier einen Artikel über „Alternativen zu youtube-dl„, in welchem ich terminalbasierte Möglichkeiten untersucht habe Videos von YouTube für die offline-Aufbewahrung herunterzuladen. Damals wollte ich mich nicht näher mit dem Problem beschäftigen und habe mir ein einfaches, kleines Wrapper-Skript für cclive geschrieben. Vor kurzem sprach ich das Problem gegenüber einem Kollegen an und wir entschlossen uns dem Problem auf den Grund zu gehen. Der Erfolg ließ nicht lange auf sich warten, nach etwa einer halben Stunde war das Mysterium gelöst. Ich hatte, aus Bequemlichkeit, ein Skript geschrieben welches youtube-dl mit einer Option aufrief, die ich auch sonst immer an das Programm anhing. Da ich zu dieser Zeit gerade meine aliases aufgeräumt hatte, schrieb ich dafür ein kleines Wrapper-Skript mit folgendem Inhalt:

#!/bin/bash

youtube-dl -t

Das Skript benannte ich dann, wieder aus Bequemlichkeit, youtube-dl. Das Skript legte ich ab unter $HOME/bin, welches in meiner PATH-Variable eingetragen war. Voila, Si Forkbömb ist fertisch.</fakeFrenchAccent>

Für alle, die den Ablauf noch nicht nachvollziehen können: Wenn das Programm mit youtube-dl aufgerufen wurde, wurde in Wahrheit das Skript unter $HOME/bin aufgerufen. Dieses sollte dann das eigentliche Programm aufrufen, rief jedoch einfach wieder das Skript unter $HOME/bin auf …

Das ist natürlich ein peinlicher Fehler, der eigentlich einfach zu finden gewesen sein sollte. Er fällt allerdings unter die Kategorie „How did this ever work?„, denn ich hatte das Skript zum Zeitpunkt als die Probleme auftraten schon eine Zeit lang in Gebrauch.

Gegenmittel

Man sieht wie leicht es ist sich selbst in eine Forkbomb zu bauen. Was ist aber nun, wenn man sich mit einer Forkbomb, ob absichtlich oder nicht, konfrontiert sieht? Die englische Wikipedia bietet dazu ein paar Vorschläge. Der meiner Ansicht nach eleganteste ist ein zsh-Einzeiler:

while (sleep 100 &) do; done

Dieser Code erzeugt immer neue Instanzen des Programmes sleep. Das ‚&‚ sorgt dafür, dass der Aufruf in einen neuen Prozess ausgelagert wird. Dadurch können beliebig viele Prozesse gestartet werden, welche sich alle nach jeweils 100 Sekunden wieder beenden. Dadurch hat man eine „kontrollierte“ Forkbomb geschaffen, welche dem Schadprogramm langsam das Wasser abgräbt, bis es sich nicht mehr forken kann. Nach knapp 2 Minuten sollte man wieder die Kontrolle über das System erhalten.

Um schnell auf eine Forkbomb reagieren zu können sollte der obige Code als Skript vorliegen um schnell aufrufbar zu sein. Dazu schreibt man den Code in eine Textdatei:

#!/bin/zsh
while (sleep 100 &) do; done

und benennt die Datei möglichst eindeutig wie kurz. Ich habe sie einfach ff genannt (ForkFighter!). Diese Datei legt man nun in einem Verzeichnis ab, welches man in der PATH-Variable eingetragen hat.

=-=-=-=-=
Powered by Blogilo

1 Kommentar »

RSS feed for comments on this post. TrackBack URI

  1. Rekursion, die: siehe Rekursion.

    Deine Forkbomb ist ein sehr gutes Beispiel dafür😉


Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Erstelle eine kostenlose Website oder Blog – auf WordPress.com.
Entries und Kommentare feeds.

%d Bloggern gefällt das: