Besuchen Sie Keyfactor auf der RSA Conference™ 2024 | 6. bis 9. Mai | Erfahren Sie mehr

Integration von Secure Code Signing in die CI/CD-Pipeline

Code-Signierung

In unserer zunehmend digitalen Welt ist Vertrauen alles.

Endbenutzer müssen dem software , mit dem sie interagieren, vertrauen, Entwickler und Techniker müssen in der Lage sein, dieses Vertrauen zu schaffen, und Sicherheitsteams müssen die richtigen Kontrollen einrichten, um den gesamten Zyklus zu ermöglichen.

Wie wir alle wissen, ist es natürlich nicht immer einfach, digitales Vertrauen aufzubauen und zu erhalten.

Eine der besten Möglichkeiten, digitales Vertrauen zu schaffen, ist die Verwendung von Identitäten und, genauer gesagt, Code-Signierungmit dem die Authentizität neuer Versionen überprüft wird. Aber wie genau wird Code Signing heute in Unternehmen eingesetzt? Welches sind die größten Herausforderungen, denen sich Teams bei der Implementierung von Code Signing stellen müssen, und was passiert, wenn diese Prozesse nicht sicher sind? Und was passiert, wenn diese Prozesse nicht sicher sind? Vielleicht am wichtigsten: Wie können Sie sicheres Code Signing in Ihrer CI/CD-Pipeline gewährleisten?

Diese und weitere Fragen haben wir kürzlich in unserem Webinar beantwortet Integration von Secure Code Signing in die CI/CD-Pipeline. Lesen Sie die Highlights dieser Diskussion, oder klicken Sie hier, um die vollständige Aufzeichnung anzusehen.

Schaffung von digitalem Vertrauen: Jede Maschine braucht eine Identität, und jede Identität muss verwaltet werden

Lassen Sie uns zuallererst über die Schaffung von digitalem Vertrauen sprechen. Wenn es um Code Signing geht, muss jedes Unternehmen eine vertrauenswürdige Umgebung schaffen, in der sich die Sicherheitsteams mit den vorhandenen Kontrollen wohlfühlen und in der Entwickler und Ingenieure arbeiten können, wie und wo sie wollen, ohne unnötige Risiken einzugehen.

Es ist nicht einfach, dieses Gleichgewicht zu finden, insbesondere für DevOps-Teams. Zwischen Entwicklern, die dezentral arbeiten, Arbeitslasten, die in mehreren Umgebungen laufen, und DevOps-Toolketten, die immer komplexer werden, wird es immer schwieriger zu wissen, was vertrauenswürdig ist und was nicht. 

An dieser Stelle wird die Identität so wichtig - besonders für Maschinen. Ganz einfach: Jede Maschine, jedes Gerät und jede Arbeitslast benötigt eine Identität, und jede dieser Identitäten muss geschützt und verwaltet werden.

Code Signing-Zertifikate sind nicht anders: Sie sind die Identität hinter Ihrem software , da sie verwendet werden, um alles zu authentifizieren, von software Builds und Artefakten bis hin zu Container-Images und sogar Firmware und IoT Einstellungen. Wenn diese Code Signing-Identität kompromittiert wird, untergräbt dies das Vertrauen.

Verstehen von Anwendungsfällen für Code Signing: Die integrale Komponente für digitales Vertrauen

In den letzten Jahren hat die Rolle der Code-Signierung bei der Schaffung von digitalem Vertrauen immer mehr an Bedeutung gewonnen. Endnutzer, die software aus dem Internet herunterladen, erwarten, dass software signiert ist. 

Diese Realität in Verbindung mit dem Aufkommen von Null-Vertrauens-Umgebungen bedeutet, dass so gut wie jedes Asset, das ein Unternehmen produziert, signiert werden muss - alles, was bereitgestellt werden kann (z. B. Skripte, Infrastrukturcode, Container-Images, Anwendungen, WAR-Dateien, EAR-Dateien, DLLs, ausführbare Dateien, Makros), muss signiert werden, da bösartige Aktivitäten überall stattfinden können.

