Docker-Registries: öffentlich oder privat?

Docker-Registries können öffentlich und privat betrieben werden

Eine Frage der Vertrauenswürdigkeit. Und der Sicherheit.

Öffentlichen Docker-Registries zu vertrauen, ohne gewissen Mindeststandards in Sachen Sicherheit überprüft zu haben, das ist wie russisches Roulette spielen. Doch bevor wir über die in Fachkreisen bekannten Sicherheitsrisiken öffentlicher Docker-Registries berichten, sollten Sie wissen, was eine Docker-Registry überhaupt ist und wozu man sie braucht. Danach erfahren Sie aus der Kathegorie „Pleiten, Pech und Pannen“, warum der Gedanke an eine private Registry naheliegt, worauf Sie dabei achten sollten und wie so etwas funktioniert.

Falls Sie von „Docker“ schon mal was gehört haben, aber nicht ganz so genau wissen, was das eigentlich ist, dann empfehlen wir die folgenden zwei Beiträge für den Einstieg:

Auch der Beitrag Docker (Software) bei Wikipedia ist hier übrigens lesenswert. Wenn Sie mit dem Docker-Prinzip hinreichend auseinander gesetzt haben und Sie (gemeinsam mit Ihrer Agentur) mit dem Gedanken spielen, damit zukünftig arbeiten zu wollen, dann brauchen Sie eine Docker-Registry. Wir stellen Ihnen als erstes das Prinzip einer Docker-Registry vor. Danach erfahren Sie, warum bei öffentlichen Docker-Registries Vorsicht geboten ist und welche Lösungen es hier gibt.

Was ist eine (öffentliche) Docker-Registry?

Eine Docker-Registry ist ein Speicher- und Verteilungssystem für Docker-Images und wird in Docker-Repositories organisiert. Hier kann ein und dasselbe Image kann mehrere verschiedene Versionen haben. Diese sind die durch ihre jeweiligen „Tags“ (beschreibende Namen bzw. Aliase eines Images). Das Repository enthält alle Versionen dieses bestimmten Images. Die Registry als übergeordnete Instanz ermöglicht den Docker-Benutzern, Images abzurufen und neue Images in die Registry zu pushen, ggf. mit entsprechenden Zugriffsberechtigungen.

Der Standard: DockerHub

Das Ganze läuft auf einer sogenannten Docker-Engine, welche standardmäßig mit DockerHub interagiert, der öffentlichen Registry-Instanz von Docker. Es ist jedoch auch möglich, die Open-Source-Registry/Distribution von Docker sowie eine kommerziell unterstützte Version namens Docker Trusted Registry lokal auszuführen.

Weitere öffentliche Docker-Registries

Hier eine Liste von weiteren öffentlichen Docker-Registries, die online verfügbar sind:

  • https://hub.docker.com
    ist eine gehostete Registry-Lösung von Docker Inc. Neben öffentlichen und privaten Repositories bietet sie auch automatisierte Builds, Organisationskonten und die Integration mit Source-Control-Lösungen wie Github und Bitbucket.
  • https://aws.amazon.com/de/ecr
    integriert mit dem AWS Identity and Access Management (IAM) Service für die Authentifizierung. Es unterstützt nur private Repositorys und bietet keine automatische Image-Erstellung.
  • https://cloud.google.com/container-registry
    Die Authentifizierung basiert auf den Berechtigungen des Cloud-Speicherdienstes von Google. Es unterstützt nur private Repositories und bietet automatisierte Image-Builds über die Integration mit Google Cloud Source Repositories, GitHub und Bitbucket.
  • https://azure.microsoft.com/en-us/services/container-registry
    unterstützt Registraturen für mehrere Regionen und authentifiziert sich mit Active Directory. Es unterstützt nur private Repositories und bietet keine automatische Image-Erstellung.
  • https://quay.io
    unterstützt OAuth und LDAP-Authentifizierung. Es bietet sowohl (kostenpflichtige) private als auch (kostenlose) öffentliche Repositories, automatische Sicherheitsüberprüfungen und automatisierte Image-Builds über die Integration mit GitLab, GitHub und Bitbucket.
  • https://private-docker-registry.com
    unterstützt OAuth, LDAP und Active Directory-Authentifizierung. Es bietet sowohl private als auch öffentliche Repositories, kostenlos bis zu 3 Repositories (privat oder öffentlich).

