Gabel-Bombe

In der Computerwissenschaft ist die Gabel-Bombe eine Form des Angriffs der Leugnung des Dienstes gegen ein Computersystem, das von der Gabel-Operation Gebrauch macht (oder gleichwertige Funktionalität), wodurch ein laufender Prozess einen anderen laufenden Prozess schaffen kann. Gabel-Bomben breiten sich normalerweise als Würmer oder Viren nicht aus; um ein System untauglich zu machen, verlassen sie sich auf die (allgemein gültige) Annahme, dass die Zahl von Programmen und Prozessen, die gleichzeitig auf einem Computer durchführen können, eine Grenze hat. Dieser Typ, Programm zu selbstwiederholen, wird manchmal einen wabbit genannt.

Eine Gabel-Bombe arbeitet durch das Schaffen einer Vielzahl von Prozessen sehr schnell, um den verfügbaren Raum in der Liste von durch das Betriebssystem des Computers behaltenen Prozessen zu sättigen. Wenn der Prozess-Tisch durchtränkt wird, können keine neuen Programme anfangen, bis ein anderer Prozess endet. Selbst wenn das geschieht, ist es nicht wahrscheinlich, dass ein nützliches Programm angefangen werden kann, da alle Beispiele des Bombe-Programms jeder versuchen werden, jedes kürzlich verfügbare Ablagefach selbst zu nehmen.

Zusätzlich zum Verwenden des Raums im Prozess-Tisch verwendet jeder Kinderprozess einer Gabel-Bombe weiter mit dem Verarbeiter malig und Gedächtnis. Infolge dessen verlangsamen sich das System und die vorhandenen Programme und werden viel mehr unempfänglich und schwierig oder sogar unmöglich zu verwenden.

Sowie spezifisch böswillig seiend, können Gabel-Bomben zufällig in der normalen Entwicklung der Software vorkommen. Die Entwicklung einer Anwendung, die auf einer Netzsteckdose hört und als der Server in einem Client/Server-System handelt, kann eine unendliche Schleife- und Gabel-Operation gut verwenden, die gewissermaßen einem der Programme ähnlich ist, die unten präsentiert sind. Ein trivialer Programmfehler in der Quelle dieser Art der Anwendung konnte eine Gabel-Bombe während der Prüfung verursachen.

Beispiele

Das folgende wohl bekannte Beispiel einer Gabel-Bombe wird durch das Aufkleben der folgenden 13 Charaktere (einschließlich Räume) in eine UNIX-Schale wie heftiger Schlag oder zsh durchgeführt.

: {:|:&};:

</Quelle>

Das Verstehen das obengenannte:

: # definieren Sie ':' - wann auch immer wir sagen ':', tun Sie das:

{# Anfang dessen, was man tut, wenn wir sagen ':'

: # laden eine andere Kopie ':' Funktion ins Gedächtnis...

| #... und Pfeife seine Produktion dazu...

: #... eine andere Kopie ':' Funktion, die ins Gedächtnis geladen werden

muss

# (deshalb, ':|:' Einfach bekommt zwei Kopien ':' geladen wann auch immer ':' Wird genannt)

& # verleugnen die Funktionen - wenn das erste ':', Wird getötet

# sollten alle Funktionen, die es angefangen hat, nicht autogetötet werden

} # Ende dessen, was man tut, wenn wir sagen ':'

# definiert ':', wir sollten jetzt...

: # rufen Sie... ':' das Einleiten einer Kettenreaktion: jeder ':' Wird noch zwei anfangen.

</Quelle>

Vorausgesetzt, dass ':' Ist ein willkürlicher Name für die Funktion, ein leichterer, um zu verstehen, dass Version sein würde:

In der Windows-Gruppe von Microsoft für cmd und command.com:

%0 |%0

</Quelle>

In POSIX C oder C ++:

  1. einschließen

int Hauptsache

{\

während (1)

Gabel ;

kehren Sie 0 zurück;

}\

</Quelle>

In Perl:

Gabel während Gabel

</Quelle>

Das Entschärfen

