Ich habe gerade von einer Gabelbombe erfahren , einer interessanten Art eines Denial-of-Service-Angriffs. Wikipedia (und einige andere Orte) schlagen vor, :(){ :|:& };:
auf UNIX-Computern den Prozess unendlich oft zu verzweigen. Unter Mac OS X Lion scheint es jedoch nicht zu funktionieren (ich erinnere mich, dass die beliebtesten Betriebssysteme für einen solchen direkten Angriff nicht anfällig sind). Ich bin jedoch sehr gespannt, wie ein solcher Angriff funktioniert (und aussieht) und möchte ihn auf meinem Mac ausprobieren. Gibt es eine Möglichkeit, die Sicherheitsvorkehrungen des Systems zu umgehen, oder ist eine Gabelbombe auf Macs nicht möglich?
8
Antworten:
So funktioniert eine Gabelbombe: Im C-Code (oder C-ähnlichen Code) wird eine Funktion namens benannt
fork()
. Dies führt dazu, dass Linux oder Unix oder Unix-a-Likes einen völlig neuen Prozess erstellen. Dieser Prozess verfügt über einen Adressraum, eine Prozess-ID, eine Signalmaske, offene Dateideskriptoren und alle möglichen Dinge, die Platz im etwas begrenzten Speicher des Betriebssystemkerns beanspruchen. Der neu erstellte Prozess erhält auch einen Platz in der Datenstruktur des Kernels, damit Prozesse ausgeführt werden können. Für den aufgerufenen Prozessfork()
sieht es so aus, als wäre nichts passiert. Ein Gabelbombenprozess wird versuchen,fork()
so schnell wie möglich und so oft wie möglich zu callen.Der Trick ist, dass der neu erstellte Prozess auch aus
fork()
demselben Code stammt. Nach einem Fork haben Sie zwei Prozesse, die denselben Code ausführen. Jeder neue Gabelbombenprozess versuchtfork()
so schnell wie möglich zu rufen , so oft er kann. Der Code, den Sie als Beispiel angegeben haben, ist eine Bash-Skript-Version einer Gabelbombe.Bald sind alle prozessbezogenen Ressourcen des Betriebssystemkerns aufgebraucht. Die Prozesstabelle ist voll. Die Warteliste der Prozesse ist voll. Der reale Speicher ist voll, daher beginnt das Paging. Wenn dies lange genug dauert, füllt sich die Swap-Partition.
Wie das für einen Benutzer aussieht: Alles läuft super langsam. Sie erhalten Fehlermeldungen wie "Prozess konnte nicht erstellt werden", wenn Sie einfache Dinge wie ausprobieren
ls
. Der Versuch einesps
führt zu einer endlosen Pause (wenn überhaupt) und gibt eine sehr lange Liste von Prozessen zurück. Manchmal erfordert diese Situation einen Neustart über das Netzkabel.Gabelbomben wurden früher "Kaninchen" genannt. Weil sie sich so schnell vermehrten.
Nur zum Spaß habe ich ein Gabelbombenprogramm in C geschrieben:
Ich habe dieses Programm unter Arch Linux in einem xterm kompiliert und ausgeführt. Ich habe ein anderes xterm versucht, eine Prozessliste zu bekommen:
Die Z-Shell im 2. xterm konnte nicht
fork()
erfolgreich aufgerufen werden, da die mit dem 1. xterm verknüpften Gabelbombenprozesse alle Kernelressourcen für den erstellten und ausgeführten Prozess aufgebraucht hatten.quelle
Es gibt viele Sicherheitsvorkehrungen, die getroffen werden können, um zu verhindern, dass die Gabelbombe funktioniert.
Das einfachste ist:
Begrenzung der Anzahl der Benutzerprozesse auf 1024.
Was die Systemgarantien angeht, gibt es sicherlich Möglichkeiten, dies zu tun, aber ich glaube nicht, dass Ihnen hier jemand eine Möglichkeit dazu bietet, aber im Grunde gehen Ihrem System die PIDs aus und es kann nicht mehr erscheinen verarbeitet und kommt im Grunde zum Stillstand, da Ihre Bombe 100% der CPU beansprucht und versucht, mehr von sich selbst zu erzeugen.
quelle
rlimit
/etc/security/limits.conf
Wenn Sie WIRKLICH verzweifelt sehen möchten, wie die Gabelbombe funktioniert, versuchen Sie, sie als Root auszuführen, z. B. seien Sie
sudo :(){ :|:& };:
erneut gewarnt. Versuchte es selbst auf Ubuntu. Das System wird einfrieren!Eine einfache Dissektion für Sie:
Seien Sie sich dessen bewusst, wenn Sie versuchen, solchen Schaden anzurichten ...
quelle
sudo
sosudo su root
dann die Gabelbombe tatsächlich als Root-Benutzer ausführen.Sie können dies tun, aber stellen Sie sicher, dass die Datei file.py heißt
quelle
#!/usr/bin/python
Shebang hinzugefügt wird ?