Einige der häufigsten Anwendungsfälle für das Signieren von Code sind daher folgende:

  • Schutz der Infrastruktur: Verhindern Sie unautorisierte Downloads und Ransomware, indem Sie nur vertrauenswürdige Anwendungen auf Ihrer Infrastruktur ausführen lassen.
  • Sicherung von Geräten und Firmware: Verhinderung von unberechtigtem Gerätezugriff durch Sicherung von Firmware und Firmware-Updates mit digitalen Signaturen und Verifizierung.
  • Absicherung von software: Sicherstellen, dass die veröffentlichten und verteilten software signiert und die Schlüssel geschützt sind.
  • Vertrauen in Container: Erstellen von vertrauenswürdigen und digital signierten Basis-Images für Container und virtuelle Maschinen, die in Ihrer Umgebung eingesetzt werden.
  • Ermöglichung von DevSecOps: Schaffung von Vertrauen in der CI/CD-Pipeline, von der digitalen Signierung von in Repositories eingechecktem Quellcode bis zur Signierung von Paketen nach der Erstellung.
  • Verhinderung von bösartigen Makros: Verhinderung von nicht autorisierten oder bösartigen Makros auf internen Geräten, indem sichergestellt wird, dass nur signierte Makros ausgeführt werden dürfen.

Vertrauen schaffen und Risiken reduzieren: Das Code Signing Reifegradmodell

Angesichts der Bedeutung von Code Signing für die Schaffung von digitalem Vertrauen und der Vielzahl von Anwendungsfällen für Code Signing müssen Unternehmen ihren Code Signing-Praktiken große Aufmerksamkeit schenken. Hier kommt die Idee eines Code-Signing-Reifegradmodells ins Spiel. Dieses Modell sieht wie folgt aus:

Stufe 0: Keine Unterzeichnung

  • Keine Unterzeichnung von software deliverables
  • Anfällig für unbefugten Code-Zugriff
  • Keine Überprüfbarkeit oder Integrität hinter der software

Ebene 1: Fragmentiert

  • Unterzeichnung von software Ergebnissen, aber mit fragmentierten Tools
  • Entwickler verwalten ihre eigenen privaten Schlüssel ohne zentralisierte Kontrolle
  • Signierschlüssel sind anfällig für Missbrauch oder Kompromittierung

Ebene 2: Zentralisiert

  • Verwendung einer zentralisierten Plattform für Code Signing-Richtlinien, Arbeitsabläufe und Prüfbarkeit
  • Schutz von sensiblen Signierschlüsseln in einem sicheren HSM
  • Nicht in CI/CD-Prozesse oder -Workflows integriert und nicht alle Anwendungsfälle werden abgedeckt

Stufe 3: CI/CD integriert

  • Signieren aller Container, Artefakte und software Ergebnisse
  • Integriert mit nativen Signierwerkzeugen und Arbeitsabläufen
  • Vollständige Nachvollziehbarkeit und Kontrolle über alle Unterzeichnungsprozesse

Leider befinden sich viele Unternehmen heute irgendwo zwischen Stufe 0 und Stufe 1 in diesem Reifegradmodell. Das Problem ist nicht, dass die Teams die Bedeutung der Code-Signierung nicht erkennen, sondern vielmehr, dass sie nicht wissen, wie man signiert, oder nicht auf dem neuesten Stand sind, was die besten Praktiken für die Signierung angeht.

So werden beispielsweise häufig Schlüssel auf USB-Laufwerken weitergegeben, was ein Risiko darstellt. Oder wir sehen, dass verschiedene Teams unterschiedliche Einzellösungen verwenden, was bedeutet, dass die Prozesse fragmentiert sind und sich nicht gut auf das gesamte Unternehmen übertragen lassen. 