Sobald eine erfolgreiche Gabel-Bombe in einem Computersystem aktiv ist, kann man sie neu starten müssen, um seine normale Operation fortzusetzen. Das Aufhören einer Gabel-Bombe verlangt das Zerstören aller laufenden Kopien davon. Das Versuchen, ein Programm zu verwenden, um die Schelm-Prozesse zu töten, verlangt normalerweise das Schaffen eines anderen Prozesses — eine schwierige oder unmögliche Aufgabe, wenn die Gastgeber-Maschine keine leeren Ablagefächer in seinem Prozess-Tisch oder keinen Raum in seinen Speicherstrukturen hat. Außerdem, als die Prozesse der Bombe begrenzt werden (zum Beispiel, durch das Verwenden (8) Befehl), werden Prozess-Ablagefächer frei und die restlichen Gabel-Bombe-Fäden, kann fortsetzen, sich wieder auch zu vermehren, weil es vielfache Zentraleinheitskerne gibt, die im System aktiv sind, und/oder weil der Planer abgerückt ist, Kontrolle davon töten (8) wegen des Zeitabschnittes, der wird verbraucht.

Auf Windows von Microsoft Betriebssystem kann eine Gabel-Bombe durch die Protokollierung des Benutzers aus seiner/ihrer Computersitzung entschärft werden, die annimmt, dass die Gabel-Bombe innerhalb dieser spezifischen Sitzung von diesem Benutzer angefangen wurde.

Jedoch, in der Praxis, können Systemverwalter einige dieser Gabel-Bomben relativ leicht unterdrücken. Betrachten Sie die Schale-Gabel-Bombe als gezeigt unten:

: {:|: &};:

</Quelle>

Eine wichtige "Eigenschaft" in diesem Computercode bedeutet, dass ein Gabel-Bombe-Prozess, der sich nicht mehr gabeln kann, nicht in der Nähe bleibt, aber eher abgeht. Wenn wir häufig genug versuchen, schließlich fangen wir einen neuen nichtstuerischen Prozess an. Jeder neue nichtstuerische Prozess, den wir führen, vermindert die Anzahl von zügellosen "Gabel Bombe" Prozessen durch einen, bis schließlich sie alle ausgerottet werden können. An diesem Punkt können die nichtstuerischen Prozesse abgehen. Der folgende kurze Z Code von Shell könnte die obengenannte Gabel-Bombe in ungefähr einer Minute loswerden:

während (schlafen 100 &), tun; getaner

</Quelle>

Wenn die Gabel-Bombe auf der aktuellen interaktiven Konsole angefangen wurde, und es so schnell entschärft werden muss wie möglich, kann die Funktion überschrieben werden. Mit dem obengenannten Gabel-Bombe-Code konnte man es überschreiben mit:

: {. &};

</Quelle>

Das verlangt nicht, dass ein zusätzliches Beispiel der Funktion angerufen wird (bemerken Sie das Finale: Entfernt), wie die bereits gabelförmigen Beispiele der ursprünglichen Funktion die neue nennen und sich ausrotten werden, sobald es Raum im Prozess-Tisch gibt. Diese Funktion nennt gerade das aktuelle Verzeichnis und die Hintergründe selbst. Auf diese Weise wird ein Prozess nicht geschaffen (aktuelles Verzeichnis kann nicht durchgeführt werden), aber zur gleichen Zeit die anderen Gabeln werden nicht getötet. Das wurde auf Fedora 15 geprüft. Anderer Vertrieb und Geschmäcke von Unix können dieselbe Wirkung nicht haben.

Wechselweise kann das Aufhören ("des Einfrierens") der Prozesse der Bombe verwendet werden, so dass ein nachfolgender kill/killall sie ohne einigen der Teile begrenzen kann, die wegen kürzlich verfügbarer Prozess-Ablagefächer wiederwiederholen:

killall - HÖREN processWithBombName AUF

killall - TÖTEN processWithBombName

</Quelle>

Wenn ein System auf freiem PIDs niedrig ist (in Linux, kann die maximale Zahl von pids bei/proc/sys/kernel/pid_max erhalten werden), das Entschärfen einer Gabel-Bombe wird schwieriger:

$ killall-9 processWithBombName

heftiger Schlag: Gabel: Kann Gedächtnis nicht zuteilen

