Partager via


Requêtes et suites CodeQL pour les tests de pilotes Windows

Le dépôt GitHub Microsoft CodeQL offre deux suites de requêtes pour simplifier le développement de pilotes Windows et garantir la conformité avec le programme de compatibilité matérielle Windows (WHCP). La suite windows_driver_recommended.qls inclut toutes les requêtes recommandées pour les développeurs de pilotes, tandis que la suite windows_driver_mustfix.qls se concentre sur les requêtes « Must-Fix » requises pour la certification WHCP. Les deux suites sont régulièrement mises à jour.

requêtes Must-Fix pour la certification WCHP

Le sous-ensemble de requêtes suivant est Must-Fix pour la certification WHCP et sont également inclus dans la suite de correctifs recommandés .

Cet ensemble de règles est inclus dans windows_driver_mustfix.qls.

ID Emplacement Liste des faiblesses communes
cpp/mauvaise-vérification-de-dépassement-d'addition codeql/cpp-queries/<Version>/Probable Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Probable Bogues/Gestion de la mémoire/PointerOverflow.ql N/A
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql N/A
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

Le fichier windows_driver_mustfix.qls inclut les requêtes de code Must-Fix suivantes.

# 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

Cet ensemble de règles est inclus dans windows-driver-suites/windows_mustfix_partial.qls.

ID Emplacement Énumération des Faiblesses Courantes
cpp/windows/wdk/deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql N/A
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Le fichier windows_mustfix_partial.qls inclut les requêtes de code Must-Fix suivantes.

# 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

Ces requêtes font partie de la suite de requêtes windows_driver_recommended.qls dans le référentiel Microsoft GitHub CodeQL. La colonne « Common Weakness Enumeration » (CWE) identifie les types de problèmes de sécurité que recherche la requête donnée. Pour plus d'informations sur les CWE, consultez la page de Mitre dédiée aux CWE.

La colonne « Common Weakness Enumeration » (CWE) affiche les types de problèmes de sécurité identifiés par la requête.

Meilleures pratiques

ID Emplacement Common Weakness Enumeration
cpp/utilisation de l'offset avant la vérification de la plage codeql/cpp-queries/<Version>/Best Practices/Erreurs Probables/OffsetUseBeforeRangeCheck.ql N/A

Bugs potentiels

ID Emplacement Common Weakness Enumeration
cpp/mauvaise-vérification-de-dépassement-d'addition codeql/cpp-queries/<Version>/Probable Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/multiplication-entière-convertie-en-long codeql/cpp-queries/<Version>/Probable 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/A
cpp/upcast-array-pointer-arithmetic codeql/cpp-queries/<Version>/Probable Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/pointer-overflow-check codeql/cpp-queries/<Version>/Probable Bogues/Gestion de la mémoire/PointerOverflow.ql N/A
cpp/too-few-arguments codeql/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql N/A
cpp/utilisation-incorrecte-opérateur-de-négation codeql/cpp-queries/<Version>/Probable Bugs/Probable Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicieux-add-sizeof codeql/cpp-queries/<Version>/Probable Bogues/Gestion de la mémoire/SuspiciousSizeof.ql CWE-468
cpp/uninitialized-local codeql/cpp-queries/<Version>/Probable Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665

Sécurité

ID Emplacement Common Weakness Enumeration
cpp/variable-conditionnellement-non-initialisée codeql/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. CWE-457
cpp/appel-variadique-non-terminé codeql/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/échelle-pointeur-suspecte codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/échelle-suspicieuse-pointeur-void codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/fonction potentiellement dangereuse 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
cpp/suspicieux-add-sizeof codeql/cpp-queries/<Version>/Security/CWE/CWE-468/CWE-468/SuspiciousAddWithSizeof.ql CWE-468

Le fichier windows_driver_recommended.qls inclut les requêtes de code recommandées suivantes.

# 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

Ces requêtes font partie de la suite de requêtes windows_recommended_partial.qls .

ID Emplacement Common Weakness Enumeration
cpp/paddingbyteinformationdisclosure microsoft/windows-drivers/<Version>/microsoft/Bugs Probables/Violations de Limite/PaddingByteInformationDisclosure.ql N/A
cpp/badoverflowguard microsoft/windows-drivers/<Version>/microsoft/Probable Bugs/Conversion/BadOverflowGuard.ql N/A
cpp/infiniteloop microsoft/windows-drivers/<Version>/microsoft/Bugs Probables/Conversion/InfiniteLoop.ql N/A
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Probable Bugs/UninitializedPtrField.ql N/A
cpp/utilisation-après-libération microsoft/windows-drivers/<Version>/microsoft/Probable Bugs/Memory Management/UseAfterFree/UseAfterFree.ql N/A
ID Emplacement Avertissement d’analyse du code
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Crytpography/HardcodedIVCNG.ql N/A

Pilotes - Général

ID Emplacement Avertissement d’analyse du code
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Aucune vérification CA associée
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Aucune vérification de l’autorité de certification associée
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql Avertissement C28719, Avertissement C28726, Avertissement C28735, Avertissement C28750
cpp/drivers/irql-not-saved /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Avertissement C28158
cpp/pilotes/irql-non-utilisé /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql Avertissement C28157
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql Avertissement C28150
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Avertissement C28120
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql Avertissement C28121
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Avertissement C28124
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql Avertissement C28134
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql Avertissement C28146

Pilotes - WDM

ID Emplacement Avertissement d’analyse du code
cpp/drivers/acces-illegal-au-champ /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Avertissement C28128
cpp/drivers/illegal-field-access2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Avertissement C28175
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Avertissement C28176
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (Aucune vérification de l’autorité de certification associée)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql Avertissement C28145
cpp/drivers/erreur-d'état-en-attente /microsoft/windows-drivers//<Version>drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Avertissement C28143
cpp/pilotes/affectation-erronée-de-table-de-dispatch /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Avertissement C28169

Le fichier windows-driver-suites/windows_recommended_partial.qls inclut les requêtes de code recommandées suivantes.

# 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