Zum Inhalt

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

Jetzt handeln →

Was sind die Best Practices für die Code-Signierung und wie werden sie implementiert?

Cybersicherheit und die Sicherheit einer Organisation

Wenn es um Cybersicherheit und die Sicherheit eines Unternehmens geht, ist es wichtig, auf alle Eventualitäten vorbereitet zu sein. Eine der wichtigsten Formen davon, insbesondere bei Unternehmen, die Software erstellen und an Kunden verteilen, ist das Code Signing. Im Grunde ist Code Signing ein relativ einfacher Prozess. Ein Softwarehersteller oder -distributor möchte Code erstellen, der an einen Kunden gesendet werden kann. Zunächst muss jedoch sichergestellt werden, dass der Code für den Benutzer vertrauenswürdig ist. Hier kommt Code Signing ins Spiel. Zunächst wird ein Schlüsselpaar aus einem vertrauenswürdigen, meist externen Schlüssel generiert. Public-Key-Infrastruktur (PKI) mithilfe einer sogenannten Zertifikatsignieranforderung.

A Zertifikat-Signaturanforderung, oder CSR, erfordert die Generierung und Signierung eines Zertifikats durch eine vertrauenswürdige PKI und die Verknüpfung mit einem Schlüsselpaar. Ein Schlüsselpaar besteht aus einem öffentlichen und einem privaten Schlüssel, die, wie die Namen schon sagen, öffentlich bzw. privat verfügbar gehalten werden.

Anschließend werden CSR und Schlüsselpaar an die Zertifizierungsstelle der PKI gesendet und die Identität des Benutzers wird von der Zertifizierungsstelleoder CA. Nach dieser Überprüfung wird die CSR selbst authentifiziert und der öffentliche Schlüssel mit der Identität des Anforderers gebündelt. Dadurch wird ein gültiges Codesignaturzertifikat erstellt, sobald die CA das Paket signiert. Der Anforderer erhält dann das Zertifikat und kann mit der Signierung des Codes beginnen.

Sobald das Code Signing-Zertifikat erstellt ist, beginnt der eigentliche Code Signing-Prozess. Zunächst wird der zu signierende Code über einen Hashing Algorithmus. Ein Hashing-Algorithmus verwendet eine Datei als Eingabe und erstellt einen Hash-Digest.

Ein Hash-Digest ist eine Abfolge von Zahlen und Buchstaben, die je nach Dateiinhalt eindeutig ist. Würde sich in einer Datei nur ein Buchstabe ändern, wäre der Hash-Digest völlig anders. Der Hash und der private Schlüssel des Zertifikats werden dann an einen Signaturalgorithmus übergeben, der eine Signatur erstellt. Diese wird anschließend an den Code angehängt und an den Benutzer gesendet. Bevor wir uns mit den Best Practices des Code Signing befassen, werfen wir einen kurzen Blick darauf, warum Code Signing so wichtig ist.

Die Bedeutung der Code-Signierung

Code Signing ist für die Sicherheit vieler Unternehmen von entscheidender Bedeutung. Wenn ein Angreifer die Möglichkeit erschleicht, Code mit Malware zu signieren, ist der Ruf Ihres Unternehmens gefährdet. Darüber hinaus können die Gültigkeit der Software und deren Entwickler durch Code Signing authentifiziert werden. Dies öffnet auch die Tür zu großen App-Stores.

Die größten App-Stores verlangen die Verwendung von Code Signing für die dort verwendeten Anwendungen. Dies ermöglicht vielen kleineren App-Anbietern, ihre Apps mithilfe von Code Signing in die großen App-Stores zu bringen. Nachdem wir nun wissen, warum Code Signing so wichtig ist, werfen wir einen Blick auf die Best Practices für Code Signing.

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.

