Warum ist das Ausführen von named (bind) in chroot für die Sicherheit so wichtig? Oder vielleicht doch nicht?


12

Ich spiele mit Binden und frage mich, warum diese Software beispielsweise in CentOS in Chroot ausgeführt wird. Versteht mich nicht falsch, ich weiß, was Binden ist und wofür Chroot (Gefängnis) ist. Aber meine Hauptfrage ist, dass das Binden ohne Chroot so sehr unsicher ist?

Ist es wirklich schädlich, es ohne Gefängnis einzurichten (mehr als jeder andere Dienst oder jede andere Software)? In Systemen werden viele Prozesse ohne Chroot ausgeführt, und ich halte die Kompromittierung eines dieser Prozesse für sehr gefährlich. Aber was macht Named gefährlicher als andere Software, die ohne Chroot ausgeführt wird?


1
Der Frage hinzufügen: Wie wird dies durch die moderne Verwendung virtueller Maschinen beeinflusst? Bei mittelgroßen Bereitstellungen wird immer häufiger eine VM für jede Aufgabe reserviert, sodass keine anderen Daten / Anwendungen darauf gespeichert sind. Gibt es noch einen echten Vorteil beim Chrooten?
Gregmac

3
Eine Chroot ist kein Gefängnis. Ein Gefängnis ist etwas Besonderes bei BSD. Wenn Sie das Äquivalent wollen, sollten Sie sich LXC
Zoredache

Antworten:


14

Wie @Some Guy bereits erwähnt hat, muss man sich das aus historischer Sicht überlegen.

Die historische Perspektive war, dass ein einziges Hardwareteil ein Dutzend verschiedener Dienste unter einem einzigen Betriebssystem umfasste. Wenn ein Dienst kompromittiert wurde, wurde alles auf dieser Hardware kompromittiert.

Bei der Virtualisierung ist dies weitaus weniger ein Problem. Obwohl es nicht unmöglich ist, aus einer VM herauszukommen, ist dies alles andere als trivial. Es ist sicherlich schwieriger, aus einer VM auszubrechen, als wenn ein Prozess, der mit Root-Rechten ausgeführt wird, aus einer Chroot ausbricht. Meine Bindeserver laufen also auf einer eigenen VM. In diesem Fall hat eine Chroot nicht viel Sinn, da der Schaden bereits dadurch begrenzt ist, dass es sich um eine VM handelt.

Eine Chroot ist ein sehr schwacher Versuch, so etwas wie eine VM zu erstellen. Chroots können jedoch von jedem Prozess mit Root-Rechten entkommen. Eine Chroot ist nicht vorgesehen und funktioniert nicht als Sicherheitsmechanismus. Ein Chroot mit einem BSD-Jail oder LXC bietet Virtualisierung auf Betriebssystemebene und Sicherheitsfunktionen. Da es heutzutage so einfach ist, eine neue VM einer gesamten Maschine hochzufahren, lohnt es sich möglicherweise nicht mehr, sie einzurichten oder zu lernen, wie die Virtualisierungstools auf Betriebssystemebene für diesen Zweck verwendet werden.

Frühere Versionen von bind haben keine Berechtigungen verworfen. Unter Unix kann nur das Root-Konto Ports unter 1024 öffnen, und Bind muss, wie wir alle wissen, auf udp / 53 und tcp / 53 lauschen. Da Bind als Root gestartet wird und keine Berechtigungen fallen lässt, kann das gesamte System kompromittiert werden. Heutzutage öffnet fast jede Software ihre Sockets und erledigt alle anderen Dinge, die Root-Berechtigungen erfordern. Anschließend wird der Benutzer, den sie ausführen, in ein nicht privilegiertes Konto geändert. Sobald die Berechtigungen fallengelassen wurden, ist die Auswirkung einer Gefährdung für das Hostsystem viel geringer.


10

