Wie man Ubuntu vor einer Gabelbombe schützt

72

Ich habe gehört, wie jemand über eine Gabelbombe gesprochen hat, habe nachgeforscht und schreckliche Informationen über seltsam aussehende Charaktere gefunden, die man in der Befehlszeile eingeben und infolgedessen schlechte Dinge auf dem Computer tun kann. Ich würde sicherlich keine Befehle ausgeben, die ich nicht verstehe, aber man weiß nie, was passieren kann.

Ich habe gehört, dass einige Betriebssysteme es dem Administrator erlauben, die Benutzerprozesse zu beschränken, um die Auswirkungen von Fork Bombs abzuschwächen. Ist dieser Schutz in Ubuntu standardmäßig aktiviert oder muss dies von einer Person mit Sudo-Berechtigung festgelegt werden? Wenn das so ist, wie?

dblang
quelle

Antworten:

73

Sie können die Anzahl der Prozesse, die in Ubuntu und den meisten anderen Linux-Distributionen erzeugt werden können, leicht einschränken, indem Sie Änderungen vornehmen /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Fügen Sie dann diese Zeile am Ende dieser Datei hinzu:

*    hard     nproc     nnn

wo:

  • hard Legt das Limit auf Kernel-Ebene fest, sodass es nicht ohne Neustart geändert werden kann.
  • nproc ist die maximale Anzahl von Prozessen pro Benutzer.
  • nnn ist eine Zahl, die Sie für Ihr System berechnen sollten mit:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

Der obige Befehl listet alle Prozesse für alle Benutzer einschließlich Threads auf , fasst sie zusammen und listet den Benutzernamen mit der größten Anzahl von Prozessen auf. Öffnen Sie aus Sicherheitsgründen so viele Anwendungen, wie Sie normalerweise benötigen, bevor Sie den obigen Befehl ausführen, und verdoppeln Sie dann diese Anzahl aus Sicherheitsgründen.

Nachdem dieses Limit festgelegt wurde, müssen Sie einen Neustart durchführen. Dies betrifft jedoch alle Benutzer ohne Rootberechtigung auf dem System. Wenn also eine Gabelbombe von einem Benutzer ausgeführt wird, der kein Root-Benutzer ist, hat sie dieses harte Limit.

Gruppen- und Platzhalterlimits gelten standardmäßig nicht für den Root-Benutzer . Verwenden Sie den wörtlichen Benutzernamen rootin den Regeln, wenn Sie eine Regel auf den Superuser anwenden möchten.

Wenn Sie nicht in Kürze neu starten möchten, können Sie auch verwenden, sudo ulimit -u 800wodurch die Einschränkung nur für die laufende Sitzung gilt , die jedoch durch eine Gabelbombe mit sudoBerechtigungen leicht umgangen werden kann !

Nach dem Neustart wird das, was sich in /etc/security/limits.confbefindet, verwendet.

Einige zusätzliche Informationen zu Gabelbomben: Sie sind keine Malware oder etwas Schreckliches. Sie bestehen in der Regel aus so grundlegenden Elementen wie einem Skript, das sich selbst zweimal aufruft und dadurch seine Präsenz auf dem Computer exponentiell erhöht. Obwohl sie aufgrund der hohen Geschwindigkeit einen geringen Speicherbedarf haben, füllen sie schnell den gesamten verfügbaren Arbeitsspeicher und der Computer friert ein oder startet neu. Die einzige Gefahr besteht darin, nicht gespeicherte Informationen zu verlieren. Ich würde eine Gabelbombe viel mehr als Streich als bösartige Software einstufen.

Eine wichtige Erinnerung:

Sie sollten selten etwas in der Befehlszeile ausführen, wenn Sie sich nicht zu 98% sicher sind, wie es funktioniert. Wenn Sie die Befehle, die Sie ausführen, nicht lesen können, tun Sie es nicht. Dies gilt doppelt für unlesbare Abschnitte mit hexadezimalen / base64-Zeichen, die verwendet werden können, um alle Arten von Unangenehmem zu verschleiern. Wenn Sie sich bei einem Befehl nicht sicher sind, können Sie in den Ubuntu-Manpages nach dessen Aktionen suchen und zusätzliche Vorsichtsmaßnahmen sudotreffen, wenn Sie ihn verwenden, da er als Root-Benutzer ausgeführt wird.

Marco Ceppi
quelle
@MarcoCeppi: Ihre Nummer war für einen typischen Unity-Benutzer nicht weit entfernt: Die Ausgabe für die Berechnung ist derzeit 404 für mein System ...
Fabby
1
Wenn ich zum Beispiel so etwas wie alias ":(){ :|: & };:"="echo 'No.'"in mein .bashrc- führe es jedes Login aus?
UniversallyUniqueID
Gibt es einen Nachteil bei der Auswahl eines höheren nproc-Limits? Es scheint, als gäbe es nicht viel Platz bei einer Begrenzung oder sogar Verdoppelung der aktuellen Anzahl von Prozessen. Wäre eine viel höhere Begrenzung, sogar 10.000 oder mehr, immer noch effektiv gegen eine Gabelbombe? Wie viel RAM verbraucht jede Gabel / jeder Prozess? Vielleicht gibt es eine universellere RAM-abgeleitete Grenze?
Xen2050
1

Eine einfache Möglichkeit, die ich mag, ist das Erstellen eines Alias, obwohl Alias ​​nicht immer angewendet wird. Überprüfen Sie die Antwort oben.

alias :="echo No."

Jetzt

$ :(){ :|: & };:
bash: syntax error near unexpected token `('
Adrian Webster
quelle
22
Dies ist sicherlich eine gängige Lösung. Wie stoppt das a(){ a|a & };a? (oder irgendein anderer Funktionsname?)
Katze