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

Untersuchung der (fehlenden) Sicherheit typischer Docker- und Kubernetes-Installationen
Ich arbeite seit über 20 Jahren in der IT, aber ich hatte bisher keinen Zugriff auf Container. Theoretisch verstand ich, wie sie aufgebaut sind und funktionieren. Aber da ich nie praktisch mit ihnen gearbeitet habe, war ich mir nicht sicher, wie genau sie unter der Haube wirken.

Zudem hatte ich überhaupt keine Ahnung von der Sicherheitslage. Aber wie so oft, klingt Theorie schön, und das alte Sprichwort „Mit wachsender Sicherheit sinkt der Bedienkomfort“ schwebte mir im Kopf. Also dachte ich, dass bei der vermeintlichen Einfachheit der Arbeit mit Containern auch die Sicherheit eher gering ist. Wie sich herausstellte, hatte ich damit recht.

Um schnell einen Einstieg zu finden, meldete ich mich zu einem Kurs an Black Hat 2020 mit dem Titel „Vom Schlamm in den Adel: Eindringen und Schützen von Docker Swarm- und Kubernetes-Umgebungen».

Der Kurs, der von Sheila A. Berta und Sol Ozzan geleitet wurde, begann sofort mit einer Beschreibung, wie Docker-Container funktionieren und welchen Weg sie beim Bereitstellen in Kubernetes durchlaufen. Es war eine vollständig praktische Sitzung — die Studierenden mussten Docker und microk8s im Vorfeld auf ihren Maschinen installieren — ein hervorragender Weg, um die Interaktion der Werkzeuge zu sehen, Schwachstellen zu finden und, was am wichtigsten ist, zu versuchen, diese zu beheben.

Leider, obwohl die Kurse versprachen, nach zwei Tagen zum 'Experten' zu machen, hatte ich das Gefühl, dass alles gerade erst anfängt und ich noch viel lernen muss.

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

Bevor ich in meine tiefen Einsichten eintauche, ist es wichtig, zu erklären, was ein Container ist. In der Welt der Softwareentwicklung ist es normal, dass der Code, den Sie auf Ihrem persönlichen Rechner geschrieben haben, perfekt funktioniert, aber beim Versuch, ihn irgendwo auf einem Server auszuführen, einfach nicht läuft. Container versuchen, dieses Problem zu lösen, indem sie autonome Maschinen bereitstellen, die Sie leicht von einem Server auf einen anderen verschieben können, in dem Wissen, dass sie immer funktionieren werden. Wie der Name schon sagt, enthalten sie den Code, Bibliotheken und andere Software, die für den Betrieb erforderlich sind. Kubernetes hingegen ist eine Plattform zur Orchestrierung von Containern. Grundsätzlich ermöglicht es Ihnen, nahtlos Hunderte oder Tausende verschiedener Container zu verwalten.

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

Rotes Team

Die meisten Inhalte der Container laufen als root: Das bedeutet, dass Sie, wenn Sie einen Container kompromittieren, vollen Zugriff auf den Container erhalten. Dies erleichtert die nachfolgenden Schritte erheblich.

Das Mounten von docker.sock innerhalb eines Containers ist gefährlich: Wenn Sie Root innerhalb eines Containers erhalten haben und Docker innerhalb eines Containers installiert ist, der über den Docker-Socket (/var/run/docker.sock) verfügt, haben Sie potenziell die Möglichkeit, den gesamten Cluster zu erkunden, einschließlich des Zugriffs auf jeden anderen Container. Ein solcher Zugriff kann weder durch Netzwerktrennung noch auf andere Weise verhindert werden.

Umgebungsvariablen enthalten häufig geheime Daten.: In den meisten Fällen senden Menschen Passwörter in den Container über gewöhnliche Umgebungsvariablen. Wenn Sie also Zugriff auf das Konto haben, können Sie diese Umgebungsvariablen einsehen und versuchen, Ihre Berechtigungen zu erweitern.

Die Docker-API kann eine Menge Informationen preisgeben.: Die Docker-API arbeitet standardmäßig ohne Authentifizierung und kann viele Informationen liefern. Mit Shodan können Sie leicht eine Liste offener Ports finden, detaillierte Informationen über den Cluster erhalten und diesen vollständig übernehmen. TrendMicro hat darüber ein interessantes Stück geschrieben..

Das Blue Team.

Führen Sie keine Container-Inhalte als Root aus.: Obwohl es einfacher ist, als root zu arbeiten, sollten Sie dies vermeiden. Stattdessen führen Sie Anwendungen mit reduzierten Rechten aus, indem Sie die UID anzeigen oder den Parameter —user bei der CLI-Nutzung verwenden oder USER im Dockerfile angeben.

Erlauben Sie keine Installation von Programmen in Containern.: Fast jeder Angriff beginnt mit der Installation von irgendetwas. Von nmap bis hin zu ifconfig und Docker selbst (innerhalb des Containers) ist die Installation von irgendetwas in einem Container eine gängige Praxis. Aus diesem Grund sollten Sie immer alle ungenutzten Ports sperren. Dies hilft auch, die Übertragung von Befehlen bei einer Infektion Ihrer Maschine zu verhindern. Neben der Verhinderung der Installation von Programmen sollten Sie sicherstellen, dass im Container nur die minimal erforderliche Anzahl an Anwendungen installiert ist, um die Aufgabe zu erfüllen.

Schützen Sie docker.sock.: Dieser muss geschützt werden, da über diesen Socket die Kommunikation zwischen Container und Cluster verarbeitet wird. Da ich in diesem Artikel nicht auf die Einzelheiten eingehen möchte, lesen Sie die Notiz von Docker,, was passieren kann und wie Sie all dies blockieren können.

Verwenden Sie Docker-Secrets anstelle von Umgebungsvariablen.: Secrets sind verfügbar. ungefähr seit 2017. Zwar ist das nicht sicher, aber es ist trotzdem besser als Umgebungsvariablen zur Übertragung geheimer Daten in Containern zu verwenden.

Wenn Sie durch den Artikel Interesse an Containern geweckt haben – Sie können Docker oder microk8s (eine kleinere Version von Kubernetes) relativ einfach installieren. Hier Es gibt Anleitungen zur Installation von Docker für Linux und MacOS, hier und Anleitungen zur Installation von microk8s für Windows, Linux und MacOS.

Nach der Installation können Sie dieses Schnellstart-Handbuch von Docker durchgehen, ein ähnliches bietet zum Bing-Suchdienst zu wechseln). auch microk8s.

Wenn Sie den Wunsch oder die Notwendigkeit haben, einen umfassenden Kurs über Docker zu absolvieren, in dem praktische Referenten alle seine Werkzeuge erläutern: von den grundlegenden Abstraktionen bis zu Netzwerkeinstellungen und Nuancen im Umgang mit verschiedenen Betriebssystemen und Programmiersprachen, dann probieren Sie «Videokurs zu Docker». Sie werden mit der Technologie vertraut und lernen, wo und wie Docker am besten eingesetzt wird. Außerdem erhalten Sie Best Practices – es ist besser, sicher zu lernen und die Unterstützung von Praktikern in Geschichten über Stolpersteine zu haben, als persönlich über diese Stolpersteine mit stacheligen Griffen zu stolpern.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster