Suche
Play safe!

Docker Security: Unveränderbarkeit als Sicherheitskonzept

Gianluca Arbezzano

© Shutterstock.com / Blablo101

Sicherheit geht vor! Das gilt im Allgemeinen, aber auch speziell für die Arbeit mit Docker und verteilten Systemen. Ein umfangreiches Sicherheitskonzept ist daher eher Pflicht und nicht nur Kür. Allerdings gilt es auch, aufzupassen, keine zu komplizierten Anforderungen zu stellen, die den Entwicklungsprozess hemmen. Wie man sich bei der Arbeit mit Docker absichern kann und welche Rolle Unveränderbarkeit dabei spielt, erklärt Gianluca Arbezzano in diesem Artikel.

Sicherheit ist ein faszinierendes Thema. Sie ist Teil eines jeden Aspekts jeden Systems. Vom E-Mail-Server bis zur HTTP-Body-Validierung eines API-Systems. Sie ist außerdem ein sehr menschenzentriertes Thema: Man kann die stärksten Sicherheitsansätze nutzen, aber wenn es aber zu schwer ist, den Regeln zu folgen oder deren Umsetzung zu kompliziert ist, werden die Endnutzer oder die Kollegen selbst zur perfekten Lücke im System, die geradezu darauf wartet, von bösen Menschen ausgenutzt zu werden.

In verteilten Systemen gibt es interessante Herausforderungen, etwa:

  • Wie können wir dem Instanzenteil des Systems selbst vertrauen? Ich meine, wie können wir nach einem Pool Scaling, also dem Hochskalieren von bspw. drei Anwendungsinstanzen auf fünf, sicher sein, dass die beiden neuen Instanzen keine Schadsoftware sind?
  • Sämtlicher vom System erzeugter Traffic muss abgesichert sein, etwa durch angemessene Firewall-Einstellungen. Das Problem ist, dass sich diese bereits nach kurzer Zeit nur noch sehr schwer verwalten lassen, wenn man viele Services hat, die miteinander kommunizieren. Die Netzwerktopologie wächst natürlich mit der Anzahl hinzugefügter Services. Das ist allerdings keine Entschuldigung dafür, die Verantwortung der Verwaltung unseres Netzwerks schleifen zu lassen.

Lesen Sie auch: Projekt Moby: Wie Docker Container im Mainstream etablieren will

Wenn Systeme entworfen werden, muss die Sicherheit aus verschiedenen Blickwinkeln bedacht werden:

  • Sicherheit muss effizient sein. Das scheint offensichtlich zu sein, aber es sollte stets im Hinterkopf behalten werden.
  • Sie muss für Entwickler leicht zu verwenden sein. Wie bereits erwähnt: Wenn Sicherheitsvorkerhungen ein Hemmfaktor werden, steigt die Gefahr, dass sie nicht weiter angewandt werden.
  • Hat man ein gutes Sicherheitskonzept, das einfach umzusetzen ist, wird es gleichzeitig einfacher, sicheres Verhalten zu forcieren.

All diese Konzepte werden in verschiedenen Projekten der Docker Community angewandt, Notary und swarmkit sind nur zwei Beispiele. Aber auch, wenn man über The Update Framework (TUF) und die Menge an Ereignissen hinter jedem Befehl wie docker push und pull nachdenkt, sieht man plötzlich ein großartiges Beispiel dafür, wie man komplizierte Dinge wirklich einfach nutzbar macht.

In diesem Artikel möchte ich eines der in meinem E-Book enthaltenen Konzepte vorstellen: Immutability (Unveränderbarkeit).

Docker Container sind faktisch unveränderbar. Das bedeutet, dass sich laufende Container niemals verändern und es im Falle eines Updates sinnvoller ist, den alten Container zu löschen und durch einen neuen Container mit der aktualisierten Version zu ersetzen. Dieser Aspekt ist aus mehreren Gründen wichtig.

