Share via


CodeQL und der Logo-Test für statische Tools

CodeQL und Treibersicherheit

Microsoft ist bestrebt, die Angriffsfläche des Windows-Betriebssystems zu verringern, und es ist von entscheidender Bedeutung, dass Treiber von Drittanbietern strenge Sicherheitsanforderungen erfüllen, um dieses Ziel zu erreichen. Ein Schritt beim Festlegen dieser Sicherheitsleiste ist die Anforderung an das Windows-Hardware-Kompatibilitätsprogramm (WHCP), das angibt, dass alle Treiberübermittlungen das CodeQL-Modul im Treiberquellcode verwenden und alle Verstöße beheben müssen, die als Must-Fix gelten.

CodeQL von GitHub ist eine leistungsstarke semantische Code-Analyse-Engine. Die Kombination aus einer umfangreichen Suite hochwertiger Sicherheitsabfragen und einer robusten Plattform macht CodeQL zu einem unschätzbaren Tool zur Sicherung von Treibercode.

Die Verwendung von CodeQL bei WHCP-Tests ist im Rahmen des Endbenutzer-Lizenzvertrags für Hardware Lab Kit (HLK) zulässig. Für WHCP-Teilnehmer überschreibt die EULA des HLK die CodeQL-Geschäftsbedingungen von GitHub, indem angegeben wird, dass CodeQL während der automatisierten Analyse, CI oder CD als Teil normaler Engineering-Prozesse verwendet werden kann, um Treiber zu analysieren, die als Teil des WHCP übermittelt und zertifiziert werden.

Die Anforderung, den Treiberquellcode zu analysieren und alle Must-Fix-Verletzungen zu beheben, wird vom Logo-Test für statische Tools erzwungen.

In diesem Thema wird Folgendes beschrieben:

  • Verwenden Sie CodeQL, um den Treiberquellcode auf bekannte Sicherheitsprobleme mit hohen Auswirkungen zu analysieren.
  • Stellen Sie sicher, dass der Logo-Test für statische Tools die Ergebnisse der CodeQL-Ausführung nutzen kann.
  • Ermitteln Sie, welche Must-Fix-Abfragen für die WHCP-Zertifizierung ausgeführt werden müssen.

Wichtig

Das Windows-Hardware-Kompatibilitätsprogramm erfordert CodeQL für STL-Tests (Static Tool Logo) auf unseren Client- und Serverbetriebssystemen. Wir bieten weiterhin Unterstützung für SDV und die Zertifizierungsstelle für ältere Produkte. Wir empfehlen Partnern dringend, die CodeQL-Anforderungen für den STL-Test (Static Tool Logo) zu überprüfen.

HLK EULA und CodeQL

Die Verwendung von CodeQL für den Zweck der Zertifizierung für das Windows-Hardware-Kompatibilitätsprogramm ist im Rahmen des Hardware Lab Kit (HLK)-Endbenutzer-Lizenzvertrags zulässig. Für WHCP-Teilnehmer überschreibt die EULA des HLK die CodeQL-Geschäftsbedingungen von GitHub. Die HLK EULA gibt an, dass CodeQL während der automatisierten Analyse, CI oder CD als Teil normaler Engineeringprozesse verwendet werden kann, um Treiber zu analysieren, die als Teil des Windows-Hardware-Kompatibilitätsprogramms übermittelt und zertifiziert werden. Informationen zur allgemeinen Verwendung finden Sie in den GitHub CodeQL-Geschäftsbedingungen, und/oder wenden Sie sich an CodeQL.

CodeQL-Konzepte

CodeQL ist ein statisches Analysemodul, das von Entwicklern verwendet wird, um Sicherheitsanalysen für Code außerhalb einer Liveumgebung durchzuführen. CodeQL erfasst Code beim Kompilieren und erstellt daraus eine Datenbank. Die Datenbank wird zu einem Verzeichnis, das abfragbare Daten, einen Quellverweis und Protokolldateien enthält. Sobald die Datenbank erstellt wurde, kann eine Analyse darauf ausgeführt werden, indem CodeQL-Abfragen (auch als Überprüfungen oder Regeln bezeichnet) verwendet werden, die bestimmen, ob der Quellcode Verstöße oder Sicherheitsrisiken enthält. CodeQL bietet eine Bibliothek von Standardabfragen, die die Korrektheit der Sprache und der Semantik überprüfen und Entwicklern, die sicherstellen wollen, dass ihr Code frei von Fehlern und Schwachstellen ist, einen großen Nutzen bieten.

CodeQL bietet auch die Möglichkeit, benutzerdefinierte Abfragen zu erstellen. Weitere Informationen zum Schreiben von benutzerdefinierten Abfragen finden Sie unter Schreiben von Abfragen in der CodeQL-Dokumentation.

CodeQL stellt außerdem ein CodeQL-Befehlszeilentool (CLI) bereit, um CodeQL-Aktionen und/oder umfangreiche Analysen auszuführen.

Ergänzende CodeQL CLI-Dokumentation finden Sie unter Erste Schritte mit CodeQL.

1. CodeQL-Einrichtung

Für die Verwendung mit Windows-Hardware-Kompatibilitätsprogramm

Versionsmatrix des Windows-Hardwarekompatibilitätsprogramms

Verwenden Sie diese Matrix, um die herunterzuladenden Versionen zu ermitteln.

Windows-Version CodeQL-CLI-Version QL-Pack-Version von microsoft/windows-drivers QL-Pack-Version von codeql/cpp-queries Zu verwendende Verzweigung
Windows Server 2022 2.4.6 oder 2.15.4 1.0.13 (Wenn codeql 2.15.4 verwendet wird) 0.9.0 (Wenn codeql 2.15.4 verwendet wird) WHCP_21H2
Windows 11 2.4.6 oder 2.15.4 1.0.13 (Wenn codeql 2.15.4 verwendet wird) 0.9.0 (Wenn codeql 2.15.4 verwendet wird) WHCP_21H2
Windows 11, Version 22H2 2.6.3 oder 2.15.4 1.0.13 (Wenn codeql 2.15.4 verwendet wird) 0.9.0 (Wenn codeql 2.15.4 verwendet wird) WHCP_22H2
Windows 11, Version 23H2 2.6.3 oder 2.15.4 1.0.13 (Wenn codeql 2.15.4 verwendet wird) 0.9.0 (Wenn codeql 2.15.4 verwendet wird) WHCP_22H2
Windows 11, Version 24H2 2.15.4 1.1.0 0.9.0 WHCP_24H2