Öffentliche Docker-Registries und ihr Risiko-Potenzial

Im Sommer 2018 war es Unbekannten gelungen, Docker-Container mit einer Hintertür zu versehen. Danach gelang es den Hackern, das Mining einer Kryptowährung Namens „Monero“ zu starten, indem sie als Nutzer „docker123321″17 infizierte Pakete ins Netz stellten (siehe heise.de-Beitrag vom 15.06.18). Diese wurden insgesamt 5 Millionen Mal heruntergeladen und somit insgesamt 58.000 Euro auf Kosten der vertrauensseligen Docker-User geschürft. Erste Berichte über infizierte Images gab es bereits im Juli 2017, allerdings reagierte der Docker Hub nicht. Die schadhaften Images wurden erst entfernt, nachdem das Sicherheitsunternehmen Kromtech einen Bericht dazu veröffentlichte. Im Sommer 2020 wurde ein weiterer Fall bekannt, bei dem Unbekannte infizierte Pakete hochgeladen hatten. Diese wurden zwei Millionen Mal heruntergeladen und es wurde ein Wert von rund 36.000 US-Dollar in der Kryptowährung Monero geschürft.

Datenleck direkt an der Quelle

Am 27. April 2019 teilte Ken Lamb vom Docker-Hub-Team der Öffentlichkeit mit (siehe heise.de), dass sich unbekannte Täter Zugriff auf eine interne Datenbank der Plattform Docker verschafft hatten, in der vertrauliche Informationen gespeichert sind. Rund 190.000 Accounts waren betroffen. Nutzernamen und codierte Passwörtern waren ebeso offengelegt wie sogenannte Github- und Bitbucket-Tokens für Docker Autobuilds. Das sind interne Werkzeuge, die das Erstellen und Bearbeiten von Docker-Images erleichtern und beschleunigen. Betroffen waren knapp 5% der Hub-Anwender, dank der kurzfristigen Veröffentlichung der Sicherheitslücke und der schnellen Reaktion der Betroffenen wuchs sich das Problem nicht aus. Aber auch dieser Vorfall zeigt, dass der sichere Betrieb einer öffentlichen Docker-Registry alles andere als einfach ist.

Welche Sicherheitsprobleme gibt es noch?

In einem gesonderten Beitrag haben wir uns mit dem Thema „Docker Sicherheitsprobleme“ beschäftigt. Hier geht es auch um Sicherheitsfragen, welche die Systemarchitektur aufruft und wie Sie ihnen begegnen können.

Eine Lösung: die Private Docker-Registry

Eine Private Docker-Registry erfüllt besondere Bedingungen hinsichtlich des Schutzes der bereitgestellten Docker-Images. Diese kommen aus einer vertrauenswürdigen oder mehreren vertrauenswürdigen Quellen. Die Registry ist durch besondere technische und organisatorische Massnahmen gegen Korrumption der Docker-Images geschützt. Dies kann beispielsweise durch limitierten Zugriffs-Schutz oder eine sehr restriktive Rechtevergabe realisiert werden. Vor diesem Hintergrund ist klar: Der Betrieb eines sogenannten private Repository in einer öffentlichen Docker-Registry erfüllt keineswegs die Ansprüche an eine echte Private Docker-Registry.

Was spricht für private Docker-Registries?

Die öffentlichen Docker-Registries betreibt die Docker Inc sowie auch verschiedene andere private Unternehmen, welche über die technische Kompetenz oder/und Ressourcen verfügen. Das Thema Sicherheit steht dabei eher im Hintergrund, und zwar zugunsten einer leichteren Zugänglichkeit und Marketing-orientierten Kriterien. Zusätzlich ist die unterschiedliche Qualifikationstiefe der Akteure ein Problem. Deshalb sind in der Vergangenheit auch immer wieder kompromitierte Docker-Images in den Umlauf gekommen.