Im Bereich der Cybersicherheit und der Sicherheit von Organisationen ist es unerlässlich, auf alle Eventualitäten vorbereitet zu sein. Eine der wichtigsten Maßnahmen hierfür, insbesondere für Unternehmen, die Software entwickeln und an Kunden vertreiben, ist die Codesignierung. Im Kern ist die Codesignierung ein relativ einfacher Prozess. Ein Softwarehersteller oder -vertreiber möchte Code erstellen, der von einem Kunden verwendet werden soll. Zuvor muss er jedoch sicherstellen, dass der Code vom Benutzer als vertrauenswürdig eingestuft wird. Hier kommt die Codesignierung ins Spiel. Zunächst wird mithilfe einer sogenannten Zertifikatsignieranforderung (CSR) ein Schlüsselpaar aus einer vertrauenswürdigen, in der Regel externen Public-Key-Infrastruktur (PKI) generiert.
Eine Zertifikatsignierungsanforderung (CSR) fordert die Erstellung und Signierung eines Zertifikats durch eine vertrauenswürdige PKI sowie die Zuordnung zu einem Schlüsselpaar an. Ein Schlüsselpaar besteht aus einem öffentlichen und einem privaten Schlüssel, die – wie die Namen bereits andeuten – öffentlich bzw. privat gespeichert werden.
Der CSR und das Schlüsselpaar werden anschließend an die Zertifizierungsstelle (CA) der PKI gesendet, die die Identität des Benutzers verifiziert. Nach dieser Verifizierung wird der CSR selbst authentifiziert und der öffentliche Schlüssel mit der Identität des Anfragenden verknüpft. Dadurch entsteht ein gültiges Codesignaturzertifikat, sobald die CA das Paket signiert hat. Der Anfragende erhält das Zertifikat und kann mit dem Signieren von Code beginnen.
Sobald das Codesignaturzertifikat erstellt ist, beginnt der eigentliche Codesignaturprozess. Zunächst wird der zu signierende Code mithilfe eines Hash- Algorithmus gehasht. Ein Hash-Algorithmus nimmt eine Datei als Eingabe und erzeugt einen Hashwert.
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.
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 anschließend an Service Provider gesendet, die jeweils Tausende von Nutzern in verschiedenen Unternehmen betreuen. Die Schadsoftware konnte so all diese Nutzer infizieren und den Angreifern den Diebstahl von Informationen, Geld und mehr ermöglichen. Die softwarebasierte Speicherung von Schlüsseln ist zwar möglich, aber deutlich weniger sicher als die hardwarebasierte. Es wird empfohlen, eine Codesignatur-Lösung anhand ihrer hardwarebasierten Speichermethode, wie beispielsweise eines Hardware-Sicherheitsmoduls , auszuwählen . Diese speichern Schlüssel so sicher, dass ein Angreifer das Gerät selbst stehlen müsste, um an die Schlüssel zu gelangen. Bis dahin könnten die Schlüssel jedoch bereits verändert oder unbrauchbar gemacht worden sein.
-
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 ein Tool zur Codesignierung finden, sind Sie bei Encryption Consulting genau richtig. Wir von Encryption Consulting bieten Ihnen das Codesignierungstool Code Sign Secure an . Unser Tool nutzt alle in diesem Blog genannten Best Practices und mehr. Es verwendet Hardware-Sicherheitsmodule , um die privaten Schlüssel der Codesignierungszertifikate sicher zu verwahren . Für die Anmeldung auf unserer Website und die Erstellung von Schlüsseln und Zertifikaten nutzen wir Active Directory. Die Multi-Faktor-Authentifizierung ist vor dem Signieren von Code unerlässlich. Dank rollenbasierter Zugriffskontrolle haben nur berechtigte Personen Zugriff auf unser Codesignierungsprodukt. Zusätzlich führen wir vor dem Hashing einer Datei einen Virenscan durch, versehen jede erstellte Signatur mit einem Zeitstempel und verfügen über eine zentrale Protokollierung, die über unsere Website zugänglich ist.
Um mehr über Code Sign Secure zu erfahren oder unseren Proof of Concept auszuprobieren, wenden Sie sich an CodeSigning solution.
