Container sind überall: Wie sichert man sie?
Container werden jeden Tag immer zahlreicher und scheinen überall zu sein, da Unternehmen bestrebt sind, die vielen Vorteile zu nutzen, die sie bieten, wie z. B. die agile Anwendungsentwicklung und Bereitstellung auf allen Plattformen.
Viele glauben auch, dass die Verwendung von Containern aufgrund ihrer Kurzlebigkeit dazu beitragen kann, Sicherheitsbeschränkungen zu minimieren. Ist das wahr oder nur ein weiterer Irrglaube?
Obwohl Container keine inhärenten Unsicherheiten aufweisen, werden sie oft auf unsichere Weise bereitgestellt, was zu zahlreichen Sicherheitsherausforderungen führt.
Sicherheitsherausforderungen beim Bereitstellen von Containern
Die schiere Anzahl, Vielseitigkeit und der kurzlebige Zustand der bereitgestellten Container sowie die Tatsache, dass Container mit anderen Entitäten kommunizieren müssen, führen dazu, dass Unternehmen nicht in der Lage sind, eine angemessene Sichtbarkeit des Verkehrs zwischen den Containern zu besitzen.
Aufgrund dieses Mangels an Transparenz werden Container oft vergessen, und Intrusion-Prevention-Maßnahmen und Sicherheitskontrollen werden unwirksam, was die Angriffsfläche und damit das gesamte Geschäftsrisiko erhöht. Darüber hinaus kann der Mangel an Transparenz zu einem Mangel an Rechenschaftspflicht führen, da Container verschiedene Umgebungen von der Entwicklung bis zur Produktion durchlaufen.
Eine weitere Sicherheitsherausforderung im Zusammenhang mit Containern ist ein schlechtes Schwachstellenmanagement. Wenn Sie beispielsweise vorhandene Images klonen, um neue Container zu erstellen, werden deren Schwachstellen ebenfalls repliziert.
Dies unterstreicht die Notwendigkeit, dass Sicherheit ein integraler Bestandteil der organisatorischen Containerstrategie sein muss. Andernfalls können Konfigurationsfehler und fehlende Patches der Grund dafür sein, dass nicht autorisierte Images in Produktionsumgebungen bereitgestellt und ausgeführt werden, was zu einer größeren Angriffsfläche und erfolgreicheren Angriffen führt.
Da Container schließlich einen gemeinsam genutzten Betriebssystemkern verwenden, kann eine Kompromittierung des Host-Betriebssystemkerns durch einen Rogue-Container zu einem Verlust des Zugriffs auf alle oder einige laufende Container auf dem Host führen, ebenso wie möglicherweise auf andere Hosts im Netzwerk.
So sichern Sie Ihre Container
Vielleicht besteht die beste Vorgehensweise zum Sichern Ihrer containerisierten Umgebung darin, die Notwendigkeit anzuerkennen. Abgesehen von diesem grundlegenden Konzept gibt es einige gute Ratschläge, die Sie befolgen sollten, um Ihre Container effektiv zu sichern.
Haben Sie Einblick in Ihre Container
Stellen Sie vor der Bereitstellung eines Containers sicher, dass Sie dessen Abhängigkeiten und deren Inhalt verstehen. Um sicherzustellen, dass Ihre Container-Images makellos sind, müssen Sie in jeder Phase von der Entwicklung bis zur Produktion für Transparenz sorgen.
Der Software eines Containers nicht zu vertrauen, ist ein guter Ausgangspunkt. Sie müssen es sehr gründlich prüfen, um zu verstehen, „woher sie kommen, wie sie produziert wurden und welche Quellen sie haben“, wie Dirk Hohndel, Vice President bei VMware, auf dem Open Source Leadership Summit 2019 betonte .
Kurz gesagt, überprüfen Sie den Inhalt Ihrer Container, bevor Sie sie bereitstellen, und führen Sie niemals einen Container mit unbekannter oder veralteter Software aus. Nur weil ein Container-Image behauptet, die neuesten und besten Programme und Bibliotheken zu enthalten, heißt das noch lange nicht, dass dies auch der Fall ist.
Eine Möglichkeit, dieses Problem zu entschärfen, besteht darin, Anwendungen zu verwenden, die Ihnen beim Bereinigen Ihrer Container helfen können. Obwohl ich das Rad nicht gerne neu erfinde, ist es vielleicht am besten, die Container-Images anderer Leute nicht mehr zu verwenden.
Wenn Sie, genau wie Hercules, den schwierigeren Weg von Virtue gehen und anfangen, Ihre eigenen Container-Images zu erstellen, werden Sie ein viel besseres Verständnis dafür haben, was in den Containern vor sich geht, was Vorteile hat, die über die Sicherheit hinausgehen.
Kontrollieren Sie den Root-Zugriff
Die meisten Container werden standardmäßig mit Root-Zugriff erstellt. Dies ist jedoch eine fragwürdige Praxis. Obwohl es für Entwickler einfacher ist, Container als Root auszuführen, birgt der Root-Zugriff enorme Risiken.
Es gibt mehrere Ansätze, um dieses Problem zu lösen. Eine Möglichkeit besteht darin, eine Unternehmensrichtlinie festzulegen, die besagt, dass Container niemals als Root ausgeführt werden dürfen. Eine alternative Möglichkeit besteht darin, das Prinzip der geringsten Privilegien anzuwenden. Sie können einen Nicht-Root-Benutzer innerhalb der Dockerfile angeben, wenn Sie ein Container-Image erstellen, um den Container als diesen bestimmten Benutzer mit dem minimal erforderlichen Systemzugriff auszuführen.
Schließlich können Sie auch den Benutzernamensraum verwenden, wenn Sie privilegierte Containerprozesse ausführen, um sichere Container zu unterstützen. Bei dieser Methode ist die UID zum Ausführen dieser Prozesse innerhalb des Containers null (das ist die Wurzel), aber außerhalb des Containers ist die UID die unprivilegierte 1000.
Überprüfen Sie die Laufzeit des Containers
Der SP 800-190 „ Application Container Security Guide “ des National Institute of Standards and Technology (NIST) weist darauf hin, dass Containerlaufzeiten ebenfalls anfällig für Angriffe sind. Obwohl dies keine häufige Sicherheitslücke ist, weist NIST darauf hin, dass Sicherheitslücken in der Containerlaufzeit „ besonders gefährlich “ sein können, wenn sie Szenarien zulassen, in denen bösartige Software Ressourcen in anderen Containern und das Host-Betriebssystem selbst angreifen kann.
Ein Angreifer kann auch Schwachstellen ausnutzen, um die Laufzeitsoftware selbst zu kompromittieren, und diese Software dann so ändern, dass sie dem Angreifer den Zugriff auf andere Container ermöglicht, die Kommunikation von Container zu Container überwacht usw.
Sicherheitsprobleme treten weitaus häufiger bei Laufzeitkonfigurationen auf. Containerlaufzeiten stellen normalerweise viele konfigurierbare Optionen bereit. Eine unsachgemäße Einstellung kann die relative Sicherheit des Systems verringern.
Auf Linux-Container-Hosts ist beispielsweise der Satz zulässiger Systemaufrufe standardmäßig nur auf diejenigen beschränkt, die für den sicheren Betrieb von Containern erforderlich sind. Wenn diese Liste erweitert wird, können Container und das Host-Betriebssystem einem erhöhten Risiko durch einen kompromittierten Container ausgesetzt werden.
Wenn ein Container im privilegierten Modus ausgeführt wird, hat er auf ähnliche Weise Zugriff auf alle Geräte auf dem Host, sodass er im Wesentlichen als Teil des Host-Betriebssystems fungieren und alle anderen darauf ausgeführten Container beeinflussen kann.
Ein weiteres Beispiel für eine unsichere Laufzeitkonfiguration besteht darin, Containern zu erlauben, vertrauliche Verzeichnisse auf dem Host bereitzustellen. Wenn ein kompromittierter Container Änderungen an diesen Pfaden vornehmen kann, könnte er verwendet werden, um Berechtigungen zu erhöhen und den Host selbst sowie andere Container anzugreifen, die auf dem Host ausgeführt werden.
Härten Sie das Betriebssystem
NIST empfiehlt außerdem , ein containerspezifisches Betriebssystem auszuführen, da die Bedrohungen normalerweise minimaler sind, da die Betriebssysteme speziell für das Hosten von Containern entwickelt wurden und andere Dienste und Funktionen deaktiviert sind.
Da diese optimierten Betriebssysteme außerdem speziell für das Hosten von Containern entwickelt wurden, verfügen sie in der Regel über schreibgeschützte Dateisysteme und verwenden standardmäßig andere Härtungspraktiken. Wann immer möglich, sollten Unternehmen diese minimalistischen Betriebssysteme verwenden, um ihre Angriffsflächen zu reduzieren und die typischen Risiken und Härtungsaktivitäten zu mindern, die mit Allzweck-Betriebssystemen verbunden sind.
Organisationen, die kein containerspezifisches Betriebssystem verwenden können, sollten die Anleitung in NIST SP 800-123, Guide to General Server Security befolgen, um die Angriffsfläche ihrer Hosts so weit wie möglich zu reduzieren.
Beispielsweise sollten Hosts, die Container ausführen, nur Container ausführen und keine anderen Apps, wie einen Webserver oder eine Datenbank, außerhalb von Containern ausführen. Das Host-Betriebssystem sollte keine unnötigen Systemdienste ausführen, wie z. B. einen Druckspooler, der seine Angriffsfläche vergrößert.
Schließlich sollten Hosts kontinuierlich auf Schwachstellen gescannt und Updates schnell angewendet werden, nicht nur für die Container-Laufzeit, sondern auch für untergeordnete Komponenten wie den Kernel, auf den Container für einen sicheren, unterteilten Betrieb angewiesen sind.
Containersicherheit hat höchste Priorität
Da immer mehr Unternehmen Container einführen und bereitstellen, wird ihre Sicherheit zu einer obersten Geschäftspriorität. Laut einer kürzlich durchgeführten Umfrage haben 94 % der Befragten einen Sicherheitsvorfall in ihren Containerumgebungen erlebt. Dies unterstreicht nur, wie wichtig es ist, Containersicherheitsrechte zu erlangen, um Ihr Unternehmen und Ihre Kunden zu schützen.