Published Date: March 1, 2021
Containersicherheit umfasst den Einsatz von Tools und die Festlegung von Richtlinien, um sicherzustellen, dass Container vor Bedrohungen geschützt sind und in einer sicheren Umgebung betrieben werden, während zugleich die Infrastruktur des Unternehmens vor Angriffen geschützt wird.
Container-Security ist aus demselben Grund wichtig wie die gesamte Netzwerk- und Anwendungssicherheit – Container, die von einem bösartigen Dritten kompromittiert werden, könnten nicht nur die Prozesse und Aufgaben beeinträchtigen, die der Container ausführt, sondern auch Tür und Tor für eine Reihe weiterer Angriffe auf das Netzwerk des Unternehmens öffnen.
Containersicherheit ist aufgrund der allgemeinen Komplexität der Containerumgebung ein schwieriges Thema mit vielen Facetten. Die Containersicherheitsstrategie eines Security-Teams muss Container und den darin ausgeführten Code, Containerabhängigkeiten und Bibliotheken, das Container-Deployment, die Anwendungsentwicklung, DevOps- und Orchestrierungsplattformen sowie die grundlegende Infrastruktur, auf der all diese Technologien arbeiten, absichern.
Zum Schutz des Unternehmens muss die Sicherheit von Containern ein zentraler Bestandteil des Entwicklungsprozesses sein, vor allem weil die Implementierung von Sicherheitsmaßnahmen nach der Bereitstellung Ihrer Containerumgebung wesentlich schwieriger ist. In diesem Artikel gehen wir näher auf die Best Practices für die Absicherung von Containern und containerisierten Anwendungen ein und erörtern die Herausforderungen bei der Absicherung der verschiedenen Containerplattformen, die auf dem Markt verfügbar sind.
Was ist ein Container?
Ein Container ist ein kleines, schlankes, standardisiertes Stück Code, das modular und portabel konzipiert ist, sodass Teams es problemlos in jeder Computerumgebung einsetzen können. Container werden so genannt, weil sie den Code einer Anwendung zusammen mit den Abhängigkeiten des Codes enthalten (engl. to contain something), die seine Ausführung ermöglichen (z. B. Systembibliotheken und verschiedene Einstellungen). Container enthalten jedoch keinen Betriebssystemcode, und sie arbeiten in einer gemeinsam genutzten Betriebssystemumgebung, was sie klein und schnell macht. Ein gewöhnlicher Container ist nur ein paar hundert Megabyte groß, während eine gewöhnliche virtuelle Maschine (die Betriebssystemcode enthält) 80 Gigabyte oder größer sein kann.
Container stellen ein Schlüsselelement bei der Entwicklung von Microservices dar, die den Code in einzelne Funktionsmodule aufteilen, die lose gekoppelt und unabhängig voneinander einsetzbar sind. Konzeptionell ermöglichen Microservices einen schnelleren Entwicklungsprozess und eine einfachere Verwaltung komplizierter Anwendungen. Die IDC (International Data Corporation) prognostizierte kürzlich, dass bis 2023 mehr als 500 Millionen neue logische Anwendungen erstellt werden – das entspricht der Anzahl der in den letzten 40 Jahren erstellten Anwendungen – und dass Container eine kritische Funktion bei diesem Trend einnehmen werden.
Die Containertechnologie wird vor allem von zwei großen Plattformen geprägt, Docker und Kubernetes. Darüber hinaus bieten alle großen Cloud-Serviceanbieter eine Reihe von Tools, die die Entwicklung, Bereitstellung und Verwaltung von Containern optimieren.
Was bringt die Containersicherheit voran?
Da sich Containerisierung zur dominierenden Umgebung für die Anwendungsbereitstellung entwickelt hat, ist der Bedarf an Sicherheitsmaßnahmen entsprechend gewachsen. Container sind auch deshalb so beliebt, weil sie weithin als sicherer als herkömmliche Anwendungen wahrgenommen werden, obwohl diesbezüglich in der Realität eigentlich kein relevanter Unterschied auszumachen ist.
Das größte Problem, das das Thema Containersicherheit so relevant macht, liegt im Wesen von Containern begründet. Zwar wird Code in Containern schneller ausgeführt, das Innenleben bleibt dabei aber relativ unsichtbar. Sicherheitsprobleme entstehen, wenn die Operations- oder Security-Teams Bedrohungen, Probleme bei der Zugriffskontrolle und andere Sicherheitsprobleme übersehen und die Containerentwickler die Problemstellen in ihrem Code nicht bemerken.
Containersicherheit gestaltet sich aufgrund der umfassenden Auswirkungen auf die Umgebung sogar noch komplexer. Sie betrifft nicht nur die Container-Laufzeit, sondern auch die Entwicklungs-, Build- und Orchestrierungsumgebungen sowie die zugehörigen Sicherheitsrichtlinien. Bei der Absicherung eines Containers, geht es darum, sicherzustellen, dass er keinen bösartigen Code enthält, und gleichzeitig das größere Ökosystem vor Angriffen zu schützen.
Warum ist Containersicherheit wichtig?
Da die Entwicklung zunehmend auf Container setzt, bekommt deren Sicherheit einen noch höheren Stellenwert. Die oben beschriebene relative Intransparenz von Containern macht die Sicherheit und die dazugehörigen Security-Tools in der Anfangsphase der Entwicklung besonders wichtig. Und da Container im Allgemeinen – und die zu ihrer Absicherung erforderlichen Techniken – relativ neu sind, müssen Sicherheitsmaßnahem in diesem Bereich von Anfang an ordnungsgemäß implementiert werden, bevor es zu einem größeren Vorfall kommt.
Sicherheit bleibt ein wichtiges Anliegen (wenn nicht sogar das wichtigste) für alle, die sich mit der Entwicklung und Bereitstellung von Containern beschäftigen. Viele sind der Meinung, dass die Containersicherheit bereits unterschätzt wurde und dass die Unternehmen diesbezüglich nun aufholen müssen. Auch wenn zahlreiche Security-Tools verfügbar sind, um die Sicherheitslage zu verbessern, fehlt bei vielen Unternehmen eine echte Containersicherheitsstrategie.
Was sind die wichtigsten Komponenten der Containersicherheit?
Containersicherheit dreht sich um fünf Schlüsselbereiche: Containerentwicklung, Container-Registries, Container Runtime-Umgebung, Containerorchestrierung sowie das zugrundeliegende Netzwerk und die Architektur.
- Containerentwicklung/Build-Umgebung: Wie bei jedem Entwicklungsprojekt stellt bösartiger oder schlecht geschriebener Code ein Sicherheitsrisiko dar, wenn er sich in das fertige Produkt einschleicht und das Unternehmen angreifbar macht. Eine weitere häufige, auf die Build-Umgebung bezogene Bedrohung ist die Verwendung von unsicheren oder veralteten Systembibliotheken – Komponenten, die oft aus alten Projekten kopiert und wiederverwendet oder, ohne Security-Fragen zu berücksichtigen, aus dem Internet heruntergeladen werden.
- Container-Registry: Container-Registries, zahlreiche Repositories, in denen Container-Images gespeichert sind, stellen einen wichtigen Aspekt der Containersicherheit dar. Sie ermöglichen es Entwicklern, ihre Images zu speichern und abzusichern und sie zugleich nach Schwachstellen zu durchsuchen. Durch die Behandlung von Container-Images als Artefakte können Unternehmen eine Unveränderlichkeit gewährleisten und ungetestete Konfigurationsänderungen in der Produktion vermeiden, die Services beeinträchtigen können. Zudem können High-Risk-Container so schneller durch gepatchte und aktualisierte Container ersetzt oder zurückgesetzt werden.
- Container-Laufzeitumgebung: Neue Arten von Sicherheitsrisiken können entstehen, sobald ein Container in der Laufzeitumgebung veröffentlicht wird. Sicherheitsrichtlinien, die das Verhalten von Containern zur Laufzeit regeln, einschließlich solcher, die Administratoren bei Verstößen benachrichtigen, sind für eine sichere Containerumgebung entscheidend. Administratoren müssen darüber hinaus die vom Container verwendeten Ressourcen verwalten und überwachen, um sicherzustellen, dass der Stack nicht angreifbar ist.
- Container-Orchestrierungsumgebung: Eine der wichtigsten Komponenten der Containersicherheit stellt die Orchestrierungsumgebung dar, nämlich Kubernetes. Aufgrund der Komplexität der Containerumgebung sind Orchestrierungstools für den reibungslosen Betrieb und die Skalierung der Umgebung unerlässlich. Diese Komplexität macht die Umgebung anfällig. Gerade die Konfigurations- und Berechtigungsverwaltung ist hier als Schwachstelle zu nennen. Und da die Umgebung über mehrere Nodes verteilt sein kann, können Angreifer jeden von ihnen einzeln angreifen.
- Zugrundeliegende Netzwerk- und Server-Infrastruktur: Zu guter Letzt ist die Infrastruktur zu nennen, auf der all die oben genannten Komponenten betrieben werden. Container stützen sich auf das Betriebssystem eines Servers oder einer virtuellen Maschine, was einen weiteren Angriffsvektor darstellt. Zu den Sicherheitsschwachstellen können unter anderem Windows- oder Linux-Server oder virtualisierte Betriebssysteminstanzen, Cloud-Service-Anbieter, Netzwerkgeräte und Geräte zur Verwaltung der Container-Umgebung gehören. Angriffe auf die zugrundeliegende Infrastruktur des Unternehmens können jede Containerplattform, die darauf läuft, beeinträchtigen.
Sind Cloud-Container sicher?
Container sind nicht per se sicherer oder unsicherer als nicht containerisierte Umgebungen, aber ihre Komplexität sorgt für diverse Sicherheitsherausforderungen, die Teams bewältigen müssen. Viele dieser Schwachstellen sind auf Konfigurationsfehler zurückzuführen: Eine aktuelle Studie von Security Boulevard ergab, dass 67% der Befragten eine schwerwiegende Fehlkonfiguration in ihrer Container- oder Kubernetes-Umgebung hatten und dass 90% der Befragten in den letzten 12 Monaten einen Sicherheitsvorfall in ihrer Container- oder Kubernetes-Umgebung erlebt haben.
Container in Cloud-nativen Umgebungen können und sollten so sicher sein wie jede andere Art von Computerinfrastruktur. Aber wie bei jedem sicherheitsrelevanten Unterfangen in der Cloud ist eine sichere Umgebung nichts, das man einfach erreicht, sondern mit immer neuem Aufwand verbunden.
Was sind Sicherheitsbedrohungen für Container?
Containerisierte Umgebungen sind oftmals einer Vielzahl von Bedrohungen ausgesetzt. Zu den gängigsten Angriffen und Schwachstellen zählen:
- Schwachstellen in Container-Images: Malware, die in Container-Images eingebettet ist, insbesondere in öffentlich zugänglichen Images, die sich in Online-Repositorys befinden, ist eine der gängigsten Container-Bedrohungen. Ein kürzlich bekannt gewordener Incident betrifft 17 öffentlich verfügbare gehackte Docker-Images, die versteckte Software zum Schürfen von Kryptowährungen enthielten. Die Nutzung von Basis-Images durch Angreifer, um eine Computer-Umgebung zu kapern und sie in ein Denial-of-Service-Zombie-Netzwerk umzuwandeln, zählt ebenfalls zu den gängigen Techniken.
- Schwachstellen bei der Authentifizierung: Zu den häufigen und zugleich problematischen Arten von Bedrohungen gegen Container-Umgebungen gehören Angriffe direkt gegen den Orchestrator. Wenn die Kubernetes-Umgebung nicht ordnungsgemäß abgesichert ist, können Angreifer mit einem kompromittierten Administratorkonto und Kennwort leicht in die Organisation eindringen. Diese Angriffe ermöglichen es ihnen, auf private Informationen zuzugreifen, bösartigen Code einzuschleusen oder Schaden anzurichten, indem sie Container innerhalb der Betriebsumgebung infizieren.
- Schwachstellen in Anwendungen: Wie bereits erwähnt, ist Container-Code immer noch Code, und mangelhafte Programmierung oder Anwendungsentwicklung (oder bösartige Injektionen) stellen erhebliche Sicherheitsrisiken für containerisierte Umgebungen dar.
- Schwachstellen im Netzwerk: Da Container untereinander und mit der Orchestrierungsumgebung über das Netzwerk kommunizieren können, sind Angriffe wie SQL-Einschleusungen und XSS-Angriffe auf Netzwerkservices für containerisierte Umgebungen genauso gefährlich wie für nicht containerisierte.
Wie unterscheiden sich Container-Sicherheitsbedrohungen von Cyber-Sicherheitsbedrohungen in einer IT-Umgebung? Wie unterscheidet sich Containersicherheit von Cybersicherheit?
Containersicherheit und die damit zusammenhängenden Lösungen für Containersicherheit stellen zusammen mit Cybersicherheit unterschiedliche Disziplinen dar und erfordern unterschiedliche Fertigkeiten. Das gilt vor allem, weil die Tools, die Teams für die Entwicklung, Verwaltung und Orchestrierung von Containern verwenden, sich von denen unterscheiden, die sie für die Verwaltung des Netzwerks einsetzen. Obwohl beide Umgebungen wahrscheinlich die Grundlage für den Containerbetrieb bilden, bedeutet Sicherheit in Kubernetes etwas ganz anderes als Sicherheit auf einem Open-Source-Linux-Server oder in einer AWS-Umgebung (Amazon Web Service).
Allerdings kann fast jede Bedrohung, die sich auf die Netzwerkumgebung des Unternehmens auswirken kann, auch eine Bedrohung für die Containerumgebung darstellen. Und ein Container ist nur dann sicher, wenn auch die Infrastruktur, auf der er läuft, sicher ist.
Sind Docker-Container sicher?
Docker nennt vier Hauptaspekte für die Sicherheit – die intrinsische Sicherheit des Kernels, die Angriffsfläche des Docker-Daemons, Container-Konfigurationsfehler oder -Schlupflöcher und Sicherheitsfunktionen für das Kernel Hardening. Wenn Sie diese Punkte beachten, sollten Ihre Docker-Container genau so sicher sein wie jede andere Art von Code.
Ist Kubernetes sicher?
Da Kubernetes ein Management- und Orchestrierungswerkzeug ist, bedeutet „Sicherheit“ etwas anderes als in der Docker-Umgebung. Kubernetes-Sicherheit dreht sich um die Server, auf denen der Kubernetes-Cluster ausgeführt wird, die Cluster-Infrastruktur sowie die Komponenten und die Konfiguration des Clusters selbst, wodurch sie näher an netzwerkbasierter Cybersicherheit liegt als an der in die Codeentwicklung eingebundenen Sicherheit. Zwar wird Kubernetes weithin als ein Tool angesehen, das die Sicherheit für containerisierte Umgebungen verbessert hat, es ist aber nur so sicher wie die Richtlinien und Prinzipien der Nutzer, die es verwalten.
Welche Best Practices bestehen für die Containersicherheit?
Es gibt mehrere Best Practices für die Containersicherheit, an denen Sie sich orientieren können, um eine solide Grundlage für Ihre Container-Verteidigungsstrategie zu schaffen.
- Stellen Sie sicher, dass alle heruntergeladenen Container-Image-Dateien vertrauenswürdig und sicher sind: Laden Sie nur Container-Images aus einer vertrauenswürdigen Quelle herunter, und stellen Sie sicher, dass alle Container, die Sie verwenden, aktuell sind und keine alten, unsicheren Komponenten enthalten. Das Docker Content Trust-System stellt eine gute Anlaufstelle für sichere und malwarefreie Container dar.
- Verringern Sie die Größe und Lebensdauer von Containern, wann immer es möglich ist: Fahren Sie Container hoch, wenn sie gebraucht werden, und legen Sie sie still, wenn sie ihren Zweck erfüllt haben. Ein Angreifer kann nicht auf einen Container zugreifen, der nicht genutzt wird. Machen Sie daher im Interesse der Sicherheit kurzlebige Container zum Standardkonzept und zum Betriepsprinzip in Ihrem Unternehmen.
- Halten Sie Container-Plattformen auf dem neuesten Stand: Es ist wichtig, Updates und Patches auszuführen, sobald sie verfügbar sind. Aktualisieren Sie Kernkomponenten wie die Docker-Engine bis zu einmal wöchentlich.
- Schaffen Sie Transparenz für den Lebenszyklus von Containern: Unternehmen können nicht reparieren, was sie nicht sehen können, daher ist es entscheidend, den gesamten Lebenszyklus eines Containers von der Definition bis zur Produktion im Blick zu haben. Automatische Schwachstellen-Scans und Pipeline-Analysefunktionen sind ebenso sinnvoll.
- Überprüfen Sie Ihre Umgebung regelmäßig: Tools wie Docker Bench for Security und Kubernetes Auditing geben Administratoren einen besseren Zugang zu Containersicherheits-Tools, die unter anderem das Auditing von Benutzeraktivitäten und Anwendungstransaktionen ermöglichen.
- Definieren Sie Containerprivilegien sorgfältig: Wenn Sie Zugriffskontrollen und Containerprivilegien nur für vertrauenswürdige Quellen definieren, können Sie Eskalationsangriffe reduzieren oder verhindern.
- Riegeln Sie Ihre Host-Umgebung ab: Wahrscheinlich ist ihre Container-Host-Umgebung, einschließlich des Host-Betriebssystems, nur für die Ausführung von Containern bestimmt und benötigt zahlreiche zusätzliche Services nicht – beispielsweise Druckservices, die anfällig für Angriffe sein könnten. Sie können zusätzliche Dienste in Ihrem Host-Betriebssystem selbst deaktivieren oder eine schlanke Distribution verwenden, die für Containerumgebungen entwickelt wurde.
- Überwachen Sie das Netzwerk in Echtzeit: Ein Angriff lässt sich trotz der präventiven Maßnahmen nicht immer verhindern. Daher ist es wichtig, die Netzwerkaktivität in Echtzeit zu überwachen, um verdächtige Verhaltensweisen zu erkennen, insbesondere solche, die APIs in Ihrer Container-Umgebung ausnutzen. Monitoring ist eine kritische Komponente jedes Containersicherheitsprozesses.
Was sind die größten Herausforderungen der Containersicherheit?
Die größten Herausforderungen bei der Containersicherheit bestehen darin, die Sicherheit zu einem integralen Bestandteil der Containerumgebung zu machen. Dies bedeutet, dass die folgenden Praktiken für die Betriebs-, Lieferketten- und Managementprozesse befolgt werden müssen:
- Sicherstellen, dass wiederverwendete Komponenten nicht kompromittiert sind, und Anwenden sicherer Entwicklungspraktiken für interne Komponenten, damit Container-Images geschützt sind
- Verwaltung von Kommunikation und Workflows zwischen Containern, um gutes Netzwerkverhalten zu fördern und Firewall-Regeln einzuhalten
- Vermeiden außer Kontrolle geratener Prozesse, indem der Funktionsumfang von Containern auf das absolut Notwendige beschränkt wird
- Aktualisierung und Stärkung aller Plattformen und Verwaltungsanwendungen gegen Angriffe
- Verfeinerung der internen Fertigkeiten in der Softwareentwicklung, sodass Entwickler und Betriebsadministratoren wissen, wie man Container absichert, und einen Angriff erkennen können, wenn er stattfindet
Wie können Entwickler Container besser absichern?
Der Wechsel zu Containern hat den Entwicklern mehr Verantwortung im Bereich Security übertragen. Folglich müssen Entwickler Zeit aufwenden, um zu lernen, was vertrauenswürdige Container-Image-Entwicklung wirklich bedeutet, wie man Code richtig prüft und wie man Taktiken zur kontinuierlichen Sicherheitsbewertung anwendet und die Angriffsfläche des gesamten Containers minimiert, indem unnötige Komponenten entfernt werden. Um die Sicherheit von Containern wirklich zu gewährleisten, müssen Entwickler einen End-to-End-Einblick in ihre gesamte Container-Umgebung haben, damit sie Malware und andere Sicherheitsbedrohungen sofort erkennen und abwehren können, bevor sie größeren Schaden anrichten. Bei strenger Beachtung einiger grundlegender Security-Best Practices und -Benchmarks können Administratoren Container so sicher machen wie jeden andere Art von Code.
Die Containersicherheit verlangt stetig mehr Aufmerksamkeit, vor allem, da die Container-Technologie in den Unternehmen immer mehr an Bedeutung gewinnt. Da eine sich entwickelnde Computerumgebung neue Bedrohungen und Schwachstellen offenbart, wird es für Sicherheitsexperten unumgänglich sein, Containersicherheit explizit in ihre Best Practices und ihre Sicherheitsüberlegungen einzubeziehen. Der Schutz der containerisierten Umgebung ist der erste Schritt zum Schutz des Unternehmens, seiner Infrastruktur und seiner Kunden.
Die 5 grundlegenden DevOps-Praktiken
Was unterscheidet erfolgreiche DevOps-Teams von denen, die scheitern? Ganz einfach: Diese 5 grundlegenden Praktiken.