Für CodeQL CLI 2.4.6 und 2.6.3 wird keine Version von QL-Pack angegeben, da nur neuere Versionen von CodeQL ihre QL-Packs unterstützen.

Zur allgemeinen Verwendung

Für die allgemeine Verwendung von CodeQL mit anderen Versionen von Windows außerhalb des WHCP-Programms oder zum Entwickeln und Testen von Abfragen empfehlen wir derzeit die folgende Version und Verzweigung:

CodeQL-CLI-Version qlpack-Version von microsoft/windows-drivers codeql/cpp-queries-Version Zu verwendende Verzweigung
2.15.4 latest latest main

Herunterladen und Installieren von CodeQL

Hinweis

Visual Studio 17.8 ist nicht mehr mit den älteren CodeQL-Versionen kompatibel, die in den WHCP_21H2 und WHCP_22H2 Verzweigungen verwendet werden. CodeQL CLI-Version 2.15.4 wurde für die Verwendung mit WHCP 21H2 und WHCP 22H2 bei Verwendung von Visual Studio 17.8 oder höher überprüft. Verwenden Sie für das WHCP-Programm die CodeQL CLI-Version gemäß der obigen Tabelle und der Windows-Version, für die Sie zertifiziert sind – Version 2.4.6, Version 2.6.3 oder Version 2.15.4. Verwenden Sie für die allgemeine Verwendung mit der Mainbranch CodeQL CLI, Version 2.15.4.

  1. Erstellen Sie ein Verzeichnis, das CodeQL enthält. In diesem Beispiel wird C:\codeql-home\ verwendet.

    C:\> mkdir C:\codeql-home
    
  2. In den obigen Tabellen erfahren Sie, welche Version von CodeQL CLI in Übereinstimmung mit der gewünschten Verzweigung der Treiberabfragen von Microsoft verwendet werden soll. Wenn Sie im Rahmen des WHCP-Programms eine Analyse durchführen, erhalten Sie in der Tabelle Für die Verwendung mit Windows-Hardware-Kompatibilitätsprogramm weitere Informationen. Verwenden Sie andernfalls die Mainbranch und 2.15.4. Die Verwendung einer anderen Version kann dazu führen, dass eine Datenbank nicht mit den Bibliotheken kompatibel ist.

  3. Navigieren Sie zu der CodeQL CLI-Binärdateien-Version, die den obigen Tabellen zugeordnet ist, und laden Sie die ZIP-Datei gemäß der Architektur Ihres Projekts herunter. Beispiel: 64-Bit-Windows „codeql-win64.zip“.

  4. Extrahieren Sie das codeql CLI-Verzeichnis in das soeben erstellte Verzeichnis, z. B.: C:\codeql-home\codeql.

  5. Überprüfen Sie, ob CodeQL ordnungsgemäß installiert ist, indem Sie die Version überprüfen:

     C:\codeql-home\codeql>codeql --version
     CodeQL command-line toolchain release 2.15.4.
     Copyright (C) 2019-2023 GitHub, Inc.
     Unpacked in: C:\codeql-home\codeql
         Analysis results depend critically on separately distributed query and
         extractor modules. To list modules that are visible to the toolchain,
         use 'codeql resolve qlpacks' and 'codeql resolve languages'.
    
  6. Der help-Befehl zeigt Informationen zur Verwendung der Befehlszeile an.

    C:\codeql-home\codeql\>codeql --help
    Usage: codeql <command> <argument>...
    Create and query CodeQL databases, or work with the QL language.
    
    GitHub makes this program freely available for the analysis of open-source software and certain other uses, but it is
    not itself free software. Type codeql --license to see the license terms.
    
          --license              Show the license terms for the CodeQL toolchain.
    Common options:
      -h, --help                 Show this help text.
      -v, --verbose              Incrementally increase the number of progress messages printed.
      -q, --quiet                Incrementally decrease the number of progress messages printed.
    Some advanced options have been hidden; try --help -v for a fuller view.
    Commands:
      query     Compile and execute QL code.
      bqrs      Get information from .bqrs files.
      database  Create, analyze and process CodeQL databases.
      dataset   [Plumbing] Work with raw QL datasets.
      test      Execute QL unit tests.
      resolve   [Deep plumbing] Helper commands to resolve disk locations etc.
      execute   [Deep plumbing] Low-level commands that need special JVM options.
      version   Show the version of the CodeQL toolchain.
      generate  Generate formatted QL documentation.
    

Installieren von CodeQL-Paketen

For WHCP_21H2- and WHCP_22H2-Verzweigungen

Bei Verwendung von Visual Studio 2022 17.8 oder höher mit WHCP_21H2 oder WHCP_22H2 und CodeQL CLI, Version 2.15.4:

  • Führen Sie die Schritte für ALLE ANDEREN VERZWEIGUNGEN aus.
  • Stellen Sie sicher, dass Sie das CodeQL-Untermodul entfernen, wenn Sie noch über eine alte geklonte Version des Repositorys verfügen. CodeQL versucht möglicherweise, die Abfragen im Untermodule standardmäßig zu verwenden, was aufgrund von nicht übereinstimmenden Versionen zu Fehlern führt.

Bei Verwendung von Visual Studio, Version 17.7 oder unter AND entweder WHCP_21H2 oder WHCP_22H2 AND CodeQL VLI, Version 2.4.6 oder 2.6.3:

  • Befolgen Sie die speziellen Anweisungen für WHCP_21H2 und WHCP_22H2 unter Verwendung von VS17.7 oder einer früheren Version.

ALLE ANDEREN VERZWEIGUNGEN

Herunterladen der CodeQL-Abfragepakete

