Wenn du global setzen würdest
alias ':(){ :|:& };:'='echo fork bomb averted'
Wäre das eine effektive Sicherheitsstrategie, um die Bash-Fork-Bomb-Ausführung zu vermeiden, oder gäbe es noch eine Möglichkeit, diese auszuführen?
Ich nehme an, die Frage zahlt sich aus: Gibt es eine Möglichkeit, einen Befehl auszuführen, wenn er auf etwas anderes ausgerichtet ist?
a(){ a|a& };a
Antworten:
Die
zwei, nein,drei, ... Zu den Haupthindernissen dafür gehören:Es ist kein gültiger Name für einen Alias. Bashs Online-Handbuch :
(
,)
,&
,|
Und Leerzeichen 4.4 in Bash ist out.Diese spezielle Saite ist nicht die einzige Möglichkeit, eine Gabelbombe in die Muschel zu schreiben. Sie ist nur berühmt, weil sie dunkel aussieht. Zum Beispiel muss die Funktion nicht aufgerufen werden,
:
sondern nur aus Buchstaben zusammengesetzt.Wenn Sie den Alias festlegen könnten, könnte der Benutzer den Alias aufheben, ihn umgehen, indem er den Aliasnamen in der Befehlszeile maskiert, oder Aliase insgesamt deaktivieren, möglicherweise durch Ausführen der Funktion in einem Skript (Bash erweitert Aliase in nicht interaktiven Shells nicht). .
Selbst wenn die Shell so eingeschränkt ist, dass alle Versionen einer Gabelbombe gestoppt werden können, verfügt ein Allzwecksystem über andere programmierbare Dienstprogramme, die Teilprozesse wiederverwenden und ausschalten können. Hast du Perl oder einen C-Compiler? Leicht genug. Sogar awk könnte es wahrscheinlich tun. Auch wenn Sie diese nicht installiert haben, müssen Sie den Benutzer daran hindern, kompilierte Binärdateien von außerhalb des Systems einzuspielen, oder sie
/bin/sh
müssen ausgeführt werden, damit der Rest des Systems funktionsfähig ist.Verwenden Sie einfach
ulimit -u
(dhRLIMIT_NPROC
) oder ein gleichwertiges Element, um die Anzahl der Prozesse einzuschränken, die ein Benutzer starten kann. Auf den meisten Linux-Systemenpam_limits
kann die Anzahl der Prozesse festgelegt werden, bevor vom Benutzer ausgewählte Befehle gestartet werden.So etwas in
/etc/security/limits.conf
würde für alle Benutzer eine feste Grenze von 50 Prozessen setzen:(Stephen Kitt erwähnte bereits Punkt 1, Jeff Schaller erwähnte 2 und 3.)
quelle
&
?&
Einschränkung umgehen .Nein. Es gibt einfach zu viele Möglichkeiten, eine Gabelbombe zu schreiben.
Der böse Gabelbombenschreiber versucht es einfach noch einmal mit einem anderen Funktionsnamen. Oder andere Änderungen, bis seine Gabelbombe erfolgreich ist.
Der versehentliche Gabelbombenschreiber wird die kanonische Gabelbombe gar nicht erst herstellen.
Es ist eigentlich ziemlich einfach, selbst ein versehentlicher Gabelbombenschreiber zu werden. Sie können beispielsweise rekursiv
make
mit einem externen, nichtcd
aktivierten Element verwenden und es mit der-j
Option und nicht vorhandenen Unterverzeichnissen kombinieren - ein echtes Beispiel, auf das ich schon einmal gestoßen bin.Sie können nicht gegen alle Möglichkeiten und mit Sicherheit nicht gegen einen entschlossenen Angreifer schützen. Alles, was Sie erreichen, ist die Komplexität Ihres Systems zu erhöhen.
quelle
Sie können keine Gabelbombe aliasen, da es sich nicht um einen gültigen Aliasnamen handelt :
Einige Shells überprüfen Aliasnamen nicht, wenn sie deklariert werden, sondern wenn sie Befehle interpretieren, und überspringen dann den ungültigen Namen. Eine Gabelbombe wird immer enthalten sein
&
, was nicht in einem gültigen Aliasnamen enthalten sein kann, so dass es nicht möglich ist, sich auf diese Weise zu schützen.quelle
dash
undbosh
zB beide ignorieren es stillschweigend.Zweimal nein.
Das ist nicht die einzige Möglichkeit, eine Gabelbombe zu schreiben.
Es gibt auch mehrere Möglichkeiten, "einen Befehl" auszuführen, wenn ein Alias vorhanden ist:
Beispiel:
quelle
\ls
gezeigtoutput.png
,command ls
aber nicht?