Ist es für einen Produktionsserver sicher, make installiert zu haben?

42

Während der Einrichtung meiner virtuellen Serverinstanzen müssen einige Anwendungen mit erstellt werden make. Sind mit der makeInstallation Sicherheitsrisiken verbunden ? Oder sollte ich es bereinigen, bevor die Instanz bereitgestellt wird?

Ich habe auch den gccCompiler auf dem Server, mit dem ich Anwendungen vor dem Deployment erstelle.

SK '
quelle
4
Wenn Sie sich dadurch besser fühlen, führt jede Software, die irgendwo installiert wird, zu einer Sicherheitslücke.
MDMoore313
1
Und einer mit Nicht-Root-Shell-Zugriff auf einen Server könnte ein "distro-unabhängiges" Compiler-Paket (.tar.gz) herunterladen, das nicht so installiert werden muss ...
1
Bin ich es oder ist die Kombination von "ist es sicher?" und "Root-Zugriff" eher unangenehm ?
DNA
2
Wenn Sie gcc bereits installiert haben, gibt es praktisch keine Möglichkeit, ein potenzielles Sicherheitsproblem zu verschlimmern.
Shadur
1
@Shadur Welchen Unterschied macht es, GCC zu haben? Wenn der Benutzer bereits Zugriff auf die Maschine hat, kann er jede Kopie von gcc einfach hochladen. Auf jeden Fall kann gcc für nicht privilegierte Benutzer nützlich sein und stellt kein Sicherheitsrisiko dar, solange keine privilegierten Benutzer es ausführen.
Gültigkeit

Antworten:

50

Einige Leute werden argumentieren, dass das Vorhandensein von Entwicklungswerkzeugen auf einer Produktionsmaschine einem Angreifer das Leben erleichtern wird. Dies ist jedoch für einen Angreifer ein so kleines Hindernis, dass jedes andere Argument, das Sie für oder gegen die Installation der Entwicklungstools finden, mehr wiegt.

Wenn ein Angreifer so weit in das System eindringen konnte, dass er alle auf dem Server vorhandenen Tools aufrufen konnte, liegt bereits eine schwerwiegende Sicherheitsverletzung vor. Ohne Entwicklungstools gibt es viele andere Möglichkeiten, Binärdaten in eine Datei zu schreiben und anschließend ein chmod für diese Datei auszuführen. Ein Angreifer, der zu diesem Zeitpunkt eine benutzerdefinierte ausführbare Datei auf dem System verwenden möchte, kann diese ebenso gut auf seinem eigenen Computer erstellen und auf den Server übertragen.

Es gibt andere, viel relevantere Dinge, auf die man achten muss. Wenn eine installierte Software eine Sicherheitslücke enthält, kann sie auf verschiedene Arten einem Angreifer ausgesetzt sein:

  • Das Paket könnte eine suid- oder sgid-ausführbare Datei enthalten.
  • Das Paket könnte Dienste auf dem System starten.
  • Das Paket kann Skripts installieren, die unter bestimmten Umständen automatisch aufgerufen werden (dies schließt Cron-Jobs ein, Skripts können jedoch auch von anderen Ereignissen aufgerufen werden, z. B. wenn sich der Status einer Netzwerkschnittstelle ändert oder wenn sich ein Benutzer anmeldet).
  • Das Paket könnte Geräte-Inodes installieren.

Ich würde nicht erwarten, dass die Entwicklungstools mit einem der oben genannten Tools übereinstimmen, und als solches handelt es sich nicht um ein Paket mit hohem Risiko.

Wenn Sie über Workflows verfügen, in denen Sie die Entwicklungstools verwenden würden, müssen Sie zunächst entscheiden, ob dies sinnvolle Workflows sind, und wenn ja, sollten Sie die Entwicklungstools installieren.

Wenn Sie feststellen, dass Sie diese Tools nicht wirklich auf dem Server benötigen, sollten Sie sie aus mehreren Gründen nicht installieren:

  • Spart Speicherplatz, sowohl auf dem Server als auch bei Sicherungen.
  • Weniger installierte Software erleichtert das Verfolgen der Abhängigkeiten.
  • Wenn Sie das Paket nicht benötigen, ist es sinnlos, das zusätzliche Sicherheitsrisiko aus der Installation zu ziehen, auch wenn dieses Sicherheitsrisiko gering ist.

