Best Practices für die Codesignierung verstehen
Die Codesignierung garantiert Benutzern, Betriebssystemen und Sicherheitstools, dass eine Anwendung tatsächlich vom angegebenen Herausgeber stammt und seit ihrer Veröffentlichung nicht verändert wurde. Ohne sie kann Software als unsicher eingestuft, bei der Installation blockiert oder von böswilligen Akteuren ausgenutzt werden.
Die Code-Signierung dient dazu, die Identität des Entwicklers eines Programms und dessen Herkunft zu authentifizieren und gleichzeitig zu bestätigen, dass die Software seit ihrer Signierung nicht verändert wurde.
Durch die Codesignierung eines Programms, einer Anwendung, einer ausführbaren Datei oder eines Skripts fügt ein Entwickler ein digitales Zertifikat hinzu, das seine Identität und die Integrität der Software bestätigt. Codesignaturzertifikate nutzen die Public-Key-Kryptografie – dieselbe Technologie, die auch bei anderen Arten digitaler Zertifikate zum Einsatz kommt. Dieser Ansatz wird system- und plattformübergreifend unterstützt, von mobilen über Desktop-Umgebungen bis hin zu eingebetteten Systemen. Die Codesignierung ist weit verbreitet unter Windows von Microsoft, Mac OS X von Apple, Linux-Distributionen sowie unter iOS und Android.
Da Cyberbedrohungen zunehmend auf Schwachstellen im Vertrauen in Software abzielen, ist die Codesignierung zu einer wichtigen Verteidigungslinie gegen Manipulationen, die Verbreitung von Malware und Angriffe auf die Lieferkette geworden.
Die Umsetzung strenger Verfahren zur Codesignierung ist daher für Softwarehersteller und Entwicklungsunternehmen von entscheidender Bedeutung, die ihre Nutzer schützen, das Vertrauen in die Plattform aufrechterhalten und sicherstellen wollen, dass Software sicher und zuverlässig bereitgestellt werden kann. Die folgenden Best Practices helfen dabei, die häufigsten Risiken im Zusammenhang mit der Sicherheit der Codesignierung zu bewältigen:
- Sichern Sie Ihren Code mit Code-Signing-Zertifikaten: Die wichtigste Empfehlung von allen ist, wann immer möglich Code-Signing-Zertifikate zu verwenden. Diese bestätigen Endnutzern die Herkunft und Authentizität des Codes und stärken das Vertrauen der Kunden in ihre persönliche Sicherheit. Durch die ordnungsgemäße Signierung Ihres Codes können Sie Ihrer Anwendung oder Ihrem Programm Vertrauen verleihen, das von einer vertrauenswürdigen öffentlichen Zertifizierungsstelle wie Sectigo verwaltet wird. Für zusätzliche Sicherheit können Sie ein Extended-Validation-Zertifikat (EV) für die Codesignierung verwenden, das im Vergleich zur Standard-Codesignierung eine strengere Identitätsprüfung bietet.
- Beschränken Sie den Zugriff auf private Schlüssel: Jeder gute IT-Experte wird, wann immer möglich, Maßnahmen zur Zugriffskontrolle einführen; dazu gehört auch die Beschränkung des Zugriffs auf private Schlüssel und Basis-Root-Zertifikate. Sie sollten nur einer kleinen Anzahl von Personen Zugriff auf die privaten Schlüssel Ihrer Organisation gewähren, und diese Personen sollten einen konkreten Grund für diesen Zugriff haben. Die Einführung einer rollenbasierten Zugriffsrichtlinie (RBAC) in Ihrer Organisation trägt dazu bei, mögliche Sicherheitsrisiken zu begrenzen.
- Schützen Sie private Schlüssel mit kryptografischer Hardware: Durch den Einsatz kryptografischer Hardware können Sie Ihre privaten Schlüssel mit den aktuellsten Verschlüsselungsalgorithmen schützen. Diese Art von Hardware sollte mindestens ein nach FIPS 140 Level 2 zertifiziertes Produkt sein. Produkte wie Hardware-Sicherheitsmodule (HSMs) schützen Ihre privaten Schlüssel davor, in die Hände böswilliger Akteure zu gelangen.
- Zeitstempel für Code: Das Versorgen Ihres Codes mit einemZeitstempel stellt sicher, dass die Software auch nach Ablauf des Signaturzertifikats vertrauenswürdig bleibt, da dadurch nachgewiesen wird, dass der Code signiert wurde, während das Zertifikat noch gültig war.
- Unterschiede zwischen Test- und Release-Signierung: Wie oben beschrieben, ist es wichtig, zwischen Schlüsseln und Zertifikaten für die Test- und die Release-Signierung zu unterscheiden und deren Unterschiede zu verstehen. Zertifikate und Schlüssel für die Testsignierung erfordern weniger Sicherheit und können von einer privaten internen Zertifizierungsstelle (CA) selbst signiert werden. Sie müssen zudem auf ein anderes Stammzertifikat verweisen als das veröffentlichte, signierte Produkt. Zu den Best Practices gehört die Einrichtung einer völlig unterschiedlichen Codesignatur-Infrastruktur für die Release- und Pre-Release-Signierung. Dies ermöglicht es Ihnen, angemessene Zugriffskontrollen für Ihre Testumgebung und Ihren Produktionscode einzurichten.
- Code authentifizieren: Die Codesignierung identifiziert Code nicht ausdrücklich als sicher; sie gibt lediglich an, wer ihn geschrieben hat. Daher muss der Code weiterhin vollständig authentifiziert werden, bevor er der Öffentlichkeit zugänglich gemacht werden kann. Auf diese Weise können Sie sicherstellen, dass Sie nicht versehentlich fehlerhaften oder bösartigen Code verbreiten, der Kunden schaden und Ihren Ruf beeinträchtigen könnte. Alle Authentifizierungsvorgänge im Zusammenhang mit der Codesignierung sollten für spätere Zwecke protokolliert werden, falls Untersuchungen oder Maßnahmen zur Reaktion auf Vorfälle erforderlich werden.
- Code vor der Signierung auf Malware oder Viren prüfen: Neben der Überprüfung, dass keine Änderungen an Ihrem Code vorgenommen wurden, ist es wichtig, diesen auf Viren oder anderen bösartigen Code zu scannen. Bösartiger Code kann oft versehentlich von Entwicklern eingefügt werden, die bestehenden Code aus anderen Projekten wiederverwenden oder einbinden. Es ist viel einfacher, Fehler zu erkennen und zu beheben, bevor der Code veröffentlicht wird.
- Vermeiden Sie die wiederholte Verwendung von Schlüsseln: Die Wiederverwendung privater Schlüssel zum mehrmaligen Signieren von Code birgt ein erhöhtes Risiko. Wenn ein Schlüssel kompromittiert wird, ist der gesamte mit diesem Schlüssel für dieses Datum signierte Code ungültig und muss mit einem neuen Code-Signaturzertifikat aktualisiert werden. Wenn Sie es sich zur Gewohnheit machen, verschiedene Schlüssel und Zertifikate abwechselnd zu verwenden, können Sie das Risiko streuen und den Aufwand sowie die Auswirkungen bei der Neuausstellung von Zertifikaten verringern.
- Kompromittierte Zertifikate widerrufen: Der Widerruf ist eine der wichtigsten Maßnahmen zur Gewährleistung der Sicherheit des Codes. Die Entwicklungsorganisation ist dafür verantwortlich, kompromittierten Code, Schlüssel oder Zertifikate ihrer Zertifizierungsstelle zu melden, damit diese geeignete Maßnahmen ergreifen kann. Im Falle möglicher Probleme verlangt eine Zertifizierungsstelle, dass das Code-Signing-Zertifikat widerrufen wird. Wenn Sie Ihren Code mit einem Zeitstempel versehen, sind nur Code-Versionen betroffen, deren Sperrdatum nach dem Vorfall liegt.
- Signaturaktivitäten überwachen und prüfen: Ohne Transparenz kann Missbrauch unbemerkt bleiben, bis Schaden entsteht. Führen Sie detaillierte Protokolle über Code-Signatur-Ereignisse, Zugriffe, Genehmigungen und Zeitstempel. Regelmäßige Überprüfungen helfen dabei, Anomalien zu erkennen und Untersuchungen zu unterstützen.
- Halten Sie Richtlinien und Schulungen auf dem neuesten Stand: Uneinheitliche Vorgehensweisen in den Teams schwächen die Sicherheit. Formelle Richtlinien sollten zur Definition von Schlüsselverwaltung, Arbeitsabläufen, Genehmigungen, Automatisierungsstandards und der Vorfallbearbeitung herangezogen werden. Laufende Schulungen stellen sicher, dass die Teams angesichts sich weiterentwickelnder Bedrohungen auf dem gleichen Stand bleiben.
Wie implementiert man die Codesignierung?
Zur Implementierung der Codesignierung ist ein eindeutiges kryptografisches Schlüsselpaar erforderlich. Dieses besteht aus einem geheim gehaltenen privaten Schlüssel und einem öffentlichen Schlüssel, der weitergegeben werden kann. Zusammen bilden sie die Grundlage der Public-Key-Kryptografie und ermöglichen die Signierung von Software, ohne den privaten Schlüssel preiszugeben.
Nach der Generierung des neuen Schlüsselpaars mithilfe einer Public-Key-Infrastruktur (PKI) wird der öffentliche Schlüssel als Teil einer Zertifikatssignierungsanforderung (CSR) an eine Zertifizierungsstelle (CA) gesendet. Die CA überprüft die Identität des Entwicklers oder der Organisation und stellt das Code-Signing-Zertifikat aus.
Nachdem der Entwickler nun im Besitz des Zertifikats ist, muss er den Code der Software hashen. Das Hashen ist ein Verfahren, bei dem eine Hash-Funktion verwendet wird, um Code in einen beliebigen festen Wert umzuwandeln. Das Ergebnis des Hashens, das als Digest bezeichnet wird, wird anschließend mit dem privaten Schlüssel verschlüsselt. Anschließend kombiniert der Entwickler diesen Digest mit dem Code-Signing-Zertifikat und der Hash-Funktion, um einen sogenannten Signaturblock zu erstellen, bei dem es sich im Wesentlichen um die Kombination aller oben genannten Elemente zu einem Codeabschnitt handelt, der bequem in die Software eingefügt werden kann.
Bedeutung des Schutzes
Das größte Problem bei der Codesignierung ist der Schutz des mit dem Zertifikat verbundenen privaten Codesignaturschlüssels. Wenn ein Schlüssel kompromittiert wird, verliert das Zertifikat an Vertrauen und Wert, was die von Ihnen signierte Software gefährdet.
Viele Unternehmen schützen sich mithilfe sicherer Tresore und Hardware-Sicherheitsmodule (HSMs), um die Sicherheit ihrer privaten Schlüssel zu erhöhen. Andere nutzen Zertifikatsmanagement-Plattformen, die darauf ausgelegt sind, das Lebenszyklusmanagement aller Code-Signing-Zertifikate zu automatisieren und zu sichern. Ein Beispiel hierfür ist der Sectigo Certificate Manager. Der Einsatz eines Zertifikatsmanagers trägt wesentlich dazu bei, die Integrität privater Schlüssel und anderer Verschlüsselungsressourcen zu gewährleisten.
Was verhindert die Codesignierung?
Einfach ausgedrückt: Die Codesignierung hilft dabei, zu verhindern, dass Malware und anderer bösartiger Code unter dem Deckmantel einer harmlosen Datei oder eines Ereignisses wie beispielsweise eines Windows-Updates in das System eines Endnutzers gelangt. Dies wird erreicht, indem Nutzer überprüfen können, ob die heruntergeladene Datei tatsächlich vom ursprünglichen Urheber stammt und nicht von einem böswilligen Akteur. Dies stärkt das Vertrauenskonzept innerhalb des Systems und ermöglicht es Entwicklern, den Endnutzern, die die Software herunterladen, zu versichern, dass die Quelle vertrauenswürdig und sicher ist.
EV-Code-Signing-Zertifikate bieten zusätzliche Sicherheitsgarantien. Sie erfordern, dass der Schlüssel in einer hochsicheren, dem FIPS 140-2-Standard oder einem höheren Standard entsprechenden Hardware gespeichert wird. Es gibt USB-Token, die diese Anforderung erfüllen und durch eine PIN eine weitere Schutzebene bieten. Alternativ können Sie den oder die Schlüssel im HSM Ihrer Organisation vor Ort speichern.
Untersuchungen des Cyber Forensics Innovation Lab der Georgia Tech zeigen, dass die Ausstellung und Nutzung von Extended Validation (EV)-SSL/TLS-Zertifikaten zu einer Wahrscheinlichkeit von 99,99 % führt, frei von Phishing-Angriffen und Missbrauch zu sein. Das von Sectigo gesponserte Whitepaper kann hier heruntergeladen werden.
Sichern Sie Ihre Software mit vertrauenswürdigen Code-Signing-Lösungen von Sectigo
Die Befolgung dieser Best Practices für die Codesignierung reduziert das Risiko einer unbefugten Softwareverteilung, von Sicherheitswarnungen während der Installation und des Verlusts des Vertrauens der Nutzer erheblich. Außerdem kann dies zu höheren Installationsraten und einer reibungsloseren Einführung Ihrer Software führen.
Von vertrauenswürdigen Zertifizierungsstellen ausgestellte Zertifikate werden von Betriebssystemen und Sicherheitsplattformen weitgehend anerkannt. Sectigo ist eine führende Zertifizierungsstelle, die schnelle und flexible Lösungen für die Codesignierung anbietet. Unsere Code-Signing-Zertifikate helfen Anbietern, Vertrauen aufzubauen, Nutzer vor manipuliertem Code zu schützen und Software schneller bereitzustellen. Erfahren Sie mehr über die verschiedenen Arten von Code-Signing-Zertifikaten, die Sectigo anbietet, oder wenden Sie sich für weitere Informationen an unser Expertenteam.