</Quelle>

In diesem Fall ist das Entschärfen der Gabel-Bombe nur möglich, wenn mindestens eine Schale offen ist. Prozesse dürfen nicht gegabelt werden, aber man kann execve jedes Programm von der aktuellen Schale. Gewöhnlich ist nur ein Versuch möglich.

Warum nicht exec killall-9 direkt von der Schale? Weil killall nicht atomar ist und Schlösser auf der Prozess-Liste so nicht hält, als es fertig ist, wird die Gabel-Bombe einige Generationen vorn vorbringen. So muss man einige Killall-Prozesse zum Beispiel starten:

während:; Tun Sie killall-9 processWithBombName; getaner

</Quelle>

Auf Linux, weil der Prozess-Tisch zugänglich durch den/proc filesystem gemacht wird, ist es möglich, die Gabel-Bombe mit dem heftigen Schlag builtins zu entschärfen, die sich gabelnde neue Prozesse nicht verlangen. Das folgende Beispiel identifiziert verstoßende Prozesse, und hebt sie auf, um ihr ständiges zu verhindern sich zu gabeln, während sie einer nach dem anderen getötet werden. Das vermeidet die Rasse-Bedingung anderer Beispiele, die scheitern können, wenn sich die verstoßenden Prozesse schneller gabeln können, als sie getötet werden.

cd/proc;

für p in [0-9] *; lesen Sie wirklich CMDLINE

Verhinderung

Eine Weise, eine Gabel-Bombe zu verhindern, schließt das Begrenzen der Zahl von Prozessen ein, die ein einzelner Benutzer besitzen kann. Wenn ein Prozess versucht, einen anderen Prozess zu schaffen, und der Eigentümer dieses Prozesses bereits das Maximum besitzt, scheitert die Entwicklung. Verwalter sollten das Maximum niedrig genug setzen, so dass, wenn alle Benutzer, die gleichzeitig ein System bombardieren könnten, so tun, genug Mittel noch Katastrophe vermeiden müssen.

Bemerken Sie, dass eine zufällige Gabel-Bombe hoch kaum mehr als einen Benutzer einbeziehen wird. Kernfleck-grsecurity von Linux hat eine Eigenschaft, die ermöglicht zu loggen, von denen Benutzer eine Gabel-Bombe angefangen hat.

Unix-Typ-Systeme haben normalerweise eine Prozess-Grenze, die von einem Ulimit-Schale-Befehl oder seinem Nachfolger, setrlimit kontrolliert ist. Kerne von Linux setzen und machen den RLIMIT_NPROC rlimit ("Quellengrenze") eines Prozesses geltend. Wenn ein Prozess versucht, eine Gabel und den Benutzer durchzuführen, der sich bekennt, besitzt dieser Prozess bereits RLIMIT_NPROC-Prozesse, dann scheitert die Gabel. Zusätzlich, auf Linux oder *BSD, kann man den pam_limits config Datei/etc/security/limits.conf zu derselben Wirkung editieren. Jedoch ließ nicht der ganze Vertrieb von Linux das pam_limits Modul standardmäßig installieren.

Eine andere Lösung, nicht weit geübt, schließt die Entdeckung von Gabel-Bomben durch das Betriebssystem ein. Das Linux Kernmodul hat RexFBD-Werkzeuge diese Strategie genannt.

Auf FreeBSD kann der Systemverwalter Grenzen in für jeden Benutzer stellen, effektiv verhindernd, zu viele Prozesse, Gedächtnis, Zeit und andere Mittel verwendend.

Bemerken Sie, dass, einfach die Zahl von Prozessen beschränkend, ein Prozess schaffen kann, verhindert keine Gabel-Bombe, weil jeder Prozess, den die Gabel-Bombe schafft, auch Prozesse schaffen konnte. Ein verteilendes Betriebsmittelzuweisungssystem, in dem ein Prozess die Mittel seiner Eltern teilt, würde arbeiten, aber solche verteilenden Quellensysteme sind nicht in der üblichen Anwendung.

Siehe auch

Referenzen

Links


DJ YELLA / George Chalmers
Impressum & Datenschutz