Es ist nicht mehr erforderlich, das Repository „Windows-Driver-Developer-Supplemental-Tools“ zu klonen, um die Abfragen für die Zertifizierung zu verwenden. Es werden jetzt CodeQL-Pakete (QL-Pakete oder „Abfragepakete) verwendet.

  1. Laden Sie die richtige Version des microsoft/windows-drivers-Pakets aus der Versionsmatrix des Windows-Hardwarekompatibilitätsprogramms herunter. Geben Sie @<version> im nachfolgenden Befehl an.
C:\codeql-home\> codeql pack download microsoft/windows-drivers@<version>

Wenn Sie beispielsweise WHCP_24H2 verwenden, führen Sie den folgenden Befehl aus, um das windows-drivers-Abfragepaket 1.1.0 herunterzuladen:

C:\codeql-home\> codeql pack download microsoft/windows-drivers@1.1.0

Verwenden Sie diesen Befehl, um die Version 0.9.0 des CodeQL-cpp-queries-Abfragepakets herunterzuladen.

C:\codeql-home\> codeql pack download codeql/cpp-queries@0.9.0

(Beachten Sie, dass es möglich ist, den obigen Schritt zu überspringen, da die Option --download die erforderlichen Abfragen später im Analyseprozess herunterladen wird.)

CodeQL installiert die heruntergeladenen Abfragepakete im Standardverzeichnis:

C:\Users\<current user>\.codeql\packages\microsoft\windows-drivers\<downloaded version>\

Ändern Sie dieses Verzeichnis nicht, und verschieben Sie das installierte Paket nicht.

Herunterladen der Windows-Treiberabfragesammlungen

Suchen und kopieren Sie die beiden primären Abfragesammlungsdateien auf den lokalen PC.

  • windows-driver-recommended.qls
  • windows-driver-mustfix.qls

Ihre Inhalte werden unten in Abfragen und Suites angezeigt, und die beiden Dateien befinden sich unter https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools/tree/main/suites.

2. Erstellen der CodeQL-Datenbank

In diesen Beispielen wird davon ausgegangen, dass eine Windows-Entwicklungsumgebung verwendet wird und dass der Installationsspeicherort „C:\codeql-home“ lautet. Sie können jedoch das für Sie am besten geeignete Setup verwenden. Eine Liste der unterstützten Compiler finden Sie unter CodeQL-unterstützte Sprachen und Frameworks.

  1. Erstellen Sie ein Verzeichnis für CodeQL, in das die erstellten Datenbanken platziert werden. Beispiel: C:\codeql-home\databases

    mkdir C:\codeql-home\databases
    
  2. Verwenden Sie den CodeQL-Befehl, um eine Datenbank mit den folgenden Parametern zu erstellen:

    • Der erste Parameter ist ein Link zu Ihrem Datenbankverzeichnis. Beispiel: C:\codeql-home\databases\MyDriverDatabase (dieser Befehl schlägt fehl, wenn das Verzeichnis bereits vorhanden ist).
    • --language oder -l ist die Sprache bzw. sind die Sprachen, in der oder denen sich der Quellcode befindet (dies kann eine durch Trennzeichen getrennte Liste sein, z. B.: [cpp, javascript]).
    • -- source oder -s ist der Pfad zu Ihrem Quellcode.
    • --command oder -c ist der Buildbefehl oder der Pfad zu Ihrer Builddatei.
    codeql database create <database directory> --language=<language> --source=<path to source code> --command=<build command or path to build file>
    

Beispiele

Beispiel für einen einfachen Treiber.

C:\codeql-home\codeql> codeql database create D:\DriverDatabase --language=cpp --source-root=D:\Drivers\SingleDriver --command="msbuild /t:rebuild D:\Drivers\SingleDriver\SingleDriver.sln"

Beispiel für mehrere Treiber.

C:\codeql-home\codeql> codeql database create D:\SampleDriversDatabase --language=cpp --source-root=D:\AllMyDrivers\SampleDrivers --command=D:\AllMyDrivers\SampleDrivers\BuildAllSampleDrivers.cmd

Weitere Informationen oder Hilfe zur Verwendung des Befehls database create finden Sie unter Erstellen von CodeQL-Datenbanken, oder indem Sie den folgenden Befehl verwenden:

C:\codeql-home\codeql> codeql database create --help

3. Durchführen der Analyse

Hinweis

Wenn Sie Visual Studio, Version 17.7 oder darunter UND entweder WHCP_21H2 oder WHCP_22H2 AND CodeQL VLI Version 2.4.6 oder 2.6.3 verwenden, befolgen Sie die speziellen Anweisungen für WHCP_21H2 und WHCP_22H2 mit VS17.7 oder einer früheren Version.

An diesem Punkt ist die Einrichtung abgeschlossen. Im nächsten Schritt wird die tatsächliche Analyse des Treiberquellcodes durchgeführt.

  1. Verwenden Sie den CodeQL-Befehl, um Ihre Datenbank mithilfe der folgenden Parameter zu analysieren:

    • Der erste Parameter ist ein Link zu Ihrem Datenbankverzeichnis. Beispiel: C:\codeql-home\databases\MyDriverDatabase. (Dieser Befehl schlägt fehl, wenn das Verzeichnis nicht vorhanden ist.)
    • Das Flag --download weist CodeQL an, Abhängigkeiten herunterzuladen, bevor die Abfragen ausgeführt werden.
    • --format ist der Typ der Ausgabedatei. Zu den Optionen gehören: SARIF und CSV. (Für WHCP-Benutzer wird das SARIF-Format verwendet.)
    • --output ist der Pfad zum Speicherort der Ausgabedatei. Achten Sie darauf, das Format in den Dateinamen einzuschließen. (Dieser Befehl schlägt fehl, wenn das Verzeichnis schon vorhanden ist.)
    • Der Parameter „Abfragebezeichner“ ist eine durch Leerzeichen getrennte Liste von Argumenten, die Folgendes enthalten kann:
      • Ein Pfad zu einer Abfragedatei
      • Ein Pfad zu einem Verzeichnis, das Abfragedateien enthält
      • Ein Pfad zu einer Abfragesammlungsdatei
      • Name eines CodeQL-Abfragepakets
    codeql database analyze --download <path to database> <path to query suite .qls file> --format=sarifv2.1.0 --output=<outputname>.sarif
    

    Beispiel:

    codeql database analyze --download D:\DriverDatabase suites/windows-driver-recommended.qls --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif 
    

    Weitere Informationen oder Hilfe zur Verwendung des database analyze Befehls erhalten Sie unter Analysieren von Datenbanken mit codeQL CLI und Verwenden eines CodeQL-Pakets zur Analyse einer CodeQL-Datenbank.

    Verwenden Sie für die Befehlszeilenhilfe den folgenden Befehl:

    C:\codeql-home\codeql> codeql database analyze --help
    

