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

Untersuchen der (fehlenden) Sicherheit typischer Docker- und Kubernetes-Installationen
Ich arbeite seit über 20 Jahren im IT-Bereich, aber irgendwie kam ich nie zu Containern. In der Theorie verstand ich, wie sie aufgebaut sind und funktionieren. Aber da ich noch nie praktisch damit zu tun hatte, war ich mir nicht sicher, wie genau die Zahnräder darunter arbeiten.

Außerdem hatte ich keine Ahnung, wie es um die Sicherheit steht. Aber nochmals, die Theorie klingt schön, und das alte Lied "Mit zunehmender Sicherheit sinkt der Komfort" ging mir nicht aus dem Kopf. Also dachte ich, wenn es so einfach ist, mit Containern zu arbeiten, dann ist die Sicherheit dort unterirdisch. Wie sich herausstellte, hatte ich recht.

Um schnell einzusteigen, meldete ich mich für einen Kurs an Black Hat 2020 mit dem Titel „Vom Dreck zum 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 zurücklegen. Es war eine rein praktische Veranstaltung — die Studenten mussten Docker und microk8s vor den Kursstunden auf ihren Rechnern installieren — eine großartige Möglichkeit, die Interaktion der Werkzeuge zu sehen, Schwachstellen zu finden und, was am wichtigsten ist, zu versuchen, sie zu beheben.

Leider hatte der Kurs zwar versprochen, nach zwei Tagen zum „Adel“ zu werden, aber ich fühlte, dass alles erst beginnt und ich noch viel lernen muss.

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

Bevor ich in meine hohen Beobachtungen eintauchen kann, ist es wichtig zu erklären, was ein Container ist. In der Entwicklungswelt gilt es als normal, dass der Code, der auf Ihrem persönlichen Rechner geschrieben wurde, einwandfrei funktioniert, aber beim Versuch, ihn irgendwo auf einem Server auszuführen, er einfach nicht funktioniert. Container versuchen, dieses Problem zu überwinden, indem sie autonome Maschinen bereitstellen, die Sie problemlos von einem Server auf einen anderen verschieben können, in dem Wissen, dass sie immer funktionieren werden. Wie der Name schon sagt, enthalten sie Code, Bibliotheken und andere Software, die zum Betrieb benötigt werden. Kubernetes hingegen ist eine Orchestrierungsplattform für Container. Grundsätzlich ermöglicht es Ihnen, nahtlos Hunderte oder Tausende verschiedener Container zu verwalten.

Im Folgenden sind einige meiner Erkenntnisse aus der Perspektive des roten und blauen Teams aufgeführt.

Rotes Team

Der Großteil des Inhalts von Containern wird unter root ausgeführt: das bedeutet, dass, wenn Sie den Container kompromittieren, Sie vollen Zugriff auf den Container erhalten. Dies macht die nachfolgenden Schritte erheblich einfacher.

Die Montage von docker.sock innerhalb des Containers ist gefährlich: wenn Sie Root-Zugriff im Container haben und außerdem Docker innerhalb des Containers installiert haben, 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. Dieser Zugriff kann weder durch Netzwerkisolierung noch auf andere Weise verhindert werden.

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

Die Docker API kann eine Menge Informationen preisgeben: Die Docker API läuft, wenn sie standardmäßig eingerichtet ist, ohne Authentifizierung und kann eine Menge Informationen preisgeben. Mit Shodan lassen sich leicht Listen offener Ports finden, dann detaillierte Informationen über den Cluster erhalten — und ihn vollständig übernehmen. TrendMicro hat darüber geschrieben einen sehr interessanten Artikel.

Das blaue Team

Führen Sie den Inhalt der Container nicht als Root aus: Obwohl es einfacher ist, als Root auszuführen, sollten Sie dies nicht tun. Stattdessen sollten Sie Anwendungen mit reduzierten Rechten ausführen, indem Sie die UID festlegen oder mit dem Parameter —user beim Arbeiten mit der CLI oder durch Angabe von USER in der Dockerfile.

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 (im Container) war die Installation von irgendetwas im Container üblich. Aus diesem Grund sollten Sie immer alle ungenutzten Ports blockieren. Dies hilft auch, die Übertragung von Steuerbefehlen im Falle einer Infektion Ihres Systems zu verhindern. Neben der Verhinderung der Installation von Programmen sollten Sie sicherstellen, dass im Container selbst nur die minimal notwendigen Anwendungen installiert sind, um die Aufgabe zu erfüllen.

Schützen Sie docker.sock: es muss geschützt werden, da über diesen Socket die Kommunikation zwischen Container und Cluster abgewickelt wird. Da ich in diesem Artikel nicht ins Detail gehen möchte, lesen Sie bitte eine Notiz von Docker, was passieren kann und wie man alles blockieren kann.

Verwenden Sie Docker-Secrets anstelle von Umgebungsvariablen: Es gibt Secrets seit etwa 2017. Obwohl das nicht sicher ist, ist es dennoch besser als Umgebungsvariablen zur Übertragung geheimer Daten in Containern.

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

Nach der Installation können Sie dieses schnelle Starthandbuch von Docker durchsehen, ein ähnlicher Leitfaden angeboten gilt auch für microk8s.

Wenn Sie den Wunsch oder die Notwendigkeit haben, einen umfassenden Kurs über Docker zu besuchen, in dem praxisorientierte Referenten alle Tools von den grundlegenden Abstraktionen bis hin zu Netzwerkkonfigurationen und den Feinheiten der Arbeit mit verschiedenen Betriebssystemen und Programmiersprachen erklären, dann probieren Sie "Videokurs über Docker" aus. Sie werden mit der Technologie vertraut gemacht und verstehen, wo und wie man Docker am besten einsetzt. Außerdem erhalten Sie Best-Practice-Beispiele – es ist besser, sicher und mit Unterstützung von Praktikern aus Fehlern zu lernen, als selbst auf die gleichen Fehler mit spitzen Werkzeugen zu stoßen.

Quelle: habr.com

60GB SSD 8Gb DDR4