Zum Inhalt

47-Tage-Zertifikate sind im Anmarsch. Sind Sie bereit?

Jetzt handeln →

Grundlegendes zur Docker-Image-Signierung

Grundlegendes zur Docker-Image-Signierung

Einführung

Heutzutage werden alle von Benutzern genutzten Anwendungen oder Software virtualisiert und aus einem Docker-Container heruntergeladen. Viele Benutzer befürchten, dass Angreifer die aus dem Container heruntergeladene Datei manipulieren und ein schädliches Skript oder Malware einschleusen könnten. In diesem Fall wird das System jedes Mal, wenn jemand die Datei herunterlädt und ausführt, vom schädlichen Skript des Angreifers beeinträchtigt.

Docker-Image-Signierung, definiert: Das Anhängen einer kryptografischen Signatur an ein Container-Image, damit ein Prüfer bestätigen kann, welche Registry/Build-Pipeline es erzeugt hat und dass es sich seitdem nicht verändert hat. Hierfür werden Tools wie Cosign oder Notation verwendet, die die Signatur als separates OCI-Artefakt speichern, das mit dem Digest des Images in der Registry selbst verknüpft ist, anstatt ein Zertifikat in das Image einzubinden, wie es bei der traditionellen Signierung von ausführbarem Code der Fall ist.

Wichtige Erkenntnisse

  • Moderne Containersignaturverfahren packen kein Zertifikat in das Image. Cosign und Notation fügen die Signatur als separates OCI 1.1 Referrers-Artefakt hinzu, das auf den Content Digest des Images adressiert ist und in der Registry zusammen mit dem Image selbst gefunden werden kann.
  • Diese Seite bietet eine konzeptionelle Einführung. Einen vollständigen Vergleich zwischen Cosign (schlüssellos, OIDC-basiert) und Notation (zertifikatsbasierte PKI), Transparenzprotokollen und der Durchsetzung von Zugriffskontrollen finden Sie hier: Signieren von Containern und OCI-Artefakten: Notation, Mitunterzeichnung und die Entscheidung des Vertrauensmodells.

Die Notwendigkeit der Docker-Image-Signierung:

Wenn ein Unternehmen seinen Kunden eine Software/ein Produkt zur Verfügung stellt, wie kann dieser dann sicherstellen, dass diese nicht manipuliert wurde? Um Kunden in dieser Hinsicht Sicherheit zu geben, kann ein Unternehmen die Software/das Produkt mit seiner vertrauenswürdigen Signatur versehen. Versucht jemand, den Code zu manipulieren, wird die Signatur geändert. Hier kommt die Image-Signierung ins Spiel. Mit der Image-Signierung kann ein Unternehmen sein Image signieren, bevor es in den Container geladen wird, damit der Kunde es sicher verwenden kann.

Ähnlich wie bei der Erkennung schädlicher Aktivitäten durch Codesignierung wird auch hier beim Versuch eines Benutzers, die Datei zu installieren oder auszuführen, zunächst die Signatur überprüft. Wird das Image-Signaturzertifikat der Organisation nicht gefunden, wird der Benutzer am Fortfahren gehindert.

Was ist Docker Image Signing?

Beim Signieren von Docker-Images handelt es sich um den Vorgang, Docker-Images digital zu signieren, um die Identität des Softwareautors zu bestätigen und sicherzustellen, dass der Code nicht verändert oder kompromittiert wurde.

Wie funktioniert die Docker-Image-Signierung?

Die Funktionsweise der Bildsignatur kann in zwei Teile unterteilt werden:

  1. Auf der Server- oder Entwicklerseite
  2. Auf der Clientseite

Zunächst besprechen wir, wie die
Der Prozess findet serverseitig statt:

Serverseite
  1. Das Originalbild, also das Docker-Bild, das der Benutzer seinen Kunden sicher zur Verfügung stellen möchte, wird zunächst von einem Hashing Algorithmus, da es praktisch unmöglich ist, einen Hash umzukehren.
  2. Das gehashte Docker-Image, das wir erhalten, wird dann mit dem privaten Schlüssel des Entwicklers signiert.
  3. Das signierte Hash-Docker-Image wird dann mit dem Original-Image und dem digitalen Zertifikat gepackt, die zusammen auch als Image-Signaturzertifikat bezeichnet werden.
  4. Nun kann es hochgeladen oder an den Kunden übertragen werden.

