Partilhar via


Consultas e pacotes CodeQL para teste de driver do Windows

O repositório GitHub do Microsoft CodeQL oferece dois pacotes de consulta para simplificar o desenvolvimento de drivers do Windows e garantir a conformidade com o Programa de Compatibilidade de Hardware do Windows (WHCP). O pacote recommended.qls inclui todas as consultas recomendadas para desenvolvedores de drivers, enquanto o pacote mustfix.qls se concentra nas consultas "Must-Fix" necessárias para a certificação WHCP. Ambas as suites são atualizadas regularmente.

Must-Fix consultas para certificação WCHP

O subconjunto de consultas a seguir é Must-Fix para certificação WHCP e também está incluído no pacote de correções recomendadas .

Este conjunto de regras está incluído no mustfix.qls.

ID Localização Enumeração de fraqueza comum
cpp/verificação de estouro em adição inadequada codeql/cpp-queries/<Version>/Bugs prováveis/Aritmética/BadAdditionOverflowCheck.ql CWE-190, CWE-192
CPP/Pointer-Overflow-Check codeql/cpp-queries/<Version>/Bugs prováveis/Gerenciamento de memória/PointerOverflow.ql N/A
cpp/Muito poucos argumentos codeql/cpp-queries/<Version>/Bugs prováveis/Funções subespecificadas/TooFewArguments.ql N/A
cpp/comparação-com-tipo-mais-amplo codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-conversão booleana codeql/cpp-queries/<Version>/Segurança/CWE/CWE-253/HResultBooleanConversion.ql CWE-253

O arquivo mustfix.qls inclui as seguintes consultas de código Must-Fix .

# 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

Este conjunto de regras está incluído em windows-driver-suites/windows_mustfix_partial.qls.

ID Localização Enumeração de fraqueza comum
cpp/windows/wdk/api preterida /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql N/A
microsoft/Segurança/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

O arquivo windows_mustfix_partial.qls inclui as seguintes consultas de código Must-Fix .

# 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

Essas consultas fazem parte do conjunto de consultas recommended.qls no repositório Microsoft GitHub CodeQL. A coluna "Common Weakness Enumeration" (CWE) identifica os tipos de problemas de segurança que a consulta dada procura identificar. Consulte a página da Mitre sobre CWE para obter mais detalhes sobre CWEs.

A coluna "Common Weakness Enumeration" (CWE) mostra os tipos de problemas de segurança identificados pela consulta.

Melhores práticas

ID Localização Enumeração de fraqueza comum
cpp/offset-use-before-range-check codeql/cpp-queries/<Version>/Melhores práticas/Erros prováveis/OffsetUseBeforeRangeCheck.ql N/A

Prováveis bugs

ID Localização Enumeração de fraqueza comum
cpp/verificação de estouro em adição inadequada codeql/cpp-queries/<Version>/Bugs prováveis/Aritmética/BadAdditionOverflowCheck.ql CWE-190, CWE-192
CPP/multiplicação-inteiro-conversão-para-long codeql/cpp-queries/<Version>/Erros Possíveis/Aritmética/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
CPP/verificação de overflow com sinal codeql/cpp-queries/<Version>/Bugs prováveis/Aritmética/SignedOverflowCheck.ql N/A
cpp/upcast-array-aritmética-de-apontadores codeql/cpp-queries/<Version>/Bugs prováveis/Conversão/CastArrayPointerArithmetic.ql CWE-119, CWE-843
CPP/Pointer-Overflow-Check codeql/cpp-queries/<Version>/Bugs prováveis/Gerenciamento de memória/PointerOverflow.ql N/A
cpp/Muito poucos argumentos codeql/cpp-queries/<Version>/Bugs prováveis/Funções subespecificadas/TooFewArguments.ql N/A
cpp/uso incorreto do operador 'não' codeql/cpp-queries/<Version>/Erros Prováveis/Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Erros Prováveis/Gestão de Memória/SuspiciousSizeof.ql CWE-468
cpp/local não inicializado codeql/cpp-queries/<Version>/Bugs Prováveis/Gerenciamento de memória/UninitializedLocal.ql CWE-457, CWE-665

Segurança

ID Localização Enumeração de fraqueza comum
CPP/variável condicionalmente não inicializada codeql/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. CWE-457
C++/Chamada variadic não terminada codeql/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
CPP/escalonamento de ponteiro suspeito codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
CPP/suspeito-ponteiro-escala-vazio codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/função-potencialmente-perigosa codeql/cpp-queries/<Version>/Segurança/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/incorrect-string-type-conversion codeql/cpp-queries/<Version>/Segurança/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/comparação-com-tipo-mais-amplo codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-conversão booleana codeql/cpp-queries/<Version>/Segurança/CWE/CWE-253/HResultBooleanConversion.ql CWE-253
cpp/suspicious-add-sizeof codeql/cpp-queries/<Version>/Security/CWE/CWE-468/CWE-468/SuspiciousAddWithSizeof.ql CWE-468

O arquivo recommended.qls inclui as seguintes consultas de código recomendadas.

# 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

Essas consultas fazem parte do pacote de consultas windows_recommended_partial.qls .

ID Localização Enumeração de fraqueza comum
CPP/PaddingByteInformationDisclosure microsoft/windows-drivers/<Version>/microsoft/Bugs prováveis/Violações de limite/PaddingByteInformationDisclosure.ql N/A
CPP/BadOverflowGuard microsoft/windows-drivers/<Version>/microsoft/Bugs prováveis/Conversão/BadOverflowGuard.ql N/A
CPP/InfiniteLoop microsoft/windows-drivers/<Version>/microsoft/Erros Prováveis/Conversão/InfiniteLoop.ql N/A
cpp/uninitializedptrfield microsoft/windows-drivers/<Version>/microsoft/Erros Prováveis/UninitializedPtrField.ql N/A
CPP/Use-after-free microsoft/windows-drivers/<Version>/microsoft/Bugs prováveis/Gerenciamento de memória/UseAfterFree/UseAfterFree.ql N/A
ID Localização Aviso de análise de código
cpp/criptografia fraca/cng/vetor de inicialização codificado /microsoft/windows-drivers/<Version>/microsoft/Segurança/Criptografia/HardcodedIVCNG.ql N/A

Motoristas - Geral

ID Localização Aviso de análise de código
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Nenhuma verificação de CA associada
CPP/drivers/tipo de função-usado corretamente /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Nenhuma verificação de CA associada
cpp/drivers/apis estendidas-obsoletas /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis.ql Aviso C28719, Aviso C28726, Aviso C28735, Aviso C28750
cpp/drivers/irql-não-salvo /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql C28158 Advertência
cpp/drivers/irql-não-usado /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql C28157 Advertência
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28150 Advertência
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120 Aviso
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql C28121 Advertência
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124 Advertência
CPP/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134 Advertência
CPP/Motoristas/STR Safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146 Advertência

Drivers - WDM

ID Localização Aviso de análise de código
CPP/Drivers/Acesso ilegal ao campo /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql C28128 Advertência
cpp/drivers/acesso ilegal ao campo 2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql C28175 Aviso
cpp/drivers/escrita de campo ilegal /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql C28176 Advertência
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql (Nenhuma verificação de autoridade de certificação associada)
cpp/drivers/mdl-escrita-opaca /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlWrite.ql C28145 Advertência
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql C28143 Advertência
cpp/drivers/atribuição errada da tabela de despacho /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql C28169 Advertência

O arquivo windows-driver-suites/windows_recommended_partial.qls inclui as seguintes consultas de código recomendadas.

# 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