Share via


Digitale Signaturen für Kernelmodule auf Systemen, auf denen Windows Vista ausgeführt wird

 

Microsoft Corporation

Aktualisiert im Juni 2007

Gilt für:
   Windows Vista
   Windows Server 2008

Zusammenfassung: Für Microsoft Windows Vista und höhere Versionen der Windows-Betriebssystemfamilie muss die Kernelmodussoftware über eine digitale Signatur verfügen, die auf x64-basierten Computersystemen geladen werden kann. Erfahren Sie, wie Sie den Signaturprozess für Kernelmodussoftware für Windows Vista verwalten. (22 gedruckte Seiten.)

Die aktuelle Version dieses Dokuments wird im Web unter verwaltet: https://www.microsoft.com/whdc/system/platform/64bit/kmsigning.mspx.

Inhalte

Einführung
   Digitale Signaturen als bewährte Methode
   Optionen für die Codesignatur im Kernelmodus
Der Codesignaturprozess im Kernelmodus
   Abrufen eines Softwareveröffentlichungszertifikats (SPC)
   Erstellen einer signierten CAT-Datei
   Hinzufügen einer eingebetteten Signatur zu einer Treiberimagedatei
Deaktivieren der Signaturerzwingung während der Entwicklung
Verwenden der Testsignatur
   Aktivieren der Problembehandlung für die Testsignatur
   Erkennen von Treiberladefehlern
   Aktivieren von Codeintegritätsdiagnosesystemprotokollereignissen
   Debugoptionen für die Treiberüberprüfung
Ressourcen

Einführung

Sowohl für Verbraucher als auch für Unternehmensbenutzer von Windows auf der ganzen Welt ist der Schutz personenbezogener und unternehmensbezogener Daten ein wichtiges Anliegen. Microsoft setzt sich dafür ein, neue Wege zu implementieren, um die Verbreitung von schadhafter Software einzuschränken. Digitale Signaturen für Kernelmodussoftware sind ein wichtiger Weg, um die Sicherheit auf Computersystemen zu gewährleisten.

Digitale Signaturen ermöglichen es dem Administrator oder Endbenutzer, der Windows-basierte Software installiert, zu wissen, ob ein legitimer Herausgeber das Softwarepaket bereitgestellt hat. Wenn Benutzer sich entscheiden, Windows-Fehlerberichterstattung Daten an Microsoft zu senden, nachdem ein Fehler oder ein anderer Fehler aufgetreten ist, kann Microsoft die Daten analysieren, um zu erfahren, welche Software der Herausgeber zum Zeitpunkt des Fehlers auf dem System ausgeführt wurde. Softwareherausgeber können dann die von Microsoft bereitgestellten Informationen verwenden, um Probleme in ihrer Software zu finden und zu beheben.

Windows Vista setzt auf digitale Signaturen auf Kernelmoduscode, um die Sicherheit und Stabilität der Microsoft Windows-Plattform zu erhöhen und neue Kundenerfahrungen mit Premium-Inhalten der nächsten Generation zu ermöglichen:

  • Treiber müssen für Geräte signiert sein, die geschützte Inhalte streamen. Dies umfasst Audiotreiber, die den geschützten Benutzermodus audio (PUMA) und den geschützten Audiopfad (PAP) verwenden, sowie Videogerätetreiber, die geschützte Befehle für die Verwaltung des Videopfad-Ausgabeschutzes (PVP-OPM) verarbeiten.
  • Nicht signierte Kernelmodussoftware wird nicht geladen und wird nicht auf x64-basierten Systemen ausgeführt.

Hinweis: Selbst Benutzer mit Administratorrechten können nicht signierten Kernelmoduscode auf x64-basierten Systemen laden. Dies gilt für alle Softwaremodule, die im Kernelmodus geladen werden, einschließlich Gerätetreibern, Filtertreibern und Kerneldiensten.

Der Umfang der neuen Codesignaturrichtlinie für den Kernelmodus ist weit reichend. Für Entwickler, die Kernelmodussoftware veröffentlichen, hat diese Richtlinie folgende Auswirkungen:

  • Für alle Kernelmoduskomponenten, die noch nicht signiert sind, müssen Herausgeber ein SoftwareVeröffentlichungszertifikat (Software Publishing Certificate, SPC) abrufen und den SPC verwenden, um alle 64-Bit-Kernelmodussoftware zu signieren, die auf x64-basierten Computersystemen mit Windows Vista ausgeführt wird. Dies schließt Kernelmodusdienstsoftware ein.

  • Herausgeber, die einen 64-Bit-Gerätetreiber oder andere Kernelmodussoftware bereitstellen, die bereits über das Windows-Logo-Programm signiert ist, werden ihre Treiberkataloge mit einer WHQL-Signatur (Windows Hardware Quality Labs) signiert. Um das Treiberpaket vor der Übermittlung an WHQL vollständig zu testen, signieren Sie den Treiberkatalog mit einem SPC.

  • Im speziellen Fall von Start-Start-Treibern ist es auch erforderlich, einen SPC zum eingebetteten Signieren der Treiber-Binärimagedatei zu verwenden, um eine optimale Systemstartleistung zu erzielen.

    Hinweis Ein Treiber wird als Startstart bezeichnet, wenn er vom Windows Vista-Betriebssystemladeprogramm geladen wird. Starttreiber können wie folgt identifiziert werden: Der Treiber-INF gibt den Starttyp als "Start=0" an, oder ein Kerneldienst wird mit einem ServiceType als Kerneltreiber oder Dateisystemtreiber und StartMode als "start" konfiguriert.

Die obligatorische Kernelmodus-Codesignierungsrichtlinie gilt für alle Kernelmodussoftware auf x64-basierten Systemen, auf denen Windows Vista ausgeführt wird. Microsoft empfiehlt Herausgebern jedoch, alle Software, einschließlich Gerätetreibern für 32-Bit- und 64-Bit-Plattformen, digital zu signieren. Windows Vista führt die Überprüfung der Kernelmodussignatur auf x86-Systemen durch, um geschützte Medieninhalte zu unterstützen. Kernelmodustreibersignaturen sind für 32-Bit-Systeme jedoch nicht obligatorisch.

In diesem Dokument wird beschrieben, wie Sie den Signaturprozess für Kernelmoduscode für Windows Vista verwalten, einschließlich des Abrufens eines Softwareveröffentlichungszertifikats (Software Publishing Certificate, SPC), Richtlinien zum Schutz von Schlüsseln und signieren eines Treiberpakets mit den tools, die im Windows Driver Kit (WDK) bereitgestellt werden.

Digitale Signaturen als bewährte Methode

Seit der Veröffentlichung von Windows 98 hat Microsoft die Treibersignatur für bestimmte Geräteklassen als Mechanismus zur Verbesserung der Treiberzuverlässigkeit, zur Verbesserung der Benutzerfreundlichkeit, zur Senkung der Supportkosten für Software- und Hardwareanbieter und zur Senkung der Gesamtkosten für Kunden gefördert.

Für Gerätetreiber und andere Kernelmodussoftware erhöhen Treiber, die als Teil des Windows-Logo-Programms signiert sind, das Vertrauen der Endbenutzer in die Qualität der Software und verbessern die Benutzererfahrung, da ein Windows-Logo, das zu einem Treiber gehört, anzeigt, dass der Treiber getestet wurde und die digitale Signatur, die das Windows-Logo bestätigt, seit dem Testen nicht geändert wurde.

Für die meisten Kernelmodustreiberpakete wird eine digitale Signatur in einer signierten Katalogdatei (.cat) bereitgestellt. Die Windows Hardware Quality Labs (WHQL) stellen eine von Microsoft signierte CAT-Datei bereit, die mit einem Treiberpaket verteilt werden kann, das die Anforderungen des Windows-Logo-Programms erfüllt.

