Untersuchung der (fehlenden) Sicherheit typischer Docker- und Kubernetes-Installationen

Untersuchung der (fehlenden) Sicherheit typischer Docker- und Kubernetes-Installationen
Ich arbeite seit mehr als 20 Jahren in der IT, bin aber irgendwie nie zu Containern gekommen. Theoretisch verstand ich, wie sie aufgebaut waren und wie sie funktionierten. Da ich ihnen aber noch nie in der Praxis begegnet war, war ich mir nicht sicher, wie genau sich die Zahnräder unter ihrer Haube drehten und drehten.

Außerdem hatte ich keine Ahnung, wie ihre Sicherheit war. Aber auch hier hört sich die Theorie gut an, und das alte Lied „Je mehr Sicherheit, desto geringer die Benutzerfreundlichkeit“ blieb in meinem Kopf hängen. Deshalb dachte ich, dass die Sicherheit dort unterdurchschnittlich ist, da mit Containern alles so einfach zu bewerkstelligen ist. Wie sich herausstellte, hatte ich Recht.

Um einen schnellen Einstieg zu ermöglichen, habe ich mich für Kurse angemeldet Black-Hat- 2020 mit dem Titel „Vom Tellerwäscher zum Millionär: Durchdringung und Schutz von Docker Swarm- und Kubernetes-Umgebungen".

Der von Sheila A. Berta und Sol Ozzan geleitete Kurs begann sofort mit einer Beschreibung der Funktionsweise von Docker-Containern und der Reise, die sie bei der Bereitstellung in Kubernetes unternehmen. Dies war ein vollständig praxisorientierter Kurs – die Schüler mussten vor dem Kurs Docker und microk8s auf ihren Computern installieren – eine großartige Möglichkeit, zu sehen, wie die Tools miteinander interagieren, Schwachstellen zu finden und, was am wichtigsten ist, zu versuchen, sie zu blockieren.

Obwohl die Kurse versprachen, nach zwei Tagen ein „Prinz“ zu werden, hatte ich leider das Gefühl, dass alles gerade erst am Anfang stand und ich noch viel zu lernen hatte.

Untersuchung der (fehlenden) Sicherheit typischer Docker- und Kubernetes-Installationen

Bevor ich mich mit meinen hochtrabenden Beobachtungen befasse, ist es wichtig zu erklären, was ein Behälter ist. In der Entwicklungswelt gilt es als normal, dass der auf Ihrem persönlichen Computer geschriebene Code perfekt funktioniert. Wenn Sie jedoch versuchen, ihn irgendwo auf einem Server auszuführen, funktioniert er einfach nicht. Container versuchen, dieses Problem zu lösen, indem sie eigenständige Maschinen bereitstellen, die Sie problemlos von einem Server auf einen anderen verschieben können, in der Gewissheit, dass sie immer funktionieren. Wie der Name schon sagt, enthalten sie den Code, die Bibliotheken und andere Software, die zur Erledigung der Aufgabe erforderlich sind. Kubernetes hingegen schon Orchestrierungsplattform für Container. Im Prinzip lassen sich damit hunderte oder tausende unterschiedliche Container nahtlos verwalten.

Nachfolgend finden Sie einige meiner Erkenntnisse aus der Sicht des roten und blauen Teams.

rotes Team

Die meisten Containerinhalte werden als Root ausgeführt: Das bedeutet, dass Sie bei einer Kompromittierung des Containers vollen Zugriff auf den Container haben. Dies erleichtert die nächsten Schritte erheblich.

Die Montage von docker.sock in einem Container ist gefährlich: Wenn Sie Root in einem Container haben und Docker auch in einem Container installiert haben, der über einen Docker-Socket (/var/run/docker.sock) verfügt, haben Sie die Möglichkeit, den gesamten Cluster zu erkunden, einschließlich des Zugriffs auf jeden anderen Container. Ein solcher Zugriff kann nicht durch Netzwerkisolation oder andere Mittel verhindert werden.