Spezielle Anweisungen für WHCP_21H2 und WHCP_22H2 mit VS17.7 oder früher

Diese Anweisungen gelten nur bei Verwendung von Visual Studio 17.7 oder einer früheren Version zusammen mit CodeQL 2.6.3 oder 2.4.6.

  1. Installieren Sie die CodeQL-Version, wie in den Schritten oben angegeben.

  2. Klonen Sie und installieren Sie das Repository „Windows-Driver-Developer-Supplemental-Tools“, das die CodeQL-Abfragen enthält, die für Treiber spezifisch sind:

    git clone https://github.com/microsoft/Windows-Driver-Developer-Supplemental-Tools.git --recurse-submodules

  3. Lesen Sie die Versionsmatrix des Windows-Hardwarekompatibilitätsprogramms, um die richtige Verzweigung für die Windows-Version zu identifizieren, die Sie zertifizieren möchten.

  4. Verwenden Sie den git checkout Befehl zum Auschecken der identifizierten Verzweigung.

  5. Vergewissern Sie sich, dass die Untermodule im codeql-home-Verzeichnis vorhanden sind.

     D:/codeql-home
         |--- codeql
         |--- Windows-Driver-Developer-Supplemental-Tools
    
  6. Analysieren Sie Ihre CodeQL-Datenbank.

    Aktualisieren Sie diesen Beispielbefehl so, dass er Ihrer Umgebung entspricht. Legen Sie die Parameter, den Pfad zu einer neuen Datenbank, das Format, die Sarif-Ausgabedatei, den Pfad zur CodeQL-Abfrage oder Abfragesuite fest, die in der Analyse verwendet werden sollen.

    codeql database analyze <path to database> --format=sarifv2.1.0 --output=<"path to output file".sarif> <path to query/suite to run>

    Beispiel:

    codeql database analyze D:\DriverDatabase --format=sarifv2.1.0 --output=D:\DriverAnalysis1.sarif D:\codeql-home\Windows-driver-developer-supplemental-tools\src\suites\windows_driver_mustfix.qls

    Überprüfen Sie unbedingt den Pfad zu der auszuführenden Suite oder Abfrage, denn nicht jede Verzweigung hat die gleiche Dateistruktur.

  7. Weitere Anleitungen finden Sie in diesem Dokument für die nächsten Schritte, z. B. das Überprüfen und Übermitteln von Testergebnissen.

4. Anzeigen und Interpretieren von Ergebnissen

Wir konzentrieren uns auf das SARIF-Format für diesen Abschnitt, da es für die folgenden Schritte erforderlich ist. Sie können jedoch auch das CSV-Format verwenden, wenn es Ihren Anforderungen besser entspricht.

Static Analysis Results Interchange Format (SARIF) ist ein JSON-basiertes Format zum Freigeben statischer Analyseergebnisse. Erfahren Sie mehr über den Standard unter OASIS Static Analysis Results Interchange Format (SARIF), wie CodeQL die SARIF-Ausgabe verwendet, und sehen Sie sich ein Beispiel für die SARIF-Rohdatenausgabe an.

Es gibt mehrere Methoden zum Interpretieren der Analyseergebnisse, einschließlich der manuellen Sortierung durch die Objekte. Wir verwenden unter anderem diese hier:

  • Der Microsoft Sarif Viewer (Web) verfügt über Funktionen, mit denen Sie Ihre SARIF-Datei in den Viewer ziehen und ablegen können. Anschließend werden Ergebnisse nach einer Regel kategorisiert angezeigt. Dies ist eine sehr schnelle und einfache Möglichkeit, die Anzahl der Verstöße oder die Abfragen mit Verstößen anzuzeigen, aber es ist nicht so einfach, außer der Zeilennummer Informationen über den Quellcode zu finden. Beachten Sie, dass die Seite nicht aktualisiert wird, wenn keine Verstöße vorliegen.

  • Der Microsoft SARIF Viewer für Visual Studio eignet sich hervorragend zum Anzeigen der Ergebnisse in Visual Studio für den nahtlosen Übergang von Ergebnissen zu Quellcode.

  • Die SARIF-Erweiterung für Visual Studio Code

Der wichtigste Abschnitt der SARIF-Datei ist die Eigenschaft „Results“ innerhalb des Objekts „Run“. Jede Abfrage verfügt über eine Ergebniseigenschaft mit Details zu erkannten Verstößen und der Stelle, an der sie aufgetreten sind. Wenn keine Verstöße gefunden werden, ist der Eigenschaftswert leer.

Abfragen werden mithilfe von Status wie „Fehler“, „Warnung“ und „Problem“ klassifiziert. Diese Klassifizierung unterscheidet sich jedoch von der Art und Art, wie das Windows-Hardwarekompatibilitätsprogramm und insbesondere der Logo-Test für statische Tools die Ergebnisse bewertet. Jeder Treiber mit Fehlern aus einer Abfrage innerhalb der Must-Fix-Suite besteht nicht den Logotest für statische Tools und kann nicht zertifiziert werden, unabhängig von der Abfrageklassifizierung in der rohen Abfragedatei (z. B. „Warnung“).

5. Unterdrücken von CodeQL-Ergebnissen (optional)

