Würde ein globales Aliasing der Fork-Bombe deren Ausführung verhindern?

Würde ein globales Aliasing der Fork-Bombe deren Ausführung verhindern?

Wenn Sie global festlegen würden

alias ':(){ :|:& };:'='echo fork bomb averted'

Wäre das eine wirksame Sicherheitsstrategie, um die Ausführung der Bash-Fork-Bombe zu verhindern, oder gäbe es dennoch eine Möglichkeit, sie auszuführen?

Ich nehme an, die Frage läuft darauf hinaus: Gibt es eine Möglichkeit, einen Befehl auszuführen, wenn dieser einen Alias ​​für etwas anderes hat?

Antwort1

Die zwei , nein, drei , ... Zu den Haupthindernissen dabei zählen:

  1. Dies ist kein gültiger Name für einen Alias.Bashs Online-Handbuch:

    Die Zeichen ... und alle oben aufgeführten Shell-Metazeichen oder Anführungszeichen dürfen in einem Aliasnamen nicht vorkommen.

    (, ), &, |und Leerzeichen sind in Bash 4.4 nicht mehr verfügbar.

  2. Diese spezielle Zeichenfolge ist nicht die einzige Möglichkeit, eine Fork-Bombe in der Shell zu schreiben, sondern nur deshalb berühmt, weil sie obskur aussieht. Es besteht beispielsweise keine Notwendigkeit, die Funktion :anstelle von etwas aufzurufen, das tatsächlich aus Buchstaben besteht.

  3. 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 vollständig deaktivieren, möglicherweise indem er die Funktion in einem Skript ausführt (Bash erweitert Aliase nicht in nicht interaktiven Shells).

  4. Selbst wenn die Shell so eingeschränkt ist, dass sie alle Versionen einer Fork-Bombe stoppt, verfügt ein Allzwecksystem über andere programmierbare Dienstprogramme, die rekursiv arbeiten und Unterprozesse abspalten können. Sie haben Perl oder einen C-Compiler? Ganz einfach. Sogar awk könnte das wahrscheinlich. Selbst wenn Sie diese nicht installiert haben, müssen Sie den Benutzer auch daran hindern, kompilierte Binärdateien von außerhalb des Systems einzuspielen oder auszuführen, /bin/shwas wahrscheinlich eine voll funktionsfähige Shell sein muss, damit der Rest des Systems funktioniert.

Benutz einfachulimit -u(ie RLIMIT_NPROC) oder gleichwertig, um die Anzahl der Prozesse zu beschränken, die ein Benutzer starten kann. Auf den meisten Linux-Systemen gibt espam_limitsDadurch kann die Anzahl der Prozesse begrenzt werden, bevor vom Benutzer ausgewählte Befehle gestartet werden.

So etwas /etc/security/limits.confwürde eine feste Grenze von 50 Prozessen für alle Benutzer festlegen:

*        hard    nproc           50

(Stephen Kittschon erwähntPunkt 1, Jeff Schallererwähnt2 und 3.)

Antwort2

Nein. Es gibt einfach zu viele Möglichkeiten, eine Fork-Bombe zu schreiben.

Der böse Fork-Bomb-Autor wird es einfach mit einem anderen Funktionsnamen oder anderen Änderungen erneut versuchen, bis seine Fork-Bombe erfolgreich ist.

Der unabsichtliche Autor der Fork-Bombe wird die kanonische Fork-Bombe erst gar nicht produzieren.

Es ist eigentlich ziemlich einfach, selbst zum unabsichtlichen Autor von Fork-Bomben zu werden. Sie könnten beispielsweise einfach rekursiv makemit einem externen, nicht aktivierten verwenden cdund es mit der Option und nicht vorhandenen Unterverzeichnissen kombinieren -j- ein echtes Beispiel, über das ich einmal gestolpert bin.

Sie können sich nicht gegen alle Möglichkeiten schützen, und schon gar nicht gegen einen entschlossenen Angreifer.Sie erreichen damit lediglich eine Erhöhung der Komplexität Ihres Systems.

Antwort3

Man kann eine Fork Bomb nicht als Alias ​​verwenden, da es sich nicht um einegültiger Aliasname:

$ alias ':(){ :|:& };:'='echo fork bomb averted'
bash: alias: `:(){ :|:& };:': invalid alias name

Die Zeichen '/', '$', '`', '=' und alle oben aufgeführten Shell-Metazeichen oder Anführungszeichen dürfen in einem Aliasnamen nicht vorkommen.

Einige Shells prüfen Aliasnamen nicht bei der Deklaration, sondern bei der Interpretation von Befehlen und überspringen dann den ungültigen Namen. Eine Fork-Bombe enthält immer &, was nicht in einem gültigen Aliasnamen enthalten sein kann. Daher ist es nicht möglich, sich auf diese Weise zu schützen.

Antwort4

Zweimal, nein.

Das ist nicht die einzige Möglichkeit, eine Fork-Bombe zu schreiben.

Es gibt auch mehrere Möglichkeiten, „einen Befehl“ auszuführen, wenn ein Alias ​​vorhanden ist:

command the-command
\the-command

Beispiel:

$ alias ls=not-really-ls
$ ls
-bash: not-really-ls: command not found
$ \ls
jeff.html  output.png
$ command ls
jeff.html  output.png

verwandte Informationen