Umgebungsvariablen enthalten oft geheime Daten: In den meisten Fällen senden Benutzer Passwörter mithilfe normaler Umgebungsvariablen an den Container. Wenn Sie also Zugriff auf das Konto haben, können Sie diese Umgebungsvariablen ausspionieren, um später Ihre Befugnisse zu erweitern.

Die Docker-API kann viele Informationen ausgeben: Die Docker-API läuft, wenn sie standardmäßig konfiguriert ist, ohne Autorisierung und kann eine Menge Informationen produzieren. Mit Shodan können Sie ganz einfach eine Liste der offenen Ports finden, dann detaillierte Informationen über den Cluster erhalten – und mit der vollständigen Erfassung fortfahren. TrendMicro hat darüber geschrieben interessantester Artikel.

Blaues Team

Führen Sie Containerinhalte nicht als Root aus: Auch wenn es einfacher ist, als Root zu laufen, sollten Sie es nicht tun. Führen Sie stattdessen Anwendungen mit Reset-Berechtigungen aus, indem Sie die UID anzeigen, indem Sie entweder die Option --user verwenden, wenn Sie sie über die CLI ausführen, oder indem Sie USER in der Docker-Datei angeben.

Erlauben Sie nicht, dass Software in Containern installiert wird: Fast jeder Angriff beginnt damit, etwas zu pflanzen. Von nmap über ifconfig bis hin zu Docker selbst (innerhalb eines Containers) war die Installation von allem in einem Container an der Tagesordnung. Aus dem gleichen Grund sollten Sie immer alle nicht verwendeten Ports blockieren. Dadurch wird auch verhindert, dass Steuerbefehle übertragen werden, wenn Ihr Computer infiziert ist. Zusätzlich zur Verhinderung der Installation von Programmen ist es wichtig, sicherzustellen, dass die zur Ausführung der Aufgabe erforderliche Mindestanzahl an Anwendungen im Container selbst installiert wird.

Docker.sock schützen: Es muss geschützt werden, da die Kommunikation zwischen dem Container und dem Cluster über diesen Socket verarbeitet wird. Da ich in diesem Artikel nicht näher darauf eingehen möchte, lesen Sie Hinweis von Docker, was passieren kann und wie man alles blockiert.

Verwenden Sie Docker-Geheimnisse anstelle von Umgebungsvariablen: Es gibt Geheimnisse seit ca. 2017. Obwohl dies nicht sicher ist, ist es dennoch besser als Umgebungsvariablen für die Weitergabe geheimer Daten an den Container.

Wenn der Artikel Ihr Interesse an Containern geweckt hat, können Sie problemlos Docker oder microk8s (eine kleine Version von Kubernetes) installieren. Hier Es gibt Anweisungen zur Installation von Docker für Linux und MacOS und hier – Anweisungen zur Installation von microk8s für Windows, Linux und MacOS.

Nach der Installation kann es losgehen Dies ist eine Kurzanleitung von Docker, ähnliche Option vorgeschlagen und für microk8s.

Wenn Sie einen umfassenden Kurs über Docker belegen möchten oder müssen, in dem praktische Referenten alle seine Tools untersuchen: von grundlegenden Abstraktionen über Netzwerkparameter bis hin zu Nuancen der Arbeit mit verschiedenen Betriebssystemen und Programmiersprachen, dann versuchen Sie es mit „Docker-Videokurs" Sie werden mit der Technologie vertraut gemacht und verstehen, wo und wie Sie Docker am besten einsetzen. Und erhalten Sie gleichzeitig Best-Practice-Fälle – es ist besser, in Sicherheit und mit der Unterstützung von Praktikern aus Geschichten über Rechen zu lernen, als persönlich von den Rechen selbst mit Nietengriffen.

Source: habr.com

Kommentar hinzufügen