Wie man die Gabelbombe stoppt und entdeckt


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

Dies ist der Code für eine Gabelbombe.

In unserer Hochschule stellen wir eine Verbindung über Telnet her, dh über das Client-Serving-Protokoll. Etwa 100 Systeme sind mit dem Server verbunden. Plötzlich wurde der Server langsam und stürzte nach einiger Zeit ab. Ich habe erfahren, dass jemand eine Gabelbombe eingesetzt hat.

Wie können wir feststellen, auf welchem ​​System die Gabelbombe implementiert ist? Und wie können wir damit aufhören?

Eine Methode besteht darin, die maximale Anzahl von Prozessen zu begrenzen, die ein einzelner Benutzer besitzen darf. Gibt es eine Methode, um es zu stoppen und zu wissen, von welchem ​​System es implementiert wurde?


19
Telnet? Ernsthaft? Sie sollten wirklich SSH verwenden ...
ThiefMaster



Nun, es wurde von SO migriert, aber eine Antwort könnte auf Kernel-Ebene sein. Einige Patches wurden vorläufig durchgeführt, aber keiner scheint Akzeptanz zu finden. Mein Punkt ist: wie man es erkennt: Nun, jeder wird wissen, dass es kein System mehr verwenden kann, also ist der Erkennungspunkt vielleicht nicht der Schlüsselpunkt. Wie kann man sich erholen? Die aktuelle Antwort ist Neustart, ich würde sagen: Eine Möglichkeit, dem Kernel mitzuteilen, dass nur ein Prozess ausgeführt werden soll (der, den Sie bereinigen möchten), und alle anderen anzuhalten, unabhängig davon, wo sie sich befinden. Dies kann eine Funktion sein, auf die nur in der Systemkonsole zugegriffen werden kann.
Philippe Lhardy

Antworten:


16

Eine Möglichkeit besteht darin, die Anzahl der Prozesse zu begrenzen, die ein Benutzer ausführen kann.

Melden Sie sich einfach als root an und bearbeiten Sie diese Datei, um Benutzer hinzuzufügen und deren Begrenzung zu konfigurieren.

# vi /etc/security/limits.conf

Fügen Sie diese Zeile der Datei hinzu

john hard nproc 10

Jetzt kann Benutzer john nur 10 Prozesse erstellen.


Ich denke, Sie müssen neu /etc/security/limits.confstarten , damit die neuen Einstellungen wirksam werden.
Dan D.

2
Nein. Sie werden jedoch von PAM angewendet, sodass sie nur für neue Anmeldungen gelten.
ThiefMaster

14

Um eine laufende Gabelbombe zu stoppen, können Sie möglicherweise killall <name>alle Prozesse der Bombe abbrechen. Da jedoch eine Gabelbombe normalerweise eine unglaublich hohe Belastung des Systems zur Folge hat, können Sie möglicherweise kein SSH ausführen. Ein Neustart könnte also notwendig sein oder zumindest viel schneller.

Wenn jeder Benutzer sein eigenes Konto auf dem System hat, können Sie einfach das Ausgangsverzeichnis aller Benutzer überprüfen und nach der ausführbaren Datei suchen. Die Chancen stehen gut, dass er auch den Quellcode hochgeladen hat, sodass es nicht allzu schwer sein sollte, ihn zu finden. Wenn es ein gemeinsamer Account für alle Schüler war, hat man Pech. Insbesondere nach Beendigung der Telnet- oder SSH-Sitzung des Benutzers haben Sie keine Chance herauszufinden, wer sie gestartet hat.

Anstatt jedoch den Benutzer zu bestrafen, der diese Gabelbombe gezündet hat, sollten Sie die Systemkonfiguration so anpassen, dass Gabelbomben entschärft werden. Mit können Sie pro Benutzer Prozesslimits festlegen /etc/security/limits.confund so verhindern, dass eine Gabelbombe außer Kontrolle gerät - mit z. B. nur 50 Prozessen wird eine Gabelbombe nicht viel Schaden anrichten.


Es ist unmöglich zu erkennen, von welchem ​​System es kommt.
Rajesh M

@ user1670364: Es ist nicht klar, was Sie fragen. Was meinst du mit "es kommt"? Sie können feststellen, welchem ​​Benutzer der Prozess gehört, was Sie sonst noch wissen möchten.
David Schwartz

@DavidSchwartz Ich meine, es ist möglich, die Gabelbombe zu erkennen, auf welchem ​​System es implementiert ist.
Rajesh M

@ user1670364: Wenn Sie das System meinen, auf dem die Gabelbombe tatsächlich läuft, ist es das, das langsam ist. Wenn Sie den verantwortlichen Benutzer meinen, ist es der Benutzer, der die Prozesse besitzt, die gegabelt werden.
David Schwartz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.