Der Prozess der Erstellung von Signierter Kernelmodussoftware besteht aus zwei verschiedenen, aber verwandten Aktivitäten. Diese können parallel erfolgen, da die Software in der Regel erst relativ spät im Entwicklungsprozess signiert werden muss.

  • Verwalten des Signaturprozesses. Dies wird in der Regel von den Programmverwaltungs- und Softwareveröffentlichungsdiensten des Herausgebers verarbeitet und umfasst Folgendes:

    • Auswählen der entsprechenden Signaturoption.
    • Abrufen der erforderlichen Zertifikate.
    • Verwalten der digitalen Signatur- oder Codesignaturschlüssel.

    Hinweis Um Bild-Binärdateien oder -kataloge digital signieren zu können, muss ein Softwareherausgeber über einen zertifizierten Codesignaturschlüssel verfügen, was bedeutet, dass eine Zertifizierungsstelle die Identität des Herausgebers ausreichend festgestellt hat.

  • Implementieren des zu signierten Treibers. Dies wird in der Regel vom Entwicklungsteam des Herausgebers behandelt und umfasst Folgendes:

    • Implementieren des Treibers selbst.
    • Erstellen eines signierten Treiberpakets für interne Tests oder Release.

Diese Prozesse werden für frühere Versionen von Windows im WDK und im Platform SDK dokumentiert. In diesem Artikel werden zusätzliche Optionen im Zusammenhang mit der Codesignatur im Kernelmodus für Windows Vista beschrieben.

Optionen für die Codesignatur im Kernelmodus

Es stehen mehrere Optionen für die Arbeit mit den KmCs-Anforderungen (Kernel Mode Code Signing) in Windows Vista zur Verfügung. Das Signieren von Treiberdateien ist nicht erforderlich, damit Windows Vista Treiber beim Entwickeln von Kernelmoduscode laden kann. Stattdessen können Entwickler einen der Mechanismen verwenden, um Ladezeitprüfungen durch den Kernel vorübergehend auf Entwicklungs- und nicht automatisierten Testsystemen zu deaktivieren. Die Testsignatur von Treiberpaketen ist jedoch erforderlich, um die Installation eines Treiberpakets auf Testsystemen zu automatisieren, ohne dass Popups zur Treiberinstallation vorhanden sind. Die Treiberverwaltungsinfrastruktur (Driver Management Infrastructure, DMI) überprüft die Treiberpaketsignatur während der Installation und warnt Benutzer vor nicht signierten Treibern.

In der folgenden Tabelle werden die Optionen für die digitale Signatur von Kernelmodulen verglichen, die von Windows Vista unterstützt werden.

Optionen zum Signieren von Kernelmodulen

Signaturoptionen Funktionalität überprüft, um die Logoanforderungen zu erfüllen Identität überprüft Verwendungszweck
Windows-Logo-Programm Ja Ja Freigabe
Kernelmodus-Codesignatur mithilfe eines SPC Nein Ja Freigabe
WHQL-Testsignaturprogramm Nein Ja Testen
KMCS-Testsignatur Nein Nein Testen

Das Windows-Logo-Programm überprüft die korrekte Treiberfunktionalität und stellt eine hohe Qualität und Zuverlässigkeit sicher. Treiberpakete, die an das Windows-Logo-Programm übermittelt werden, werden von Microsoft digital signiert. Das Windows-Logo-Programm akzeptiert Gerätepakete, die über die INF-Datei für Hardware installiert werden, die die Windows-Logo-Anforderungen erfüllt. Der Treiberherausgeber übermittelt das Treiberpaket nach Abschluss der Treiberüberprüfungstests für das Windows-Logo-Programm. Treiber, die sich für das Logo qualifizieren, erhalten eine von Microsoft signierte CAT-Datei. Informationen zum Windows-Logo-Programm finden Sie im Abschnitt Ressourcen am Ende dieses Artikels.

Entwickler können die Treiberimagedatei oder den Treiberkatalog vor der Übermittlung an WHQL mit einem SPC zum Testen signieren, um zu überprüfen, ob der Treiber ordnungsgemäß geladen und ausgeführt wird.

Die Kernelmodus-Codesignatur mithilfe eines SPC ermöglicht die Identifizierung des Herausgebers eines Kernelmoduls, das in Windows Vista geladen wird. Es bietet keine Zertifizierungsebene der Funktionalität oder Zuverlässigkeit des Kernelmoduls. Für Treiber, die nicht für das Windows-Logo qualifiziert sind oder das Windows-Logo keine der Produktanforderungen ist, kann der Herausgeber eine CAT-Datei für das Treiberpaket erstellen und mit dem SPC des Herausgebers signieren.

Wichtig Die Kernelmodus-Codesignatur ersetzt nicht das WHQL-Programm. Microsoft empfiehlt Herausgebern, das Windows-Logo-Programm zu verwenden, um die Treiberqualität sicherzustellen. Die Kernelmodus-Codesignatur erfordert nicht, dass der Softwareherausgeber die Testanforderungen für das Windows-Logo-Programm im Zusammenhang mit WHQL erfüllt.

Eine signierte CAT-Datei ist alles, was erforderlich ist, damit die meisten Treiberpakete ordnungsgemäß auf x64-Systemen installiert und geladen werden können, mit Ausnahme von Paketen, die einen Treiber enthalten, der vom Windows Vista-Startladeprogramm geladen wird. Ein Treiberpaket, das einen Gerätetreiber enthält, der vom Windows Vista-Startladeprogramm geladen wird, muss auf zwei Arten signiert werden:

  • Die Binärdatei des Kernelmodustreibers, die zum Startzeitpunkt geladen wird, muss über eine eingebettete Signatur in der Binärdatei verfügen, die mit einem SPC signiert ist. Der Einfachheit halber kann es einfacher sein, alle Treiberimagedateien im Paket zu signieren.
  • Das mit einer INF-Datei installierte Treiberpaket muss ebenso wie Treiberpakete, die keinen Starttreiber enthalten, eine signierte Katalogdatei für die Signaturüberprüfung während der Installation enthalten.

Hersteller sollten sicherstellen, dass Hardwareanbieter einen SPC erwerben und alle Starttreiber signieren, die auf vom Hersteller installierten Systemen installiert werden.

Für Testzwecke während des Entwicklungszyklus wird die Codesignierung mithilfe eines Testzertifikats empfohlen, anstatt sich mit einem Releasezertifikat zu signieren. Eine testsignierte Binärdatei wird von Windows Vista-Systemen nur erkannt, wenn eine Startkonfigurationsoption aktiviert ist, die die Verwendung von Testsignaturzertifikaten ermöglicht. Die Testsignatur ist standardmäßig nicht aktiviert, und Testsignaturen werden von den meisten Windows Vista-Systemen nicht als vertrauenswürdig eingestuft.

Das WHQL-Testsignaturprogramm wird auch für die Testsignatur unterstützt. Teilnehmer am Programm können Treiberpakete für die WHQL-Testsignatur übermitteln. Die Signatur in den testsignierten Katalogen wird von einem Zertifikat generiert, das unter der Microsoft Test-Stammzertifizierungsstelle ausgestellt wurde. Die Microsoft Test-Stammautorität wird akzeptiert, wenn die Windows Vista-Startkonfigurationseinstellung die Testsignatur aktiviert. Informationen zum WHQL-Testsignaturprogramm finden Sie im Abschnitt Ressourcen am Ende dieses Artikels.

Sowohl für die "Test"- als auch für die "Release"-Signatur sollte das Entwicklungsteam bewährte Methoden für die Schlüsselverwaltung befolgen, wie weiter unten in diesem Dokument unter Leitfaden zum Schützen von Codesignaturschlüsseln beschrieben.

Die Testsignatur wird im Abschnitt Verwenden der Testsignatur weiter unten in diesem Dokument ausführlicher erläutert.

Der Signaturprozess für den Kernelmodus

Das digitale Signieren einer Imagedatei oder eines Katalogs im Kernelmodus stellt die Integrität der signierten Datei(n) fest. Softwaremodule sollten nie geändert werden, nachdem der Codesignaturvorgang ausgeführt wurde. Die Änderung der Imagedatei nach der Codesignatur führt zu Fehlern bei der Überprüfung der Signatur zur Installationszeit und zur Ladezeit.

