Die 20 wichtigsten Sicherheitspraktiken für Docker-Container

Amir Jerbi, CTO und Mitbegründer von Aqua Security, stellt die 20 besten Best Practices für Docker-Sicherheit vor.
Amir Jerbi, CTO und Mitgründer, Aqua Sicherheit, skizziert die Top 20 Best Practices für Docker-Sicherheit.

Docker-Sicherheit wird seit langem mit Containerisierung in Verbindung gebracht, und die grundlegenden Anforderungen zum Erstellen neuer sicherer containerbasierter Anwendungen, die sich aus der Docker-Sicherheit ergeben, werden auch heute noch auf neuere Plattformen angewendet. Dieser Leitfaden stellt die 20 wesentlichen Docker-/Container-Sicherheitspraktiken bereit, um Benutzern beim Erstellen ihrer eigenen sicheren Container zu helfen. 

Docker- und Hostkonfiguration 

1. Aktualisieren Sie Host und Docker-Engine regelmäßig 

Um Schwachstellen innerhalb einer Docker-Laufumgebung zu reduzieren, müssen sowohl die Docker-Engine als auch das zugrunde liegende Host-Betriebssystem, auf dem Docker ausgeführt wird, regelmäßig aktualisiert werden.  

2. Schützen Sie den Daemon-Socket  

Der Docker-Client kommuniziert mit dem Docker-Daemon über einen lokalen UNIX-Socket – /var/run/docker.sock. Es gehört dem Root-Benutzer, aber wenn es offengelegt wird, hat jeder, der darauf zugreift, Berechtigungen, die dem Root-Zugriff auf den Host entsprechen.  

Stellen Sie den Daemon-Socket niemals für Remote-Verbindungen zur Verfügung. Vermeiden Sie es, Docker-Images mit einer Option wie -v /var/run/docker.sock://var/run/docker.sock auszuführen, da diese den Socket offenlegen.  

3. Vermeiden Sie die Ausführung privilegierter Container 

Das Ausführen eines Containers mit dem Flag „–privilegiert“ stellt diesem Container alle Kernel-Funktionen zur Verfügung. Privilegierte Container stellen ein Sicherheitsrisiko dar, das Angreifern den Zugriff auf den Host ermöglicht.  

4. Verwenden Sie den Rootless-Modus  

Im Gegensatz zum privilegierten Modus ist der „Rootless-Modus“ von Docker ein Vorteil. Indem Container und Docker-Daemons mit Nicht-Root-Benutzern ausgeführt werden können, führt der Rootless-Modus Daemons und Container standardmäßig ohne Root-Rechte aus. Dies hilft, die Schwachstellen in der Laufzeit zu reduzieren.  
 

5. Legen Sie Ressourcenkontingente fest  

Bedrohungsakteure versuchen häufig, auf die zugrunde liegenden Hostressourcen eines Containers zuzugreifen, sobald dieser kompromittiert wurde. Das Festlegen von Ressourcenkontingenten begrenzt potenziellen Schaden, indem die Ressourcen reduziert werden, die der Container verwenden kann. Docker-Speicher- und CPU-Nutzungsbeschränkungen sollten ebenfalls minimiert werden.  

6. Verlassen Sie sich nicht auf das Standard-Bridge-Netzwerk 

Anstatt sich für neue Container auf das standardmäßige Bridge-Netzwerk zu verlassen, ist es besser, benutzerdefinierte Bridge-Netzwerke zu erstellen, die ein größeres Maß an Kontrolle darüber ermöglichen, welche Container zwischen ihnen kommunizieren können. Die Anzahl der zu erstellenden Netzwerke ist unbegrenzt und jedes kann angepasst werden, um bestimmte Verbindungen zuzulassen.  

7. Verbesserung der Containerisolation 

Betriebsteams sollten eine optimierte Umgebung zum Ausführen von Containern erstellen. Idealerweise sollte das Betriebssystem auf einem Container-Host den Host-Kernel vor Container-Escapes schützen und eine gegenseitige Beeinflussung zwischen Containern verhindern.  