Die anderen Antworten sind ziemlich gut, lassen aber das Konzept der Sicherheit in Schichten außer Acht. Jede Sicherheitsebene, die Sie Ihrem System hinzufügen, ist eine weitere Ebene, die ein Gegner überwinden muss. Das Einfügen von BIND in eine Chroot ist ein weiteres Hindernis.

Angenommen, es liegt eine ausnutzbare Sicherheitslücke in BIND vor, und jemand kann beliebigen Code ausführen. Wenn sie in einer Chroot sind, müssen sie das beenden, bevor sie auf etwas anderes im System zugreifen können. Wie bereits erwähnt, sind Root-Rechte für das Brechen von Chroots erforderlich. BIND wird nicht als root ausgeführt, und es sollen nur minimale Tools in der Chroot verfügbar sein, die die Optionen weiter einschränken und im Wesentlichen nur Systemaufrufe belassen. Wenn es keinen Systemaufruf zur Eskalation von Berechtigungen gibt, kann der Gegner Ihre DNS-Einträge nicht mehr durchsuchen.

Die oben genannte Situation ist, wie SomeGuy erwähnt, eher unwahrscheinlich. BIND weist derzeit nur wenige Schwachstellen auf und ist hauptsächlich auf DoS-Szenarien und nicht auf die Remote-Ausführung beschränkt. Auf einigen Betriebssystemen ist das Ausführen in einer Chroot-Umgebung die Standardkonfiguration. Es ist daher unwahrscheinlich, dass Sie irgendwelche Anstrengungen unternehmen, um die noch so geringfügig erhöhte Sicherheit beizubehalten.


5

Präambel

Ich höre immer wieder Leute, die falsche Vorstellungen aus dem ganzen Internet wiederholen. Daher werde ich versuchen, Klarheit zu schaffen

erst einmal; Wie viele zufällige Entdeckungen gab es, die einfach aufgrund von Ursache und Wirkung für etwas anderes als den beabsichtigten Zweck verwendet wurden?

Was war und was ist ein Chroot-Gefängnis?

Chroot wurde ursprünglich entwickelt, um das Stammverzeichnis für den Prozess oder den Benutzer zu ändern (ideal zum Kompilieren von Software aus unbekannten Quellen). Dies bot Sicherheit für das Basissystem sowie ein schnelles Prüfstandsgerät mit einfacher Reinigung. Jahre sind vergangen, und das Konzept und die implizierten Verwendungen haben sich sicherlich ebenfalls geändert.

chroot wurde effektiv genutzt und befindet sich direkt in der Codebasis für verschiedene Programme und Bibliotheken (z. B. openSSHd, apache2 + mod_security2 / mod_chroot, dovecot, sendmail, openVPN, pam_chroot und vieles mehr ). Die Annahme, dass all diese Mainstream-Anwendungen fehlerhafte Sicherheitslösungen implementiert haben, ist einfach nicht wahr

chroot ist eine Lösung für die Dateisystemvirtualisierung: Nicht weniger, nicht mehr. Die Annahme, dass Sie leicht aus einer Chroot ausbrechen können, trifft auch nicht zu ... solange Sie die Richtlinien für die Ausführung von Prozessen innerhalb des Chroot-Gefängnisses einhalten.

Einige Schritte, um Ihr Chroot-Gefängnis zu sichern

dh Prozesse NICHT als ROOT ausführen. Dies könnte einen Wurzeleskalationsvektor eröffnen (der auch innerhalb oder außerhalb der Chroot gilt). Führen Sie keinen Prozess innerhalb der Chroot aus und verwenden Sie denselben Benutzer wie einen anderen Prozess außerhalb der Chroot. Trennen Sie jeden Prozess und Benutzer in einen eigenen Chroot, um die Angriffsfläche zu begrenzen und die Privatsphäre zu schützen. Hängen Sie nur die erforderlichen Dateien, Bibliotheken und Geräte ein. Schließlich ist Chroot KEIN Ersatz für die Sicherheit des Basissystems. Sichern Sie das System in seiner Gesamtheit.