Ein Treiberpaket, das mehrere Dateien enthält, kann mit einem Katalog signiert werden. Das Treiberpaket muss über eine signierte Katalogdatei (.cat) verfügen, die verwendet wird, um den Herausgeber bei der Installation des Treiberpakets zu identifizieren und das Treiberimage zu überprüfen, wenn es in den Kernel geladen wird. Die Katalogdatei enthält ein digitales Zertifikat, das den Herausgeber identifiziert, sowie Hashes des Paketinhalts, mit denen das System überprüfen kann, ob die Dateien im Paket nicht geändert wurden.

Wie bereits erwähnt, müssen Starttreiber in der Treiberimagedatei über eingebettete Signaturen verfügen. Eingebettete Signaturen in Starttreiberabbilddateien optimieren die Startleistung des Betriebssystems, indem die appropriate.cat-Datei nicht mehr gesucht werden muss, wenn das Betriebssystemladeprogramm die Treibersignatur überprüft.

Die Treibersignierung ist während des Treiberentwicklungsprozesses nicht für jeden Build erforderlich. Entwickler können die Erzwingung von Treibersignaturen deaktivieren, wie weiter unten in diesem Dokument unter Deaktivieren der Signaturerzwingung während der Entwicklung beschrieben.

In den folgenden Abschnitten wird erläutert, wie Zertifikate abgerufen und verwaltet werden. Die Mechanismen des Signierens von Treiberpaketen werden später in diesem Artikel erläutert.

Abrufen eines Softwareveröffentlichungszertifikats (SPC)

Rufen Sie mit den folgenden Schritten einen SPC zum Signieren Ihrer Kernelmodussoftware ab, der die obligatorische Codesignierungsrichtlinie für den Kernelmodus erfüllt:

  1. Rufen Sie einen SPC von einer kommerziellen Zertifizierungsstelle ab, die digitale Zertifikate zum Signieren von Kernelmoduscode ausgibt. Die Liste der Zertifizierungsstellen, die Softwareveröffentlichungszertifikate (oder Codesignaturzertifikate) bereitstellen, die für die Codesignierung im Kernelmodus verwendet werden können, finden Sie auf der Microsoft Cross-certificates for Windows Vista Kernel Mode Code Signing-Webseite .
  2. Laden Sie ein entsprechendes zertifikatübergreifendes Zertifikat von der Microsoft Cross-certificates for Windows Vista Kernel Mode Code Signing-Webseite für die Stammzertifizierungsstelle herunter, die den SPC ausgestellt hat. Das zertifikatübergreifende Zertifikat wird in der digitalen Signatur für Kernelmoduscode verwendet, damit die Signatur bis zu einer vertrauenswürdigen Stammzertifizierungsstelle überprüft werden kann, die dem Windows Vista-Kernel bekannt ist.

Wenn Sie ein Softwareveröffentlichungszertifikat von einer kommerziellen Zertifizierungsstelle anfordern, befolgen Sie die Anweisungen auf der Website der Zertifizierungsstelle, um das Codesignaturzertifikat auf dem Computer zu erhalten und zu installieren, auf dem Sie den privaten Schlüssel zum Signieren des Codes verwenden.

Leitfaden zum Schützen von Codesignaturschlüsseln

Die kryptografischen Schlüssel, die im Mittelpunkt des Codesignierungsprozesses stehen, müssen gut geschützt und mit der gleichen Sorgfalt behandelt werden wie die wertvollsten Ressourcen für jedes Unternehmen. Diese Schlüssel stellen eine Unternehmensidentität dar. Jeder Code, der mit diesen Schlüsseln signiert ist, sieht windows so aus, als ob er eine gültige digitale Signatur enthält, die bis zum Unternehmen nachverfolgt werden kann. Wenn die Schlüssel gestohlen werden, könnten sie verwendet werden, um bösartigen Code betrügerisch zu signieren und möglicherweise zur Übermittlung von Code führen, der einen Trojaner oder Virus enthält, der von einem legitimen Herausgeber zu kommen scheint.

Ausführliche Informationen zum sicheren Schutz privater Schlüssel finden Sie unter Bewährte Methoden für die Codesignierung.

Verwenden von zertifikatübergreifenden Zertifikaten mit Der Codesignierung im Kernelmodus

Die Codesignierung im Kernelmodus verwendet als Teil des Codesignierungsprozesses zertifikateübergreifende Zertifikate. Ein Kreuzzertifikat ist ein X.509-Zertifikat, das von einer Zertifizierungsstelle (CA) ausgestellt wurde, die den öffentlichen Schlüssel für das Stammzertifikat einer anderen Zertifizierungsstelle signiert. Das Windows Vista-Betriebssystemladeprogramm und der Kernel erkennen beim Überprüfen von Treibersignaturen Zertifikate. Die zertifikatübergreifenden Zertifikate ermöglichen es dem Kernel, über eine einzelne vertrauenswürdige Microsoft-Stammzertifizierungsstelle zu verfügen, bieten aber auch die Flexibilität, die Vertrauenskette auf mehrere kommerzielle Zertifizierungsstellen zu erweitern, die Softwareherausgeberzertifikate ausstellen.

Mit zertifikatübergreifenden Zertifikaten können Entwickler und Herausgeber Softwareherausgeberzertifikate verwenden, um Software im Kernelmodus zu signieren. Entwickler, die die Kernelmodus-Codesignatur verwenden, laden die richtige zertifikatübergreifende Datei (CER) auf das System herunter, auf dem der Vorgang für die digitale Signatur ausgeführt wird. Herausgeber müssen die zertifikatübergreifende Datei nicht mit ihrer Software oder ihrem Treiberpaket verteilen. Das zertifikatübergreifende Zertifikat wird in der digitalen Signatur in der Treiberimagedatei oder im Treiberpaketkatalog enthalten sein. Benutzer, die das Treiberpaket installieren, müssen keine Konfigurationsschritte ausführen, damit Windows Vista die digitale Signatur überprüft, die ein zertifikatübergreifendes Zertifikat enthält.

Wichtig Das SignTool im Windows Vista Beta2 WDK ist die einzige Version von SignTool, die derzeit das Hinzufügen von übergreifenden Zertifikaten zu einer digitalen Signatur unterstützt. Frühere Versionen von SignTool im Windows Server 2003 Platform SDK oder DDK unterstützen das Hinzufügen von zertifikatübergreifenden Zertifikaten nicht.

Kreuzzertifikate für mehrere Zertifizierungsstellen, die für die Codesignierung im Kernelmodus verwendet werden sollen, stehen auf der Microsoft WHDC-Website zum Download zur Verfügung. Weitere Informationen finden Sie unter Microsoft Cross-certificates for Windows Vista Kernel Mode Code Signing (Microsoft Cross-certificates for Windows Vista Kernel Mode Code Signing ) in den Ressourcen am Ende dieses Dokuments.

Ausführliche Informationen zum Hinzufügen des zertifikatübergreifenden Zertifikats zur digitalen Signatur finden Sie in den Abschnitten Signieren einer CAT-Datei und Hinzufügen einer eingebetteten Signatur zu einer Treiberbilddatei.

Generieren von Testzertifikaten

Testzertifikate werden anstelle von SPCs für Testsignatur-Kernelmodus-Softwaremodule verwendet, die nicht für die Verteilung oder Freigabe außerhalb Ihrer organization sind. Bei der Testsignatur wird eine digitale Signatur auf Binärdateien im Kernelmodus oder Treiberpaketkataloge angewendet, die für interne Testzwecke verwendet werden. Die Testsignatur wird im Abschnitt Verwenden der Testsignatur weiter unten in diesem Dokument ausführlicher erläutert. Wenn Sie ein Testzertifikat für die Codesignierung im Kernelmodus verwenden, ist kein Kreuzzertifikat erforderlich.

Testzertifikate können mithilfe einer Unternehmenszertifizierungsstelle oder mit dem Hilfsprogramm Makecert generiert werden. Weitere Informationen zur Verwendung einer Unternehmenszertifizierungsstelle zum Ausstellen von Testsignaturzertifikaten innerhalb Ihrer organization finden Sie unter Bewährte Methoden für die Codesignierung.

