Zum Inhalt

47-Tage-Zertifikate sind in Planung. Bist du bereit?

Jetzt handeln →

Code Signing – Ein Leitfaden für Manager

Code Signing – Ein Leitfaden für Manager

Wie wurde die Codesignierung wichtig?

Sehen wir uns drei interessante Trends an, die sich im letzten Jahrzehnt in der Softwareentwicklung herausgebildet haben.

Einer davon ist, dass die Zahl der Unternehmen, die Software entwickeln und veröffentlichen, enorm gestiegen ist. Ein wichtiger Auslöser hierfür war die Smartphone-Revolution und die damit verbundene Notwendigkeit für Unternehmen, eigene mobile Apps für ihre Kunden und Mitarbeiter bereitzustellen.

Der zweite Trend besteht darin, dass das Internet mittlerweile das primäre Mittel zur Verbreitung von Software sowie der zugehörigen Patches und Upgrades geworden ist. Die Vorteile der Online-Softwareverteilung gegenüber traditionellen Methoden wie CDs (Compact Discs) sind erheblich: großflächige, nahezu sofortige Softwareverteilung zu extrem niedrigen Kosten.

Der dritte Trend besteht darin, dass die Zahl der unabhängigen Softwareanbieter (ISVs), deren Hauptgeschäft die Entwicklung von Softwareanwendungen ist, über die Jahre stetig gewachsen ist. Einige Forschungsberichte weisen auf ein zehnfaches Wachstum im letzten Jahrzehnt hin.

Diese Trends erklären, warum der Online-Softwarevertrieb für Unternehmen, die Software entwickeln und verkaufen, zur bevorzugten Methode geworden ist. Doch birgt diese Methode und ihr Komfortvorteil auch Geschäftsrisiken?

Wie kann ein Benutzer feststellen, ob die heruntergeladene Software vom Originalautor stammt (und nicht von einem Betrüger)? Wie kann der Benutzer sicher sein, dass die Software nicht manipuliert wurde und kein Schadcode eingeschleust wurde? Codesignatur liefert die Antwort auf diese Fragen, indem es Unternehmen dabei hilft, die von ihnen veröffentlichte Software abzusichern.

Neben Softwareentwicklern und IT-Sicherheitsexperten ist es für Projektmanager, Produktmanager, Entwicklungsleiter und sogar die Geschäftsleitung unerlässlich, sich mit Codesignierung auszukennen. Der Grund ist einfach: Codesignierung ist ein hervorragender Schutz vor Malware-Angriffen. Und Malware ist die teuerste Angriffsart für jedes Unternehmen: Laut einem aktuellen Forschungsbericht von IBM Security belaufen sich die durchschnittlichen Kosten eines Malware-Angriffs auf 239 Millionen US-Dollar – das ist 60-mal so viel wie die durchschnittlichen Kosten eines Datenlecks!

Wie funktioniert Code Signing?

Der Begriff „Code“ in Codesignatur kann ausführbare Dateien, Archive, Treiber, Firmware, Bibliotheken, Pakete und im Grunde jede Software bezeichnen, die zur Veröffentlichung und Weitergabe an Dritte oder Benutzer bestimmt ist.

Um zu verstehen, wie Code Signing funktioniert, ist es wichtig, ein grundlegendes Verständnis von Public-Key-Infrastruktur (PKI)Wie bereits in früheren Artikeln dieses Blogs erläutert, ist PKI ein Satz von Rollen, Richtlinien, Hardware, Software und Verfahren, die zum Erstellen, Verwalten, Verteilen, Verwenden, Speichern und Widerrufen von Daten erforderlich sind. digitale Zertifikate und verwalten Sie die Public-Key-Verschlüsselung. Es ist auch wichtig, die beiden Hauptziele der Code-Signierung zu verstehen:

  1. Code-Eigentümerschaft: Nachweis, dass der heruntergeladene und installierte Softwarecode vom ursprünglichen, authentischen Eigentümer stammt.
  2. Code-Integrität: Der Nachweis, dass der Code in keiner Weise manipuliert oder verändert wurde, z. B. durch das Einfügen von Schadcode (Malware).