CodeQL für Treiber unterstützt die Unterdrückung doppelter Warnungen bei Ergebnissen. Die Unterdrückung doppelter Warnungen wird derzeit aus Gründen der Benutzerfreundlichkeit bereitgestellt, um Entwicklern die Triage von Problemen zu erleichtern und das Rauschen zu reduzieren. Sie stellt keine Möglichkeit dar, die Überprüfungen zu umgehen. Derzeit hat sie keine Auswirkungen auf das Generieren eines Treiberüberprüfungsprotokolls oder das Bestehen des Logo-Tests für statische Tools. Um die Unterdrückung doppelter Warnungen zu verwenden, müssen Sie die DriverAlertSuppression.ql-Abfrage gleichzeitig mit den anderen Abfragen oder Suites ausführen, die Sie ausführen möchten. Diese Abfrage ist standardmäßig aktiviert, wenn unsere Suites aus der main/development-Verzweigung unseres GitHubs ausgeführt werden.

Bei Überprüfungen, die aus der Codeanalyse portiert wurden, werden vorhandene Codeanalyseunterdrückungen berücksichtigt. For more information, see C++ warning-Pragma.

  • Known limitation: Sie können derzeit keine #pragma(disable) und #pragma(suppress) in derselben Zeile kombinieren.

Bei Prüfungen, die neu in CodeQL sind, können Sie diese unterdrücken, indem Sie eine der beiden Möglichkeiten nutzen:

  • Schreiben Sie die Anmerkung „#pragma(suppress:the-rule-id-here)“ (Anführungszeichen weglassen) in die Zeile oberhalb des Verstoßes, genauso wie bei einer Codeanalyse. „the-rule-id-here“ kann durch den Wert @id in den Metadaten einer bestimmten Abfrage ersetzt werden, die oben in der Datei angezeigt werden.

  • Schreiben Sie einen Kommentar in der obigen Zeile, die aus dem Text „lgtm[the-rule-id-here]“ (Anführungszeichen weglassen) besteht. Sie müssen die standardmäßige C/C++-Warnungsunterdrückungsabfrage anstelle der Treiberbenachrichtigungs-Unterdrückungsabfrage ausführen.

Sobald eine Unterdrückung vorhanden und erkannt wurde, enthält die resultierende SARIF-Datei Daten darüber, dass ein Ergebnis unterdrückt wurde. In den meisten Ergebnisanzeigen wird das Ergebnis standardmäßig nicht angezeigt.

6. Konvertieren von SARIF in das Treiberüberprüfungsprotokoll-Format (Driver Verification Log Format, DVL)

Der Logo-Test für statische Tools analysiert ein Treiberverifizierungsprotokoll (DVL),, das die kompilierten Ergebnisse mehrerer statischer Analyse-Engines enthält, die für den Treiberquellcode ausgeführt wurden. Es gibt drei Möglichkeiten, Ihre SARIF-Datei in das DVL-Format zu konvertieren. Wählen Sie die Option aus, die ihrem Setup am besten entspricht.

Verwenden von Visual Studio (WDK Preview Build 20190 und up)

  1. Platzieren Sie die SARIF-Ergebnisdatei im selben Verzeichnis wie die .vcxproj-Datei.
  2. Wählen Sie im Menü „Treibererweiterung“ die Option Treiberüberprüfungsprotokoll erstellen aus.
  3. Überprüfen Sie, ob die DVL-Benutzeroberfläche Ihre SARIF-Datei erkennt.
    • Hinweis: Wenn Sie die SARIF-Datei mithilfe der Visual Studio-Benutzeroberfläche in das verzeichnis .vcxproj verschoben haben, ist es möglich, dass Visual Studio einen Verweis auf die SARIF-Datei erstellt hat, anstatt sie tatsächlich zu verschieben. Versuchen Sie, das Verzeichnis außerhalb von Visual Studio zu öffnen, um sicherzustellen, dass es dort wirklich vorhanden ist.
  4. Klicken Sie auf Erstellen.

Verwenden von MSBuild

  1. Platzieren Sie die SARIF-Ergebnisdatei im selben Verzeichnis wie die .vcxproj-Datei.

  2. Öffnen Sie die Visual Studio-Eingabeaufforderung, die Visual Studio Native Tools-Eingabeaufforderung oder das Enterprise Windows Driver Kit (EWDK).

  3. Verwenden Sie den msbuild-Befehl mit den folgenden Parametern:

    • Pfad zur Vcx-Projektdatei
    • /target:dvl
    • /p:Configuration="Release"
    • /P:Platform=<platform> (Verwenden Sie nur eine der folgenden Zeichenfolgen: x86, x64, arm, arm64)

    msbuild.exe <vcxprojectfile> /target:dvl /p:Configuration="Release" /P:Platform=<platform>

Verwenden von CMD

  1. Suchen Sie die dvl.exe aus dem WDK oder einem montierten eWDK.

  2. Verwenden Sie die exe-Datei mit den folgenden Parametern:

    • /manualCreate
    • driver name (Schließen Sie das .sys-Dateiformat nicht ein)
    • driver architecture (Verwenden Sie nur eine der folgenden Zeichenfolgen: x86, x64, arm, arm64)

    "C:\Program Files (x86)\Windows Kits\10\Tools\dvl\dvl.exe" /manualCreate <driver name> <driver architecture>

Weitere Anweisungen für das HLK-Logo-Test für statische Tools und Anleitungen zum Platzieren der DVL-Datei finden Sie unter Ausführen des Tests.

7. Visual Studio Postbuildereignis (optional)

Wenn Sie den Treiber mit Visual Studio erstellen, können Sie CodeQL-Abfragen so konfigurieren, dass sie als Postbuildereignis ausgeführt werden.