Dies geschieht, weil sicheres Code Signing eine Herausforderung ist: Man muss den Teams, die sie benötigen, den Zugang zu den Schlüsseln ermöglichen, egal wo sie sich befinden, und sie gleichzeitig für diejenigen unzugänglich machen, die nicht mit diesen Schlüsseln signieren sollen. Das kann wie eine Zwickmühle wirken.

Eine Lösung finden: Wie Keyfactor Signum häufige Hindernisse beim sicheren Signieren von Code aus dem Weg räumt

Wie genau kommt man also zur Zentralisierung und darüber hinaus im Reifegradmodell der Codesignatur? In der Regel gibt es drei zentrale Herausforderungen, die Teams lösen müssen. Glücklicherweise bietet Keyfactor Signum Lösungen für diese Herausforderungen durch Funktionen wie Schlüsselschutz, Richtlinienkontrolle, Ereignisprotokolle, native Schnittstellen, Authentifizierung und Bescheinigung. 

Schutz der Schlüssel

Die Herausforderung: Wo sind Ihre Code Signing Keys gespeichert? Allzu oft sind sie auf Flash-Laufwerken, Build-Servern oder Workstations gespeichert - alles Orte, die für den unbefugten Zugriff Dritter anfällig sind.

Die Lösung: Keyfactor Signum Schutz dieser sensiblen Schlüssel durch Erzeugung und Speicherung in einem HSM. Insbesondere verhindert Keyfactor , dass diese Schlüssel das HSM nach der Erstellung verlassen.

Warum das wichtig ist: In Zukunft wird diese Schlüsselbestätigung (oder die Möglichkeit, Ihrer öffentlichen Zertifizierungsstelle nachzuweisen, dass die Schlüssel auf einem HSM generiert wurden) äußerst wichtig sein, da das CAB-Forum bald durchsetzen wird, dass öffentliche Zertifizierungsstellen diesen Nachweis haben müssen, um Zertifikate zu signieren.

Prüfbarkeit

Die Herausforderung: Wer hat Zugriff auf den zu signierenden Code, und gibt es einen Prüfpfad, der Aufschluss darüber gibt, wer was, wann und womit signiert hat? Es reicht nicht aus, die Schlüssel an einem sicheren Ort zu speichern und zu generieren, denn Sie müssen auch kontrollieren, wer Zugriff darauf hat.

Die Lösung: Keyfactor Signum Die Lösung schafft diese Überprüfbarkeit, indem sie Regeln und Richtlinien durchsetzt, die festlegen, wer Zugang zu den Schlüsseln hat, wer sie verwenden darf und wofür sie verwendet werden können. Außerdem bietet sie einen vollständigen Prüfpfad, der einen Einblick in alle Vorgänge in der Umgebung ermöglicht.

Warum das wichtig ist: Da die Zahl der Anwendungsfälle, die eine Code-Signierung erfordern, weiter zunimmt, ist dieses Maß an Transparenz zur Verifizierung und Validierung von Signieraktivitäten für eine sichere Skalierung unerlässlich.

Bedürfnis nach Geschwindigkeit

Die Herausforderung: Die Entwickler wollen etwas, das einfach zu verwenden ist und ihre Prozesse nicht verändert. Wenn Sie also die Schlüssel an einem sicheren Ort aufbewahren und den Zugriff streng kontrollieren, wie können Sie diese Schlüssel dennoch für die Teams, die sie zum Signieren von Code benötigen, leicht zugänglich machen?

Die Lösung: Keyfactor Signum Durch die Integration in native Signierwerkzeuge und die Einbindung in bestehende Build- und Delivery-Prozesse können diese Schutzmechanismen in die Praxis umgesetzt werden, so dass Entwickler ihre Arbeitsabläufe nicht ändern müssen.