Im folgenden Beispiel generiert Makecert ein Testzertifikat, das vom Standardteststamm ausgestellt wurde, speichert den privaten Schlüssel in einem Schlüsselcontainer und gibt das Zertifikat an einen Zertifikatspeicher und eine Zertifikatdatei aus:

Makecert –r –pe –ss SubjectCertStoreName –n "CN= CertName" OutputFile.cer

Die Argumente für Makecert im Beispiel gehen wie folgt vor:

  • -r
    Erstellt ein selbstsigniertes Zertifikat, d. h. das Zertifikat ist ein Stammzertifikat.
  • -Pe
    Macht den privaten Schlüssel, der dem Zertifikat zugeordnet ist, exportierbar.
  • -ssSubjectCertStoreName
    Gibt den Namen des Zertifikatspeichers an, der das Stammzertifikat enthält.
  • **-n "CN=**CertName"
    Gibt einen Namen für das Zertifikat an. Wenn kein Zertifikatname angegeben wird, lautet der Standardname des Zertifikats "Joe es Software Emporium".
  • OutputFile.cer
    Der Name der Datei, in der das Stammzertifikat gespeichert ist.

Ein Beispielbefehlsskript mit makecert ist im WDK verfügbar. Der Name der Skriptdatei befindet sich selfsign_example.txt im Verzeichnis "bin\selfsign". Bevor Sie Ihr Treiberpaket installieren können, müssen Sie Ihre Testzertifikate dem Zertifikatspeicher auf dem Zieltestcomputer hinzufügen.

Das folgende Beispiel zeigt, wie Sie die Testzertifikate dem vertrauenswürdigen Stammspeicher und dem vertrauenswürdigen Herausgeberspeicher auf dem Zieltestcomputer hinzufügen.

certmgr.exe -add OutputFile.cer -s -r localMachine root 
certmgr.exe -add OutputFile.cer -s -r localMachine trustedpublisher

Die Argumente für Certmgr im Beispiel führen wie folgt aus:

  • -Hinzufügen
    Fügt das Zertifikat in der Zertifikatdatei einem Zertifikatspeicher hinzu.
  • -s
    Gibt an, dass der Zertifikatspeicher ein Systemspeicher ist.
  • -r
    Gibt an, dass sich der Registrierungsspeicher des Systemspeichers unter HKEY_LOCAL_MACHINE Schlüssel befindet.
  • Root- oder TrustedPublisher
    Gibt den Namen des Systemzertifikatspeichers an.

Weitere Informationen zu Certmgr und Makecert finden Sie unter Ressourcen am Ende dieses Dokuments.

Erstellen einer signierten CAT-Datei

Die Tools zum Generieren und Signieren von Katalogdateien, MakeCat und SignTool, werden im Windows Vista WDK bereitgestellt.

Beachten Sie Signtool.exe und MakeCat.exe sich im Verzeichnis "bin\selfsign" des WDK befinden.

Erstellen einer CAT-Datei

Eine digital signierte CAT-Datei enthält die Hashes aller Kernelmodusmodule, die beim Laden in den Kernel überprüft werden. Die Katalogdatei kann auch Hashes für andere Dateien im Softwarepaket enthalten, z. B. Anwendungsprogramme im Benutzermodus (.exes) und Anwendungserweiterungen (DLLS). Microsoft empfiehlt, dass die CAT-Datei die Hashes aller Dateien in einem Softwarepaket enthält.

Die CAT-Datei enthält eine Liste von Dateihashes, die einem angegebenen Satz von Dateien entsprechen. Ein Dateihash ist das Produkt eines SHA1-Hashs über eine Zieldatei. Ein Flatfilehash wird nicht für Dateien verwendet, z. B. Treiber, die das PE-Dateiformat (Portable Executable) verwenden. Stattdessen werden relevante Abschnitte wie der PE-Header, ausführbare Daten und authentifizierte Attribute selektiv gehasht.

Wenn ein Treiber in den Arbeitsspeicher geladen wird, führt der Windows Vista-Kernel einen SHA1-Hash über die relevanten Abschnitte der Treiber-Binärimagedatei aus. Windows überprüft, ob die Datei nicht manipuliert wurde, indem der resultierende Hashwert mit der Liste der binären Hashes in der zugeordneten CAT-Datei verglichen wird.

Wenn Sie den Treiber mit einer INF-Datei über Plug and Play installieren, verwenden Sie das Signierbarkeitstool des WDK, um einen Katalog zu erstellen, wie unten beschrieben. Erstellen Sie andernfalls manuell einen Katalog, wie weiter unten in diesem Dokument unter Manuelles Erstellen eines Katalogs beschrieben.

Erstellen eines Katalogs mithilfe der Signierbarkeit

Signability ist ein Tool, das verwendet wird, um INF-Dateien zu überprüfen und eine Katalogdatei basierend auf der INF-Datei zu erstellen. Sie ist im WDK enthalten und kann in der WDK-Buildumgebung ausgeführt werden. Für die Signierbarkeit ist eine gültige INF-Datei für Ihr Treiberpaket erforderlich. Informationen zum Erstellen einer INF-Datei finden Sie in der WDK-Dokumentation. Um einen Katalog mit dem Signability-Tool zu erstellen, gehen Sie wie folgt vor:

Verwenden der Signierbarkeit zum Erstellen eines Katalogs

  1. Erstellen Sie ein Treiberpaketverzeichnis, das alle Dateien in Ihrem Treiberpaket enthält.
  2. Erstellen Sie eine INF-Datei in Ihrem Treiberpaketverzeichnis, und bearbeiten Sie sie für Windows Vista. Ändern Sie insbesondere das Builddatum auf den 1.4.2006 oder höher und die Version auf 6. Beispiel: DriverVer=04/01/2006, 6.0.1.0
  3. Führen Sie Signability aus, um eine gültige CAT-Datei basierend auf der INF-Datei zu erstellen:
    • Führen Sie Signability.exe aus, und verwenden Sie die GUI, um die Katalogdatei zu erstellen.

    • Führen Sie Signability über die Befehlszeile aus. Beachten Sie package_directory der vollqualifizierte Pfad zum Paketverzeichnis sein muss.

      Signability.exe /auto /cat /driver:package_directory /os:512
      

In diesem Beispiel wird eine CAT-Datei im Verzeichnis driver_package erstellt, wobei mehrere Argumente verwendet werden, die von Signability unterstützt werden:

  • /Auto
    Konfiguriert das Signability-Tool so, dass es ohne Benutzerinteraktion ausgeführt wird.
  • /Katze
    Konfiguriert das Signability-Tool, um die Katalogdatei zu generieren, deren Name von der INF-Datei des Treiberpakets angegeben wird.
  • /driver:DriverPath
    Gibt den Pfad zu dem Verzeichnis an, das die Treiberpaketdateien enthält.
  • /os:nnn
    Konfiguriert das Signability-Tool, um zu überprüfen, ob die INF-Datei des Treiberpakets den Anforderungen der Windows-Versionen entspricht, die durch den Flagwert nnn angegeben werden. 512 ist der Wert für Windows Vista, 64-Bit Edition.

Manuelles Erstellen eines Katalogs

Um eine CAT-Datei manuell zu erstellen, verwenden Sie zunächst einen Text-Editor, um eine Katalogdefinitionsdatei (CDF) zu erstellen. Die CDF-Datei enthält eine Liste der Dateien, die katalogisiert werden sollen, und deren Attribute.

Das folgende Beispiel zeigt den Inhalt einer typischen CDF-Datei mit dem Namen Good.cdf. Das zu katalogisierende Paket enthält zwei Dateien: File1 und File2. Die resultierende CAT-Datei heißt Good.cat.

[CatalogHeader]
Name=Good.cat
PublicVersion=0x0000001
EncodingType=0x00010001
CATATTR1=0x10010001:OSAttr:2:6.0
[CatalogFiles]
<hash>File1=File1
<hash>File2=File2

