Was ist Code Signing und wie funktioniert es?
Beim Code Signing werden ausführbare Dateien und Skripte mit Hilfe eines Signierwerkzeugs und eines digitalen Zertifikats digital signiert. Dieses Verfahren basiert auf einer Technologie namens Public-Key-Infrastruktur (PKI).
Code Signing erfordert ein spezielles Signierwerkzeug, z. B. das SignTool von Microsoft, Jarsigner von Java oder sogar OpenSSL, je nach Art der zu signierenden Datei. Die Signatur selbst ist ein kryptografischer Vorgang, der den Inhalt der Datei mit einem digitalen Zertifikat verknüpft.
Die Codesignierung schützt Ihr Unternehmen, Ihre Partner und Ihre Endbenutzer vor Softwaremanipulationen beim Herunterladen von ausführbaren Programmdateien – insbesondere aus ungesicherten Kanälen wie dem Internet. Als Lösungsanbieter für Codesignierung kann Entrust Sie bei der Implementierung effizienter, hochsicherer Codesignierungslösungen unterstützen. Diese schützen Ihr Unternehmen und Ihre Kunden vor Angriffen, die darauf abzielen, Anwendungen zu fälschen oder zu modifizieren.
Wozu dient die digitale Codesignierung?
Es gibt zwei Hauptgründe für das digitale Code Signing:
- Um den Benutzern die Identität der Organisation mitzuteilen, die die signierte Datei veröffentlicht
- Zur Bereitstellung eines Mittels zur Überprüfung der Integrität der Datei – d. h., dass sie nicht beschädigt oder böswillig verändert wurde, seit sie signiert wurde
Was sind Code Signing-Zertifikate?
Code Signing-Zertifikate werden von Softwareentwicklern verwendet, um Anwendungen, Treiber, ausführbare Dateien und Softwareprogramme digital zu signieren. Dadurch wird für die Endnutzer sichergestellt, dass der Code nicht von Dritten manipuliert oder gehackt wurde. Um eine Bindung zwischen den öffentlichen Schlüsseln und den zugehörigen Benutzern (Inhabern der privaten Schlüssel) zu schaffen, nutzen Public-Key-Infrastrukturen digitale Zertifikate.
Best Practices: Code-Signatur
Bewährte Methoden für Code Signing-Zertifikate umfassen:
- Kontrolle des Zugriffs auf private Schlüssel
- Schutz privater Schlüssel mit einem FIPS-140-2 Hardware-Sicherheitsmodul (HSM) der Stufe 3
- Code des Zeitstempels
- Unterschied zwischen Test-Signatur und Freigabe-Signatur verstehen
- Authentifizieren des zu signierenden Codes
- Verteilen des Risikos auf mehrere Zertifikate
- Widerrufen kompromittierter Zertifikate
Entrust bietet eine vollständige Palette von Code Signing-Zertifikaten und eine umfassende Methode zu deren Verwaltung, einschließlich TLS/SSL-Zertifikate, sichere E-Mail-Zertifikate, Zertifikate zum Signieren von Dokumenten und Zertifikate für Mobilgeräte.
Wie funktioniert die Codesignierung?
Um eine Codesignierung zu implementieren, muss der Softwarehersteller ein privates, öffentliches Schlüsselpaar erzeugen und den öffentlichen Schlüssel zusammen mit einem Antrag auf Ausstellung eines Code Signing-Zertifikats bei einer Zertifizierungsstelle einreichen. Die Zertifizierungsstelle prüft die Identität des Softwareherausgebers und beglaubigt die digital signierte Zertifikatsanforderung des Herausgebers. Nach erfolgreichem Abschluss dieses Prüfungs- und Schlüsselverifizierungsprozesses bündelt die Zertifizierungsstelle die Identität des Herausgebers mit dem öffentlichen Schlüssel und signiert das Bündel. Dadurch wird das Code Signing-Zertifikat erstellt.
Weitere Informationen über die Implementierung einer Codesignierung finden Sie in diesem Whitepaper.
Methoden für das digitale Signieren
Verschiedene Anwendungsplattformen unterstützen das Signieren von Code und bieten verschiedene Werkzeuge zur Durchführung der Signierung an. Nachstehend finden Sie eine Liste der gängigsten Arten der Codesignierung:
- Adobe AIR
- Apple Mac OS X Developer Library
- Firefox XPI
- Java
- Microsoft
Schritte für Endnutzer
In fünf einfachen Schritten können Benutzer feststellen können, ob eine Software vertrauenswürdig ist:
- Prüfen Sie, ob Sie die Installation der Software geplant war.
- Überprüfen Sie den Dateinamen, um festzustellen, ob er auf die Software hinweist, die Sie installieren wollten. Im vorherigen Beispiel installiert der Benutzer Adobe Reader 10, worauf der Name hinzuweisen scheint.
- Überprüfen Sie den Namen des Herausgebers, um zu sehen, ob er mit dem Herausgeber übereinstimmt, von dem Sie glauben, dass er die Software geschrieben hat. Dies kann sich als schwierig erweisen, da die Website, von der die Software heruntergeladen wird, eine andere sein kann als die Website des Herausgebers.
- Überprüfen Sie das Code Signing-Zertifikat, um festzustellen, ob der Name des Herausgebers im Zertifikat enthalten ist.
- Prüfen Sie, ob das Zertifikat von einer öffentlichen, vertrauenswürdigen Zertifizierungsstelle (Certificate Authority, CA) ausgestellt wurde.
Codesignierfunktionen
Bei unternehmensvalidierten (OV-)Zertifikaten werden das Unternehmen und der Standort auf dem Zertifikat angezeigt. Sie unterstützen das Signieren im Windows-Kernelmodus nicht. Bei Zertifikaten mit erweiterter Validierung (EV-Zertifikaten) werden neben der Organisation und dem Standort auch die Gerichtsbarkeit und die Art der Organisation angezeigt. EV-Zertifikate ermöglichen auch das Signieren im Windows-Kernelmodus für Vista, Windows 7, Windows 8, Windows 8.1 und Windows 10. Die Wahl der für die Bedürfnisse Ihres Unternehmens am besten geeignetsten Zertifikatslösung für die Codesignierung ist kompliziert, aber Entrust unterstützt Sie dabei.
Codesignierlösungen
Entrusts Portfolio an Codesignierlösungen kombiniert manipulationssichere nShield-Hardware-Sicherheitsmodule (HSMs) mit der Code Signing Gateway Lösung von Entrust Professional Services. Das Code Signing Gateway verwaltet den Autorisierungs-Workflow, nimmt Anfragen an, benachrichtigt die Genehmigenden per E-Mail, verwaltet Zeitüberschreitungen, bestätigt Genehmigungen, protokolliert die Aktivitäten und liefert den signierten Code an den Staging-Bereich. Die Lösung nutzt Entrust nShield HSMs und die Root-of-Trust – die Sicherung aller Signierschlüssel in einem FIPS 140-2 zertifizierten HSM. Dies verhindert den potenziellen Verlust von wertvollen Signierschlüsseln – den Schlüsseln für die Authentizität und Integrität Ihres Codes. Dies ermöglicht es Kunden, ihren eigenen Softwarecode zu signieren. Die Merkmale umfassen:
- Microsoft Smartscreen-Filter
- Integration mit Produkten anderer Anbieter
- Unbegrenzte Integrationen
- Zeitstempel
- Status als identifizierter Herausgeber
- Weniger Warnmeldungen
Codesignierlösungen von Entrust werden durch unsere umfangreiche Kenntnis über bewährte Methoden bei der Codesignierung und unsere Standards der Sorgfaltspflicht abgesichert.
Wie wird durch das Code Signing die Identität der Organisation, die die signierte Datei veröffentlicht, festgestellt?
Eine digitale Signatur schafft eine kryptografische Verbindung zwischen einer Datei und einem digitalen Zertifikat, wobei letzteres eine Organisation repräsentiert Sie können sich das Zertifikat wie einen digitalisierten Stempel vorstellen: Es enthält Details über die Organisation, wie den rechtlichen Namen, die E-Mail-Adresse, die physische Adresse und das Land. Das Signieren des Codes entspricht also dem Aufbringen eines digitalen Stempels auf den Code, der die Angaben der Organisation enthält.
Die Details einer Codesignatur können bei jedem Öffnen der signierten Datei überprüft werden. In den meisten Fällen wird dies von den Betriebssystemen automatisch durchgeführt, wobei der Name der Organisation angezeigt wird, der in dem für die Signatur verwendeten Zertifikat enthalten ist.
Wie kann die Integrität der Datei durch Code Signing überprüft werden?
Jede Codesignatur wird auf der Grundlage des Inhalts der Datei erstellt. Ohne zu sehr ins technische Detail zu gehen, berechnet ein Signierwerkzeug eine komprimierte Version der zu signierenden Datei – wir nennen sie einen Hash – und signiert diese komprimierte Version unter Verwendung des bereitgestellten digitalen Zertifikats. Dieser signierte Hash wird dann in die Datei an einem Ort eingebettet, der für digitale Signaturen vorgesehen ist.
Sobald Sie mit der Verteilung der signierten Datei beginnen, erkennen die Betriebssysteme und die entsprechenden Anwendungen das Vorhandensein der Signatur. Sie berechnen automatisch den Hash der Datei (ohne den signierten Hash in die Berechnung einzubeziehen) und vergleichen ihn mit dem in der Datei eingebetteten signierten Hash. Wenn beide identisch sind, ist die Überprüfung erfolgreich. Wenn sich der berechnete Hash von dem signierten Hash unterscheidet, schlägt die Überprüfung fehl. Eine fehlgeschlagene Überprüfung bedeutet, dass der Inhalt der Datei nach der Durchführung der Signatur geändert wurde (aufgrund eines Fehlers oder einer böswilligen Absicht).
Die Zuverlässigkeit dieses Mechanismus hängt von der Stärke des Algorithmus ab, der zur Berechnung des Hash verwendet wird – je länger der Hash, desto besser. Einer der derzeit verwendeten Standards ist SHA-256, ein Algorithmus, der 256-Bit-Hashes erzeugt.
Was sind die Vorteile von Code Signing?
Das digitale Code Signing hat mehrere Vorteile:
- Sie erhöhen das Vertrauen der Benutzer in Ihre Software. Signierter Code beweist nicht nur, dass die Datei zu der erwarteten Organisation gehört, sondern garantiert auch, dass sie nicht manipuliert wurde (z. B. um Malware einzuschleusen).
- Sie steigern Ihrer Reputation als Softwareentwickler. Je mehr signierte Software Sie veröffentlichen, desto besser wird Ihr Ruf. So signiert beispielsweise Microsoft seine Software mit einem Code, um sicherzustellen, dass die Kunden die richtigen Dateien herunterladen. Signierte Software ist auch für Antivirenprogramme und Malware-Detektoren hilfreich. Wenn Sie Ihre Software signieren, können sie verdächtige, nicht signierte Versionen Ihrer Software erkennen.
- Sie vermeiden Warnungen und Blockierungen durch Betriebssysteme. Diese erwarten von allen Softwareherstellern, dass sie ihre ausführbaren Dateien signieren. Wenn Sie nicht signierte Software veröffentlichen und Ihre Benutzer sie starten, ist die Wahrscheinlichkeit groß, dass Benutzer eine Warnmeldung des Betriebssystems erhalten. MacOS ist dafür bekannt, dass es sich weigert, unsignierte Dateien zu starten, und den Benutzer zwingt, die Sicherheit zu umgehen, um mit der Installation fortzufahren.
Warnmeldung für die Installation unsignierter Software unter Microsoft Windows 10.
Meldung über Blockierung bei der Installation unsignierter Software unter MacOS.
Bei IoT-Geräten, die Firmware verwenden, besteht eine der besten Möglichkeiten zur Gewährleistung sicherer Aktualisierungen darin, die Firmware so zu gestalten, dass nur aktualisierte Dateien akzeptiert werden, die mit Ihren internen (privaten) Code-Signing-Zertifikaten signiert sind.
Was ist der Unterschied zwischen Public Code Signing und Private Code Signing?
Code-Signing-Zertifikate werden von Zertifizierungsstellen (Certification Authority, CA) ausgestellt, bei denen es sich um Zertifikatausstellungsmaschinen handelt Die meisten Organisationen besitzen eine oder mehrere „private“ (interne) Zertifizierungsstellen und können alle Arten von digitalen Zertifikaten, einschließlich Code-Signing-Zertifikaten, ausstellen. Die mit diesen Zertifikaten erzeugten Signaturen sind jedoch nur innerhalb der internen Umgebung des Unternehmens vertrauenswürdig.
Während dies für viele Anwendungsfälle im Zusammenhang mit internen Anwendungen und IoT perfekt ist, funktioniert die Verwendung einer privaten Zertifizierungsstelle nicht, wenn Sie planen, Ihren Code außerhalb Ihrer Umgebung zu verteilen, wo Ihre Zertifizierungsstelle nicht anerkannt wird.
Code-Signing-Zertifikate, die von öffentlich vertrauenswürdigen Zertifizierungsstellen – wie der von Entrust – ausgestellt werden, erzeugen Signaturen, die von allen wichtigen Betriebssystemen und Anwendungen weltweit anerkannt und als vertrauenswürdig angesehen werden. Organisationen wie Entrust, die öffentliche Zertifizierungsstellen (kurz: öffentliche CAs) bereitstellen, folgen strengen Standards für die Ausstellung von Zertifikaten, müssen sich regelmäßigen Audits unterziehen und sich um das Vertrauen jedes größeren Anbieters von Betriebssystemen oder Anwendungen wie Microsoft, Apple, Google oder Mozilla bewerben.
Bei signiertem Code prüfen Betriebssysteme und Anwendungen die ausstellende Zertifizierungsstelle des für die Signatur verwendeten Zertifikats. Wenn die ausstellende Zertifizierungsstelle nicht in ihrer „Vertrauensliste“ (auch Stammspeicher genannt) enthalten ist, wird der Signatur nicht vertraut und die Überprüfung schlägt fehl. Daher ist es wichtig, bei der Veröffentlichung von Software im Internet öffentliche vertrauenswürdige Code-Signing-Zertifikate zu erwerben.
Was ist der Unterschied zwischen OV Code Signing und EV Code Signing?
Während es Organisationen freisteht, in ihre privaten Code-Signing-Zertifikate alle gewünschten Details aufzunehmen, dürfen öffentliche Zertifikate nur Informationen enthalten, die von der öffentlichen Zertifizierungsstelle vor der Ausstellung des Zertifikats gründlich überprüft wurden.
Eine öffentliche Zertifizierungsstelle kann zwei Kategorien von öffentlich vertrauenswürdigen Code-Signing-Zertifikaten ausstellen: OV und EV. Diese Kategorien entsprechen dem Grad der Überprüfung Ihrer Organisation, die von der öffentlichen Zertifizierungsstelle vor der Ausstellung des Zertifikats durchgeführt wird, sowie dem Speicherbedarf für das Zertifikat (insbesondere für den privaten Schlüssel).
- OV (Organization Validation, Unternehmensvalidierung): Dies ist eine Standard-Validierungsmethode einer Organisation, die von Zertifizierungsstellen durchgeführt wird. Sie umfasst die Überprüfung des Unternehmens (Existiert das Unternehmen? Hat es einen guten Ruf? Wo befindet es sich?) und eine Überprüfung der Person, die das Zertifikat im Namen der Organisation beantragt (Arbeitet die Person tatsächlich für diese Organisation?).
- EV (Extended Validation) (erweiterte Validierung): Wie der Name schon sagt, handelt es sich hierbei um einen erweiterten Validierungsprozess, der eine weitere Überprüfung der Unternehmensdaten sowie des Zertifikatsantragstellers erfordert. Die Zertifizierungsstelle benötigt mehr Informationen und Unterlagen und wird ein oder mehrere Gespräche mit der Organisation und dem Antragsteller führen, bevor sie das Zertifikat ausstellt. Für EV-Code-Signing-Zertifikate ist eine sichere Speicherung obligatorisch. Das bedeutet, dass Sie entweder einen sicheren USB-Token oder ein Hardware-Sicherheitsmodul (HSM) benötigen, um das Zertifikat und seinen privaten Schlüssel zu speichern.
Entrust kann USB-Token oder nShield HSMs für alle Code-Signing-Aufträge liefern, egal ob es sich um OV-oder EV-Zertifikate handelt.
Wie funktioniert die Zeitstempelung bei einem Code-Signing-Zertifikat?
Im Zusammenhang mit Code Signing ist das Zeitstempeln der Prozess der Anwendung eines digitalen Zeitstempels auf die Codesignatur, der das genaue Datum und die Uhrzeit enthält.
Das Zeitstempeln ist ein wichtiger, aber oft vergessener Schritt beim Signieren von Code. Signaturen haben in der Tat ein Ablaufdatum, das dem Ablaufdatum des für die Signatur verwendeten Code-Signing-Zertifikats entspricht. Eine abgelaufene Signatur führt zu einer fehlgeschlagenen Überprüfung, wenn der signierte Code gestartet wird, was zu Warnmeldungen und sogar dazu führen kann, dass der Code nicht ausgeführt werden kann.
Private Zertifikate können bei Bedarf eine sehr lange Lebensdauer haben (10 Jahre und mehr), was oft ausreicht, da der signierte Code nach einem so langen Zeitraum möglicherweise nicht mehr verwendet wird. Öffentliche Code-Signing-Zertifikate sind derzeit jedoch maximal drei Jahre gültig, und es besteht eine sehr hohe Wahrscheinlichkeit, dass Ihr Code auch nach Ablauf dieses Zeitraums noch verfügbar ist. Die Zeitstempelung einer Codesignatur verleiht ihr weitere neun bis zehn Jahre Gültigkeit (abhängig von der Gültigkeitsdauer des verwendeten Zeitstempel-Zertifikats). Und Sie können einen neuen Zeitstempel anwenden, wenn der aktuelle abläuft, um die Gültigkeit Ihrer Codesignatur weiter zu verlängern und Warnungen/Blockierungen zu vermeiden.
Die Zeitstempelung ist auch nützlich, wenn Sie Ihr Code-Signing-Zertifikat widerrufen müssen, falls es kompromittiert wurde. Der Widerruf kann auf das Datum und die Uhrzeit zurückdatiert werden, an dem Sie glauben, dass das Zertifikat kompromittiert wurde. Wenn alle Ihre Signaturen mit einem Zeitstempel versehen wurden, bleiben nur jene Signaturen gültig, die vor dem Widerrufsdatum erstellt wurden. Jede Codesignatur ohne Zeitstempel wird ungültig, wenn das Zertifikat abläuft oder widerrufen wird.
Die Zeitstempelung kann mit privaten Zeitstempel-Zertifikaten von einer internen Zertifizierungsstelle erfolgen. Für Code, der extern weitergegeben werden soll, müssen Sie jedoch einen öffentlichen Zeitstempeldienst verwenden, der von allen wichtigen Betriebssystemen und Anwendungen erkannt wird und dem sie vertrauen. Die meisten, wenn nicht sogar alle öffentlichen Zertifizierungsstellen, einschließlich Entrust, bieten einen öffentlichen Zeitstempelungsdienst an, der über eine spezielle URL zugänglich ist.