Bewährte Methoden zur Code-Signierung

  • Virenscanning

    Ein wichtiger Bestandteil jeder Code-Signierung sollte die Durchführung eines Malware- und Virenscans sein. Der Virenscan sollte beim Hochladen der zu hashenden Datei erfolgen. Der Grund dafür ist, dass in Code eingebettete und anschließend gehashte Malware beim Signieren unentdeckt bleiben kann.

    Sobald der Code von Ihrem Unternehmen signiert und freigegeben ist und Malware enthält, installiert ein Benutzer diesen Code bedenkenlos auf seinem Computer, da eine vertrauenswürdige Organisation den signierten Code freigegeben hat. Nach dem Download kann die Malware den Computer des Benutzers infizieren, was Ihrem Unternehmen einen schlechten Ruf einbringt und Benutzern schadet, die diesem Unternehmen vertrauen. Wählen Sie am besten ein Code-Signatur-Tool, das sich in die bereits vorhandenen Viren- und Malware-Scans Ihres Unternehmens integrieren lässt.

  • Sichere Speicherung privater Schlüssel

    Einer der anfälligsten Teile des Code-Signing-Prozesses ist der private Schlüssel, der mit dem Zertifikat verknüpft ist. Ist dieser unzureichend geschützt, ist der gesamte Code-Signing-Prozess umsonst. Ist der Schlüssel gestohlen, kann ein Angreifer ihn verwenden, um seinen eigenen Code im Namen des Unternehmens zu signieren und den Benutzern so vorzutäuschen, dass es sich um vertrauenswürdige Software handelt, obwohl dies nicht der Fall ist. Anschließend kann er angeblich von Ihrem Unternehmen stammenden Code versenden, der mit Schadsoftware gefüllt ist und alle Benutzer infiziert, die die Software herunterladen und verwenden. In den letzten Jahren kam es auf diese Weise zu zahlreichen Supply-Chain-Angriffen. Durch unzureichenden Schutz der privaten Schlüssel konnten Angreifer an diese Schlüssel gelangen und Code mit Schadsoftware signieren.

    Der Code wurde dann an Dienstanbieter gesendet, die jeweils Tausende von Benutzern haben, die diese Software in verschiedenen Unternehmen verwenden. Die Schadsoftware konnte dann alle diese Benutzer infizieren und den Angreifern so Informationen, Geld und mehr stehlen. Die softwarebasierte Speicherung von Schlüsseln ist möglich, aber deutlich unsicherer als die hardwarebasierte Schlüsselspeicherung. Es wird empfohlen, eine Code-Signatur-Lösung basierend auf der Verwendung einer hardwarebasierten Speichermethode auszuwählen, z. B. Hardware-Sicherheitsmodul. Diese speichern Schlüssel so sicher, dass ein Angreifer das Gerät selbst stehlen müsste, bevor er in das Gerät eindringen und die Schlüssel stehlen kann. Zu diesem Zeitpunkt könnten die Schlüssel rotiert oder unbrauchbar gemacht werden, sodass sie nun nutzlos sind.

  • Sekundäre Überprüfung

    Um die Sicherheit aller Signaturen zu gewährleisten, können weitere Tools mit Code Signing verwendet werden. Tools wie Active Directory, Multi-Faktor-Authentifizierung, Zwei-Faktor-Authentifizierung und andere eignen sich hervorragend, um den Überblick darüber zu behalten, wer Code wann signieren darf. Mit diesen Tools muss sich ein Benutzer nicht nur mit einem Passwort anmelden, sondern auch eine zweite Verifizierungsebene durchlaufen, bevor er auf eine Webseite zugreift, um Code Signing-Schlüsselpaare zu erstellen und bevor der eigentliche Signiervorgang beginnt. Dies verhindert, dass Angreifer unberechtigt signieren, und kann auch Insider-Bedrohungen innerhalb eines Unternehmens aufspüren. Jedes Code Signing-Produkt eines Unternehmens sollte eine Art sekundäre Verifizierung nutzen, um die größtmögliche Sicherheit für die von diesem Unternehmen gesendeten Informationen zu gewährleisten.

  • Zeitstempeln

    Die Verwendung von Zeitstempeln ist ein weiteres wichtiges Werkzeug beim Codesignieren. Dabei wird zum Zeitpunkt der Signierung eine bestimmte Uhrzeit und ein Datum eingeprägt, um Signiervorgänge zu protokollieren und nachzuverfolgen. Dies geschieht üblicherweise durch die Kontaktaufnahme mit einem Zeitstempelserver während des Codesigniervorgangs. Dieser Zeitstempel hilft bei der nächsten Best Practice, die ich bespreche: der Protokollierung von Signiervorgängen.

  • Dateiprotokollierung

    Ein weiterer wichtiger Faktor beim Code Signing ist die Protokollierung jedes Code Signing-Vorgangs und damit verbundener Aufgaben. Vorgänge wie das Erstellen eines Schlüsselpaars, das Erstellen eines Code Signing-Zertifikats, das eigentliche Signieren von Code und das Ändern von Code Signing-Zertifikaten oder Schlüsselpaaren sollten für die zukünftige Verwendung protokolliert werden. Durch die zentrale Speicherung der Protokolle können Prüfer die aufgetretenen Prozesse einsehen und so die Vorgänge im Code Signing-Tool dokumentieren.

    Auch bei einer Bedrohung durch Insider oder Outsider sind diese Protokolle wichtig. So kann ein Unternehmen die Prozesse nachvollziehen und herausfinden, wer was signiert hat. Die Protokollierung kann auch dazu dienen, böswillige Entwickler daran zu hindern, während des Prozesses zu signieren. Wird ein Signiervorgang nicht von den zuständigen Teams genehmigt, kann er rechtzeitig gestoppt werden.

  • Schlüssel- und Zertifikatsverwaltung

    Um die Sicherheit Ihrer Schlüssel zu gewährleisten, ist ein starkes Schlüssel- und Zertifikatsverwaltungssystem von entscheidender Bedeutung.

    • Beschränken Sie die wiederholte Verwendung von Schlüsseln

      Die Schlüsselrotation ist eine Methode, die die Nutzung eines Schlüssels reduziert. Dabei wird ein vorhandener Signaturschlüssel außer Kraft gesetzt und durch einen neu generierten kryptografischen Schlüssel ersetzt. Durch die häufige Rotation Ihrer Schlüssel wird das Risiko minimiert, da die Verwendung eines Schlüssels für mehrere Signaturen eine Sicherheitslücke schafft.

      Bei einer Kompromittierung wird die gesamte mit diesem Schlüssel signierte Software ungültig. Angreifer können dies ausnutzen und Ihr System durch die Verbreitung von als legitime Software getarnter Malware anfälliger für Softwareangriffe machen.

    • Widerrufen Sie kompromittierte Zertifikate

      Beim Zertifikatswiderruf wird die Nutzung eines Zertifikats vor Ablauf seiner Gültigkeitsdauer gestoppt. Die Sperrung des kompromittierten Zertifikats ist unerlässlich, da Unbefugte dann keinen Schadcode mehr im Namen Ihres Unternehmens signieren können.

      Wenn Sie einen Defekt in Ihrem Schlüssel oder Zertifikat vermuten, ist es wichtig, Maßnahmen zu ergreifen. Eine gute Option ist es, Kontakt mit Ihrer Zertifizierungsstelle (CA) aufzunehmen und das Zertifikat zu widerrufen, um die Verwendung dieses Schlüssels zum Signieren von Code zu verhindern.

  • Optimierter Signaturprozess

    Um die Effizienz des Arbeitsablaufs und der Entwicklung aufrechtzuerhalten, sollte eine Automatisierung der Signatur implementiert werden, sodass aufgrund der geringeren Anzahl menschlicher Faktoren weniger Zeit in Anspruch genommen wird:

    • Unterschied zwischen Testsignatur und Releasesignatur

      Um die versehentliche Veröffentlichung ungetesteten Codes zu vermeiden, kann zwischen Testsignatur und Releasesignatur unterschieden werden. Die Testsignatur dient ausschließlich der internen Überprüfung im Unternehmen oder der Organisation, nicht jedoch für Kunden, während die Releasesignatur den endgültigen Zustand darstellt, der für Kunden bereitgestellt wird.

      Dies kann auf viele Arten erreicht werden, beispielsweise durch unterschiedliche Zertifikate oder einen klar definierten Namen für die Signaturen zum Testen und Freigeben.

    • CI/CD und Code Signing

      Die CI/CD-Pipeline ist vollständig automatisiert und begleitet Sie von der Entwicklung bis zur Bereitstellung. Dazu gehören Erstellen, Testen, Signieren und Bereitstellen. Die in Ihren Software Development Lifecycle (SDLC) integrierte Code-Signierung spart Zeit und sorgt für Konsistenz.

      Das manuelle Signieren kann zeitaufwändig und fehleranfällig sein, insbesondere bei größeren Projekten mit zahlreichen Entwicklern. Die Einführung eines automatisierten Code-Signing-Prozesses mithilfe einer CI/CD-Pipeline würde den Prozess beschleunigen und das Risiko menschlicher Fehler verringern.

  • Erweiterte Sicherheitsmaßnahmen

    Vorbeugen ist besser als Heilen. Daher ist Wachsamkeit und proaktives Handeln gegen neue Sicherheitsbedrohungen unerlässlich. Im Folgenden finden Sie einige erweiterte Sicherheitsmaßnahmen gegen die Signierung von Schadcode.

    • Hier auf dem Laufenden bleiben

      Code Signing ist ein Bereich, der mit der Zeit gehen muss. Der Quellcode muss vertrauenswürdig und aktuell sein. Veraltete kryptografische Algorithmen können neuen Angriffen zum Opfer fallen und Ihr Code-Signing-Protokoll funktionsunfähig machen.

      Bewerten und aktualisieren Sie die kryptografischen Standards Ihres Unternehmens regelmäßig, um sicherzustellen, dass sie den neuesten Best Practices entsprechen.

    • Vertragsunterzeichnungen vergleichen

      Aufgrund bestehender Bedingungen und der Gefahr von Codemanipulationen ist es notwendig, Signaturen miteinander zu vergleichen, um die Vertrauenswürdigkeit des Quellcodes für den Benutzer transparent zu machen. Der Vergleich von Signaturen verschiedener Server-Builds kann genutzt werden, um Unterschiede zu erkennen und so Angriffspunkte aufzudecken.

      Unterschiede in den Signaturen deuten auf unbefugte Änderungen oder kriminelle Versuche hin, die Quelle mit Schadsoftware zu füllen, um vertrauliche Informationen zu extrahieren. Das Ergebnis solcher Prüfungen wird zu einem „Vertrauensbeweis“, wenn zwei oder mehr Signatur-Builds ein gleichwertiges Ergebnis aufweisen und somit eine sichere Benutzerumgebung darstellen.

