CI/CD-Pipelines sind ein integraler Bestandteil moderner Workflows, und die Tools, die sie unterstützen, erweitern ihre verborgenen Möglichkeiten zusätzlich. Teamarbeit ist in modernen Workflows unerlässlich, da Deadlines nicht nur dringend, sondern auch regelmäßig eingehalten werden müssen. Jede Sekunde zählt, wenn am anderen Ende ein Kunde wartet.
In großen Organisationen, deren Codeentwicklung mehrere Schritte erfordert, kann die manuelle Bearbeitung jedes einzelnen Schrittes schnell überfordernd wirken. Daher sind Tools wie CI/CD-Pipelines, beispielsweise Jenkins , in Entwicklerumgebungen mittlerweile weit verbreitet. Der beste Ausgangspunkt für die Diskussion über CI/CD ist daher die Frage, was diese Tools ermöglichen.
Die Integration der Codesignierung in CI/CD bedeutet kurz gesagt: die Signierung als obligatorischen Pipeline-Schritt unter Verwendung einer Dienstidentität mit minimalen Berechtigungen automatisieren, gegen einen HSM-gestützten Schlüssel signieren, damit die Pipeline niemals Rohschlüsselmaterial verarbeitet, Produktionsfreigaben hinter einem Genehmigungsschritt sichern und jede Signatur unmittelbar nach der Signierung überprüfen, anstatt einem sauberen Exit-Code zu vertrauen.
Wichtige Erkenntnisse
- Diese Seite erläutert das Konzept und die Referenzarchitektur für die CI/CD-Codesignierung im Allgemeinen. Schritt-für-Schritt-Anleitungen für die einzelnen Plattformen finden Sie in den verlinkten Integrationsleitfäden für Jenkins, GitHub Actions, GitLab und Azure DevOps.
- „Geheimnisfreie“ Signierung bedeutet, dass sich die Pipeline beim HSM oder KSP ohne langlebige eingebettete Anmeldeinformationen authentifiziert; eine Dienstidentität mit eng begrenztem, zeitlich beschränktem Zugriff ist das, was tatsächlich verhindert, dass eine kompromittierte Pipeline zu einem kompromittierten Signaturschlüssel wird.
Referenzarchitektur und erforderliche Steuerelemente
| Kontrolle | Was es verhindert |
|---|---|
| Dienstidentität mit minimalen Berechtigungen | Ein kompromittiertes Pipeline-Konto, das für alles Mögliche über die spezifische Signieraktion hinaus verwendet werden kann, für die es vorgesehen ist. |
| Geheimnisfreie, von HSM unterstützte Vertragsunterzeichnung | Der private Schlüssel wird möglicherweise in Pipeline-Protokollen, Umgebungsvariablen oder im Dateisystem eines kompromittierten Build-Agenten offengelegt. |
| Genehmigungsphase vor Produktionsbeginn | Ein einzelner kompromittierter oder böswilliger Commit, der ohne menschliche Überprüfung ein signiertes, freigegebenes Artefakt erreicht |
| Überprüfung unmittelbar nach der Unterzeichnung | Eine stillschweigend fehlgeschlagene oder fehlerhafte Signatur wird als erfolgreich behandelt, weil der Signaturbefehl ordnungsgemäß beendet wurde. |
| Protokollierung aller Signierungsereignisse | Die Unfähigkeit, bei einer Vorfallsuntersuchung die Frage „Wer hat was wann unterschrieben?“ zu beantworten. |
| Rollback-Plan für eine misslungene Veröffentlichung | Ein signiertes, aber fehlerhaftes Artefakt, das die neueste verfügbare Version darstellt und keinen schnellen Weg zurück bietet. |
Was ist eine CI/CD-Pipeline?
Die Idee hinter einer Pipeline ist, dass sie eine Reihe von Prozessen darstellt, die die Softwareentwicklung durch die Schritte Erstellen, Testen und Bereitstellen von Code vorantreiben. Dies wird auch als CI/CD bezeichnet. CI/CD ist ein Modell für eine gemeinsam genutzte, meist lokal gehostete Build-Umgebung. Die verschiedenen Plattformen bündeln CI/CD-Implementierungen mit Kommunikations- und Build-Tools, die durch die Optimierung des Build- und Release-Prozesses eine schnellere Veröffentlichung der Software ermöglichen.
Historisch gesehen wird Code von separaten Teams entwickelt und in persönlichen Umgebungen getestet. Die Integration dauert lange, und Feedback zu fehlerhaftem Code dauert länger. Dies führt zu langen Build-Zyklen und Effizienzverlusten. Es ist üblich, einen Codeabschnitt mit einer bestimmten Anzahl von Testfällen zu testen, die vor der Entwicklung erstellt wurden.
Wenn der finale Code diese Standards erfüllt, sollte er sich problemlos in bestehenden Code integrieren lassen. Doch wir Entwickler wissen alle, dass dies selbst bei sorgfältig ausgearbeiteten Testfällen längst nicht das einzige mögliche Ergebnis ist. Wie Sie sehen, ist CI/CD die Grundlage von DevOps im Allgemeinen. Es konzentriert sich auf kontinuierliche Integration, Bereitstellung und Deployment.
Die Integrationsschritte umfassen das Erstellen des Codes selbst, das Ausführen von Testfällen und das Zusammenführen des Codes. In der Bereitstellungsphase wird der Code automatisch im angegebenen Repository freigegeben, und in der Bereitstellungsphase wird der Code automatisch in der Produktionsumgebung bereitgestellt.
Obwohl die CI/CD-Pipeline viele Schritte umfasst, ist die Möglichkeit, Code zu testen, einer der wichtigsten. CI/CD bietet eine Methode, Testfälle in großem Umfang auszuführen, wobei Codeänderungen in einem einzigen, optimierten und automatisierten Vorgang getestet werden können.
Code wird gepusht, von der Pipeline empfangen, getestet und wenn alle Fälle erfolgreich sind, kann der Build live geschaltet werden. Es ist erstaunlich, wie sich dies auf die Agilität Ihres Unternehmens auswirken kann. Die schnelle Behebung eines Fehlers ist möglicherweise die Zukunft der Entwicklung. Allerdings übersehen wir hier einen wichtigen Schritt. Kein Kunde und kein Unternehmen sollte unsignierten Code ausführen. Hier kommt die Code-Signierung ins Spiel.
Was ist Code-Signierung und warum ist sie wichtig?
Beim Code-Signieren wird eine digitale Signatur generiert und an Code angehängt, sodass der Endbenutzer darauf vertrauen kann, dass der ihm bereitgestellte Code sicher verwendet werden kann. Die Grundlagen des Code-Signierens sind wie folgt:
- Ein Entwickler entscheidet sich, seinen Code zu signieren. Dies wird heute bei den meisten Entwicklern der Fall sein, da die Bereitstellung von unsigniertem Code für Endbenutzer unsicher ist.
- Sobald ein Entwickler sich entscheidet, seinen Code zu signieren, muss er ein öffentliches und privates Schlüsselpaar generieren und ein Zertifikatsignierungsanfrage (CSR)Das öffentlich-private Schlüsselpaar identifiziert den Entwickler als sich selbst und ist zum Erstellen der CSR erforderlich. Die CSR wird zusammen mit dem Schlüsselpaar an eine Zertifizierungsstelle übergeben und ist zum Generieren einer digitalen Signatur für den Code erforderlich.
- Der öffentliche Schlüssel des öffentlich-privaten Schlüsselpaars wird dann an die Zertifizierungsstelle (CA) gesendet und ein Codesignaturzertifikat angefordert.
- Das CA überprüft dann die Identität des Herausgebers, authentifiziert die Zertifikatsanforderung des Herausgebers und bündelt dann die Identität des Herausgebers mit dem öffentlichen Schlüssel.
- Anschließend signiert die Zertifizierungsstelle das Paket und erstellt so ein digitales Code-Signatur-Zertifikat. Mit diesem Zertifikat kann der Entwickler eine digitale Signatur für den betreffenden Code generieren und so nachweisen, dass der Code vom Softwarehersteller entwickelt wurde.
- Schließlich wird das Signaturzertifikat an den Softwarehersteller gesendet, der nun seine digitale Signatur generieren und an seinen Code anhängen kann.
Der moderne Release-Prozess erfordert Codesigning. Dieser Schritt kann je nach aktuellem Prozess Ihres Unternehmens die Geschwindigkeit und Effizienz von CI/CD erheblich beeinträchtigen. Die Code-Signierung weist die Identität des Code-Entwicklers nach und stellt die Integrität des Codes sicher.
Bei der Codesignierung führt jede weitere Änderung zur Ungültigkeit der Signatur. Dadurch wird sichergestellt, dass der signierte Code manipulationsfrei ist. Dies ist der zentrale Vorteil der Codesignierung und macht sie in der modernen Welt so unverzichtbar. Unabhängig von Ihrer Branche sind Ihre Produkte in Umgebungen wie Schulnetzwerken oder Banken unbrauchbar, wenn Sie keine Codesignierung implementieren.
Ein weiterer Vorteil besteht darin, das Risiko eines Reputationsschadens zu minimieren. Indem Ihr Unternehmen ausschließlich signierten Code verteilt, kann es sicherstellen, dass die Benutzer daran gewöhnt sind, vor der Installation Ihrer Software eine Signatur zu sehen. Dadurch sind sie weniger anfällig für Angreifer, die sich als Ihr Unternehmen ausgeben.
Integration der Code-Signierung in die CI/CD-Pipeline
Code-Signierung war früher ein separater Prozess während der Entwicklung. Dieser Schritt wurde oft manuell durchgeführt, was zu Fehlern führte. Die Integration in eine CI/CD-Pipeline zur Durchführung von Code-Signierung bietet mehrere Vorteile. Der Code-Signierungsprozess lässt sich mit dieser Integration problemlos automatisieren, wodurch der manuelle Aufwand für die Signierung von Artefakten vor der Bereitstellung weiter reduziert wird.
Es gibt verschiedene CI/CD-Tools wie Jenkins, Azure DevOps, GitHub Actions, GitLab und andere, die eine einfache Integration mit Code-Signing-Tools ermöglichen. Insgesamt führt dies dazu, dass der Code-Signing-Prozess im aktuellen Entwicklungs- und Bereitstellungsworkflow automatisiert wird.
Die Automatisierung unserer Workflows zur Signierung unserer Artefakte bietet viele Vorteile. Eine solche Automatisierung mithilfe einer CI/CD-Pipeline sorgt für Konsistenz. Der gesamte freigegebene Code unterliegt demselben Signierungsprozess, was zuverlässige Bereitstellungen gewährleistet. Der manuelle Signierungsprozess entfällt und spart dem Bereitstellungsteam Zeit.
Insgesamt reduziert dies das Risiko menschlicher Fehler, die beim manuellen Signieren auftreten können. Die Integration der CI/CD-Pipeline mit Code-Signing ist eine Win-Win-Situation, da sie Ihre Sicherheit durch die Gewährleistung der Integrität stärkt und den Entwicklungsprozess rationalisiert, was zu einer schnelleren und effizienteren Softwarebereitstellung führt.
Vorteile der Code-Signierung in CI/CD
-
Verbesserte Sicherheit
Durch das Signieren von Code in der CI/CD-Pipeline stellen Sie sicher, dass nur zulässiger und verifizierter Code in Produktionsumgebungen eingesetzt wird. Diese Methode verringert das Risiko von Schwachstellen. Bei Manipulationsversuchen wird die Signatur ungültig und weist auf potenzielle Sicherheitsrisiken hin. Dadurch wird verhindert, dass Personen Schadsoftware in die Pipeline einschleusen und Supply-Chain-Angriffe durchführen.
-
Automatisierte Releases
Sobald der Code-Signing-Prozess innerhalb der CI/CD-Pipeline automatisiert ist, wird ein typischer Signierungsprozess eingerichtet. Diese Automatisierung findet immer statt, unabhängig vom Entwickler und der Umgebung, in der die Entwicklungs-Builds stattfinden.
Durch diesen Schritt müssen Entwickler Code nicht mehr manuell signieren und haben so mehr Zeit für andere Aufgaben. Außerdem reduziert sich die Anzahl der Fehler beim Signieren, da alles ohne menschliches Zutun abläuft. Menschliche Fehler können vollständig vermieden werden, da alles ohne menschliches Zutun abläuft. Wenn wir die automatisierte Signierung in unsere Pipelines für CI/CD integrieren, erhalten wir schnellere Releases.
-
Bessere Entwicklungspraktiken
Wenn CI/CD-Tools mit Code-Signing verknüpft sind, werden Signaturfehler mit einer Fehlermeldung vermerkt. Diese Benachrichtigung ermöglicht es dem Entwickler, einen Fehler frühzeitig im Entwicklungsprozess zu erkennen und zu beheben. Die Protokolle zu Build- und Deployment-Aktivitäten sind in CI/CD-Pipelines immer detaillierter. In diesem Fall behalten sie den Überblick über Code-Signing und bieten die nötige Klarheit zur Einhaltung von Sicherheitsvorschriften.
CI/CD und DevSecOps
DevSecOps steht für Entwicklung, Sicherheit und Betrieb. Es ist ein Entwicklungsansatz, bei dem alle am Softwareentwicklungsprozess Beteiligten zusammenarbeiten, um die Sicherheit der Software von Anfang an zu gewährleisten. DevSecOps setzt auf automatisierte Pipelines für Tests, Bereitstellung und Überwachung während des gesamten Softwareentwicklungszyklus.
Sicher signierte Artefakte fließen mühelos durch diese automatisierten CI/CD-Pipelines und behalten dabei ihre Integrität und Sicherheit in jeder Phase. Der Signierungsprozess kann innerhalb der Build-Pipeline automatisiert werden, wodurch der Entwicklungsworkflow nahtlos um Sicherheit erweitert wird. DevSecOps ist vereinfacht gesagt DevOps CI/CD, aber auf sichere Weise. Dies zeigt, dass Sicherheit ein zentrales Anliegen ist und alle Entscheidungen und Schritte im Entwicklungslebenszyklus beeinflusst.
Integration einer CI/CD-Pipeline mit einem HSM
Wir benötigen also Codesignaturen, doch ein automatisiertes Build-System mit direktem Zugriff auf die Schlüssel birgt ein hohes Risiko. Datenlecks und Sicherheitslücken sind unvermeidlich; daher ist es unerlässlich, die Codesignatur-Schlüssel sicher in einem Hardware-Sicherheitsmodul (HSM) zu speichern und zu schützen. Die Folgen unzureichender Sicherung von Codesignatur-Schlüsseln durch ein HSM wurden im April 2023 deutlich, als ein Ransomware-Angriff auf MSI die privaten Intel BootGuard-Schlüssel offenlegte, die zur Signierung der Firmware für mehrere Gerätefamilien verwendet wurden.
Da BootGuard-Schlüssel fest in die Hardware-Vertrauenskette integriert sind, können sie nicht ausgetauscht werden, und die Folgen werden die betroffenen Unternehmen möglicherweise jahrelang belasten. HSMs dienen nicht nur der Codesignierung, sondern auch der Sicherung von Public-Key-Infrastrukturen und Datenbankverschlüsselungsschlüsseln. HSMs sind daher ein unverzichtbares Werkzeug für nahezu alle Organisationen, die Daten oder Verschlüsselungsschlüssel speichern oder Code entwickeln.
Wenn wir über HSMs sprechen, mag deren Verwaltung für manche mit wenig Erfahrung kompliziert erscheinen. Optimale Sicherheit erfordert regelmäßige Firmware- und Software-Updates, regelmäßige Audits und die korrekte Verwaltung des Schlüsselzugriffs. Hinzu kommt der Aufwand, das HSM in Ihre bestehende Datenverarbeitungskette zu integrieren.
Die individuelle Arbeit eines zertifizierten HSM-Ingenieurs ist teuer und zeitaufwändig. Im Problemfall kann die Kontaktaufnahme mit einem externen Dienstleister zeitaufwändig und unpraktisch sein. Um die bisher beschriebenen Probleme und Komplexitäten zu lösen, hat Encryption Consulting mit Code Sign Secure eine preisgünstige Lösung entwickelt, die sich in jedes gewünschte HSM Ihres Unternehmens integrieren lässt.
Durch die Nutzung der Leistungsfähigkeit und Sicherheit von HSMs wie den HSMs von Thales, Entrust oder Utimaco lässt sich Code Sign Secure problemlos in Ihre bestehenden Pipelines integrieren und optimiert so den Co-Design-Prozess.
Häufig gestellte Fragen
Was bedeutet „geheimnisfreie“ Signierung im CI/CD-Kontext genau?
Das bedeutet, dass die Pipeline niemals einen dauerhaften, eingebetteten privaten Schlüssel oder ein Passwort zur Authentifizierung beim Signieren speichert. Stattdessen verwendet sie eine bereichsbezogene Dienstidentität, um eine Signatur von einem HSM oder KSP anzufordern. Dadurch kann ein kompromittiertes Pipeline-Konto nicht dazu verwendet werden, den Signaturschlüssel selbst zu extrahieren oder zu missbrauchen.
Macht die Automatisierung der Codesignierung in CI/CD einen Genehmigungsschritt überflüssig?
Nein. Die Automatisierung sollte den manuellen Signieraufwand eliminieren, nicht aber die menschliche Kontrolle der Veröffentlichung. Ein Genehmigungsprozess für die Produktionssignatur wird weiterhin empfohlen, um zu verhindern, dass ein einzelner manipulierter oder bösartiger Commit ungeprüft ein signiertes, verteiltes Artefakt erreicht.
Fazit
Je nach Unternehmensgröße verfügen Sie möglicherweise bereits über ein Rechenzentrum. Alternativ ist eine Investition in ein Rechenzentrum für Ihre Unternehmensgröße möglicherweise nicht sinnvoll. Code Sign Secure erfüllt Ihre Anforderungen mit seinen On-Premises- oder System-as-a-Service-Lösungen.
System-as-a-Service-Angebote ersparen Ihnen den Aufwand, ein HSM zu besitzen und zu warten. Besitzt Ihr Unternehmen jedoch bereits ein HSM oder implementiert es parallel PKI oder einen anderen HSM-abhängigen Dienst, kann dasselbe HSM Code Sign Secure unterstützen . Daher hängt die beste Wahl für Ihr Unternehmen von Ihrer Sicherheitsstrategie ab.
Encryption Consulting unterstützt Sie gerne bei der Planung Ihrer Zukunftspläne. Wir identifizieren aktuelle Sicherheitslücken und identifizieren die Anforderungen Ihres Unternehmens. Wir bieten Audit- und Beratungsleistungen an und setzen unser Team aus Branchenexperten ein, um die optimale Lösung für Sie zu finden.