In diesem Beispiel wird eine kleine Batchdatei am Zielspeicherort erstellt und als Postbuildereignis aufgerufen. Weitere Informationen zu Visual Studio C++-Buildereignissen finden Sie unter Angeben von Buildereignissen.

  1. Erstellen Sie eine kleine Batchdatei, die die CodeQL-Datenbank neu erstellt, und führen Sie dann die gewünschten Abfragen darauf aus. In diesem Beispiel wird die Batchdatei als RunCodeQLRebuildQuery.bat benannt. Ändern Sie die in der Beispielbatchdatei angezeigten Pfade so, dass sie ihren Verzeichnisspeicherorten entsprechen.

    ECHO ">>> Running CodeQL Security Rule V 1.0 <<<"
    ECHO ">>> Removing previously created rules database <<<"
    rmdir /s/q C:\codeql-home\databases\kmdf
    CALL C:\codeql-home\codeql\codeql\codeql.cmd database create -l=cpp -s="C:\codeql-home\drivers\kmdf" -c "msbuild /p:Configuration=Release /p:Platform=x64 C:\codeql-home\drivers\kmdf\kmdfecho.sln /t:rebuild /p:PostBuildEventUseInBuild=false " "C:\codeql-home\databases\kmdf" -j 0
    CALL C:\codeql-home\codeql\codeql\codeql database analyze "C:\codeql-home\databases\kmdf" "C:\codeql-home\Windows-Driver-Developer-Supplemental-Tools\codeql\codeql-queries\cpp\ql\src\Likely Bugs\Underspecified Functions" --format=sarifv2.1.0 --output=C:\codeql-home\databases\kmdf.sarif -j 0 --rerun
    ECHO ">>> Loading SARIF Results in Visual Studio <<<"
    CALL devenv /Edit C:\codeql-home\databases\kmdf.sarif
    SET ERRORLEVEL = 0
    
  2. Die Option devenv.exe/Bearbeiten wird in der Batchdatei verwendet, um die SARIF-Ergebnisdatei in der vorhandenen Instanz von Visual Studio zu öffnen. Um die SARIF-Ergebnisse anzuzeigen, installieren Sie den Microsoft SARIF Viewer für Visual Studio, und lesen Sie die Anweisungen dort für weitere Informationen.

  3. Navigieren Sie im Treiberprojekt zu Projekteigenschaften. Wählen Sie im Pulldown der Konfiguration die Buildkonfiguration aus, die Sie mit CodeQL überprüfen möchten. „Release“ wird empfohlen. Das Erstellen der CodeQL-Datenbank und das Ausführen der Abfragen dauert einige Minuten, daher wird nicht empfohlen, CodeQL für die Debugkonfiguration Ihres Projekts auszuführen.

  4. Wählen Sie Buildereignisse und Postbuildereignis in den Eigenschaften des Treiberprojekts aus.

  5. Geben Sie einen Pfad zur Batchdatei und eine Beschreibung des Postbuildereignisses an.

