Neuigkeiten von trion.
Immer gut informiert.

Container Image Signing

Kubernetes

Container Images sind inzwischen etabliert, um darüber Anwendungen bereitzustellen. Durch das standardisierte Format, einheitliche Schnittstellen und das insgesamt bestehende Ökosystem wird es sehr einfach, Artefakte zu konsumieren und auch bereitzustellen. Jedoch hat das auch Konsequenzen: Die Verantwortung für Patchmanagement, Fehlerbehebungen und Security-Updates verschiebt sich zum Anbieter der jeweiligen Images, da diese mehr, als lediglich die Anwendung selbst beinhalten. Gleichzeitig obligt es dem Konsumenten bzw. Nutzer der Images, sicherzustellen, dass diese aus einer vertrauenswürdigen Quelle stammen und auch nicht zwischendurch verändert wurden.
Diese Aspekte der "Supply-Chain-Security", einem Unterbereich der IT-Sicherheit im Kontext von Containeranwendungen wollen wir uns in diesem und folgenden Artikel widmen.

Supply Chain Angriffe

Bei Supply Chain Angriffen versuchen Angreifer, Schwachstellen in der Lieferkette auszunutzen, um bösartige Inhalte in Container-Images einzuschleusen. Dies kann an unterschiedlichen Stellen geschehen:

  1. Die Anwendung verwendet Bibliotheken, die sicherheitsrelevante Fehler beinhalten

  2. Die Anwendung selbst weist eine Sicherheitslücke auf

  3. Das verwendetet Basis-Image zur Erstellung des Anwendungsimage beinhaltet bereits schädliche Inhalte - vorsätzlich oder als Fehler

  4. Das Image wird während der Ablage oder auf dem Transportweg so modifiziert, dass eine Sicherheitslücke eingeschleust wird

Es ist schnell zu erkennen, dass Sicherheitslücken auf mehreren Ebenen entstehen können. Die ersten beiden Punkte müssen im Rahmen sicherer Software in jeden Fall addressiert werden, und sind unabhängig von Containertechnologie zu sehen.

Image Signatur

Mittels einer kryptografischen Signatur lässt sich die Echtheit bzw. Herkunft und auch die Integrität eines Artefakts validieren. Damit lässt sich relativ einfach eine Vorgabe etablieren, dass lediglich die Images von bestimmten Herausgebern in bestimmten Umgebungen zum Einsatz kommen.
Durch die Signatur von Container Images wird ein Image dann nicht nur zum Einsatz autorisiert, sondern es wird ebenfalls sichergestellt, dass niemand das Image verändert hat.

Somit kann gewährleistet werden, dass die Images tatsächlich von vertrauenswürdigen Quellen stammen und auf ihrem Weg vom Ersteller zum Endnutzer nicht manipuliert wurden. Dies ist besonders in komplexen Entwicklungs- und Betriebsumgebungen, in denen Images häufig zwischen verschiedenen Teams und Systemen ausgetauscht werden, relevant. Ohne diese Sicherheitsmaßnahme besteht das Risiko, dass Akteure Schadsoftware in die Images einschleusen oder diese manipulieren.
In so fern ist es nicht nur im regulierten Umfeld empfehlenswert, sich mit diesem Thema auseinanderzusetzen und entsprechende Vorgaben und Prozesse im eigenen Unternehmen umzusetzen.
Dazu gehört dann auch die Auswahl von (Base-)Images bzw. Anbietern, die dann als vertrauenswürdig eingestuft werden. Ebenfalls sind die im unternehmen selbst erstellten Anwendungsimages entsprechend zu signieren.

Werkzeuge zur Container Signatur

Es gibt verschiedene Werkzeuge, um eine Signatur zu Erzeugen. Im einfachsten Fall könnte dies mit OpenSSL oder auch GnuPG erfolgen. Damit könnten Images durch einen Anbieter zur Auslieferungen mit passenden Signaturen bzw. Zertifikaten versehen werden. Speziell wenn die Übergabe nicht durch eine Container Registry erfolgt, kann dies sinnvoll sein.

Bei diesem Ansatz bzw. den Werkzeugen ist jedoch keine Integration in das Container Ökosystem gegeben. So können in einem Kubernetes Cluster beispielsweise auf dieser Basis keine Vorgaben definiert werden, um zu steuern, welche Images herangezogen werden dürfen.

Damit schränkt sich die Auswahl der Werkzeuge im wesentlichen auf die folgenden Kandidaten ein:

  1. Skopeo

  2. Notary / Docker Content Trust

  3. Cosign

Die einzelnen Werkzeuge und ihre individuellen Eigenschaften werden in einem späteren Beitrag im einzelnen betrachtet.

Validierung

Zur Validierung der Image Signatur ergeben sich drei grundsätzlich Wege: Die manuelle Validierung eines einzelnen Image. Dies dürfte vor allem zur Entwicklungszeit und beim Debugging bzw. Diagnose zur Anwendung kommen.
Als nächste Option sind Basis-Images, die zum Bauen eigener Images herangezogen werden, im Rahmen des Builds bzw. der CI-Pipeline zu validieren, bevor mit ihnen gearbeitet wird. Dies ist in Abhängigkeit der zum Einsatz kommenden Tools als Build-Step leicht automatisierbar.
Und natürlich muss zum Zeitpunkt der Image Verwendung zur Laufzeit eine Validierung vorgenommen werden. Dies kann einmal durch die Container-Runtime selbst erfolgen, die dazu passend zu konfigurieren ist. Oder aber es kann so implementiert werden, dass eine Soll-Konfiguration zunächst auf die Images hin validiert wird, bevor diese aktiviert werden kann. Im Kubernetes Umfeld läßt sich das beispielsweise durch Policy-Engines umsetzen.

Fazit

Image Signing schützt nicht nur vor einer Vielzahl von Angriffen, sondern trägt auch dazu bei, Vertrauen in die verwendeten Softwarekomponenten zu schaffen. Dabei wird optimalerweise eine Intgritätssicherung über die gesamte Entwicklungs- und Deploymentkette vorgenommen.

Die Umsetzung anhand praktischer Beispiele werden wir in folgenden Beiträgen vorstellen.




Zu den Themen Kubernetes, Docker und Cloudarchitektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:

Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Los geht's!

Bitte teilen Sie uns mit, wie wir Sie am besten erreichen können.