Der Prozess der Codesignierung umfasst vier Hauptschritte, die im Folgenden beschrieben werden.

  1. Schlüsselgenerierung: Grundvoraussetzung für die Codesignierung ist das Vorhandensein eines privaten und des zugehörigen öffentlichen Schlüssels. Dieses Schlüsselpaar kann mithilfe eines (vertrauenswürdigen) Drittanbieter-Tools oder einer entsprechenden Software generiert werden. Eine detaillierte Erklärung der Schlüsselgenerierung würde den Rahmen dieses Artikels sprengen.
  2. Code Signing-Zertifikat: Sie müssen dann ein Code-Signing-Zertifikat mit einem Zertifizierungsstelle (CA), eine vertrauenswürdige Stelle, die digitale Zertifikate ausstellt. Die Anwendung muss Ihren öffentlichen Schlüssel sowie weitere Details zur Identität Ihrer Organisation enthalten. Zu den bekannten Zertifizierungsstellen gehören Verisign, Digicert, Symantec, GoDaddy, Comodo, Let's Encrypt und GlobalSign. Das von der Zertifizierungsstelle ausgestellte Zertifikat enthält Informationen wie Ihre (Organisations-)Identität, Ihren öffentlichen Schlüssel, die Gültigkeitsdauer des Zertifikats, die digitale Signatur der Zertifizierungsstelle und weitere Details.
  3. Hashing: Der nächste Schritt ist das Hashen Ihres Codes. Hashing ist ein Einwegverfahren, bei dem Daten beliebiger Größe und Art mithilfe eines mathematischen Algorithmus in Daten fester Größe umgewandelt werden. Der Algorithmus wird Hash-Funktion genannt, und sein Ergebnis, also die Daten fester Größe, heißt Hashwert oder Hash. Der Hashwert unterscheidet sich vollständig von den Originaldaten, und die Originaldaten können nicht aus dem Hashwert abgeleitet werden.
  4. Unterzeichnung: Der Hashwert der Software wird anschließend mit dem privaten Schlüssel verschlüsselt oder „signiert“. Der verschlüsselte Hashwert wird zusammen mit dem Codesignaturzertifikat dem Softwarepaket hinzugefügt, das nun versandfertig ist. Der Grund, warum der Hashwert und nicht die Originalsoftware signiert wird, liegt darin, dass der Hashwert eine kleine Datenmenge (typischerweise bis zu 512 Bit) darstellt, die sehr schnell verschlüsselt werden kann, während die Originalsoftware sehr groß sein und ihre Verschlüsselung viel Zeit in Anspruch nehmen kann. Außerdem ist es nicht notwendig, den Softwarecode selbst zu verschlüsseln: Der Vorteil des Hashings besteht darin, dass sich der von der Hashfunktion erzeugte Hashwert vollständig ändert, wenn der Originalcode der Software auch nur um ein einziges Bit verändert wird.

Best Practices für die Code-Signierung

Für einen sicheren Code Signing-Prozess empfehlen wir die folgenden Vorgehensweisen: 

  1. Speichern der privaten Schlüssel im HSM

    Das Hardware-Sicherheitsmodul (HSM) erlaubt nicht den Export privater kryptografischer Schlüssel in Software, da diese dadurch anfällig für Angriffe werden. Nach der Anforderung des CAB-Forums vom Juni 2023 empfehlen wir dringend die Verwendung eines FIPS 140-2 HSM-zertifiziert für Code Signing der Stufe 2 (oder höher).

  2. Beschränken des Zugriffs auf private Schlüssel

    Wir empfehlen dringend, nur minimale Verbindungen zu Clientsystemen mit den privaten Schlüsseln zuzulassen. Durch die Beschränkung des Schlüsselzugriffs auf begrenzte Benutzer werden viele unauffällige Benutzeraktivitäten vermieden.

  3. Code sollte immer mit einem Zeitstempel versehen sein

    Mithilfe von Zeitstempeln lässt sich der Zeitpunkt der Signatur von Code gut nachvollziehen und die Gültigkeitsdauer der Signatur überprüfen. Außerdem lässt sich der Code überprüfen, nachdem das für die Signatur verwendete Zertifikat abgelaufen oder widerrufen wurde.

  4. Vermeiden Sie die übermäßige Verwendung einer Taste

    Unternehmen verwenden manchmal denselben Schlüssel zum Signieren von Code über mehrere Produktlinien und Geschäftsbereiche hinweg. Dies ist kein guter Ansatz. Wird dieser Schlüssel kompromittiert, sind alle mit diesem Schlüssel signierten Versionen gefährdet. Es empfiehlt sich, die Schlüssel so oft wie möglich zu rotieren.

  5. Transparenz schaffen und die Verwaltung zentralisieren

    In der Regel verwalten Unternehmen Zertifikate und Schlüssel manuell. Dies ist jedoch kein guter Ansatz, da manuelle Prozesse weder vollständige Transparenz noch zentrale Kontrolle über die Schlüssel bieten. Die Anwendung verschiedener Richtlinien auf die Schlüssel und deren Regulierung ist ohne ein zentrales Verwaltungssystem schwierig.

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.

