fork bomb

Der Standard

:(){ :|:& };:

Diese Implementierung einer Fork Bomb ist die klassische Methode, ein unioxides System direkt crashen zu lassen. In dem Augenblick, da die Bombe zündet, wird das System mit einer exponentiell wachsenden Anzahl an Prozessen überflutet.

Der Schläfer

:(){ sleep 2; :|:& };:

Es werden nach wie vor unendlich viele Child-Processes gestartet, allerdings dauert es jetzt ein klein wenig länger, ehe das System einfriert, denn es ist eine Wartedauer von 2 Sekunden pro Durchlauf eingestellt. Damit wird die Bombe zum Schläfer, denn das Ergebnis der gezündeten Bombe ist nicht sofort ersichtlich.

Der Ninja

:(){ :; };:

Erzeugt 100% CPU-Last mit einem einzigen Prozess, keinem wird es auf den ersten Blick auffallen.

Schutz-Stufe 1: Ressourcen der User begrenzen

ulimit -u

zeigt die Anzahl möglicher Tasks an, die ein User innerhalb seines Kontextes starten kann.

ulimit -u [$ZAHL]

legt die Anzahl möglicher User-Tasks fest.

Wieviel braucht ein normaler User im Alltag?

Eine typische Desktop-Session (GNOME, KDE, Cinnamon) erzeugt:

  • 200–800 Prozesse direkt,
  • Browser allein kann über 100–300 Prozesse erzeugen (Tabs sind isoliert),
  • VSCode, Terminal, Docker, VMs etc. treiben die Zahl locker über 1000.

Daher sind Werte < 512 heute praktisch unbrauchbar.

Realistische Untergrenzen

NutzungEmpfehlung (ulimit -u)Erklärung
Minimal-User / Server-User ohne GUI512–1024Reicht für Shell + Tools + kleine Skripte
Desktop-User normal2048–4096Browser, IDEs, systemd –user
Power-User / Dev4096–8192Docker, viele Browser-Tabs, VMs

Mehr als ~8192 braucht man real eher selten, und je höher man bei den Tasks geht, desto weniger bringt es als Schutz.


Schutz-Stufe 2: systemweite Limits setzen

Anstatt nur ulimit in der Shell:
/etc/security/limits.conf oder /etc/security/limits.d/90-hardening.conf:

*   hard  nproc   4096
*   soft  nproc   2048

root hard nproc   unlimited

Damit gilt:

  • Jeder normale User kann maximal 4096 Tasks erzeugen.
  • Arbeiten ist jederzeit möglich.
  • Eine Fork Bomb verpufft nach ~4096 Prozessen und killt nur den User selbst.

Bonus: systemd schützt dich zusätzlich

Wenn du Systemd-User-Services nutzt (z. B. Desktop-Systeme), kannst du noch härtere Grenzen setzen:

/etc/systemd/logind.conf:

UserTasksMax=4096

oder pro Benutzer in /etc/systemd/user.conf:

TasksMax=4096

Das ist ein realer Hardening-Mechanismus, den viele übersehen.