Ein weiterer wichtiger Hinweis: Viele Leute denken, dass OpenVZ Broken ist oder dass es im Vergleich zur vollständigen Systemvirtualisierung nicht gleich ist. Diese Annahme wird getroffen, da es sich im Wesentlichen um eine Chroot handelt, deren Prozesstisch sterilisiert werden muss. mit Sicherheitsmaßnahmen auf Hardware und Geräten. Die meisten davon können Sie in einer Chroot implementieren.

Nicht jeder Administrator verfügt über die erforderlichen Kenntnisse, um alle erforderlichen Kernelparameter auf einem dedizierten Server oder bei vollständiger Systemvirtualisierung zu sichern. Dies bedeutet, dass Ihre Kunden durch die Bereitstellung von OpenVZ weniger Angriffsfläche haben, um sich vor der Bereitstellung ihrer Anwendungen abzusichern. Ein guter Host leistet gute Arbeit bei der Sicherung dieser Parameter, und dies ist wiederum besser für nicht nur alle auf dem Node oder im Rechenzentrum, sondern für das Internet als Ganzes.

Wie bereits erwähnt, ermöglicht die Chroot die Virtualisierung von Dateisystemen. Sie müssen sicherstellen, dass keine setuid-ausführbaren Dateien, unsicheren Anwendungen, Bibliotheken, herabhängenden inhaberlosen Symlinks usw. vorhanden sind. Wenn der Angreifer die Bindung gefährden KÖNNTE, müsste er das virtuelle Dateisystem nach etwas durchsuchen, um einen Pufferüberlauf zu verhindern, mit Dateideskriptoren zu spielen oder auf andere Weise kann etwas, das sich in der Chroot befindet und aus dem Gefängnis entweicht, gefährdet werden, in der Regel durch die Eskalation von Privilegien oder durch die Injektion seiner Nutzlast in das Basissystem.

In diesem Fall ist dies normalerweise das Ergebnis eines fehlerhaften Updates, eines Zero-Day-Exploits oder eines idiomatischen menschlichen Fehlers .

warum chroot immer noch verwendet wird, im Gegensatz zur vollständigen Systemvirtualisierung

Stellen Sie sich das folgende Szenario vor: Sie führen einen Virtual Private Server aus, auf dem der Hostknoten OpenVZ ausführt. Sie können einfach nichts ausführen, was auf der Kernel-Ebene funktioniert. Dies bedeutet auch, dass Sie die Betriebssystemvirtualisierung nicht verwenden können, um Prozesse zu trennen und zusätzliche Sicherheit bereitzustellen. Daher MÜSSEN Sie chroot für diesen Zweck verwenden.

Darüber hinaus ist chroot auf jedem System unabhängig von den verfügbaren Ressourcen nachhaltig. Einfach ausgedrückt, hat es den geringsten Overhead aller Virtualisierungstypen. Dies bedeutet, dass es bei vielen Low-End-Boxen immer noch wichtig ist.

Stellen Sie sich ein anderes Szenario vor: Apache wird in einer virtualisierten Umgebung ausgeführt. Sie möchten jeden Benutzer trennen. Die Bereitstellung eines virtualisierten Dateisystems über ein chroot-Add-On für Apache (mod_chroot, mod_security usw.) ist die beste Option, um die größtmögliche Privatsphäre zwischen den Endbenutzern zu gewährleisten. Dies hilft auch, das Sammeln von Informationen zu verhindern, und bietet eine weitere Sicherheitsebene.

Einfach ausgedrückt ist es wichtig, Sicherheit in Schichten zu implementieren . Chroot ist möglicherweise einer von ihnen. Nicht jeder und jedes System hat den Luxus, Zugriff auf den Kernel zu haben, daher erfüllt chroot STILL einen Zweck. Es gibt eine Vielzahl von Anwendungen, bei denen die vollständige Systemvirtualisierung im Wesentlichen übertrieben ist.

