Sami - stock.adobe.com

Cloud-Container: Leitfaden und Tipps zu Security-Risiken

Container sind ein integraler Bestandteil vieler IT-Umgebungen. Bei unsachgemäßer Verwaltung können sie jedoch zu Sicherheitsrisiken werden. Dem gilt es entgegenzuwirken.

Cloud-Container sind ein wichtiges Thema, insbesondere im Bereich Sicherheit. Die Technologiekonzerne Microsoft, Google und Facebook nutzen sie alle. Google setzt Container für alle seine Anwendungen ein, insgesamt mehrere Milliarden pro Woche.

In den letzten Jahren haben Container in immer mehr Produktionsumgebungen Einzug gehalten. Dieser Wandel spiegelt die Modularisierung von DevOps wider, die es Entwicklern ermöglicht, einzelne Funktionen anzupassen, ohne die gesamte Anwendung zu beeinträchtigen. Container versprechen eine optimierte, einfach zu implementierende und sichere Methode zur Umsetzung spezifischer Infrastrukturanforderungen und sind eine schlanke Alternative zu virtuellen Maschinen (VMs).

Betrachten wir die Entwicklung von Containern und erläutern anschließend, warum die Sicherheit von Cloud-Containern nicht vernachlässigt werden darf.

Wie funktionieren Cloud-Container?

Die Wurzeln der Containertechnologie liegen in der Partitionierung und der chroot-Prozessisolierung, die als Teil von Linux entwickelt wurden. Moderne Container kommen in der Anwendungscontainerisierung, wie beispielsweise Docker, und in der Systemcontainerisierung, wie beispielsweise Linux-Container (LXC), zum Einsatz. Beide ermöglichen es IT-Teams, Anwendungscode von der zugrunde liegenden Infrastruktur zu abstrahieren, während sie daran arbeiten, die Versionsverwaltung zu vereinfachen und die Portabilität über verschiedene Bereitstellungsumgebungen hinweg zu ermöglichen.

Container basieren auf virtueller Isolierung, um Anwendungen bereitzustellen und auszuführen, die auf einen gemeinsamen Betriebssystemkern zugreifen, ohne dass VMs erforderlich sind. Da sie alle erforderlichen Komponenten – Dateien, Bibliotheken und Umgebungsvariablen – enthalten, führen Container die gewünschte Software aus, ohne dass man sich um die Plattformkompatibilität kümmern muss. Das Host-Betriebssystem schränkt den Zugriff des Containers auf physische Ressourcen ein, sodass ein einzelner Container nicht alle physischen Ressourcen eines Hosts beanspruchen kann.

Das Wichtigste, was man über Cloud-Container wissen muss, ist, dass sie für die Virtualisierung einer einzelnen Anwendung konzipiert sind. Nehmen wir zum Beispiel einen MySQL-Container. Er stellt eine virtuelle Instanz dieser Anwendung bereit, und das ist auch schon alles. Container schaffen eine Isolationsgrenze auf Anwendungsebene und nicht auf Serverebene. Wenn in diesem einzelnen Container etwas schiefgeht – beispielsweise ein übermäßiger Ressourcenverbrauch durch einen Prozess –, betrifft dies nur diesen einzelnen Container und nicht die gesamte VM oder den gesamten Server. Außerdem werden Kompatibilitätsprobleme zwischen containerisierten Anwendungen, die sich auf demselben Betriebssystem befinden, beseitigt.

Große Cloud-Anbieter offerieren Container als Dienstleistung an, beispielsweise Amazon Elastic Container Service, AWS Fargate, Google Kubernetes Engine, Microsoft Azure Container Instances, Azure Kubernetes Service und Oracle Cloud Infrastructure Kubernetes Engine. Container können auch auf öffentlichen oder privaten Cloud-Infrastrukturen bereitgestellt werden, ohne dass spezielle Produkte eines Cloud-Anbieters verwendet werden müssen.

Container werden auf zwei Arten bereitgestellt: durch Erstellen eines Images, das in einem Container ausgeführt wird, oder durch Herunterladen eines vorgefertigten Images, wie es beispielsweise auf Docker Hub verfügbar ist. Docker – ursprünglich auf LXC basierend – ist die mit Abstand größte und beliebteste Containerplattform. Obwohl es Alternativen gibt, ist Docker zum Synonym für Containerisierung geworden.

Anwendungsfälle für Cloud-Container

