Was sind Best Practices für Code Signing?
Durch Code Signing wird die Identität des Herstellers oder Herausgebers der Software verifiziert und bestätigt, dass der Code zwischen dem Zeitpunkt der Signatur und dem Download nicht verändert wurde. Das ist ein Beweis dafür, dass der Code vertrauenswürdig ist. Leider versuchen Hacker immer wieder, den Schutz durch Code-Signaturen auszuhebeln und vermeintlich vertrauenswürdige Dateien mit Malware zu infizieren.
Nachfolgend einige Best Practices, mit denen Sie das Risiko eines erfolgreichen Angriffs verringern können:
- Sichere Speicherung von Schlüsseln: Wird der private Signaturschlüssel eines Unternehmens gehackt oder gestohlen, kann damit Software mit eingebettetem Schadcode signiert werden. Solche Programme werden von der Signaturprüfung als legitime Software des Originalherstellers identifiziert. Private Schlüssel müssen in einem Hardware-Sicherheitsmodul (HSM) gespeichert bzw. im Ruhezustand verschlüsselt werden. Gemäß den Anforderungen des CA/Browser Forums müssen auch öffentliche Schlüssel in einem HSM gespeichert werden.
- Zugriff auf Schlüssel und Signaturen kontrollieren: Definieren Sie Richtlinien und implementieren Sie Kontrollmechanismen für den Schlüsselzugriff, damit Ihr Code nur bei begründetem Bedarf, nur mit bestimmten Schlüsseln und nur von autorisierten Entwicklern und Benutzern signiert werden kann. Generieren Sie Ihre Schlüssel in der Cloud, damit sie nicht weitergegeben, gestohlen oder verloren werden können. Trennen Sie die Zuständigkeit für die Schlüsselerzeugung von der Verantwortung für das Signieren von Code. Schützen Sie erstellte Signaturen durch Multifaktor-Authentifizierung und entziehen Sie Mitarbeitern den Zugriff, wenn sie aus dem Unternehmen ausscheiden oder keinen Zugriff auf Signaturen oder die Schlüsselgenerierung benötigen.
- Überwachung und Prüfung von Code-Signing-Workflows: Sie müssen nachvollziehen können, wer wann was signiert hat, um schnell auf die unbefugte Erstellung von Signaturen reagieren und entsprechende Korrekturmaßnahmen einleiten zu können. Prüfen Sie regelmäßig alle Aktivitäten im Zusammenhang mit Schlüsselpaaren. Dazu gehören die Erzeugung von Schlüsselpaaren, der Umgang mit Zertifikaten, die Zuweisung von Schlüsseln und der Zugriff auf Signaturen.
- Auf dem Laufenden bleiben und unternehmensweite Richtlinien für kryptografische Sicherheitsstandards umsetzen: Aufgrund neuer Entwicklungen in der Bedrohungslandschaft können sich auch die Branchenanforderungen ändern. Das CA/Browser Forum schreibt seit dem 1. Juni 2021 3072-Bit RSA als Mindestanforderung für öffentliche Code-Signing- und Zeitstempel-Zertifikate vor. Nicht alle Unternehmen, in denen Kryptoschlüssel erzeugt und Codes signiert werden, sind sich dieser Änderung bewusst. Aktuelle Branchenanforderungen müssen umgesetzt werden, um sicherzustellen, dass für die Generierung von Schlüsseln und Zertifikaten keine schwachen oder nicht konformen Algorithmen, Schlüssellängen oder Kryptosysteme verwendet werden.
- Implementierung von SDLC-Prozessen mit automatisiertem Code Signing: Durch die Integration von automatisiertem Code Signing in CI/CD-Pipelines und andere SDLC-Prozesse wird das Risiko reduziert, unsignierten oder ungültig signierten Code auszuliefern. Neben der Automatisierung ermöglichen geeignete Sicherheitsmechanismen eine kontinuierliche und schnelle Entwicklung von Softwareprodukten, die allen Sicherheitsstandards entsprechen.
- Signaturen in verschiedenen Build-Servern vergleichen: In der jüngeren Vergangenheit haben Angriffe auf die Softwarelieferketten namhafter Unternehmen weltweit erhebliche Betriebsunterbrechungen und finanzielle Schäden verursacht. Dabei infiltrieren Hacker die Entwicklungsumgebung eines Softwareherstellers, um Malware in den Code einzubetten, der später auf Kundensystemen installiert wird. Durch den Vergleich der Hashwerte signierter Software aus verschiedenen Build-Servern können Sie vor dem Release etwaige Diskrepanzen zwischen den Server-Builds erkennen. Zwei oder mehr identische Builds geben Ihnen die Gewissheit, dass die Versionen sicher sind und keinen unbekannten Code enthalten.
- Gefälschte Zertifikate widerrufen: Wenn Sie kompromittierte Schlüssel oder signierte Malware entdecken, melden Sie den Vorfall Ihrer Zertifizierungsstelle (CA). Das Code-Signing-Zertifikat muss widerrufen werden. Dadurch wird die Software ungültig und die Malware kann nicht weiter verbreitet werden.
- Signierten Code mit Zeitstempeln versehen: Wenn Ihr Code-Signing-Zertifikat unerwartet abläuft, sind die Installationsdateien nicht mehr vertrauenswürdig und können unter Umständen nicht ausgeführt werden. Dieses Risiko kann vermieden werden. Code-Signing-Zertifikate sind 1 bis 3 Jahre gültig. Mit dem Ablauf des Zertifikats erlischt auch die Gültigkeit der signierten Software, es sei denn, die Software wurde beim Signieren mit einem Zeitstempel versehen. Der Zeitstempel wird im System gespeichert und die Software bleibt gültig, solange sie in Produktion ist. Darüber hinaus reduzieren Zeitstempel die Auswirkungen eines Zertifikatswiderrufs. Wenn ein Zertifikat wegen erkannter Malware widerrufen werden muss, bleiben die Auswirkungen überschaubar, da nur Softwarepakete betroffen sind, die nach der Kompromittierung veröffentlicht wurden.