Sehen wir uns nun an, wie der Prozess auf der Clientseite abläuft.

Client-Seite
  1. Das ursprüngliche Docker-Image wird durch einen Hashing-Algorithmus geleitet, um den Hash des Images zu erhalten.
  2. Der öffentliche Schlüssel wird aus dem Zertifikat extrahiert und auf den signierten Hash des Docker-Images angewendet, um den Hash des Images zu extrahieren.
  3. Die beiden in den Schritten 1 und 2 erstellten Hashes werden verglichen. Wenn beide Hashes gleich sind, wurde das Bild nicht geändert und die Signatur gilt als gültig.
  4. Gleichzeitig wird das Image-Signaturzertifikat überprüft, um sicherzustellen, dass es von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde. Das Ablaufdatum des Image-Signaturzertifikats wird überprüft, und das Zertifikat wird auch mit den Sperrlisten abgeglichen, um sicherzustellen, dass es gültig ist.

Wie das in der Praxis funktioniert

Die oben beschriebene Hash-Signatur-Verifizierungslogik ist zwar das richtige Grundmodell, die Umsetzung unterscheidet sich jedoch in der Praxis von der traditionellen Codesignatur. Anstatt ein Zertifikat in das Image einzubetten, speichern Cosign und Notation die Signatur als separates Artefakt in der OCI-Registry, verknüpft mit dem Content Digest des Images über die OCI 1.1 Referrers API. Cosign unterstützt zusätzlich die schlüssellose Signatur mithilfe eines kurzlebigen, OIDC-basierten Zertifikats und protokolliert das Ereignis in Rekor, einem öffentlichen Transparenzprotokoll. Dadurch entfällt die Verwaltung eines langlebigen privaten Schlüssels. Notation verwendet das bekanntere zertifikatbasierte Modell, dessen Verifizierung über eine vom Benutzer kontrollierte Zertifizierungsstelle (CA) erfolgt. Beide Ansätze sind aktuell und werden aktiv weiterentwickelt. Docker Content Trust, der ältere, auf Notary basierende Signaturmechanismus der Docker CLI, wurde in aktuellen Implementierungen weitgehend von diesen beiden abgelöst.

Enterprise Code-Signing-Lösung

Holen Sie sich mit unserer Code-Signing-Lösung eine Lösung für alle Ihre kryptografischen Software-Code-Signing-Anforderungen.

Schwächen der Docker-Image-Signierung

Auch bei der Bildsignierung gibt es mehrere Schwächen, darunter:
Eine unsachgemäße Verwaltung des zu Beginn des Image-Signaturprozesses erstellten privaten Schlüssels kann die Sicherheit der gesendeten Software beeinträchtigen. Wird ein legitimer privater Schlüssel gestohlen, kann der Angreifer seine Schadsoftware mit diesem privaten Schlüssel verschlüsseln. Dadurch wird dem Benutzer vermittelt, dass die Software sicher ist, auch wenn dies nicht der Fall ist.

Bedrohungsakteure können ein vertrauenswürdiges Zertifikat erhalten. Was die meisten Angreifer jedoch abschreckt, ist die Notwendigkeit, Identifikationsinformationen anzugeben, um ein Zertifikat zu erhalten. Wird Schadsoftware mit einem legitimen Zertifikat verbreitet, kann der Entwickler identifiziert und gestoppt werden.

Hinweis : Wenn der Benutzer die Installation der Software zulässt, auch wenn das Betriebssystem meldet, dass es sich nicht um ein signiertes Image handelt, ist die Image-Signatur nutzlos.

Um diese Schwachstellen zu vermeiden, sollten Sie die folgenden Best Practices befolgen:

Zum Schutz von Verschlüsselungsschlüsseln sollten Hardware-Sicherheitsmodule ( HSMs ) eingesetzt werden. Ein HSM ist ein spezialisiertes, hochgradig vertrauenswürdiges physisches Gerät. Es handelt sich um einen Netzwerkcomputer, der alle wichtigen kryptografischen Operationen wie Verschlüsselung , Entschlüsselung , Authentifizierung, Schlüsselverwaltung, Schlüsselaustausch usw. durchführt. HSMs sind manipulationssicher und verwenden extrem sichere kryptografische Verfahren.

Neben HSMs sollte auch bei Schlüsseln das Prinzip der geringsten Privilegien angewendet werden, um sicherzustellen, dass nur Benutzer Zugriff auf den Schlüssel haben, die ihn benötigen.

Schließlich ist beim Signieren von Images stets Vorsicht geboten. Laden Sie nur Software herunter und installieren Sie sie, die von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde.

Zukunft der Code-Signierung

Wie wir in der heutigen Welt sehen, sind Sicherheit und Vertrauen ein wichtiger Faktor für das Wachstum jedes Unternehmens. Jedes Unternehmen möchte seine Daten sichern und seinen Kunden sichere Daten bereitstellen. Täglich kommt es zu verschiedenen böswilligen Aktivitäten, sodass die Bildsignierung exponentiell zunehmen wird. Jedes Unternehmen muss Code Signing und Image Signing in die Praxis umsetzen.

Unser Angebot an Code Signing

Unser Produkt CodeSign Secure bietet eine sichere und flexible Lösung für die Code-Signing-Anforderungen eines Unternehmens zum Signieren von Windows-, Linux-, Macintosh-, Docker- und Android/iOS-Apps.

Unser Framework kann erweitert werden, um auf Wunsch unserer Kunden jeden anderen Code oder jedes andere Dokument zu schützen.

  • Die Schlüssel werden durch das HSM Ihrer Wahl geschützt – nCipher, Utimaco, Safenet.
  • Es werden Richtlinien und Arbeitsabläufe definiert, um Ihren Prozess der Auftragsübermittlung und -genehmigung zu sichern und zu optimieren.
  • Ihre vorhandenen Viren- und Malware-Scans können systematisch integriert werden.
  • Entwickelt auf einer offenen REST-API, die benutzerdefinierte Integrationen und Anforderungen ermöglicht.

Fazit

Daten sind in unserer vernetzten Welt von entscheidender Bedeutung. Code Signing kann zur Verifizierung von Daten eingesetzt werden. Manipulierte Daten können zu schwerwiegenden Verlusten führen und sollten daher nicht als vertrauenswürdig eingestuft werden. Software sollte außerdem eine Warnung anzeigen oder die Installation von Software mit nicht vertrauenswürdigen Zertifikaten vollständig blockieren. Eine signierte Software oder Anwendung kann ein vertrauenswürdiges Netzwerk von Benutzern, Geräten und Programmen aufbauen.

Häufig gestellte Fragen

Ist Docker Content Trust immer noch der Standardweg zum Signieren von Container-Images?

Nein. Cosign und Notation haben es in den aktuellen Implementierungen weitgehend abgelöst, da beide OCI 1.1-native Signaturspeicherung und eine breitere Ökosystem- und Zulassungskontrollintegration bieten.

Muss ich einen privaten Schlüssel verwalten, um ein Container-Image zu signieren?

Nicht unbedingt. Cosign unterstützt schlüsselloses Signieren mit kurzlebigen, OIDC-basierten Zertifikaten, die in einem öffentlichen Transparenzprotokoll erfasst werden. Dadurch entfällt die Verwaltung langlebiger Schlüssel vollständig. Das zertifikatbasierte Modell von Notation erfordert hingegen die Verwaltung eines Schlüssels über eine eigene Zertifizierungsstelle.

Wo wird die Signatur eines Container-Images tatsächlich gespeichert?

Neben dem Image in der OCI-Registry, als separates Artefakt, das über die OCI 1.1 Referrers API mit dem Content Digest des Images verknüpft ist, nicht eingebettet in das Image selbst.