Unternehmen nutzen Container auf vielfältige Weise, um Kosten zu senken und die Zuverlässigkeit von Software zu verbessern. Zu den gängigsten und vorteilhaftesten gehören die folgenden:

  • Microservices-Architektur. Container eignen sich ideal für die Entwicklung von Microservices-basierten Anwendungen, bei denen Apps in kleinere, unabhängig voneinander einsetzbare Dienste unterteilt werden. Dies verbessert die Skalierbarkeit und vereinfacht die Entwicklungszyklen. Kubernetes koordiniert die Bereitstellung, Skalierung und Verwaltung dieser Dienste und ermöglicht es Unternehmen, Updates mit minimalen Ausfallzeiten bereitzustellen.
  • Hybrid- und Multi-Cloud-Bereitstellungen. Container ermöglichen eine Cloud-unabhängige Portabilität, sodass Unternehmen dieselben Workloads auf AWS, Azure, Google Cloud Platform oder lokal ausführen können, ohne Änderungen an der Anwendung vornehmen zu müssen. Dies unterstützt Strategien für Disaster Recovery, Kostenoptimierung und Herstellerneutralität.
  • DevOps und Automatisierung der kontinuierlichen Integration/kontinuierlichen Bereitstellung (CI/CD). Unternehmen verwenden Container in CI/CD-Pipelines, um Konsistenz von der Entwicklung bis zur Produktion sicherzustellen. Container ermöglichen es Entwicklern, in isolierten Umgebungen zu testen, die die Produktion widerspiegeln, wodurch Fehler reduziert und Integrations- und Bereitstellungsworkflows optimiert werden.
  • Modernisierung von Legacy-Anwendungen. Viele Unternehmen nutzen Container, um monolithische Legacy-Anwendungen in agilere und wartungsfreundlichere Dienste umzugestalten. Durch die Containerisierung älterer Anwendungen können Unternehmen ihre Infrastruktur schrittweise modernisieren, ohne sie komplett neu schreiben zu müssen.
  • Edge- und IoT-Bereitstellungen. Container können am Edge für Anwendungsfälle wie IoT, Fertigung und Einzelhandel bereitgestellt werden. Container-Laufzeiten wie K3s (Lightweight Kubernetes) helfen IT-Mitarbeitern dabei, die Orchestrierung am Edge mit begrenzten Ressourcen zu unterstützen.
  • Sicherheit und Durchsetzung von Richtlinien. Durch die Containerisierung von Anwendungen können Unternehmen Richtlinien als Code mithilfe von Diensten wie Open Policy Agent durchsetzen und die Laufzeitsicherheit durch Integrationen mit Cloud Workload Protection Platforms (CWPPs) und CNAPP-Tools (Cloud-native Application Protection Program) verwalten.

Container und virtuelle Maschinen im Vergleich

Im Vergleich zu VMs verbrauchen Container-Bereitstellungen nur eine minimale Menge an Ressourcen. Im Gegensatz zu VMs benötigen sie kein vollständiges Betriebssystem, das innerhalb des Containers installiert werden muss, und sie benötigen keine virtuelle Kopie der Hardware des Host-Servers.

Container benötigen nur minimale Ressourcen, um die Aufgabe zu erfüllen, für die sie entwickelt wurden – ein paar Softwareprogramme, Bibliotheken und die Grundlagen eines Betriebssystems. Dadurch können Unternehmen zwei- bis dreimal so viele Container auf einem Server bereitstellen wie VMs, und sie lassen sich viel schneller hochfahren als VMs.

Container benötiger deutlich weniger Ressourcen als virtuelle Maschinen, um ihre Aufgaben zu erfüllen.
Abbildung 1: Container benötiger deutlich weniger Ressourcen als virtuelle Maschinen, um ihre Aufgaben zu erfüllen.

Vorteile von Containern

Cloud-Container sind portabel. Sobald ein Container erstellt wurde, kann er problemlos auf verschiedenen Servern bereitgestellt werden. Aus Sicht des Software-Lebenszyklus ermöglicht dies Unternehmen, Container schnell zu kopieren, um Umgebungen für Entwicklung, Tests, Integration und Produktion zu erstellen. Aus Sicht der Software- und Sicherheitstests wird dadurch sichergestellt, dass das zugrunde liegende Betriebssystem keine Unterschiede in den Testergebnissen verursacht.

Container bieten außerdem eine dynamischere Umgebung. Die IT kann je nach Bedarf schneller hoch- und heruntergefahren werden, wodurch die Ressourcen unter Kontrolle bleiben.

Herausforderungen von Containern