Warum das wichtig ist: Durch die Einführung nativer Integrationen in ihre bestehenden Tools können Ihre Entwickler weiterhin so arbeiten, wie sie es bereits tun. Dadurch wird es für sie einfach, bei Bedarf Schlüssel zu erhalten (und somit Verlangsamungen und/oder Umgehungen zu vermeiden), während die Sicherheit durch die Authentifizierung über einen Identitätsanbieter erhalten bleibt.

Die Lösung verstehen: Einblick in die Lösungsarchitektur von Keyfactor Signum

Zu wissen, was Keyfactor Signum ist, ist eine Sache, zu verstehen, wie es genau funktioniert und wie es in der Praxis aussieht, eine andere. In diesem Sinne werfen wir einen Blick auf einen typischen Arbeitsablauf mit Keyfactor Signum :

Sobald der Code festgeschrieben ist, muss er signiert werden, egal woher er kommt und was er ist. Keyfactor Signum bietet Integrationen zu gängigen Signierwerkzeugen (z.B. SignTool, jarsigner, Cosign, etc.), um dies zu unterstützen. Da Keyfactor in der Cloud gehostet wird, können Benutzer von überall aus sicher signieren.

Keyfactor Signum bietet außerdem verschiedene Authentifizierungsmodelle über einen SAML/OAuth-Agenten und eine Verwaltungskonsole. Über die Konsole haben Administratoren die Kontrolle über und den Einblick in Signierrichtlinien und können Genehmigungen erteilen, wer was tun darf, und haben Zugriff auf Prüfprotokolle, um die tatsächlichen Aktivitäten zu sehen.

Insgesamt bietet diese Architektur eine leistungsstarke Lösung, die den Code-Signierungsprozess für Entwickler vereinfacht und Administratoren die nötige Kontrolle gibt, um die Verwaltung zu zentralisieren und sicherzustellen, dass die Schlüssel angemessen geschützt sind.

Alles unter einen Hut bringen: Integration von sicherem Code Signing in die CI/CD-Pipeline

Und wie passt das alles in die CI/CD-Pipeline? Mit einer Lösung wie Keyfactor Signum können Sie dafür sorgen, dass jede Binärdatei, die in Ihr Repository aufgenommen wird, signiert ist - Punkt. So sieht der Prozess aus:

Sobald ein Entwickler den Code in die CI/CD-Pipeline überträgt, wird er in das Quellcode-Repository übertragen und Ihr CI-Server (sei es Jenkins, Azure DevOps oder ein anderer) führt Unit-Tests durch. Von dort aus wird der Code mit dem Keyfactor Signum Client signiert und dann im Repository gespeichert.

Künftig wird der Code jedes Mal verifiziert, wenn jemand etwas aus dem Repo zieht. Tools wie SignTool, jarsigner und Cosign haben alle eine Verifizierungskomponente eingebaut, um zu prüfen, ob der Code von einem verifizierten Zertifikat signiert ist, das auf der richtigen Vertrauensbasis basiert. Das bedeutet, dass selbst wenn jemand sein eigenes Signierzertifikat erstellen würde, es außerhalb des vorgesehenen Vertrauensstamms liegen würde, so dass jeder mit diesem Zertifikat signierte Code in der Verifizierungsphase fehlschlagen würde.

Sobald der Code die Verifizierungsphase bestanden hat, können Integrations- und Lasttests beginnen, und schließlich kann der Code in Produktion gehen. Das Wichtigste bei all dem ist, dass unabhängig davon, wann jemand etwas aus dem Repo zieht, immer zuerst ein Verifizierungsschritt stattfindet, bevor irgendetwas anderes passieren kann.

Was kommt als Nächstes? Sehen Sie Keyfactor Signum in Aktion

Möchten Sie noch mehr über die Integration von Secure Code Signing in Ihre CI/CD-Pipeline erfahren und wie Keyfactor Signum Ihnen dabei helfen kann? Klicken Sie hier, um sich das komplette Webinar anzuseheneinschließlich einer Live-Demo von Keyfactor Signum .