Eine CAT-Datei wird mit dem Befehlszeilentool MakeCat erstellt, das im Platform SDK und im WDK enthalten ist. Das MakeCat-Tool:

  • Überprüft die Liste der Attribute für jede aufgeführte Datei.
  • Fügt die aufgeführten Attribute der CAT-Datei hinzu.
  • Hashen Sie jede der aufgeführten Dateien.
  • Speichert die Hashes jeder Datei in der CAT-Datei.

So erstellen Sie eine CAT-Datei

  1. Verwenden Sie einen Text-Editor, um eine CDF-Datei zu erstellen, die eine Liste der zu katalogisierenden Dateien mit ihren Attributen enthält.
  2. Führen Sie MakeCat für die CDF-Datei aus.

Hinweis MakeCat ändert die CDF-Datei nicht.

Das folgende Beispiel zeigt, wie Sie eine .cat-Datei aus Good.cdf erstellen. Das Flag -v gibt die ausführliche Version von MakeCat an. Die Hashdateien und die neu generierte Good.cat-Datei werden im selben Ordner wie File1 und File2 abgelegt.

MakeCat -v Good.cdf

Die CAT-Datei kann jetzt signiert werden.

Weitere Informationen zu MakeCat und dem Format von CDF-Dateien finden Sie in der MakeCat-Dokumentation unter Ressourcen am Ende dieses Dokuments.

Signieren einer CAT-Datei

Die von MakeCat generierte CAT-Datei enthält alle Dateihashes, die zum Installieren von Kernelmodusmodulen auf dem System eines Benutzers erforderlich sind. Die Datei muss jedoch auch digital signiert sein.

Eine CAT-Datei wird mit dem Befehlszeilentool SignTool signiert. Die digitale Signatur im Katalog, die zum Überprüfen von Kernelmodus-Imagedateien verwendet wird, muss ein zertifikatübergreifendes Zertifikat enthalten. Das zertifikatübergreifende Zertifikat wird mithilfe einer neuen Befehlsoption zu SignTool hinzugefügt.

Wichtig Sie müssen die Version von SignTool aus dem Windows Vista Beta2 WDK verwenden, um das zertifikatübergreifende Zertifikat zur digitalen Signatur hinzuzufügen.

Das folgende Beispiel zeigt, wie Sie mit Signtool eine CAT-Datei mit einem SPC und dem entsprechenden privaten Schlüssel signieren, der in den Windows-Zertifikatspeicher importiert wird. Informationen zur Verwendung von Signtool mit einem HSM finden Sie in der SignTool-Dokumentation unter Ressourcen am Ende dieses Dokuments.

SignTool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll Good.cat

In diesem Beispiel werden mehrere der von SignTool unterstützten Argumente verwendet:

  • Signieren
    Konfiguriert das Tool zum Signieren der CAT-Datei mit dem Namen CatFileName.cat.
  • /v
    Gibt die ausführliche Option für erfolgreiche Ausführung und Warnmeldungen an*.*
  • /Ac
    Fügt das zertifikatübergreifende Zertifikat aus der Datei CrossCertificateFile zur digitalen Signatur hinzu.
  • /s
    Gibt einen Zertifikatspeicher mit dem Namen SPCCertificateStore an.
  • /n
    Gibt ein Zertifikat mit dem Antragstellernamen SPCSubjectName an.
  • /tURL
    Gibt an, dass die digitale Signatur von der zeitstempelnden Autorität (Timestamping Authority, TSA) als URL angegeben wird.

Wichtig Der Katalog- oder Treibersignaturnebel enthält einen Zeitstempel, um die erforderlichen Informationen für die Schlüsselsperrung bereitzustellen, falls der private Schlüssel des Signierers kompromittiert wird.

Wenn während der Geräteinstallation der für die Signatur verwendete SPC abgelaufen ist und die Signatur nicht mit einem Zeitstempel versehen wurde, wird die CAT-Datei nicht installiert, und Windows lässt das Laden des Treibers nicht zu. Wenn die Signatur jedoch von einer vertrauenswürdigen Zeitstempelautorität zeitstempelt wird, wird die CAT-Datei installiert, und Windows lässt das Laden des Treibers zu.

Signieren der selbstextrahierenden Downloaddatei

Software, die für die Verteilung auf einer Produktsupportwebsite veröffentlicht wird, ist in der Regel in einer selbstextrahierenden Archivdatei verpackt. Die selbstextrahierende ausführbare Datei wird mithilfe eines Webbrowsers heruntergeladen und der Inhalt extrahiert, bevor der Benutzer mit der Installation auf dem Computer beginnt. Verwenden Sie den SPC, der die CAT-Datei des Treiberpakets signiert hat, um auch die selbstextrahierende .exe-Datei digital zu signieren.

Das digitale Signieren der selbstextrahierenden .exe-Datei identifiziert den Herausgeber der Archivdatei und stellt die Integrität der selbstextrahierenden .exe Datei sicher, die über das Internet heruntergeladen wird. Benutzer, die die selbstextrahierende .exe-Datei herunterladen, erhalten in der Regel ein Vertrauensdialogfeld oder eine Sicherheitswarnung, wenn sie die selbstextrahierende Datei herunterladen und ausführen möchten.

Wenn sich der Benutzer in Windows Vista die Details des Dialogfelds "Sicherheitswarnung" ansieht und "Software immer vom Namen> des <Herausgebers installieren" auswählt, vereinfacht diese Option die spätere Bestätigung, wenn ein Treiberpaket installiert wird. Wenn das Treiberpaket installiert ist, wird der Benutzer gefragt, ob er dem Herausgeber des signierten Treiberpakets vertraut, bevor die Treiberinstallation beginnt. Wenn der Benutzer beim Herunterladen der selbstextrahierenden .exe Datei die Option ausgewählt hat, immer Software vom Treiberherausgeber zu installieren, wird die Vertrauensdialogaufforderung während der Treiberinstallation nicht angezeigt.

Installieren einer signierten CAT-Datei

Für Treiber, die über Plug and Play installiert werden, werden keine Änderungen am Installationsprozess erwartet. Die Installation eines eingebetteten signierten Treibers erfordert keine spezielle Verarbeitung, die über die Standard-INF- und Setupmechanismen hinausgeht. Beachten Sie, dass nur Benutzer, die Mitglieder der Gruppe Administratoren sind, Treiberpakete installieren dürfen.

Treiber, die nicht über Plug and Play installiert werden, müssen ihre CAT-Dateien im Stammordner des Systemkatalogs installieren. Die Installation eines Katalogs im Katalogstammordner kann mithilfe vorhandener Win32-Katalog-API-Aufrufe, insbesondere CryptCATAdminAddCatalog, verwaltet werden.

Hinzufügen einer eingebetteten Signatur zu einer Treiberimagedatei

Um die Leistung der Treiberüberprüfung zur Startzeit zu optimieren, müssen die Binärdateien des Starttreibers zusätzlich zur signierten CAT-Datei für das Paket über eine eingebettete Signatur mit dem SPC verfügen. Die eingebettete Signatur spart beim Starten des Betriebssystems erheblich Zeit, da das Betriebssystemladeprogramm die CAT-Datei im Treiber nicht finden muss. Ein typisches Windows Vista-System kann über hundert verschiedene Katalogdateien im Katalogstammspeicher enthalten. Die Suche nach der richtigen Katalogdatei, um den Imagehash eines bestimmten Treibers zu überprüfen, kann mit einem hohen Systemaufwand verbunden sein, der mehrere Kataloge nach der richtigen Datei sucht.

Starttreiber werden basierend auf dem StartType-Dienstwert von SERVICE_BOOT_START (0) identifiziert.

Eingebettete Signaturen beeinträchtigen die Signatur oder Validierung von .cat-Dateien nicht. Beachten Sie, dass die in Katalogen und eingebetteten Signaturen enthaltenen Hashes den Signaturteil des PE-Dateiformats selektiv ausschließen.

Verwenden Sie den folgenden Befehl, um Signtool.exe zum Einbetten einer Signatur in eine Starttreiber-Binärdatei mithilfe eines SPC und eines entsprechenden privaten Schlüssels, der in den Windows-Zertifikatspeicher importiert wird, zu verwenden:

SignTool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll winloaddriver.sys

