Sicherheit
26.05.2023, 07:09 Uhr
Container im Visier von Cyberangreifern
Wie lassen sich Container unter Kubernetes vor Cyberbedrohungen schützen? Wo liegen die Herausforderungen und wie lassen sich diese bewältigen?
(Quelle: dotnetpro)
Container und speziell Kubernetes sind aus der IT-Landschaft nicht mehr wegzudenken. Doch die typischerweise stark verteilten Umgebungen, oft mit großen Clustern, bergen auch Sicherheitsrisiken. Eine schlechte Netzwerkkonfiguration kann zu einer großflächigen Anfälligkeit für unbefugten Zugriff führen. Einzelne Knoten mit veralteten Betriebssystemen oder ein gezielter Denial-of-Service-Angriff können mehrere oder sogar alle Maschinen gefährden.
Da sie häufig hoch- und heruntergefahren werden, ist die Überwachung von Containern generell schwierig. Die in herkömmlichen Produktionsumgebungen gängigen Firewalls sind nicht geeignet für Container-Domains. Als besonders anfällig in Kubernetes erweist sich der Code selbst. Die fehlende Möglichkeit, Container effektiv zu isolieren, bietet Angreifern die Möglichkeit, sensible Daten, Prozesse, die Compliance und Privilegien zu kompromittieren. Einige typische Kubernetes-Sicherheitsprobleme bei der Bereitstellung einer Kubernetes-Instanz lassen sich jedoch einfach vorhersehen und verhindern.
Anforderungen an ein Kubernetes-Sicherheitstool
Proaktive Schritte zur Behebung von Schwachstellen können das Risiko einer Reihe negativer Szenarien wie Sicherheitsverletzungen erheblich verringern. Bei Code – als möglichem Angriffspfad in einer Produktionsumgebung – lassen sich Probleme durch einfache Richtlinien wie die Verschlüsselung von TCP mit TLS-Handshakes, die Nichtfreigabe ungenutzter Ports, Scans und regelmäßige Tests verhindern.
Ein Kubernetes-Sicherheitstool sollte innerhalb möglichst kurzer Zeit dafür sorgen, dass der Code frei von Kompromittierungen ist. Die Bereitstellung digitaler Signaturen schafft ein gewisses Maß an Vertrauen in den Code. Das Tool sollte Sichtbarkeit und Transparenz bei Konfigurationsproblemen zusätzlich zum Code bieten sowie ein- und ausgehende Datenverbindungen zu unsicheren Diensten verhindern.
Die Erstellung von Code aus nicht vertrauenswürdigen Registrys birgt Risiken. So öffnet nicht vertrauenswürdiger Code potenziell die Türen für Angriffe durch Malware oder Backdoors, die unbeabsichtigt Zugriff gewähren. Die Minimierung der Möglichkeiten zur Kompromittierung kann das Sicherheitsniveau erheblich verbessern. Entwickler sollten sich daher von unnötigen Paketen, Bibliotheken und Shells trennen.
Die Berechtigungen sollten so begrenzt wie möglich gehalten werden, und nur die für eine Aufgabe erforderlichen Geheimnisse aktiviert werden. Wenn Anwendungen im Cluster nicht isoliert sind, kann es zu Problemen kommen. Ressourcen und Teams sollten durch Namespaces voneinander getrennt sein.
Um die seitliche Bewegung von Angreifern innerhalb eines Clusters zu unterbinden, ist es erforderlich, mittels Richtlinien das Netzwerk zu segmentieren. Rollenbasierte Zugriffskontrollen (RBAC) sollten korrekt konfiguriert sein, um den Zugriff zu beschränken. Infrastrukturelemente wie der API-Server kube-apiserver, der Key-Value Store etcd und Controller (u.a. kube-controller-manager und cloud-controller-manager) stellen während der Laufzeit allesamt Angriffsflächen dar. Es gibt mehrere bewegliche Teile, die den Zustand eines Kubernetes-Clusters zu einem bestimmten Zeitpunkt beeinflussen. Im Falle eines Angriffs müssen gefährdete Container schnell isoliert, gestoppt und durch gesunde Container ersetzt werden, während die Quelle des Angriffs gefunden und behoben wird.
Grundlegende Sicherheitsmaßnahmen
Zugunsten der Sicherheit sollten Unternehmen ihre Kubernetes-Umgebung in minimalem Umfang aufbauen und mit dem Nötigsten ergänzen. Um mehr Kontrolle zu haben, sind ein schlankes Host-Betriebssystem und SELinux-Optionen ausreichend. Images, Betriebssysteme und alle externen Quellen gilt es vollständig auf Schwachstellen zu überprüfen. Keine externe Quelle sollte automatisch als vertrauenswürdig eingestuft werden.
Eine weitere grundlegende Sicherheitsmaßnahme ist die Verwendung von Namespaces und RBAC (Role-based Access Control) zur Segmentierung des Clusters und der Benutzer. Alles, was nicht notwendig ist, sollte nicht sichtbar sein. Die Netzwerksegmentierung sollte vor der Produktion eingerichtet sein, da die Standardeinstellung des Kubernetes-Netzwerks eine Kommunikation von jedem zu jedem erlaubt. Richtlinien für eingehende und ausgehende Verbindungen gilt es daher sorgfältig zu definieren und korrekt zu routen.
Ebenso ist es ratsam, die Privilegien auf ein Minimum zu beschränken und Anwendungsprozesse niemals als Root auszuführen. Angriffe, die auf der Installation von Software oder der Änderung des Dateisystems beruhen, lassen sich durch ein schreibgeschütztes Root-Dateisystem verhindern. Die Integration von Image-Scans und anderen Sicherheitsüberprüfungen in die CI/CD-Pipeline kann ebenfalls hilfreich sein. Unverzichtbar ist es auch, den Cluster selbst zu schützen. Eine RBAC-Konfiguration zugunsten der Sicherheit umfasst die Einschränkung des Zugriffs auf den API-Server und die Verschlüsselung der Kommunikation mit TLS. Die Kubelet-Berechtigungen sollten in ähnlicher Weise eingeschränkt werden.
Administratoren sollten zudem sicherstellen, dass nur autorisierte Images zum Einsatz kommen. Ohne einen Prozess, der gewährleistet, dass nur regelkonforme Images ausgeführt werden, sind Unternehmen dem Risiko ausgesetzt, anfällige oder sogar bösartige Container auszuführen. Das Herunterladen und Ausführen von Images aus unbekannten Quellen ist gefährlich – vergleichbar mit der Ausführung von Software eines unbekannten Herstellers auf einem Produktionsserver. Die Speicherung ausschließlich genehmigter Images in privaten Registrys reduziert die Anzahl der potenziellen Images, die in die Pipeline gelangen, auf einen Bruchteil der Hunderttausenden von öffentlich verfügbaren Images.
Proaktive Überwachung unterstützt das Risikomanagement
Integrierte Kontrollmechanismen in Kubernetes sind hilfreich beim Risikomanagement, etwa durch die Konfiguration von Sicherheitskontext, um den Pod-Zugriff zu begrenzen. Ein wichtiges Element der Containersicherheit ist die ständige proaktive Überwachung. Kubernetes-Teams sollten immer einen Überblick über die Prozessaktivitäten, die Kommunikation zwischen Diensten und außerhalb des Clusters haben. Hilfreich ist hierbei eine Plattform für die Bereitstellung und Verwaltung von Clustern, die mit umfassenden Automatisierungsfunktionen den sicheren Betrieb einer Kubernetes-Umgebung optimal unterstützt.
Quelle: Sebastian Scheele