8. Stellen Sie Container auf schreibgeschützt ein 

Ein einfacher Sicherheitstrick besteht darin, das Dateisystem und die Volumes auf schreibgeschützt zu setzen. Dies verhindert böswillige Aktivitäten wie das Manipulieren der Konfiguration des Containers. 

9. Beschränken Sie Systemaufrufe  

In einem Container können Sie Systemaufrufe zulassen oder ablehnen. Nicht alle Systemaufrufe sind erforderlich, um einen Container auszuführen. 

Sie können den Container überwachen, eine Liste aller getätigten Systemaufrufe erhalten und diese Aufrufe explizit zulassen und keine anderen. Es ist wichtig, Ihre Konfiguration auf die Beobachtung des Containers zur Laufzeit zu stützen, da Sie möglicherweise nicht wissen, welche spezifischen Systemaufrufe von den Komponenten Ihres Containers verwendet werden und wie diese Aufrufe im zugrunde liegenden Betriebssystem benannt sind. 

10. Wartung über den gesamten Lebenszyklus 

In jeder Phase des Anwendungslebenszyklus ist es wichtig, Sicherheitskontrollen und Minderungstechniken zu implementieren, um die Sicherheit zu verbessern. Erwägen Sie, das Patchen zu automatisieren, und testen Sie während des gesamten Entwicklungslebenszyklus auf Schwachstellen. Das Erstellen einer Sandbox-Umgebung für QA-Code vor der Produktion kann das Auftreten von Schwachstellen in der Laufzeit reduzieren. Aktivieren Sie schließlich umfassende forensische Tools, um die Fehlerbehebung zu optimieren und eine schnelle Behebung im Falle eines Angriffs sicherzustellen. 

Bilder sichern 

11. Verwenden Sie minimale Basisimages 

Stellen Sie bei der Auswahl von Basisimages sicher, dass sie die Anforderungen des Projekts erfüllen. Versuchen Sie nach Möglichkeit, ein eindeutiges minimales Basisimage anzupassen, um die Angriffsfläche zu reduzieren. Zusätzliche Elemente zu Basisbildern können Angreifern mehr Raum für den Zugriff lassen.  

12. Testen und verifizieren Sie Container-Images  

Docker-Images müssen vor der Verwendung getestet werden, insbesondere wenn sie ursprünglich aus öffentlichen Quellen stammen, was mit Risiken verbunden sein kann. Schwachstellen in einem Basis-Image werden in neue Images übertragen, die aus diesem Basis-Image erstellt werden, die dann während der Laufzeit des Containers anfällig für Angriffe sind.  

Stellen Sie bei der Auswahl aus zahlreichen Open-Source-Scannern sicher, dass der Scanner dieselbe Sprache wie die Elemente eines Bildes verwendet. Container-Scan-Tools verwenden häufig mehrere Common Vulnerability and Exposure (CVE)-Datenbanken, um zu testen, ob CVEs in einem Container-Image vorhanden sind.  

13. Verwenden Sie feste Tags  

Tags werden verwendet, um verschiedene Versionen von Docker-Images anzugeben, um deutlich zu machen, welche Version die neueste ist und welche früher erschienen sind. Die Versionskontrolle kann jedoch verwirrend werden, da die Tags geändert werden können, was bedeutet, dass mehrere Bilder dasselbe Tag haben können. Das Ergebnis ist, dass automatisierte Builds gestört werden können.  

Um sicherzustellen, dass die Tags unverändert bleiben, sollten Sie die Verwendung eines privaten Schlüssels zum kryptografischen Signieren von Bildern in Betracht ziehen, um sicherzustellen, dass keine Änderungen am Bild oder Tag vorgenommen werden. Oder speichern Sie eine Kopie des Bildes in einem privaten Repository, auf das verwiesen werden kann, wenn eine Überprüfung erforderlich ist. Verwenden Sie schließlich detailliertere Tags, die beispielsweise sowohl das Betriebssystem als auch die Version enthalten.  