Visual Studio-Konfiguration nach dem Buildereignis mit einer Batchdatei, die als Befehlszeilenoption konfiguriert ist.

  1. Die Ergebnisse aus der Ausführung der Batchdatei werden am Ende der Buildausgabe angezeigt.

    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.ql.
    1>Starting evaluation of codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.ql.
    1>[1/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooManyArguments.bqrs.
    1>[2/4 eval 4.4s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\TooFewArguments.bqrs.
    1>[3/4 eval 4.5s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\ImplicitFunctionDeclaration.bqrs.
    1>[4/4 eval 5.2s] Evaluation done; writing results to codeql-cpp\Likely Bugs\Underspecified Functions\MistypedFunctionArguments.bqrs.
    1>Shutting down query evaluator.
    1>Interpreting results.
    1>">>> Loading SARIF Results in Visual Studio <<<"
    

Problembehandlung

Wenn Sie mit WHCP zertifizieren, stellen Sie zuerst sicher, dass Sie die HLK-Version verwenden, die mit der gewünschten Windows-Version, der entsprechenden Verzweigung des Repository „Windows-Driver-Developer-Supplemental-Tools“ und der folgenden CodeQL CLI-Version verknüpft ist. Informationen zur HLK/Windows Release-Kompatibilitätsmatrix finden Sie unter Windows Hardware Lab Kit und für Windows Release/Verzweigung des Repository „Windows-Driver-Developer-Supplemental-Tools“/CodeQL CLI-Version in der WHCP-Tabelle im CodeQL Setup-Abschnitt.

Fehler und Problemumgehungen

Bei Problemen mit Datenbankversionskonflikten können die folgenden Tools hilfreich sein.

Verwenden Sie den Codeql-Versionsbefehl, um die Version der codeql exe anzuzeigen.

C:\codeql-home\codeql\>codeql version
CodeQL command-line toolchain release 2.4.0.
Copyright (C) 2019-2020 GitHub, Inc.
Unpacked in: C:\codeql-home\codeql\
   Analysis results depend critically on separately distributed query and
   extractor modules. To list modules that are visible to the toolchain,
   use 'codeql resolve qlpacks' and 'codeql resolve languages'.

Der Befehl „database upgrade“ aktualisiert eine Datenbank. Beachten Sie, dass es sich hierbei um ein einseitiges Upgrade handelt, das nicht umkehrbar ist. Weitere Informationen finden Sie unter Datenbankupgrade.

Abfragen und Suites

Im Rahmen des Microsoft CodeQL GitHub-Repositorys stellen wir zwei Abfragesuiten bereit, um den End-to-End-Treiber-Entwicklerworkflow zu vereinfachen. Die Abfragesuite windows_driver_recommended.qls ist eine Obermenge aller Abfragen, die Microsoft für Treiberentwickler als wertvoll eingestuft hat. Die Abfragesammlung windows_driver_mustfix.qls enthält Abfragen, die als „Must-Fix“ für die WHCP-Zertifizierung gelten, die ausgeführt und bestanden werden müssen, um den STL-Test (Static Tools Logo) zu bestehen. Sowohl die Must-Fix- als auch die empfohlenen Abfragesammlungen werden regelmäßig aktualisiert.

Must-Fix-Abfragen

Die nachstehende Teilmenge der Abfragen ist Must-Fix für die WHCP-Zertifizierung und auch in der Empfohlenen Fix-Suite enthalten.

Dieser Satz von Regeln ist in windows_driver_mustfix.qls enthalten.

Kennung Location Common Weakness Enumeration
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql N/V
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql N/V
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253-KARTON

Die Datei windows_driver_mustfix.qls enthält diese Must-Fix-Codeabfragen.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Security queries required to fix when certifying Windows Drivers
- queries: . 
  from: codeql/cpp-queries
  version: 0.9.0
- include:
    query path: 
      - Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
      - Likely Bugs/Memory Management/PointerOverflow.ql
      - Likely Bugs/Underspecified Functions/TooFewArguments.ql
      - Security/CWE/CWE-190/ComparisonWithWiderType.ql
      - Security/CWE/CWE-253/HResultBooleanConversion.ql
- import: windows-driver-suites/windows_mustfix_partial.qls
  from: microsoft/windows-drivers

Dieser Satz von Regeln ist in windows-driver-suites/windows_mustfix_partial.qls enthalten.

Kennung Location Common Weakness Enumeration
cpp/windows/wdk/deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql N/V
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Die Datei windows_mustfix_partial.qls enthält diese Must-Fix-Codeabfragen.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Security queries required to fix when certifying Windows Drivers
- queries: .
  from: microsoft/windows-drivers
- include:
    query path: 
      - drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql
      - microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql

Diese Abfragen sind Teil der Abfragesuite windows_driver_recommended.qls im Microsoft GitHub CodeQL-Repository. Die Spalte „Common Weakness Enumeration“ (CWE) gibt an, nach welchen Arten von Sicherheitsproblemen die angegebene Abfrage sucht. Weitere Informationen zu CWEs finden Sie auf der Seite von Mitre auf CWE.

Bewährte Methoden

Kennung Location Common Weakness Enumeration
cpp/offset-use-before-range-check codeql/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql N/V

Wahrscheinliche Fehler

Kennung Location Common Weakness Enumeration
cpp/bad-addition-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/integer-multiplikation-cast-to-long codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
cpp/signed-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql N/V
cpp/upcast-array-pointer-arithmetic codeql/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/PointerOverflow.ql N/V
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql N/V
cpp/incorrect-not-operator-usage codeql/cpp-queries/<Version>/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/SuspiciousSizeof.ql CWE-468
cpp/uninitialized-local codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665

Sicherheit

Kennung Location Common Weakness Enumeration
cpp/conditionally-uninitialized-variable codeql/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. CWE-457
cpp/unterminated-variadic-call codeql/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/suspicious-pointer-scaling codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/suspicious-pointer-scaling-void codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/potentially-dangerous-function codeql/cpp-queries/<Version>/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/incorrect-string-type-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253-KARTON
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Security/CWE/CWE-468/CWE-468/SuspiciousAddWithSizeof.ql CWE-468

Die Datei windows_driver_recommended.qls enthält diese empfohlenen Codeabfragen.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
  from: microsoft/windows-drivers
- import: windows-driver-suites/windows_recommended_partial.qls
  from: microsoft/windows-drivers
- queries: . 
  from: codeql/cpp-queries
  version: 0.9.0
- include:
    query path: 
      - Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql
      - Likely Bugs/Arithmetic/IntMultToLong.ql
      - Likely Bugs/Arithmetic/SignedOverflowCheck.ql
      - Likely Bugs/Conversion/CastArrayPointerArithmetic.ql
      - Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql
      - Likely Bugs/Memory Management/SuspiciousSizeof.ql
      - Likely Bugs/Memory Management/UninitializedLocal.ql
      - Security/CWE/CWE-121/UnterminatedVarargsCall.ql
      - Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql
      - Security/CWE/CWE-468/IncorrectPointerScaling.ql
      - Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql
      - Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql
      - Security/CWE/CWE-676/PotentiallyDangerousFunction.ql
      - Security/CWE/CWE-704/WcharCharConversion.ql
      - Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql
      - Likely Bugs/Memory Management/PointerOverflow.ql
      - Likely Bugs/Underspecified Functions/TooFewArguments.ql
      - Security/CWE/CWE-190/ComparisonWithWiderType.ql
      - Security/CWE/CWE-253/HResultBooleanConversion.ql

Diese Abfragen sind Teil von windows_recommended_partial.qls.

Kennung Location Common Weakness Enumeration
cpp/paddingbyteinformationdisclosure microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql N/V
cpp/badoverflowguard microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql N/V
cpp/infiniteloop microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql N/V
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql N/V
cpp/use-after-free microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql N/V
Kennung Location Codeanalysewarnung
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Cryptography/HardcodedIVCNG.ql N/V

Treiber - Allgemein

Kennung Location Codeanalysewarnung
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Keine zugeordnete Zertifizierungsstellenprüfung
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Keine zugeordnete Zertifizierungsstellenprüfung
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql C28719-Warnung, C28726-Warnung, C28735-Warnung, C28750-Warnung
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql 28158-Warnung
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql C28157-Warnung
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28150-Warnung
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120-Warnung
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql C28121-Warnung
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124-Warnung
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134-Warnung
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146-Warnung

Treiber – Treiber

Kennung Location Codeanalysewarnung
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql C28128-Warnung
cpp/drivers/illegal-field-access2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql C28175-Warnung
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql C28176-Warnung
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (Keine zugeordnete Zertifizierungsstellenprüfung)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql C28145-Warnung
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql C28143-Warnung
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql C28169-Warnung

Die Datei windows-driver-suites/windows_recommended_partial.qls enthält diese empfohlenen Codeabfragen.

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.

- description: Recommended and required queries for Windows Drivers.
- import: windows-driver-suites/windows_mustfix_partial.qls
- queries: .
  from: microsoft/windows-drivers
- include:
    query path: 
      - microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql
      - microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql
      - microsoft/Likely Bugs/Conversion/InfiniteLoop.ql
      - microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql
      - microsoft/Likely Bugs/UninitializedPtrField.ql
      - microsoft/Security/Crytpography/HardcodedIVCNG.ql
      - drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql
      - drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql
      - drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql
      - drivers/general/queries/ExaminedValue/ExaminedValue.ql
      - drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql
      - drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql
      - drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql
      - drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql
      - drivers/general/queries/IrqlTooLow/IrqlTooLow.ql
      - drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql
      - drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql
      - drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql
      - drivers/general/queries/StrSafe/StrSafe.ql
      - drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql
      - drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql
      - drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql
      - drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql
      - drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql
      - drivers/wdm/queries/PendingStatusError/PendingStatusError.ql
      - drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql

Häufig gestellte Fragen (FAQs)

Wann ist dies für die Gerätezertifizierung erforderlich?

Informationen zu Anforderungsdetails finden Sie im Zertifizierungsprozess des Windows-Hardwarekompatibilitätsprogramms.

Was ist der Grund dafür, dass CodeQL auf dem Quellcode des Treibers ausgeführt werden muss?

Der Grund für die Ausführung von CodeQL auf Treiberquellcode lässt sich in zwei Hauptgründen zusammenfassen:

  1. Die Sicherheit von Windows ist von größter Bedeutung und die angeforderte Ausführung von CodeQL auf Treiberquellcode ist ein Schritt bei der Verbesserung der Sicherheit von Komponenten, die von Microsoft zertifiziert werden.
  2. CodeQL-Abfragen werden von Sicherheitstechnikern bei Microsoft aktiv entwickelt, da Microsoft verpflichtet ist, sicherzustellen, dass es sich um ein Hardwareökosystem handelt, das von denselben qualitativ hochwertigen Tools profitiert, die bei Microsoft verwendet werden.

Auf welche Treibertypen beziehen sich CodeQL und der Logotest für statische Tools?

Derzeit erfordert der Logotest für statische Tools die Ausführung von CodeQL und das Bestehen der Gruppe von Abfragen, für die „müssen korrigiert werden“ festgelegt ist, für alle Kernelmodustreiber außer Grafiktreibern. Beachten Sie, dass die Ausführung von CodeQL auf Grafiktreibern dringend empfohlen wird, auch wenn dies zurzeit nicht erforderlich ist. Einige Abfragen können auch nützliche Fehler in Benutzermoduskomponenten finden.

Wir werden den Test und seine Abfragen voraussichtlich erweitern und künftig Ergebnisse für Grafiktreiber, Benutzermodustreiber und -treiberkomponenten sowie andere Treiberpaketkomponenten erfordern. Im Falle von unerwartetem Verhalten oder False Positives bei der Ausführung von CodeQL auf Grafiktreibern oder Benutzermodustreibern melden Sie bitte ein Problem im Repository „Windows-Driver-Developer-Supplemental-Tools“.

Welche Lizenz regelt die Verwendung von CodeQL für Treiberentwickler?

Die Verwendung von CodeQL bei WHCP-Tests ist im Rahmen des Endbenutzer-Lizenzvertrags für Hardware Lab Kit (HLK) zulässig. Für WHCP-Teilnehmer überschreibt die EULA des HLK die CodeQL-Geschäftsbedingungen von GitHub. Die HLK EULA gibt an, dass CodeQL während der automatisierten Analyse, CI oder CD als Teil der normalen Engineering-Prozesse zum Zwecke der Analyse von zu übermittelnden und zertifizierten Treibern als Teil des WHCP verwendet werden kann.

Muss ich Visual Studio oder MSBuild zum Ausführen von CodeQL verwenden?

CodeQL erfordert keine Verwendung von MSBuild oder Visual Studio. Eine Liste der unterstützten Compiler finden Sie unter Unterstützte Sprachen und Frameworks.

Wie überprüft der HLK, ob mein Treiber von CodeQL gescannt wurde?

Der Logo-Test für statische Tools im HLK erzwingt diese Anforderung. Details zum Logo-Test für statische Tools finden Sie auf der Seite Microsoft-Dokumentation.

Werden alle Fehler von CodeQL tatsächlich gemeldet?

Jede CodeQL-Abfrage weist unterschiedliche Genauigkeitsebenen auf. Unser Ziel ist es, False Positives zu minimieren, aber gelegentlich werden sie auftreten. Unsere Suite von Must-Fix-Abfragen wurde für die Verwendung mit dem WHCP-Programm entwickelt und handverlesen, da unsere umfangreichen Tests zu nahezu 0 False Positives führen. Wenn False Positives aus einer Abfrage in der Gruppe von „Must-Fix“-Abfragen angezeigt werden, senden Sie sofort eine E-Mail an stlogohelp@microsoft.com, oder melden Sie ein Problem im Windows-Driver-Developer-Supplemental-Tools-Repository, damit wir sofort daran arbeiten und es so schnell wie möglich beheben können.

Ist die Klassifizierung einer Abfrage als „Warnung“ oder „Fehler“ für die Zwecke des Logo-Tests für statische Tools wichtig?

Abfragen werden in CodeQL mithilfe von Status wie „Fehler“, „Warnung“ und „Problem“ klassifiziert. Diese Klassifizierung unterscheidet sich jedoch von der Art und Art, wie das Windows-Hardwarekompatibilitätsprogramm und insbesondere der Logo-Test für statische Tools die Ergebnisse bewertet. Jeder Treiber mit Fehlern aus einer Abfrage innerhalb der Must-Fix-Suite besteht nicht den Logotest für statische Tools und kann nicht zertifiziert werden, unabhängig von der Abfrageklassifizierung in der rohen Abfragedatei (z. B. „Warnung“).

Kann ich eine DVL für Visual Studio-Lösungen generieren?

Nein, die DVL-Generierung muss auf Projektebene ausgeführt werden und kann nicht für Visual Studio-Lösungen ausgeführt werden. Anweisungen zum Generieren einer DVL finden Sie unter: Erstellen eines Treiberüberprüfungsprotokolls.

Kann ich ein Treiberüberprüfungsprotokoll (Driver Verification Log, DVL) außerhalb des Kontexts von msbuild oder Visual Studio generieren?

Im Rahmen des Windows Driver Kit (WDK) und Enterprise WDK (eWDK) liefert Microsoft eine Komponente namens dvl.exe, die zum Generieren von Treiberüberprüfungsprotokollen (Driver Verification Logs, DVLs) verwendet werden kann. Ab WDK/eWDK-Vorschauversionen 21342 und höher ist es möglich, eine DVL aus der Befehlszeile außerhalb des Kontexts von msbuild oder Visual Studio zu generieren, indem Sie einen Treibernamen und eine Architektur übergeben. Weitere Details finden Sie unter Erstellen eines Treiberüberprüfungsprotokolls .

Ich habe Kommentare oder Fragen zur Verwendung von CodeQL auf meinem Treiber, an wen kann ich Feedback senden?

Senden Sie Feedback und Fragen an stlogohelp@microsoft.com.