Wenn Sie aus Sicherheitsgründen nicht zulassen, dass nicht privilegierte Benutzer ihre eigenen Executabels auf den Server stellen, sollten Sie nicht die Entwicklungstools, sondern Verzeichnisse vermeiden, die für diese Benutzer auf Dateisystemen mit Ausführungsberechtigungen geschrieben werden können. Auch unter diesen Umständen können möglicherweise noch Entwicklungstools zum Einsatz kommen, dies ist jedoch nicht sehr wahrscheinlich.

Kasperd
quelle
6
Ich würde hinzufügen, dass eine Reihe von Produktionssystemen auf interpretierten Code angewiesen sind (zB PHP, Perl, Python, ...). In diesem Zusammenhang wäre es nicht sinnvoll, Entwicklungswerkzeuge zu verbieten. Ich denke, Compiler möchten gcckein höheres Risiko als diese darstellen. Wie Sie sagen, kann ein Angreifer, der die auf einem System installierten Compiler verwenden kann, in der Regel ohnehin schlimmere Dinge tun, z. B. das Hochladen seiner eigenen (möglicherweise statisch verknüpften) ausführbaren Datei.
Bruno
3
Relevant: Eine winzige Version von wget (51 Bytes?) . Ein reales Beispiel für einen Angreifer, der eine Binärdatei mithilfe nachfolgender echoAnweisungen in eine Datei auf den Server verschiebt . Der gesamte Prozess wird mit einem Skript automatisiert, das sich unter demselben Link befindet.
Adi
2
@Adnan, interessant. Soweit ich das beurteilen kann, besteht die größte Sicherheitslücke in diesem DVR-Beispiel darin, dass der Angreifer zunächst als Root mit dem Kennwort 123456 telnet kann. Wget oder andere Werkzeuge (vor dem Angriff) zu haben oder nicht, ist dann in der Tat kaum relevant.
Bruno
15

makeist eine Shell mit einer anderen Syntax als bash.

Ein Compiler wie dieser gccist ein leistungsfähiger Compiler awkmit einer Reihe von Substitutionen, die der Standard awknicht unterstützt. Es ist nicht POSIX-konform sortoder catspeist Müll in die Ausgabe ein. Es ist ein interaktiver Texteditor (think vi), der so konfiguriert ist, dass er beim Start bearbeitet und dann beendet wird, bevor die Benutzeroberfläche angezeigt wird.

Es gibt nichts, was von Natur aus unsicher ist. Sie machen Ihren Computer nicht unsicherer als einen Computer, auf dem Sie die Bash + cat+ - Shell-Umleitung verwenden.

ignis
quelle
2
Eine Antwort so zen, dass ich nicht weiß, wie ich sie bewerten soll.
Kasperd
4
@kasperd Diese Antwort ist als ernst gemeint. Ich dachte, dass die Sichtweise eines Programmierers hilfreich sein könnte. Eine Funktion, die eine Eingabe in eine Ausgabe umsetzt, stellt keine Sicherheitsanfälligkeit dar, nur weil die Ausgabe ein für die CPU verständliches Format aufweist.
Ignis
1
Ich stimme dem Punkt zu, den Sie ansprechen. Ich denke, Ihre Antwort ist eine großartige Lektüre für alle, die bereits damit einverstanden sind. Ich mache mir nur Sorgen, dass Ihre Antwort für jemanden, der damit nicht einverstanden ist, ein Witz sein könnte.
Kasperd
Ich mag diese Antwort viel mehr als die akzeptierte :)
Ruslan
15

makeselbst ist in Ordnung. makeist lediglich ein Framework für die Verfolgung und Automatisierung von Abhängigkeiten. Es wird jedoch normalerweise in Verbindung mit Compilern verwendet, und diese sollten vorzugsweise nicht auf einem Produktionssystem verfügbar sein, da sie völlig unnötig sind. Gleiches gilt für alle nicht benötigten Pakete, unabhängig davon, ob es sich um gemeinsam genutzte Bibliotheken, Interpreter usw. handelt. Auf Produktionssystemen installierte Software sollte streng kontrolliert werden, und es sollten nur die Pakete vorhanden sein, die von der Anwendung benötigt werden.

Sie sollten Ihre Anwendung auf einem Build-Server erstellen, verpacken und dann das Binärpaket auf Ihren Produktionssystemen bereitstellen.

