Auch wenn in Containern gekapselte Prozesse auf demselben Kernel laufen, nutzt Docker eine Reihe von Isolationstechniken, um diese voneinander abzuschirmen. Im Fokus stehen dabei Kernfunktionen des Linux-Kernels wie Cgroups und Namespaces. Jeder Container bekommt einen eigenen Hostnamen, eigene Prozess-IDs und eine eigene Netzwerkschnittstelle. Darüber hinaus sieht jeder Container nur den ihm zugeordneten Ausschnitt des Dateisystems. Die Aufteilung der Systemressourcen wie Speicher, CPU und Netzbandbreite erfolgt über einen Cgroup-Mechanismus. Dieser sorgt dafür, dass jeder Container lediglich das ihm zugeschriebene Kontingent in Anspruch nehmen kann.
Dennoch bieten Container nicht denselben Isolationsgrad, der sich mithilfe virtueller Maschinen realisieren lässt. Kapert ein Angreifer eine virtuelle Maschine, hat dieser kaum Möglichkeiten, mit dem Kernel des zugrundeliegenden Hostsystems zu interagieren. Container als gekapselte Instanzen eines gemeinsamen Host-Kernels hingegen bieten Angreifern deutlich mehr Freiheiten.
Trotz der beschriebenen Isolationstechniken lassen sich aus Containern heraus wichtige Kernel-Subsysteme wie Cgroups sowie Kernelschnittstellen in den Verzeichnissen /sys und /proc erreichen. Diese bieten Angreifern die Möglichkeit, Sicherheitsfunktionen des Hosts zu umgehen. Zudem laufen alle Container auf einem Host-System im selben User-Namespace. Dies hat zur Folge, dass ein Container, der Root-Rechte zugesprochen bekommt, diese auch bei der Interaktion mit dem Host-Kernel behält. Administratoren sollten daher darauf achten, dass Container ausschließlich mit eingeschränkten Rechten starten.
Über Root-Rechte verfügt zudem der Docker-Daemon, der für die Verwaltung der Container auf dem Host-System zuständig ist. Ein Nutzer, der Zugriff auf den Docker-Daemon hat, erhält automatisch Zugriff auf alle Verzeichnisse, auf die der Daemon zugreifen kann, sowie die Möglichkeit, über eine REST-API via HTTP zu kommunizieren. Die Docker-Dokumentation empfiehlt daher, nur vertrauenswürdigen Nutzern Zugriff auf den Daemon zu gewähren.
Auch das Docker-Entwicklungsteam hat die genannten Sicherheitsbedenken als Bremse für die Etablierung der Container-Technologie auf Produktivsystemen erkannt. Neben den grundlegenden Isolationstechniken des Linux-Kernels unterstützen neuere Versionen der Docker-Engine daher die Frameworks AppArmor, SELinux und Seccomp, die als eine Art Firewall für Kernel-Ressourcen fungieren.
- AppArmor: Mit AppArmor lassen sich Zugriffsrechte von Containern auf das Dateisystem reglementieren.
- SELinux: SELinux bietet ein komplexes Regelsystem, mit dem Zugriffskontrollen auf Kernel-Ressourcen implementiert werden können.
- Seccomp: Mit Seccomp (Secure Computing Mode) wird der Aufruf von Systemcalls überwacht.
Darüber hinaus nutzt Docker sogenannte Linux-Capabilities, über die sich die Root-Rechte einschränken lassen, mit denen die Docker-Engine Container startet.
Weitere Sicherheitsbedenken bestehen zudem in Bezug auf Software-Schwachstellen innerhalb von Anwendungskomponenten, die über die Docker-Registry verbreitet werden. Da prinzipiell jeder Docker-Images erstellen und für die Community öffentlich zugänglich im Docker-Hub ablegen kann, besteht die Gefahr, schädlichen Code im Rahmen eines Image-Downloads ins eigene System einzuführen. Docker-Nutzer sollten daher vor dem Deployment einer Anwendung sicherstellen, dass der gesamte Code, der in einem Image zur Ausführung von Containern bereitgestellt wird, aus einer vertrauenswürdigen Quelle stammt. Docker bietet dafür im Rahmen der Enterprise-Edition (EE) der Container-Plattform seit Anfang 2017 ein Zertifizierungsprogramm an, über das Infrastruktur-, Container- und Plug-in-Anbieter Ihre Software prüfen und auszeichnen lassen können. Um ein Zertifikat zu erhalten, müssen folgende Voraussetzungen erfüllt sein:
- Infrastruktur-Zertifizierung: Software-Entwickler, die zertifizierte Infrastruktur-Komponenten für das Docker-Ökosystem bereitstellen möchten, müssen mithilfe entsprechender Tests nachweisen, dass ihr Produkt für eine Zusammenarbeit mit der Docker-Plattform optimiert wurde.
- Container-Zertifizierung: Ein Container wird nur dann mit dem offiziellen Docker-Zertifikat ausgezeichnet, wenn dieser gemäß Best Practices erstellt wurde und sämtliche Software-Tests, Schwachstellen-Checks und Sicherheitsüberprüfungen bestanden hat.
- Plug-ins: Ein Plug-in für Docker EE darf sich mit dem Docker-Zertifikat schmücken, wenn es gemäß Best Practices entwickelt wurde und sämtliche API-Compliance-Tests und Schwachstellen-Checks bestanden hat.
Neben einem Zugewinn an Sicherheit für Anwender sollen Docker-Zertifikate Software-Entwicklern eine Möglichkeit bieten, sich mit ihren Projekten von der Vielzahl der zur Verfügung stehenden Ressourcen abzuheben.