In diesem Beispiel werden mehrere der von SignTool unterstützten Argumente verwendet:

  • Signieren
    Der Sign-Befehl konfiguriert das Tool, um den Treiber mit dem Namen winloaddriver.sys zu signieren.
  • /v
    Gibt die ausführliche Option für erfolgreiche Ausführung und Warnmeldungen an*.*
  • /Ac
    Fügt das zertifikatübergreifende Zertifikat aus der Datei CrossCertificateFile zur digitalen Signatur hinzu.
  • /s-Optionen
    Gibt den Zertifikatspeicher mit dem Namen SPCCertificateStore an.
  • /n
    Gibt das Zertifikat mit dem Antragstellernamen SPCSubjectName an.
  • /tURL
    Gibt an, dass die digitale Signatur von der durch die URL angegebenen TSA zeitstempelt werden soll .

Wichtig: Der Katalog oder Treiber muss zeitstempelt werden, da dadurch die erforderlichen Informationen für die Schlüsselsperrung bereitgestellt werden, falls der Signaturschlüssel kompromittiert wird.

Überprüfen einer eingebetteten Signatur

Das folgende Verfahren zeigt, wie Sie eine eingebettete Signatur mit Windows Explorer überprüfen.

So überprüfen Sie eingebettete Signaturen

  1. Klicken Sie während der Ausführung von Windows Vista mit der rechten Maustaste auf den Treiber .sys Datei, und klicken Sie im Kontextmenü auf Eigenschaften .
  2. Klicken Sie auf die Registerkarte Digitale Signaturen , falls sie vorhanden ist.
    • Wenn diese Registerkarte nicht vorhanden ist, enthält die Datei keine eingebettete Signatur.
  3. Wählen Sie den Signaturgeber aus, und klicken Sie auf Details , um das Dialogfeld Signaturdetails zu öffnen.
  4. Klicken Sie auf Zertifikat anzeigen , um die Eigenschaftenseiten des Zertifikats zu öffnen.
    • Stellen Sie sicher, dass keine Warnungsdialogfelder vorhanden sind.
    • Vergewissern Sie sich, dass der Antragstellername des Zertifikats Publisher bei einer anerkannten Zertifizierungsstelle registriert ist.
  5. Klicken Sie auf die Registerkarte Zertifizierungspfad .
    • Stellen Sie sicher, dass der Antragstellername des obersten Zertifikats Microsoft Code Verification Root ist.

So überprüfen Sie eingebettete Signaturen mithilfe signtool.exe für die Codesignaturrichtlinie im Kernelmodus

  • Signtool.exe kann verwendet werden, um die Signatur in einer CAT-Datei mit dem folgenden Befehl zu überprüfen:
Signtool verify /kp /c tstamd64.cat toaster.sys

Vergewissern Sie sich, dass der Imagehash für die Datei toaster.sys in der Katalogdatei gefunden wird. Das Tool gibt die Zeichenfolge "Success" zurück.

Deaktivieren der Signaturerzwingung während der Entwicklung

Während der frühen Entwicklungsphasen können Entwickler die Erzwingung in Windows deaktivieren, sodass die Treibersignatur nicht erforderlich ist. Die folgenden Optionen stehen Entwicklern zur Verfügung, um die Codesignaturerzwingung im Kernelmodus vorübergehend zu deaktivieren, sodass Windows Vista einen nicht signierten Treiber lädt.

  • Anfügen eines Kerneldebuggers. Das Anfügen eines aktiven Kerneldebuggers an den Zielcomputer deaktiviert die Erzwingung von Kernelmodussignaturen in Windows Vista und ermöglicht das Laden des Treibers.

  • Verwenden sie die Option F8. Eine mit Windows Vista eingeführte erweiterte F8-Startoption – "Treibersignaturerzwingung deaktivieren" – ist verfügbar, um die Kernelsignaturerzwingung nur für die aktuelle Startsitzung zu deaktivieren. Diese Einstellung wird nicht über Startsitzungen hinweg beibehalten.

  • Festlegen der Startkonfiguration. In der Windows Vista Beta2-Version ist eine Startkonfigurationseinstellung verfügbar, die die Erzwingung von Kernelmodussignaturen deaktiviert, die über Startsitzungen hinweg beibehalten werden sollen.

    Windows Vista enthält das Befehlszeilentool BCDedit, mit dem die Option in Windows Vista Beta2 zum Deaktivieren von Signaturprüfungen festgelegt werden kann. Um BCDedit zu verwenden, muss der Benutzer Mitglied der Gruppe Administratoren auf dem System sein und den Befehl an einer Eingabeaufforderung mit erhöhten Rechten ausführen. Eine Eingabeaufforderung mit erhöhten Rechten kann gestartet werden, indem Sie eine Desktopverknüpfung für cmd.exe erstellen und dann mit der rechten Maustaste klicken und "Als Administrator ausführen".

    Im Folgenden sehen Sie ein Beispiel für die Ausführung von BDCedit an der Eingabeaufforderung:

    // Disable enforcement – no signing checks
    Bcdedit.exe –set nointegritychecks ON 
    
    // Enable enforcement – signing checks apply
    Bcdedit.exe –set nointegritychecks OFF 
    
    // Disabling integrity check on an alternate OS 
    // specified by a GUID for the system ID
    Bcdedit.exe –set {4518fd64-05f1-11da-b13e-00306e386aee} nointegritychecks ON 
    

Hinweis Die Bcdedit-Option zum Deaktivieren von Integritätsprüfungen ist nur zum Laden von nicht signierten Treibern in der Windows Vista Beta2-Version verfügbar. Weitere Informationen finden Sie unter Häufig gestellte Fragen zum BCD-Editor auf der MSDN-Website.

Verwenden der Testsignatur

Die Testsignatur bietet Entwicklungsorganisationen zusätzliche Optionen zum Integrieren der Kernelmodus-Codesignatur für Vorabversionssoftware, die nicht zur Veröffentlichung bereit ist. Die Testsignatur ermöglicht die Verwendung von "Test"-Codesignaturzertifikaten zum Signieren von Treibern, die unter Windows Vista geladen werden, wenn die Windows Vista-Startkonfigurationseinstellung Testsignaturen zulässt.

Die Testsignatur kann für die Verwendung in den folgenden Szenarien geeignet sein:

  • Entwicklungsteams müssen Vorabversionen eines Treibers auf Testsystemen testen, auf denen das Anfügen eines Kerneldebuggers nicht praktikabel ist.
  • Automatisierte Tests von Kernelmodussoftware machen es unpraktisch, die F8 Advanced Boot Option zu verwenden, um die Treibersignaturerzwingung für jeden Computerstartzyklus vorübergehend zu deaktivieren.

Mit der Testsignatur können Entwickler Vorabversionen von Kernelmodus-Binärdateien so signieren, dass Windows Vista den signierten Treiber überprüfen und laden kann. Die Testsignatur umfasst die folgenden Unterschiede zur normalen Produktions- oder Releasesignatur:

  • Zertifikate, die für die Testsignatur verwendet werden, können mithilfe des Makecert.exe-Codesignierungstools generiert oder von einer Unternehmenszertifizierungsstelle ausgestellt werden, anstatt einen von einer kommerziellen Zertifizierungsstelle ausgestellten SPC zu verwenden.
  • Die Windows Vista-Startkonfigurationsoption zum Aktivieren der Testsignatur muss auf dem Windows Vista-System aktiviert sein, das den signierten Testtreiber lädt.

Entwicklungsorganisationen können eine Unternehmens-PKI einrichten und ihre eigenen Testcodesignaturzertifikate ausstellen, die für die Testsignatur verwendet werden sollen. Wenn Windows Vista die Testsignatur aktiviert, akzeptiert die Überprüfung der digitalen Signatur auf der Treiberbinärdatei Zertifikate, die von einer zertifizierungsstellen oder ausstellenden Behörde ausgestellt wurden. Die Testsignatur überprüft, ob das Treiberimage signiert ist, aber die Zertifikatpfadüberprüfung, die im Kernelmodus durchgeführt wird, erfordert nicht, dass der Aussteller als vertrauenswürdige Stammautorität konfiguriert wird. Dadurch können Organisationen einzelne Signaturen für Testbinärdateien verwenden, basierend auf den Anmeldeinformationen, die für die Codesignatur innerhalb des organization ausgestellt wurden. Microsoft empfiehlt diese Form der Bereitstellung für die Testsignatur innerhalb der Kernelmodus-Codesignatur.