Hinweis: native Verpackungswerkzeuge saugen . Mach dir nicht einmal die Mühe, sie zu verprügeln. Schauen Sie sich stattdessen Jordan Sissel's an fpm. Es macht die Verpackung zur absoluten Freude.

EEAA
quelle
8
Ich frage hier aus Neugier und Ignoranz: Warum ist die Anwesenheit von Compilern Ihrer Meinung nach ein "erhebliches Sicherheitsproblem"? Was ist das Sicherheitsproblem bei der Installation eines Compilers? Ist es nur eine Frage von Ihnen, ob Sie Ihren Code nicht in erster Linie auf einem Produktionsserver erstellen sollten und der Compiler somit überflüssig ist, oder gibt es tatsächlich ein signifikantes Sicherheitsproblem mit der Anwesenheit des Compilers selbst?
Reirab
11
Obwohl es eine gute Idee ist, Ihre Anwendungen auf einem separaten Server zu erstellen, ist die Aussage, dass die Anwesenheit von Compilern auf einem Produktionssystem ein erhebliches Sicherheitsproblem darstellt, nicht sinnvoll. Was ist mit Skriptsprachen und JIT-kompilierten Systemen (Perl, Python, Java, ...)?
Bruno
3
Das Vorhandensein von Compilern in einer Produktionsumgebung ist kein "erhebliches Sicherheitsrisiko". Ich selbst habe Binärdateien mithilfe von echound auf gefährdete Boxen verschoben base64. Tatsächlich können Sie dies sogar mit einer Reihe von echoAnweisungen und keinem anderen Tool tun .
Adi
1
Alle guten Punkte. Ich habe meine Antwort zur Klarstellung bearbeitet.
EEAA
9

Im Gegenteil, das potenzielle Problem besteht nicht darin, dass makeauf dem Produktionsserver Anwendungen erstellt werden, anstatt getestete vorgefertigte Abbilder bereitzustellen. Es mag triftige Gründe für diese Methodik geben, aber ich würde sie mit Nachdruck ablehnen, wenn ich darum gebeten würde.

John
quelle
4

Sie fragen sich, ob makedie Installation auf einem Produktionsserver erfolgen soll, aber meine eigentliche Frage lautet: Wer hat Zugriff auf diesen Produktionsserver und welche Sicherheitsvorkehrungen haben Sie, um mit einem Einbruch umzugehen? Wenn makenicht installiert, aber jemand rootZugang hat, raten Sie mal was? Sie können manuell installieren makeund alles, was sie wollen.

Die harte Realität in Bezug auf die Computersicherheit besteht darin, dass Sie unerwünschten Zugriff verhindern möchten. Es ist nicht so wichtig, von der Blockierung des Zugriffs besessen zu sein, wie:

  1. Wer hat Zugriff auf den Server?
  2. Was können Sie tun, um nach einem Einbruch einen Rollback durchzuführen?

Dies hängt alles davon ab, welche Art von Arbeit Sie ausführen. Ich arbeite hauptsächlich in der Webserver-Welt und meine Einstellung ist grundsätzlich, dass jeder, der von mir Zugang zu Produktionsservern erhält, Fähigkeiten, Kenntnisse und Reife nachweisen muss. Das ist es. Manchmal dauert es ein paar Tage. Manchmal dauert es Monate. Grundsätzlich besteht Ihre beste Sicherheitsmaßnahme auf Produktionsservern darin, den Zugriff zusätzlich zu den anderen Maßnahmen zu steuern, die wir zur Absicherung von Servern ergreifen.

JakeGould
quelle
1

makeselbst ist harmlos. Es werden lediglich Anwendungen in einer festgelegten Reihenfolge ausgeführt, je nachdem, welche Abhängigkeiten Sie angeben und welche Dateien bereits im System vorhanden sind. Es kann sogar als Teil des Installationsprozesses nützlich sein: Sie können es verwenden, um vorgefertigte Dateien dort abzulegen, wo sie benötigt werden, oder um Komponententests oder andere Dinge auszuführen.

Sie müssen jedoch überlegen, wofür Sie es genau verwenden möchten. Es wird oft in Verbindung mit Compiler und andere Tools für die Erstellung von Anwendungen verwendet, und diejenigen verwendet werden könnten einige Ihrer Verteidigungslinien zu negieren. Aber makeich kann diese Dinge nicht tun, wenn die Werkzeuge nicht verfügbar sind.

Der Löffeligste
quelle