Jump to content

[SOLVED] Sicherheitsfragen bezüglich Docker


drchef

Recommended Posts

Hallo lieber Unraid-Community,

 

erstmal sorry. Ich weiß, ich bin mit meinem Anliegen nicht im richtigen Forum. Es geht allgemein um Docker. Mein Problem ist, dass es kein deutschsprachiges Dockerforum gefunden habe. Ich bin zu euch gekommen, weil ich glaube, die Unraid-Community kann mir auch weiterhelfen. ;)

 

Mein Setup:

- Pi 3b+

- Archlinux 64-Bit

- Traefik

 

Ich habe ein paar Fragen zu Sicherheit meiner Container. Ich nutze natürlich für jede Service einen eigenen Stack und arbeite ausschließlich mit docker-compose. Klassisches Beispiel ist ja immer, eine docker-compose.yaml mit zwei Container, einmal die App und einmal die DB. Benötigt ein Service mehr als einen Container, so benutze ich eigene Subnetze dafür. Jeder Container, der von außen erreichbar sein soll, ist im selben Subnetz wie der Traefik-Proxy. Soweit so Standard ;)

 

Jetzt frage ich mich, was es bringt soviele Subnetze zu nutzen. Zwar bleiben die broadcast-Nachrichten immer innerhalb des Subnetztes (die Container sehen sich nicht), aber dennoch ist doch jeder Container von jedem Container erreichbar? Der dockerd routed doch unter den Subnetzen? Wenn ein Container angegriffen wurde, muss er doch nur jeder mögliche private IPv4 Adresse pingen und sieht die komplette Infrastruktur und kann gezielt Container angreifen? Broadcast nicht nötig.

Auch wenn ich keine Ports expose, so sind doch immer alle offenen Ports der Container mit der Container-IP erreichbar/angreifbar? Port-exposen heißt doch nur, den Port über die host-IP erreichbar zu machen.

Habe ich irgendwo einen Denkfehler? Oder warum immer alles in eigene Subnetze?

 

Auch ist ja der Netzwerkverkehr zwischen Traefik und den Services nicht SSL verschlüsselt. SSL macht Traefik ja nur nach außen. Also falls jemand root Zugriff auf dem Pi hat, dann kann er den Netzwerkverkehr (inkl. PWs) mitlesen, richtig? Aber wenn jemand root auf der Maschine hat, dann hab ich sowieso größere Probleme ;)

 

Ich kann bei mir nur mit dem root Account den dockerd kontrollieren, sicherer geht dies wohl nicht? Die docker-compose.yaml Dateien sind nur von root lesbar, deshalb ist es in Ordnung Dinge wie MYSQL_ROOT_PASSWORD zu hinterlegen oder keine gute Idee? Sollte nur niemals jemand root-Zugriff bekommen ;)

 

Wie ist das mit den Nutzerrechten und den Volumes? ZB Nextcloud legt ja seine config.php in den Volumens ab, die Datei muss ja auch mal ein Containerupdate überleben. Die Datei enthält aber den mysql Zugang. Kann ich mich hier auf die Imagecreator verlassen, dass die Rechte solcher Dateien sicher gesetzt sind? Ich würde das ungern von Hand überprüfen müssen ;)

 

Außerdem überlege ich mein Management auf Portainer umzustellen. Portainer niemals von außen erreichbar machen, da er root-Zugriff auf den DockerSocket hat, richtig? Wer aber aus dem internen Netz (zb. infizierter Container) Zugriff auf Portainer gewinnt ist schon fast root und das Weblogin von Portainer ist doch weniger sicher als der Zugang zum lokalen root-Account des Pi, welcher noch nichtmal per SSH erlaubt ist. Ist es eine gute Idee, Dinge wie Portainer einzusetzten?

 

Vielleicht ließt hier jemand mit, der mir meine Sicherheitsbedenken beantworten kann und möchte ;)

 