Die Verwendung von Zertifikaten, die vom makecert.exe-Tool generiert wurden, ist auch für die Testsignatur akzeptabel. Von makecert generierte Zertifikate bieten jedoch häufig keine nützlichen Identitätsinformationen, und es gibt keine Möglichkeit, nachzuverfolgen, welcher einzelne Entwickler eine signierte Testversion der Vorabversion der Binärdatei erstellt hat.

Hinweis Die Windows Vista Beta2-Version akzeptiert nur Testzertifikate, die vom makecert-Tool generiert wurden. Testcodesignaturzertifikate, die von einer Unternehmenszertifizierungsstelle für die Testsignatur ausgestellt wurden, ist in Windows Vista Beta2 nicht verfügbar.

Die Anweisungen zum Signtool in diesem Dokument funktionieren genauso, unabhängig davon, ob Sie einen SPC oder ein vom Makecert-Hilfsprogramm generiertes Zertifikat oder ein von einer Unternehmenszertifizierungsstelle ausgestelltes Zertifikat verwenden. Der einzige Unterschied ist in der Regel der Aussteller- und Antragstellername im Zertifikat.

Das WHQL-Testsignaturprogramm wird auch für die Testsignatur unterstützt. Teilnehmer am Programm können Treiberpakete für WHQL-Testsignaturen übermitteln. Die Signatur in den testsignierten Katalogen wird durch ein Zertifikat generiert, das unter der Microsoft Test-Stammzertifizierungsstelle ausgestellt wurde. Die Microsoft Test-Stammautorität wird standardmäßig unter Windows Vista Beta2 als Teil des Betaprogramms akzeptiert. In der endgültigen Version von Windows Vista wird die Microsoft Test-Stammautorität akzeptiert, wenn die Windows Vista-Startkonfigurationseinstellung Die Testsignatur aktiviert.

Binärdateien im signierten Kernelmodus werden auf Windows Vista-Systemen standardmäßig nicht geladen. Die digitalen Signaturen für testsignierte Binärdateien sind auf Windows Vista-Systemen standardmäßig ungültig, da die Codesignaturrichtlinie im Kernelmodus keine Testsignaturzertifikate akzeptiert und nicht vertrauenswürdig ist.

Aktivieren der Testsignatur

Verwenden Sie das Befehlszeilentool Bcdedit, um die Testsignatur zu aktivieren. Um BCDedit zu verwenden, muss der Benutzer Mitglied der Gruppe Administratoren auf dem System sein und den Befehl an einer Eingabeaufforderung mit erhöhten Rechten ausführen. Eine Eingabeaufforderung mit erhöhten Rechten kann gestartet werden, indem Sie eine Desktopverknüpfung für cmd.exe erstellen und dann mit der rechten Maustaste klicken und "Als Administrator ausführen".

Im Folgenden sehen Sie ein Beispiel für die Ausführung von BDCedit an der Eingabeaufforderung:

// Accept test signed kernel mode signatures
Bcdedit.exe –set TESTSIGNING ON 

// Do not accept test signed kernel mode signatures
Bcdedit.exe –set TESTSIGNING OFF 

Die TESTSIGNING Startkonfigurationsoption bestimmt, ob Windows Vista Binärdateien im Testsignierten Kernelmodus akzeptiert. Die Option ist nicht standardmäßig definiert. Dies bedeutet, dass digitale Signaturen auf testsignierten Kernelmodustreibern nicht überprüfen und nicht geladen werden. Wenn Windows Vista Binärdateien im testsignierten Kernelmodus akzeptiert, kann auf einige geschützte Premium-Inhalte möglicherweise nicht auf das System zugegriffen werden.

Problembehandlung

Es gibt bestimmte Schritte, die Sie ausführen können, um potenzielle Probleme im Zusammenhang mit der Überprüfung von Kernelmoduscodesignaturen zu identifizieren und zu beheben. Dieser Abschnitt enthält Informationen zur Problembehandlung bei der Erzwingung von Treibersignaturen. Die Standard Tools zum Beheben von Problemen mit der Treibersignatur sind die folgenden:

  • Erkennen von Treiberladefehlern
  • Aktivieren von Codeintegritätsdiagnosesystemprotokollereignissen.

Die im Windows Vista WDK enthaltene Toasteranwendung wird als Beispiel verwendet. Die Toasteranwendung befindet sich im WDK unter dem Verzeichnis "src\general\toaster".

Erkennen von Treiberladefehlern

Die Toasteranwendung installiert einen Gerätetreiber (toaster.sys), der für dieses Beispiel nicht signiert ist. Das Symptom eines Problems mit dem nicht signierten Treiber ist, dass das Toastergerät nicht gestartet werden kann. Mithilfe der Geräte-Manager können Sie die status des Toaster-Geräts überprüfen und den Treiber status anzeigen, wie in der folgenden Bildschirmabbildung dargestellt.

Bb530195.digitalsigskernmodules01(en-us,MSDN.10).gif

Abbildung 1. Nicht signierter Treiberfehler

Das Gerät konnte nicht gestartet werden, weil der Gerätetreiber nicht signiert war und die Erzwingung im Kernelmodus das Laden des Treibers in den Kernel blockierte. Um die Ursache des Problems endgültig zu identifizieren, haben wir das System eingerichtet, um die Signaturerzwingung Diagnose wie unten beschrieben zu ermöglichen.

Aktivieren von Codeintegritätsdiagnosesystemprotokollereignissen

Die Erzwingung der Codesignatur im Kernelmodus wird von einer Windows Vista-Komponente implementiert, die als Codeintegrität bezeichnet wird. Codeintegrität generiert Diagnoseereignisse und ein Systemüberwachungsprotokollereignis, wenn die Signatur eines Kernelmoduls nicht ordnungsgemäß überprüft werden kann.

  • Codeintegrität Betriebsereignisse sind immer aktiviert. Die Betriebsereignisse sind Warnungsereignisse, wenn eine Imageüberprüfung beim Laden einer Binärdatei im Kernelmodus fehlgeschlagen ist.
  • Überwachungsereignisse des Codeintegritätssystems werden generiert, wenn die Systemüberwachungsrichtlinie aktiviert ist. Die Systemüberwachungsrichtlinie ist standardmäßig nicht aktiviert.
  • Ausführliche Ereignisse der Codeintegrität sind Analyse- und Debug-Informationsereignisse, die alle erfolgreichen Überprüfungen der Imageüberprüfung beim Laden von Binärdateien im Kernelmodus anzeigen. Ausführliche Ereignisse sind standardmäßig nicht aktiviert.