Ein Nachteil von Containern ist das Problem, dass die Virtualisierung in viele kleinere Teile aufgeteilt wird. Wenn nur wenige Container beteiligt sind, ist dies ein Vorteil, da das Team genau weiß, welche Konfiguration es wo bereitstellt. Wenn das Unternehmen jedoch vollständig auf Container setzt, kann es durchaus vorkommen, dass es so viele Container gibt, dass sie schwer zu verwalten sind. Stellen Sie sich vor, Sie müssen Patches auf Hunderten von verschiedenen Containern bereitstellen. Ohne einen einfachen Prozess kann es schwierig sein, eine bestimmte Bibliothek oder ein bestimmtes Paket innerhalb eines Container-Images aufgrund einer Sicherheitslücke zu aktualisieren.

Das Container-Management bereitet oft Kopfzerbrechen, selbst wenn Systeme wie Docker zum Einsatz kommen, die darauf abzielen, die IT-Orchestrierung zu vereinfachen.

Die Sicherheitsrisiken von Cloud-Containern

Container bieten zwar viele Vorteile, bergen jedoch auch spezielle Sicherheitsrisiken, denen sich Unternehmen stellen müssen. Die kurzlebige und dynamische Natur von Containern erfordert einen modernen Sicherheitsansatz, der proaktiv und automatisiert ist und in DevOps-Workflows integriert werden kann. Im Folgenden sind einige der wichtigsten Risiken aufgeführt, denen Unternehmen bei Cloud-Containern Priorität beimessen sollten:

  • Anfällige Images. Container werden aus Images erstellt, die häufig Systembibliotheken, Laufzeitabhängigkeiten und benutzerdefinierten Code enthalten. Viele Unternehmen verwenden öffentliche Basis-Images aus Verzeichnissen wie Docker Hub, die ungepatchte Schwachstellen oder Malware enthalten können. Unternehmen sollten Images kontinuierlich scannen, signierte und verifizierte Quellen verwenden und Image-Zulassungslisten erstellen, um sicherzustellen, dass alle Builds sicher sind.
  • Container- Escape. Container sind isoliert, aber nicht undurchdringlich. Ein Container-Ausbruch tritt auf, wenn ein böswilliger Akteur aus der Container-Laufzeitumgebung entkommt, um auf das Host-Betriebssystem zuzugreifen. Dieses Risiko ist erhöht, wenn Container mit privilegiertem Zugriff oder Root-Rechten ausgeführt werden. Zu den Abhilfemaßnahmen gehören die Ausführung von Containern als Nicht-Root-Benutzer, die Verwendung von Kernel-Sicherheitsmodulen wie AppArmor und SELinux sowie die Bereitstellung von Sandbox-Laufzeitumgebungen wie gVisor oder Kata Containers. In Cloud-Umgebungen können einige dieser Abhilfemaßnahmen aufgrund mangelnder Kontrolle und Konfigurationsmöglichkeiten seitens des Kunden schwierig oder unmöglich sein.
  • Aufdeckung von Geheimnissen. Die Speicherung von Anmeldedaten, API-Schlüsseln oder Tokens in Containern oder Umgebungsvariablen birgt erhebliche Risiken. Im Falle einer Kompromittierung könnten Angreifer Zugriff auf Datenbanken, Cloud-Ressourcen oder interne Assets und Dienste erlangen. Zu den bewährten Verfahren gehören die Verwendung von Tools zur Verwaltung geheimer Daten, wie HashiCorp Vault oder AWS Secrets Manager, sowie die Vermeidung von fest codierten geheimen Daten in Images oder Git-Repositorys.
  • Laufzeitbedrohungen. Nach ihrer Bereitstellung bleiben Container anfällig für Angriffe, darunter Reverse Shells, Kryptomining-Malware und laterale Bewegungen in Kubernetes-Clustern. Sicherheitsteams sollten Laufzeitschutz-Tools einsetzen – die meisten CNAPP- und CWPP-Plattformen bieten diese Funktion als Priorität an –, um Systemaufrufe, Container-Verhalten und Netzwerkaktivitäten zu überwachen und Bedrohungen in Echtzeit zu erkennen und zu stoppen.
  • Fehlerhafte Konfiguration der Orchestrierung. Fehlerhafte Konfigurationen in Kubernetes oder anderen Orchestrierungsprogrammen gehören zu den größten Sicherheitsrisiken für Container. Häufige Fehler sind beispielsweise die Freigabe von Kubernetes-Dashboards und APIs für das Internet, die Verwendung von Standard- oder schwachen Authentifizierungseinstellungen und die Vergabe weitreichender Cluster-Rollen an Dienstkonten.
  • Unzureichende Netzwerksegmentierung. Container kommunizieren häufig über virtuelle Netzwerke in einem Cluster. Ohne geeignete Netzwerkrichtlinien könnte jeder kompromittierte Container potenziell Angreifern die seitliche Bewegung erleichtern. Setzen Sie das Prinzip der geringsten Privilegien (POLP) mithilfe von Kubernetes-Netzwerkrichtlinien, Calico oder Service-Meshes wie Istio durch, um die Konnektivität zu begrenzen.

