Der Anfängerleitfaden für Containersicherheit
Heutzutage nutzen DevOps-Teams Container mehr denn je, aber an deren Sicherheit wird oft erst im Nachhinein gedacht. Das musst du über Containersicherheit wissen.
Ressourceneffiziente und hochportable Container werden immer mehr zur ersten Wahl bei der modernen Softwareentwicklung. 2023 führten laut dem Marktforschungsunternehmen Gartner mehr als 70 % der Unternehmen mehr als zwei containerbasierte Anwendungen aus.
Aber Container haben auch ihre Schattenseiten – insbesondere im Hinblick auf die Sicherheit. In der globalen DevSecOps-Umfrage 2022 von GitLab wurde gezeigt, dass nur 64 % der Sicherheitsprofis einen Sicherheitsplan für Container hatten, und viele DevOps-Teams nicht planen, andere innovative Softwaretechnologien wie Cloud Native/Serverless, APIs und Microservices zu nutzen.
Die Lösung ist, dass DevOps-Teams die Sicherheit früher bedenken und sie in jede Phase des SDLC integrieren. Hier findest du eine Schritt-für-Schritt-Anleitung, wie Teams das erreichen können.
Ein Container ist eine leichte Einheit, die alle Komponenten enthält, die du zum Ausführen einer Anwendung brauchst, wie etwa den Anwendungscode, Laufzeit, Bibliotheken und Konfigurationen. Die Containersicherheit bezieht sich daher auf Maßnahmen und Praktiken, die die Sicherheit und Integrität solcher Container sicherstellen sollen. Die Containersicherheit umfasst alles, von den Anwendungen in den Containern bis zur Infrastruktur, auf der diese ausgeführt werden. Die Sicherheit und Qualität von Basis-Images sind wichtig, um sicherzustellen, dass abgeleitete Images aus einer vertrauenswürdigen Quelle stammen. Integriere Sicherheit in deine Container-Pipeline, indem du vertrauenswürdige Images sammelst, den Zugriff mithilfe einer privaten Registry verwaltest, Sicherheitstests sowie eine automatische Bereitstellung implementierst und deine Infrastruktur kontinuierlich verteidigst. Das sogenannte „Härten“ von Container bezeichnet Tools für das Container-Scanning, um mögliche Sicherheitslücken aufzudecken und zu beheben. So soll das Risiko von Angriffen gesenkt werden.
Eine robuste Containersicherheit senkt das Risiko, einen Container in einer Produktivumgebung bereitzustellen, der eine Sicherheitsschwachstelle oder bösartigen Code enthält.
Die Containersicherheit unterscheidet sich von herkömmlichen Sicherheitsmethoden, da eine Containerumgebung komplexer und dynamischer ist. Einfach ausgedrückt gibt es viel mehr bewegliche Teile und dadurch unterschiedliche Sicherheitsrisiken.
Während Container auf den ersten Blick wie kleine virtuelle Maschinen (VMs) wirken, verhalten sie sich aber nicht so – und brauchen daher eine andere Sicherheitsstrategie. Der Datenverkehr zwischen Apps in einem Netzwerk überschreitet nicht die Perimetersicherheit des Netzwerks, sondern sollte auf bösartigen Datenverkehr zwischen Apps und ihren Images überwacht werden. Dein Orchestrator kann verwendet werden, um Sicherheitsrichtlinien für Prozesse und Ressourcen festzulegen, aber eine umfassende Sicherheitsstrategie erfordert mehr als das.
Container-Images definieren, was in jedem Container ausgeführt wird. Entwickler(innen) sollten sicherstellen, dass die Images keine Sicherheitslücken oder kompromittierten Code enthalten und sollten es vermeiden, irrelevante Images zu erstellen, um die Angriffsfläche des Containers so klein wie möglich zu halten. Image-Validierungstools können verwendet werden, um nicht vertrauenswürdige Images zu verbieten. Sie werden aber oft nicht standardmäßig aktiviert. Images können auch nach dem Build gescannt werden, um abhängige Images zu finden, die ebenfalls Sicherheitslücken aufweisen können.
Im Gegensatz zu VMs können mehrere Container auf demselben Betriebssystem ausgeführt werden und Angriffe können auf beiden Ebenen erfolgen. Ein anfälliges Host-Betriebssystem stellt eine Gefahr für die Container dar, und ein anfälliger Container kann einen Angriffsvektor für das Host-Betriebssystem bilden. Erzwinge eine Namensraum-Isolierung, um Interaktionen zwischen dem Container und dem Host-Betriebssystem-Kernel einzuschränken, und automatisiere das Patching, um mit Patch-Veröffentlichen der Anbieter auf dem gleichen Stand zu sein. Das Betriebssystem sollte so einfach wie möglich sein und keine unnötigen Komponenten enthalten (wie Apps oder Bibliotheken, die zum Ausführen deines Orchestrators nicht nötig sind).
Die Container-Orchestrierung koordiniert und verwaltet Container und ermöglicht es containerbasierten Anwendungen, zu skalieren und Tausende von Benutzer(innen) zu unterstützen. Dein Orchestrator hat vielleicht eigene, vorgefertigte Sicherheitsfunktionen, mit denen du Regeln für Kubernetes erstellen kannst, die automatisch in allen Pods im Cluster erzwungen werden. Diese Art von Basisfunktion ist zwar nützlich, aber nur der erste Schritt auf dem Weg zu robusteren Richtliniensätzen.
Container können auf mehrere Systeme und Cloud-Anbieter verteilt sein, weshalb das Zugriffsmanagement noch wichtiger wird. Geheimnisse wie API-Schlüssel, Anmeldedaten und Token müssen strengstens verwaltet werden, damit nur privilegierte Personen Zugriff auf den Container haben. Der Benutzerzugriff kann auch rollenbasiert verwaltet werden, wodurch du den Zugriff nur für die Personen freigeben kannst, die wirklich Zugriff benötigen.
Nach der Bereitstellung müssen Containeraktivitäten überwacht werden und die Teams müssen Sicherheitsbedrohungen erkennen und darauf reagieren können. Nordcloud empfiehlt die Überwachung auf verdächtiges Verhalten wie Netzwerkaufrufe, API-Aufrufe und auffällige Anmeldeversuche. Teams sollten vordefinierte Behebungsmaßnahmen für Pods haben und sollten den Container in einem anderen Netzwerk isolieren, ihn neu starten oder stoppen können, bis die Bedrohung identifiziert wurde. Dadurch kann eine zusätzliche Sicherheitsebene gegen Malware geboten werden.
Cloud-Anbieter übernehmen einen Teil der Arbeit, indem sie die zugrunde liegende Hardware und die Basisnetzwerke für Cloud-Services schützen. Trotzdem teilen die Benutzer(innen) die Verantwortung, zum Beispiel beim Zugriff auf Apps, bei der App-Konfiguration und beim Patching sowie beim Systemzugriff und -patching.
Im Jahr 2017 veröffentlichte das US-Handelsministerium seinen Application Container Security Guide. Obwohl dieser Leitfaden jetzt schon einige Jahre alt ist, können Teams, die Container gerade erst einführen, von folgenden Empfehlungen profitieren:
-
Passe die betriebliche Kultur und die technischen Prozesse des Unternehmens an, um die neue Art und Weise zu unterstützen, wie Anwendungen mit Containern entwickelt, ausgeführt und supportet werden: Die Einführung von Containern kann einen Einschnitt in deine bestehende Kultur und Entwicklungsmethodik darstellen. Es kann sein, dass deine derzeitigen Praktiken nicht direkt auf eine containerbasierte Umgebung anwendbar sind. Ermutige und schule dein Team und erkläre, dass es überdenken muss, wie programmiert und gearbeitet wird.
-
Verwende containerspezifische Host-Betriebssysteme anstelle von allgemeinen Betriebssystemen, um die Angriffsflächen zu reduzieren: Ein containerspezifisches Host-Betriebssystem ist ein minimalistisches Betriebssystem, auf dem nur Container ausgeführt werden. Durch solche Betriebssysteme wird die Angriffsfläche deutlich reduziert, wodurch die Chancen sinken, dass deine Container kompromittiert werden.
-
Gruppiere nur Container mit demselben Zweck, derselben Sensitivität und derselben Bedrohungsposition auf einem Host-Betriebssystem-Kernel, um zusätzliche tiefgreifende Verteidigung zu bieten: Durch die Segmentierung von Containern schaffst du eine weitere tiefgreifende Verteidigung. Wenn du Container auf diese Weise gruppierst, erschwerst du es Angreifer(inne)n, potenzielle Komprimittierungen auf andere Gruppen auszuweiten. Dies erhöht auch die Wahrscheinlichkeit, dass Kompromittierungen erkannt und eingedämmt werden.
-
Nutze containerspezifische Tools und Prozesse für die Sicherheitslückenverwaltung von Images, um Kompromittierungen zu vermeiden: Herkömmliche Tools machen viele Annahmen, die bei containerbasierten Modellen nicht geeignet sind. Sie können Sicherheitslücken in Containern oft nicht erkennen. Unternehmen sollten Tools und Prozesse einführen, um die Einhaltung der Best Practices für sichere Konfigurationen bei Images zu überprüfen und zu erzwingen. Dazu zählen zentralisierte Berichte und die Überwachung aller Images. Zudem soll verhindert werden, dass nicht konforme Images ausgeführt werden.
-
Erwäge hardwarebasierte Gegenmaßnahmen, um eine Grundlage für zuverlässiges Computing zu schaffen: Weite deine Sicherheitspraktiken auf alle Ebenen der Containertechnologie aus, indem du die Sicherheit auf vertrauenswürdige Hardware wie das Trusted Platform Module (TPM) stützt.
-
Verwende auf Container abgestimmte Laufzeit-Verteidigungstools: Verwende eine eigene Container-Sicherheitslösung, die die Containerumgebung überwachen kann und Anomalien und bösartige Aktivitäten in dieser Umgebung präzise erkennen kann.
Lerne den Jargon und mach dich bereit.
Tauche in die DevSecOps-Sicherheitsgrundlagen ein.
Lege mit DevSecOps mit GitLab los.
Bist du bereit?
Sieh dir an, was dein Team mit einer einheitlichen DevSecOps-Plattform erreichen könnte.