Die Codeintegritätsereignisse können unter der Ereignisanzeige angezeigt werden, die Teil des MMC-Snapins Computerverwaltung ist. (Klicken Sie auf der Schaltfläche Start mit der rechten Maustaste auf Computer, und wählen Sie Verwalten aus.

Der Codeintegritätsereignisstream befindet sich in der folgenden Hierarchie:

Ereignisanzeige -> Anwendungs- und Dienstprotokolle –> Microsoft –> Windows –> CodeIntegrity

Bb530195.digitalsigskernmodules02(en-us,MSDN.10).gif

Abbildung 2. Codeintegritätsereignisse

Das Betriebsprotokoll der Codeintegrität zeigt Ereignisse an, die vom Kernel generiert werden, wenn ein Kernelmodustreiber beim Laden des Treibers eine Imageüberprüfung fehlschlägt. Der Fehler bei der Imageüberprüfung kann auf eine Reihe von Gründen zurückzuführen sein, einschließlich der folgenden:

  • Der Treiber wurde nicht signiert, aber auf dem System von einem Administrator installiert, und die Codeintegrität lässt das Laden des Treibers nicht zu.
  • Der Treiber wurde signiert, aber die Treiberimagedatei wurde geändert oder manipuliert, und die Änderung hat die Treibersignatur ungültig gemacht.
  • Auf dem Systemdatenträgergerät treten möglicherweise Gerätefehler auf, wenn die Imagedatei für das Gerät aus fehlerhaften Datenträgersektoren gelesen wird.

Ein Betriebsprotokolleintrag für einen Fehler bei der Überprüfung des nicht signierten oder geänderten Treiberimages sieht wie im folgenden Beispiel aus:

Bb530195.digitalsigskernmodules03(en-us,MSDN.10).gif

Abbildung 3. Eintrag im Betriebsprotokoll

Das Ereignis gibt an, dass der Toastertreiber (toaster.sys) nicht geladen werden konnte, da er nicht signiert war (oder das toaster.sys Bild, das geladen werden soll, nicht dasselbe ist, das vom Herausgeber digital signiert wurde).
Alle Meldungen des Codeintegritätsereignisprotokolls sind unten im Abschnitt Codeintegritätsereignisprotokollmeldungen aufgeführt.

Systemüberwachungsprotokollereignisse

Codeintegrität generiert Systemüberwachungsprotokollereignisse, die den Betriebswarnungsereignissen entsprechen, wenn die Imageüberprüfung eines Kernelmodustreibers fehlschlägt. Die Systemprotokollereignisse können im Ereignisanzeige in der Ansicht Windows-Protokolle, Systemprotokoll angezeigt werden.

Systemüberwachungsereignisse sind möglicherweise nicht auf allen Windows Vista-Systemen aktiviert. Verwenden Sie das MMC-Snap-In "Lokale Sicherheitseinstellungen", um "Systemereignisse überwachen" unter lokalen Richtlinien, Richtlinieneinstellungen überwachen zu überprüfen oder zu aktivieren.

Informationsereignisse im ausführlichen Protokoll

Zusätzliche Codeintegritäts-Informationsereignisse für alle Überprüfungen des Kernelmodusimages sind in der Ausführlichen Ereignisansicht verfügbar. Diese Ereignisse zeigen die erfolgreiche Imageüberprüfung aller treiber, die auf das System geladen wurden.

Die Schritte zum Aktivieren der Ereignisansicht "Codeintegrität ausführlich" sind wie folgt:

  1. Klicken Sie mit der linken Maustaste auf die Ansicht Betrieb , um die aktuellen Codeintegritätsereignisse (falls vorhanden) anzuzeigen.
  2. Klicken Sie mit der linken Maustaste auf den Knoten Codeintegrität , um den Fokus festzulegen.
  3. Klicken Sie mit der rechten Maustaste auf den Knoten Codeintegrität , um das Kontextmenü abzurufen.
  4. Wählen Sie Ansicht aus.
  5. Wählen Sie Analyse- und Debugprotokolle anzeigen aus.
  6. Dadurch wird eine Unterstruktur mit zwei zusätzlichen Knoten erstellt, dem Knoten "Operational " und " Ausführlich ".
  7. Klicken Sie mit der rechten Maustaste auf den Knoten Ausführlich , und wählen Sie Eigenschaften aus.
  8. Wählen Sie das Blatt Allgemein und dann die Option Protokollierung aktivieren aus. Dadurch sollte der ausführliche Protokollierungsmodus aktiviert werden.
  9. Starten Sie das System neu, um alle Binärdateien im Kernelmodus neu zu laden.
  10. Öffnen Sie nach dem Neustart das Snap-In Computerverwaltung, und zeigen Sie das EreignisprotokollCodeintegritätausführlich an.

Wie folgt können Sie überprüfen, ob toaster.sys ordnungsgemäß signiert ist:

In diesem speziellen Fall ist toaster.sys ein PnP-Treiber und wird in einer Katalogdatei (tstamd64.cat in "\src\general\toaster\toastpkg\toastcd" benannt. Verwenden Sie das SignTool-Hilfsprogramm, um mit dem folgenden Befehl zu überprüfen, ob toaster.sys ordnungsgemäß katalogisiert ist:

Signtool verify /kp /c tstamd64.cat toaster.sys

Debugoptionen für die Treiberüberprüfung

In einigen Fällen möchten Entwickler möglicherweise eine obligatorische Codesignaturrichtlinie im Kernelmodus erzwingen, auch wenn ein Debugger angefügt ist. Ein Beispiel hierfür ist, wenn ein Treiberstapel über einen nicht signierten Treiber (z. B. einen Filtertreiber) verfügt, der nicht geladen werden kann, wodurch der gesamte Stapel ungültig wird. Da das Anfügen eines Debuggers das Laden des nicht signierten Treibers zulässt, scheint das Problem zu verschwinden, sobald der Debugger angefügt ist. Das Debuggen dieser Art von Problem kann schwierig sein. Um das Debuggen in diesem Fall zu erleichtern, unterstützt die Codeintegrität einen Registrierungsschlüssel, der so festgelegt werden kann, dass die Erzwingung der Kernelmodussignierung auch dann erzwungen werden kann, wenn ein Debugger angefügt ist.

In der Registrierung sind zwei Flags definiert, die das Verhalten der Codeintegrität unter dem Debugger steuern. Die Flags sind nicht standardmäßig definiert.

Erstellen Sie den Registrierungswert wie folgt:

Key:   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI
Value:   DebugFlags      REG_DWORD   

Mögliche Werte:

  • 00000001
    Führt zu einer Debugunterbrechung im Debugger, und nicht signierter Treiber darf mit ggeladen werden.
  • 00000010
    CI ignoriert das Vorhandensein des Debuggers, und das Laden nicht signierter Treiber wird blockiert.

Jeder andere Wert führt dazu, dass nicht signierte Treiber geladen werden. Dies ist die Standardrichtlinie.

Codeintegritätsereignisprotokollmeldungen

Im Folgenden sind Warnungsereignisse aufgeführt, die im Betriebsprotokoll der Codeintegrität protokolliert werden:

  • "Die Codeintegrität kann die Imageintegrität des Dateinamens <> nicht überprüfen, da der Dateihash auf dem System nicht gefunden wurde."
  • "Codeintegrität hat einen nicht signierten Treiber erkannt."
  • "Diese Veranstaltung steht im Zusammenhang mit der SoftwareQualitätsüberwachung (SQM)."

Im Folgenden werden Im Protokoll code integrity verbose protokollierte Informationsereignisse aufgeführt:

  • "Die Codeintegrität hat einen Satz von Bildhashes pro Seite für den Dateinamen>< in einem Katalogkatalognamen>< gefunden."
  • "Die Codeintegrität hat einen Satz von Bildhashes pro Seite für den Dateinamen>< im eingebetteten Imagezertifikat gefunden."
  • "Die Codeintegrität hat einen Dateihash für den Dateinamen>< in einem Katalogkatalognamen>< gefunden."
  • "Die Codeintegrität hat einen Dateihash für den Dateinamen>< im eingebetteten Imagezertifikat gefunden."
  • "Die Codeintegrität hat festgestellt, dass ein nicht signierter Kernelmoduldateiname>< in das System geladen wurde. Wenden Sie sich an den Herausgeber, um zu überprüfen, ob eine signierte Version des Kernelmoduls verfügbar ist."
  • "Die Codeintegrität kann die Imageintegrität des Dateinamens>< nicht überprüfen, da der Satz von Bildhashes pro Seite nicht auf dem System gefunden werden konnte."
  • "Die Codeintegrität kann die Imageintegrität des Dateinamens>< nicht überprüfen, da der Satz von Bildhashes pro Seite nicht auf dem System gefunden werden konnte. Das Image kann geladen werden, da der Kernelmodusdebugger angefügt ist."
  • "Die Codeintegrität kann die Imageintegrität des Dateinamens>< nicht überprüfen, da auf dem System kein Dateihash gefunden wurde. Das Image kann geladen werden, da der Kernelmodusdebugger angefügt ist."
  • "Codeintegrität konnte den <Dateinamenkatalog> nicht laden."
  • "Codeintegrität hat den <Dateinamenkatalog> erfolgreich geladen."

Ressourcen