herzlichen Dank liebe Unraid-Community.

Link to comment
  • 3 weeks later...
On 11/14/2020 at 6:40 PM, drchef said:

Wenn ein Container angegriffen wurde, muss er doch nur jeder mögliche private IPv4 Adresse pingen und sieht die komplette Infrastruktur und kann gezielt Container angreifen?

Und was bringt das dem Angreifer? Er muss ja erst mal eine Lücke in dem anderen Container finden. Das ist die selbe Situation als würde ein Angreifer einen physischen Client in deinem Netzwerk kontrollieren und dann versuchen andere Clients zu übernehmen. Ein erfolgreicher Ping ist ja noch lange kein erfolgreicher Angriff. Dazu bedarf es erst mal eine Sicherheitslücke beim Ziel auszunutzen.

 

Solange du keinen Container "privileged" ausführst, da das wohl das Ausbrechen aus einem Container ermöglichen kann, wird ein Angreifer da denke ich wenig ausrichten können. Er hat zwar einen Container übernommen, aber kann eben nur über UDP/TCP mit den anderen Containern oder Clients in deinem Netzwerk kommunizieren.

 

On 11/14/2020 at 6:40 PM, drchef said:

Auch ist ja der Netzwerkverkehr zwischen Traefik und den Services nicht SSL verschlüsselt. SSL macht Traefik ja nur nach außen. Also falls jemand root Zugriff auf dem Pi hat, dann kann er den Netzwerkverkehr (inkl. PWs) mitlesen, richtig? Aber wenn jemand root auf der Maschine hat, dann hab ich sowieso größere Probleme ;)

Selbst wenn SSL lokal laufen würde, könnte der Angreifer mit Root-Rechten das ja einfach a) deaktivieren oder b) einen Man-in-the-Middle-Angriff ausführen und selbst das SSL-Zertifikat bereitstellen. Also richtig, wenn der Angreifer Root-Rechte auf der Host-Maschine hat, hast du grundsätzlich ein Problem.

 

On 11/14/2020 at 6:40 PM, drchef said:

Wie ist das mit den Nutzerrechten und den Volumes? ZB Nextcloud legt ja seine config.php in den Volumens ab, die Datei muss ja auch mal ein Containerupdate überleben. Die Datei enthält aber den mysql Zugang. Kann ich mich hier auf die Imagecreator verlassen, dass die Rechte solcher Dateien sicher gesetzt sind? Ich würde das ungern von Hand überprüfen müssen ;)

Sagen wir mal Nextcloud generiert die Datei /mnt/nextcloud/config.php. Was kümmert dich jetzt ob die Datei Root-Rechte oder Nutzer-Rechte oder bestimmte Ausführungsrechte besitzt? Schließlich hast du den Pfad /mnt/nexcloud ja nur beim Nextcloud-Container gemountet und nicht bei anderen Containern. Würde also ein anderer Container angegriffen werden, so könnte der nicht auf diesen Pfad zugreifen. Würde dagegen der Nextcloud-Container angegriffen, ist es ja logisch, dass der das Passwort kennt, da Nextcloud ohne das Passwort ja keine Verbindung zur Datenbank aufbauen könnte. Genauso gut könnte der Angreifer ja jetzt "SELECT" Abfragen an die Datenbank absetzen und das Ergebnis an ein externes Ziel weiterleiten. 

 

Von Docker Compose habe ich keine Ahnung, aber so wie ich das hier sehe, kann man das wohl so einstellen, dass Container nur mit bestimmten Containern kommunizieren können und zB das Internet komplett tabu ist:

https://stackoverflow.com/questions/39913757/restrict-internet-access-docker-container

https://stackoverflow.com/a/41768596/318765

 

Also quasi wie eine zwischengeschaltete Firewall mit restriktiver Whitelist.

Link to comment
  • ich777 changed the title to [SOLVED] Sicherheitsfragen bezüglich Docker

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...