Bewährte Verfahren für die Sicherheit von Cloud-Containern

Nachdem Cloud-Container immer beliebter wurden, richtete sich der Fokus darauf, wie man sie sicher halten kann. Bedenken Sie folgende Punkte:

  • Zugriffsrechte festlegen. Docker-Container mussten früher als privilegierter Benutzer auf dem zugrunde liegenden Betriebssystem ausgeführt werden. Wenn wichtige Teile des Containers kompromittiert wurden, konnte möglicherweise Root- oder Administratorzugriff auf das zugrunde liegende Betriebssystem erlangt werden oder umgekehrt. Heute unterstützt Docker Benutzernamensräume, die es Containern ermöglichen, als bestimmte Benutzer ausgeführt zu werden.
  • Rootless-Container einsetzen. Diese Container bieten eine zusätzliche Sicherheitsebene, da sie keine Root-Rechte erfordern. Wenn also ein Rootless-Container kompromittiert wird, erhält der Angreifer keinen Root-Zugriff. Ein weiterer Vorteil von Rootless-Containern besteht darin, dass verschiedene Benutzer Container auf demselben Endpunkt ausführen können. Docker unterstützt derzeit Rootless-Container, Kubernetes hingegen nicht.
  • Image-bezogene Sicherheitsaspekte berücksichtigen. Achten Sie auf die Sicherheit von Images, die aus öffentlichen Repositorys wie Docker Hub heruntergeladen werden. Durch das Herunterladen eines von der Community entwickelten Images kann die Sicherheit eines Containers nicht unbedingt gewährleistet werden. Images können auf Schwachstellen gescannt werden. Dieser Schritt kann eine gewisse Sicherheit bieten, aber die Überprüfungsprozesse sind möglicherweise nicht gründlich genug, wenn Sie Container für besonders sensible Anwendungen verwenden. In diesem Fall wäre es sinnvoll, das Image selbst zu erstellen, um sicherzustellen, dass Ihre Sicherheitsrichtlinien durchgesetzt und regelmäßig Updates durchgeführt werden. Beachten Sie jedoch, dass unternehmensinterne Images nur so sicher sind, wie die Mitarbeiter sie gestalten. Eine angemessene Schulung derjenigen, die Images erstellen, ist daher von entscheidender Bedeutung.
  • Container überwachen. Behandeln Sie Container für sensible Produktionsanwendungen in Bezug auf die Sicherheit genauso wie jede andere Bereitstellung. Wenn ein Container sich seltsam verhält oder mehr Ressourcen als nötig verbraucht, kann er einfach heruntergefahren und neu gestartet werden. Es handelt sich zwar nicht um eine Sandbox, aber Container bieten eine Möglichkeit, nicht vertrauenswürdige Anwendungen getrennt zu halten und sie von anderen Anwendungen auf dem Endpunkt fernzuhalten.
  • Sicherheitsbedrohungen und Schwachstellen priorisieren. Befolgen Sie die Best Practices für die Sicherheit von Containern und Cloud-Containern und seien Sie sich der Sicherheitslücken und Angriffe auf Container bewusst. Die richtige Bereitstellung und Verwaltung sind entscheidend. Scannen Sie Container regelmäßig, um sicherzustellen, dass Images und aktive Container auf dem neuesten Stand und sicher bleiben.
  • Vergessen Sie nicht die Sicherheit des Servers, auf dem die Container gehostet werden. Wenn Ihr Unternehmen einen Cloud-Container-Anbieter nutzt, ist dieses Unternehmen für den Betrieb, das Patchen und die Absicherung des Dienstes verantwortlich.

Ein letzter Punkt: Obwohl Container eine neuere Technologie sind, bedeutet dies nicht, dass traditionelle Sicherheitsrichtlinien und -verfahren nicht angewendet werden sollten.

Erfahren Sie mehr über Data-Center-Betrieb