Angewandt auf das Deployment, ist Unveränderbarkeit eine große Herausforderung, denn sie öffnet Tür und Tor für gänzlich unterschiedliche Release-Strategien wie Blue-Green-Deployment oder Canary-Releases. Zudem senkt sie die Rollback-Zeiten, da man alte Versionen vermutlich ein wenig länger laufen lassen und den Traffic bei Problemen schlicht umleiten kann.

Aus Sicht der Stabilität und Skalierbarkeit ist Unveränderbarkeit ebenfalls vorteilhaft, denn tatsächlich werden für jedes Deployment Provisionierungsskripte und Build-Tools verwendet, um die neue Version zu packen und zu releasen. Man erstellt zudem neue Nodes, die die alten ersetzen. Daher kann man sich vollends auf das Bereitstellungs- und Konfigurationsmanagement konzentrieren, womit alle Anstrengungen gerechtfertigt werden, Infrastructure as Code zu implementieren. Dies spielt auch in Sachen Sicherheit eine Rolle, denn nach jedem Update existiert ein neuer Container und sollte es Schwachstellen oder eine Injection geben, werden sie während des Updates entfernt.

Es gibt übrigens auch ein Werkzeug zur Analyse eines angegriffenen Containers, nämlich den Befehl docker diff, der Unterschiede im Dateisystem aufzeigt. Er unterstützt drei Events:

  • A – Add
  • D – Delete
  • C – Change

Im Falle eines Angriffs ist es möglich, den betroffenen Container für eine spätere Analyse vorzumerken und ihn mit dem ursprünglichen Image zu ersetzen. Dieser Workflow ist ganz interessant. Wenn man allerdings weiß, dass die Anwendung das Dateisystem nicht ändern muss, kann man den Parameter –read-only dazu verwenden, dem Dateisystem nur Lesezugriff zu geben oder das Volume öffentlich mit dem ro-Suffix –v PWD:/data:ro teilen.

Docker kann keine Sicherheitsprobleme für die Nutzer beheben – wenn eine Anwendung durch Code-Injections angreifbar ist, muss dies in der App gefixt werden. Gleichzeitig werden von Docker allerdings einige Möglichkeiten geboten, die das Leben eines Hackers deutlich erschweren sollten und die einem mehr Kontrolle über das eigene Environment geben.

Lesen Sie auch: Docker EE – Die Enterprise Edition von Docker

In diesem Artikel habe ich einige Praktiken und Tools benannt, die man für ein sichereres Environment verwenden kann. Grundsätzlich sollte man darauf achten, seine Applikation in einem Environment zu halten, das nur die Dinge bietet, die einem bekannt sind und die man wirklich benötigt. Beinhaltet eine Distribution oder ein Container etwas, das man nicht benötigt oder unter Kontrolle hat, dann ist es für gewöhnlich eine gute Idee, diese dunklen Flecken zu entfernen.

Das ist alles. Unveränderbarkeit gibt es nicht umsonst und sie erfordert, dass man sämtliche im Packaging und Deployment benötigten Prozesse und Tools im Deployment behält, da die komplette Produktionsumgebung auf diese Tools angewiesen ist. Sie ist aber ein wichtiges Puzzlestück im Hinblick auf die Sicherheit.

Wer mehr über Cilium, CoreOS Clair oder Best Practices zu Registry und Images erfahren möchte, der kann sich das kostenlose E-Book „Play Safe with Docker und Container Security“ auf der Homepage von Gianluca Arbezzano herunterladen. Gianluca Arbezzano deckt in diesem Buch in englischer Sprache wichtige Themen rund um Docker und die Sicherheit von Containern ab.
Geschrieben von
Gianluca Arbezzano
Gianluca Arbezzano
Software Engineer at InfluxData. The main way to improve and grow is to share what you do to catch feedback to expand my points of view. I am an enthusiast open source contributor and maintainer of different projects in different languages. DevOps evangelist and Docker Captain I am happy to make my environment efficient and secure for me and my team.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.