Fazit

Wenn Sie sich fragen, wo Sie Zugriff auf ein Code-Signing-Tool erhalten können, sind Sie bei Encryption Consulting genau richtig. Bei Verschlüsselungsberatung, wir haben ein Code-Signatur-Tool namens Code Sign Secure. Unser Tool nutzt alle in diesem Blog erwähnten Best Practices und mehr. Unser Tool verwendet Hardware-Sicherheitsmodule zur sicheren Sicherung privater Schlüssel im Zusammenhang mit CodesignaturzertifikateWir nutzen Active Directory für die Anmeldung auf unserer Website, um Schlüssel und Zertifikate zu erstellen, sowie die Multi-Faktor-Authentifizierung, die vor dem Signieren von Code erforderlich ist. Wir verwenden außerdem eine rollenbasierte Zugriffskontrolle, sodass nur Personen mit den entsprechenden Berechtigungen Teile unseres Code-Signing-Produkts verwenden können. Schließlich führen wir vor dem Hashen einer Datei einen Virenscan durch, versehen jede erstellte Signatur mit einem Zeitstempel und verfügen über eine zentrale Protokollierung über unsere Webseite.

Um mehr über Code Sign Secure zu erfahren oder unseren Proof of Concept auszuprobieren, wenden Sie sich an CodeSigning-Lösung.