Was passiert beim Herunterladen der Software?

Auf der Empfängerseite prüft der zum Herunterladen der Software verwendete Browser zunächst, ob das Zertifikat im heruntergeladenen Code authentisch ist und von einer vertrauenswürdigen Zertifizierungsstelle stammt. Dies ist möglich, da die öffentlichen Schlüssel der meisten bekannten Zertifizierungsstellen in den meisten Browsern und Betriebssystemen bereits vorinstalliert sind.

Wird das Zertifikat nicht authentifiziert, warnt der Browser und lässt den Download je nach Browsersicherheitseinstellungen gegebenenfalls nicht zu. Ignoriert der Nutzer diese Warnung und versucht, die Software zu installieren, gibt das Betriebssystem eine Meldung aus, dass der Softwarehersteller nicht verifiziert werden konnte. Dadurch wird der Nutzer effektiv von der Installation der Software abgehalten. Dies erfüllt das erste Ziel der Codesignierung, nämlich die Feststellung der Code-Inhaberschaft.

Wird das Zertifikat authentifiziert, wird der öffentliche Schlüssel extrahiert und zum Entschlüsseln des im Paket enthaltenen verschlüsselten Hashwerts verwendet. Anschließend wird die heruntergeladene Software (ohne Zertifikat und Hashwert) mit derselben Hashfunktion erneut gehasht. Dieser Hashwert wird mit dem entschlüsselten Hashwert verglichen. Stimmen sie überein, ist die Software unverändert. Hat ein Angreifer die Software verändert (z. B. durch Hinzufügen von Schadsoftware), stimmen die Hashwerte nicht überein, das Betriebssystem gibt eine Warnung aus und verweigert die Installation der Software. Damit ist das zweite Ziel erreicht: die Sicherstellung der Codeintegrität.

Code Signing für die Sicherheit der Software-Lieferkette

Wenn ein privater Schlüssel kompromittiert wird, verliert das Zertifikat seine Vertrauenswürdigkeit und die Authentizität und Integrität der mit diesem Code-Signatur-Zertifikat signierten Software ist zerstört. Code-Signatur-Verfahren gewährleisten eine sichere Produktentwicklung, -produktion und -bereitstellung. Die Best Practices zum Schutz der Software-Lieferkette durch sichere Code-Signatur sind: 

  1. Authentifizieren Sie den Code vor dem Signieren und Freigeben.

    Unternehmen sollten optimierte Code-Signaturprozesse wie CI/CD-Pipelines und Genehmigungsprozesse nutzen, um die Signierung von Schadcode zu verhindern. Nach der Signierung sollte der Code oder das Artefakt authentifiziert und verifiziert werden, bevor er den Benutzern zur Verfügung gestellt wird. Unternehmen sollten außerdem Protokolle aller Code-Signaturprozesse für spätere Audits führen.

  2. Widerrufen Sie kompromittierte Zertifikate

    Um die Codesicherheit zu gewährleisten, sollte der Widerruf befolgt werden. Kompromittierte Zertifikate sollten vom CA; auf diese Weise können die beschädigten oder kompromittierten Zertifikate nicht für Code-Signatur-Aktivitäten verwendet werden. 

Code Signing in Cloud-nativen Umgebungen 

Codesignatur ist bei der Bereitstellung cloudnativer Anwendungen oder im DevOps-Umfeld von großer Bedeutung. Vor der Verteilung von Software an Benutzer können wir Softwaretypen wie Container-Images, Anwendungsdateien usw. signieren und verifizieren. In cloudnativen Umgebungen ist die Codesignierung integriert mit CI / CD Pipelines, um das Vertrauen und die Authentizität der Software zu wahren. Durch die Einbeziehung von Code Signing in Cloud-native Umgebungen können Unternehmen das Risiko der Manipulation von Code verhindern, der ihn für die Verbreitung schädlich macht. 

Fazit

Heute ist die Codesignierung ein unverzichtbarer Bestandteil des Softwareentwicklungszyklus. Ohne Codesignierung riskieren Unternehmen, Nutzer zu verlieren und im Falle von Malware-Angriffen enorme finanzielle und Reputationsrisiken einzugehen. Daher ist es für Software-Manager und das Top-Management gleichermaßen wichtig, die Codesignierung und ihre Bedeutung für ihre Organisationen zu verstehen.