Heute ging durch viele Medien, dass einige Apps und Komponenten im erst jüngst erschienenen Windows 11 seit dem 01.11.2021 nicht mehr funktionieren und die Ursache hierfür ein am 31.10.2021 abgelaufenes Zertifikat sei. Mittlerweile hat Microsoft in einem Blogpost darauf hingewiesen und auch einen Patch für einige betroffene Komponenten veröffentlicht.
Leider gab es aber in keiner der verfügbaren Quellen detaillierte Informationen dafüber, was genau das Problem war. Gehen wir der Sache somit selbst auf den Grund.
Symptome
Der Fehler äußert sich darin, dass im Fall des Snipping Tool bei Klick auf "Neu" (zum erstellen eines Bildschirmschnappschusses) folgende Fehlermeldung erscheint:
Ein Problem mit Windows verhindert das Öffnen von „Bildschirmausschnitte“. Durch das Auffrischen des PCs wird dieses Problem vielleicht behoben.
Genau das gleiche passiert bei Verwendung der "neuen" Snip & Sketch Anwendung, die das Snipping Tool beerben soll.
Gleiches gilt für die "Erste Schritte" App…
Ursache
Verfolgt man die durch die Apps aufgerufene Systembibliothek zurück und sieht man sich die Signatur des Paketes an, fällt auf, dass dessen Signaturzertifikat zwar am 31.10.2021 abgelaufen ist, aber eine Gegensignatur (engl. Timestamp, gemäß RFC 3161) vorhanden ist.
Eine Gegensignatur soll eigentlich genau verhindern, dass Codesignaturen nach Ablauf des Signaturzertifikats als ungültig eingestuft werden. Warum hat das in diesem Fall nicht funktioniert?
Betrachtet man die Eigenschaften des Codesignaturzertifikates genauer, stellt man fest, dass es über das "Lebensdauersignatur" (engl. Lifetime Signing) Extended Key Usage mit Objektidentifizierer 1.3.6.1.4.1.311.10.3.13 verfügt.
Dieses Extended Key Usage – wenn es in einem Codesignaturzertifikat vorhanden ist – bewirkt genau das beobachtete Verhalten: Trotz Gegensignatur wird beim Ablauf des Zertifikats der signierte Code nicht mehr als gültig anerkannt.
Limits the validity period of a signature to the validity period of the certificate. This restriction is typically used with the XCN_OID_PKIX_KP_CODE_SIGNING OID value to indicate that new time stamp semantics should be used.
Microsoft, IX509ExtensionEnhancedKeyUsage interface (certenroll.h)
Lösung
Die Lösung besteht daher – so wie Microsoft es nun umsetzt – ein neues Paket zu verteilen, welches mit einem noch gültigen Codesignaturzertifikat erneut signiert wurde.
Organisatorisch stellt sich die Frage, ob die betreffende Systembibliothek mit dem korrekten Zertifikat signiert wurde. Üblicherweise hat es schließlich einen Sinn, das Lifetime Signing EKU in ein Zertifikat aufzunehmen, um den Code nach Zertifikatablauf explizit ebenfalls zum ablaufen zu bringen. Vermutlich wurde hier also das falsche Signaturzertifikat verwendet.
Der Vorfall zeigt einmal mehr, wie wichtig es ist, die eigenen PKI- und insbesondere in diesem Fall auch Codesignaturprozesse unter Kontrolle zu haben, und dass grobe Fehler auch den besten der besten unterlaufen können.
But why…?
Man könnte versucht sein, sich die Frage nach dem Sinn eines Lifetime Signing Extended Key Usage zu stellen. Warum nicht einfach die Gegensignatur weglassen, wenn man möchte, dass der Code zusammen mit dem Signaturzertifikat abläuft.
Tatsächlich gibt es einen Grund, dennoch eine Gegensignatur zu verwenden: Die Möglichkeit der Zertifikatsperrung. Die Sperrung eines Zertifikats kann mit folgenden Grundcodes erfolgen:
Code | Bezeichnung | Beschreibung |
---|---|---|
0 | Unspecified | Dies ist die Standardeinstellung und gibt an, dass es keinen speziellen Grund für den Widerruf gibt. |
1 | Key Compromise | Der private Schlüssel eines Zertifikats wurde entwendet oder anderweitig unbefugten Dritten bekannt. |
2 | CA Compromise | Der private Schlüssel der Zertifizierungsstelle wurde entwendet oder anderweitig unbefugten Dritten bekannt. |
3 | Affiliation Changed | Wenn sich der Inhalt des Zertifikats (z.B. der Name des Benutzers) geändert hat, muss ein neues Zertifikat ausgestellt werden. |
4 | Superseded | Das widerrufene Zertifikat wurde durch ein neues Zertifikat ersetzt. |
5 | Cessation of Operation | Der Betrieb des zum Zertifikate gehörenden Dienstes wurde eingestellt, etwa weil es einen neuen Dienst unter anderem Namen gibt. |
6 | Certificate Hold | Das Zertifikat wird vorübergebend widerrufen. Dieser Sperrungstyp ist der einzige, bei dem die Sperrung nachträglich wieder rückgängig gemacht werden kann. |
8 | Remove from CRL | Wurde ein Zertifikat mit Grund "Certificate Hold" widerrufen und werden Deltasperrlisten verwendet, wird das entsperrte Zertifikat mit diesem Code in der Deltasperrliste geführt bis der Eintrag in der Haupt-Sperrliste entfällt. |
-1 | Unrevoke | Wurde ein Zertifikat mit Grund "Certificate Hold" widerrufen, kann mit diesem Code eine Entsperrung per Kommandozeile erfolgen. Ebenso wird im Audit-Ereignis 4870 die Rückgängigmachung einer Zertifikatsperrung mit diesem Code kenntlich gemacht. |
Wenn ein Codesignaturzertifikat widerrufen wird, bestimmt sich der Vertrauensstatus des signierten Codes durch dem Umstand, ob eine Gegensignatur vorhanden ist, und mit welchem Grund das Zertifikat widerrufen wurde:
Gegensignatur vorhanden | Sperrungs-Grundcode | Auswirkungen |
---|---|---|
nein | alle | Jegliche mit dem Zertifikat durchgeführte Signatur wird als ungültig betrachtet, unabhängig davon, wann die Signatur erfolgt ist. |
ja | Unspecified Cease of Operation Affiliation Changed Superseded Certificate Hold | Signaturen, die ab dem Sperrdatum durchgeführt wurden, werden als ungültig betrachtet. Signaturen, die vor dem Sperrdatum durchgeführt wurden, werden weiterhin als gültig betrachtet. |
ja | Key Compromise CA Compromise | Jegliche mit dem Zertifikat durchgeführte Signatur wird als ungültig betrachtet, unabhängig davon, wann die Signatur erfolgt ist. |
Weiterführende Links:
- Häufig verwendete erweiterte Schlüsselverwendungen (Extended Key Usages) und Ausstellungsrichtlinien (Issuance Policies)
- Widerrufen eines ausgestellten Zertifikats