Als Antwort auf Ihre Frage

Ich benutze nicht besonders CentOS, aber ich weiß, dass Bind jetzt seine Privilegien vor Operationen fallen lässt. Ich würde jedoch davon ausgehen, dass Bind aufgrund seiner Geschichte von Angriffsvektoren und potenziellen Schwachstellen chrooted ist.

Außerdem ist es sinnvoller, diese Anwendung automatisch zu chrooten, als nicht, da nicht JEDER Zugriff auf die vollständige Virtualisierung auf System- / Betriebssystemebene hat. Dies wiederum und theoretisch hilft dabei, der CentOS-Benutzerbasis Sicherheit zu bieten:

Betriebssystemanbieter gehen einfach nicht davon aus, dass jeder das gleiche System ausführt. Auf diese Weise können sie dazu beitragen, eine zusätzliche Sicherheitsebene auf ...

Es gibt einen Grund, warum so viele Anwendungen dies verwenden , und warum offensichtlich Ihr Betriebssystem dies standardmäßig tut: weil es als Sicherheitsmerkmal verwendet wird und funktioniert. Wie bereits erwähnt, ist es eine weitere Hürde, die der potenzielle Angreifer bei sorgfältiger Vorbereitung meistens überwinden muss, um den Schaden auf das Gefängnis der Chroot zu beschränken.


Der ursprüngliche Entwickler von Chroot Point Blank sagte, er habe Chroot nie für Sicherheitszwecke vorgesehen. Wichtige Anwendungsentwickler, die fehlerhafte Sicherheit implementieren ... ARM, Intel und AMD haben vor kurzem eine Sicherheitslücke in ihrer Hardware entdeckt , die bis in die Pentium-Ära zurückreicht. SSLv2, SSLv3, TLSv1 und TLS1.1 weisen alle kritische Sicherheitslücken auf, obwohl TLSv1.1 immer noch ein Industriestandard für OpenSSHd, Apache, Dovecot, OpenVPN ist. Und alle verwenden standardmäßig die SSL-Komprimierung, die selbst die neuesten TLSv1.2- und TLSv1.3-Standards untergräbt.
Cliff Armstrong

Entwickler (zumindest die erfolgreichen) halten letztendlich das Gleichgewicht zwischen Komfort und Sicherheit ... und bevorzugen häufig Komfort gegenüber Sicherheit. Diese Anwendungen unterstützen chroot für "Sicherheit", weil ihre Benutzer dies fordern. Ihre Benutzer fordern dies aufgrund des verbreiteten Irrtums, dass es sinnvolle Sicherheit bietet. Aber trotz Ihres Appells an die Massen / Autorität ist dies nachweislich nicht wahr.
Cliff Armstrong

3

Dies ist teilweise auf historische Gründe zurückzuführen, als ältere Versionen von Bind schwere, häufige Sicherheitslücken aufwiesen. Ich habe mich nicht wirklich über das Thema auf dem Laufenden gehalten, aber ich wette, dass es seit den schlechten alten Tagen viel besser geworden ist.

Der andere Grund, der praktischere, ist, dass er in der Regel in einer internetbasierten Rolle eingesetzt wird und als solcher mehr Angriffen, Ermittlungen und allgemeinem Unfug ausgesetzt ist.

Daher gilt in Sicherheitsfragen oft die Faustregel: Sicher ist sicher, zumal der Aufwand für das Chrooten relativ gering ist.


Sie haben Recht, es ist viel besser. Im Grunde war bind8 ein Albtraum; bind9 ist nicht. Wenn Sie beispielsweise die NVD durchsuchen, werden zumindest seit 2010 keine Fehler bei der Codeausführung von Remotestandorten aus aufgelistet (so weit die Suche zurück reicht): web.nvd.nist.gov/view/vuln/… ... Viele DoS-Fehler und auch einige Fehler bei der Offenlegung von Informationen (z. B. Offenlegung interner Zonen).
Derobert
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.