14. Seien Sie vorsichtig mit Docker-Bildern und vertraulichen Informationen  

Docker-Images benötigen häufig Daten wie Anmeldeinformationen, TLS-Zertifikate, Datenbanknamen oder SSH-Schlüssel. Sensible Daten können auch von Anwendungen generiert oder gespeichert werden, die in einem Container ausgeführt werden. Diese Informationen sollten niemals fest in die Dockerfile codiert werden, da sie in Container-Zwischenschichten gespeichert werden können. Auch wenn der Container gelöscht wird, können die Informationen also immer noch kopiert werden. Es gibt eine Lösung – Secrets Management-Funktion, mit der sensible Daten zur Laufzeit verwaltet werden können, ohne im Quellcode oder Image gespeichert zu werden.  

15. Verwenden Sie private Register  
 

Öffentliche Containerregistrierungen sind praktisch, aber sie bergen auch Sicherheitsrisiken und könnten unbeabsichtigt oder absichtlich kompromittiert werden. Eine private Registrierung, die hinter der Firewall des Unternehmens und mit rollenbasierter Zugriffskontrolle (RBAC) bereitgestellt wird, um einzuschränken, welche Benutzer Bilder hoch- und herunterladen können, ist sicherer. 

16. Verwenden Sie mehrstufige Builds 

Mehrstufige Builds sind effizient und sicher. Das Erstellen containerisierter Anwendungen auf diese Weise erhöht die Kontrolle über Dateien und Artefakte, die in ein Container-Image aufgenommen werden, und erschwert es Angreifern, böswillige Artefakte ohne Erlaubnis hinzuzufügen.  

Behälterüberwachung  

17. Überwachen Sie die Containeraktivität  

Effiziente Steuerung und klare Überwachung sind wichtig, um containerisierte Anwendungen mit optimaler Leistung auszuführen. Dedizierte Cloud-native Überwachungstools sind am besten geeignet, um nach Unregelmäßigkeiten zu suchen, um dann fehlerhafte Bilder zu korrigieren und neu zu erstellen.   

18. Implementieren Sie Laufzeitsicherheit 

Implementieren Sie Drift-Prevention-Maßnahmen, um Angriffe zur Laufzeit zu stoppen und Zero-Day-Exploits zu verhindern. Workloads sind ein wichtiges Ziel für Hacker, daher stellt die Sicherung der Workload mit Laufzeitsicherheit für Docker-Container sicher, dass ein Abdriften nicht möglich ist, sobald der Container ausgeführt wird, und blockiert sofort alle böswilligen Aktionen.  

19. Pflegen Sie Container ohne direkten Zugriff 

Schwachstellen können entstehen, wenn IT-Teams für jede Wartungsaufgabe über SSH auf Container zugreifen. Stattdessen sollten Teams Protokolle außerhalb des zu wartenden Containers verfügbar machen, ohne direkten Zugriff zu benötigen. Dadurch wird der SSH-Zugriff eingeschränkt, während Administratoren weiterhin die Möglichkeit haben, Container zu beheben und zu ersetzen.  

WEITERLESEN:

20. Verwenden Sie Metadaten    

Die Kennzeichnung wird verwendet, um Container zu organisieren und weitere Details zu Containern hinzuzufügen, einschließlich Autoren, Lizenzdetails, Herkunft und Geschichte des Containers. Um Beschriftungsfehler zu vermeiden, sollten Sie die Verwendung einer automatisierten Beschriftung in Betracht ziehen und die Benutzerberechtigungen einschränken, wenn Sie festlegen, wer Beschriftungen ändern und zuweisen kann. 

Vergessen Sie nicht, unser tägliches Bulletin zu abonnieren, um weitere Neuigkeiten von Top Business Tech zu erhalten!

Folge uns auf  LinkedIn und Twitter

Amber Donovan-Stevens

Amber ist Inhaltsredakteurin bei Top Business Tech