Partilhar via


Consultas e pacotes CodeQL para teste de driver do Windows

O repositório Microsoft CodeQL GitHub fornece três conjuntos de consultas para simplificar o fluxo de trabalho de ponta a ponta do programador de drivers. Estas suites estão incluídas no pacote CodeQL da microsoft/windows-drivers e utilizam consultas únicas desse pacote e consultas gerais em C++ do pacote microsoft/cpp-queries.

  • recommended.qls contém um conjunto amplo de verificações para bugs comuns de drivers e C/C++. Recomendamos executar esta suíte automáticamente e rever os resultados.
  • mustrun.qls contém verificações que devem ser executadas para passar a certificação do Windows Hardware Compatibility Program (WHCP). Como estas consultas podem produzir falsos positivos em alguns casos, falhar estas verificações não falhará o teste do Logótipo de Ferramentas Estáticas, mas os programadores devem rever os resultados e corrigir erros reais. Um DVL gerado sem resultados para estas verificações falha no teste do Logótipo de Ferramentas Estáticas. Para o 26H1, mustrun.qls e recommended.qls são idênticos.
  • O mustfix.qls serve como um subconjunto das consultas must-run e contém verificações que reportam problemas que devem ser corrigidos para passar a certificação WHCP. Um DVL gerado com falhas nestas regras não passa no teste do Logótipo de Ferramentas Estáticas.

Para detalhes do conteúdo das suites de consultas, consulte Consultas e Suítes CodeQL.

Consultas que devem ser corrigidas para certificação WHCP

O seguinte subconjunto de consultas é Must-Fix para certificação WHCP e também está incluído no conjunto de correções recomendadas. Este conjunto de regras está incluído no mustfix.qls.

Muitas das regras seguintes correspondem à Enumeração Comum de Fraquezas (CWEs) ou a Avisos de Análise de Código anteriores.

Consultas a Corrigir do pacote microsoft/windows-drivers

ID Localização Enumeração de Fraquezas Comuns / Aviso de Análise de Código
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql N/A
cpp/drivers/apis estendidas-obsoletas /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql Aviso C28719, Aviso C28726, Aviso C28735, Aviso C28750
cpp/conversão-incorreta-de-tipo-de-string-ignorar-puchar-casts /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Consultas a Corrigir Urgentemente do pacote Microsoft/CPP-Queries

ID Localização Enumeração de fraqueza comum
cpp/verificação de estouro em adição inadequada /microsoft/cpp-queries/<Version>/Prováveis Bugs/Aritmética/Má AdiçãoOverflowCheck.ql CWE-190, CWE-192
CPP/Argumentos-de-Formato-Número Errado /microsoft/cpp-queries/<Version>/Prováveis Erros/Format/NúmeroErradoDeArgumentosDeFormato.ql CWE-234, CWE-685
CPP/Pointer-Overflow-Check /microsoft/cpp-queries/<Version>/Prováveis Bugs/Gestão de Memória/PointerOverflow.ql CWE-758
CPP/UNSAFE-STRNCAT /microsoft/cpp-queries/<Version>/Bugs Prováveis/Gestão de Memória/SuspiciousCallToStrncat.ql CWE-119, CWE-251, CWE-676, CWE-788
cpp/uso-inseguro-desta /microsoft/cpp-queries/<Version>/Bugs Prováveis/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/tls-settings-misconfiguration /microsoft/cpp-queries/<Version>/Prováveis Bugs/Protocolos/TlsSettingsMisconfiguration.ql CWE-326
cpp/boost/uso-de-protocolo-de-segurança-obsoleto-e-hardcoded /microsoft/cpp-queries/<Version>/Prováveis Bugs/Protocolos/UseOfDeprecatedHardcodedProtocol.ql CWE-327
cpp/Muito poucos argumentos /microsoft/cpp-queries/<Version>/Erros Prováveis/Funções Subespecificadas/TooFewArguments.ql CWE-234, CWE-685
cpp/Microsoft/Public/BadOverflowGuard /microsoft/cpp-queries/<Version>/Microsoft/Prováveis Bugs/Conversão/BadOverflowGuard.ql CWE-190, CWE-191
CPP/MICROSOFT/PUBLIC/DRIVERS/USO-INCORRETO-DE-RTLCOMPAREMEMORY /microsoft/cpp-queries/<Version>/Microsoft/Prováveis Erros/Drivers/UsoIncorretoDeRtlCompareMemory.ql N/A
cpp/microsoft/public/criptografia-fraca/algoritmos-de-criptografia-banidos /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedEncryption.ql CWE-327
CPP/MICROSOFT/PUBLIC/WEAK-CRYPTO/CAPI/BANNED-MODES /microsoft/cpp-queries/<Version>/Microsoft/Security/Criptografia/BannedModesCAPI.ql CWE-327
cpp/microsoft/public/weak-crypto/cng/banned-modes /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedModesCNG.ql CWE-327
CPP/MICROSOFT/PUBLIC/WEAK-CRYPTO/CNG/HARDCODED-IV /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/HardcodedIVCNG.ql CWE-327
CPP/MICROSOFT/PUBLIC/ENUM-INDEX /microsoft/cpp-queries/<Version>/Microsoft/Security/MemoryAccess/EnumIndex/UncheckedBoundsEnumAsIndex.ql CWE-125
CPP/Injeção de linha de comandos /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078, CWE-088
cpp/Operação de Processo Não Controlada /microsoft/cpp-queries/<Version>/Security/CWE/CWE/CWE-114/UncontrolledProcessOperation.ql CWE-114
cpp/Escrita mal limitada /microsoft/cpp-queries/<Version>/Security/CWE/CWE-120/BadlyBoundedWrite.ql CWE-120, CWE-787, CWE-805
CPP/Overrunning-Write /microsoft/cpp-queries/<Version>/Security/CWE/CWE-120/OverrunWrite.ql CWE-120, CWE-787, CWE-805
CPP/Não-espaço-para-terminador /microsoft/cpp-queries/<Version>/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql CWE-120, CWE-122, CWE-131
cpp/terminação-null-controlada-pelo-utilizador-contaminada /microsoft/cpp-queries/<Version>/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql CWE-170
cpp/comparação-com-tipo-mais-amplo /microsoft/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-conversão booleana /microsoft/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253
cpp/openssl-heartbleed /microsoft/cpp-queries/<Version>/Security/CWE/CWE-327/OpenSslHeartbleed.ql CWE-327, CWE-788
CPP/Excesso-de-Funções-Perigosas /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/DangerousFunctionOverflow.ql CWE-242, CWE-676
cpp/dangerous-cin /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/DangerousUseOfCin.ql CWE-676
cpp/incorrect-string-type-conversion /microsoft/cpp-queries/<Version>/Security/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/unsafe-dacl-security-descriptor /microsoft/cpp-queries/<Version>/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql CWE-732

A suite recommended.qls inclui todas as consultas da suite mustfix.qls, bem como as seguintes consultas dos pacotes microsoft/windows-drivers e microsoft/cpp-queries.

Questões gerais de drivers do pacote microsoft/windows-drivers

ID Localização Aviso de análise de código
cpp/drivers/sintaxe de anotação /microsoft/windows-drivers/<Version>/drivers/general/queries/AnnotationSyntax/AnnotationSyntax.ql Aviso C28266
cpp/drivers/tipo-função-atual-incorreto /microsoft/windows-drivers/<Version>/drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql Aviso C28101
cpp/drivers/etiqueta-de-pool-padrão. /microsoft/windows-drivers/<Version>/drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql Aviso C28147
cpp/drivers/driver-entry-save-buffer /microsoft/windows-drivers/<Version>/drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql Aviso C28131
cpp/drivers/valor examinado /microsoft/windows-drivers/<Version>/drivers/general/queries/ExaminedValue/ExaminedValue.ql Aviso C28193
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers/<Version>/drivers/general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql Aviso C28114
cpp/drivers/funcao-importante-chamada-otimizada-fora /microsoft/windows-drivers/<Version>/drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql Aviso C28625
cpp/drivers/improper-not-operator-on-zero /microsoft/windows-drivers/<Version>/drivers/general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql Aviso C28650
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql Aviso C28268
cpp/drivers/anotação-de-inválido-do-ponteiro-de-função /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql Aviso C28165
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers/<Version>/drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql Aviso C28133
cpp/drivers/irql-problema-de-anotação /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql Aviso C28153
CPP/Drivers/Irql-Cancel-Rotina /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql Aviso C28144
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql Aviso C28111
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/IrqlSetTooHigh/IrqlSetTooHigh.ql C28150 Advertência
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124 Advertência
cpp/drivers/irql-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28121 Advertência
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120 Aviso
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Nenhuma verificação de CA associada
CPP/Drivers/Multithreaded-AV-Condition /microsoft/windows-drivers/<Version>/drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql Aviso C28616
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql Aviso C28714
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql Aviso C28715
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql Aviso C28716
cpp/drivers/atribuição de ponteiros de caracteres nulos /microsoft/windows-drivers/<Version>/drivers/general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql Aviso C28730
cpp/drivers/operand-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql Aviso C28129
CPP/Drivers/Variável-de-Tamanho-do-Ponteiro /microsoft/windows-drivers/<Version>/drivers/general/queries/PointerVariableSize/PointerVariableSize.ql Aviso C28132
CPP/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134 Advertência
CPP/drivers/tipo de função-usado corretamente /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql C28158 Advertência
cpp/drivers/função-de-rotina-tipo-não-esperado /microsoft/windows-drivers/<Version>/drivers/general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql Aviso C28127
CPP/Motoristas/STR Safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146 Advertência
cpp/drivers/estrita correspondência de tipo /microsoft/windows-drivers/<Version>/drivers/general/queries/StrictTypeMatch/StrictTypeMatch.ql Aviso C28139

Consultas de drivers WDM do pacote Microsoft/Windows-Drivers

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-campo-ilegal-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/init-não-autorizado /microsoft/windows-drivers/<Version>/drivers/wdm/queries/InitNotCleared/InitNotCleared.ql Aviso C28152
cpp/drivers/kewaitlocal-necessites-kernel-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql Aviso C28135
cpp/drivers/código de múltiplas páginas /microsoft/windows-drivers/<Version>/drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql Aviso C28171
CPP/Drivers/Modo de Referência OB /microsoft/windows-drivers/<Version>/drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql Aviso C28126
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql Nenhuma verificação de CA associada
cpp/drivers/mdl-escrita-opaca /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlWrite/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 Aviso C28168, Aviso C28169

Consultas gerais em C++ do pacote microsoft/windows-drivers

ID Localização Aviso de Enumeração de Fraquezas Comuns / Análise de Código
CPP/PaddingByteInformationDisclosure /microsoft/windows-drivers/<Version>/microsoft/Prováveis Bugs/Violações de Fronteiras/PaddingByteInformationDisclosure.ql N/A
CPP/BadOverflowGuard /microsoft/windows-drivers/<Version>/microsoft/Prováveis Erros/Conversão/BadOverflowGuard.ql N/A
CPP/InfiniteLoop /microsoft/windows-drivers/<Version>/microsoft/Potenciais Bugs/Conversão/InfiniteLoop.ql N/A
CPP/Use-after-free /microsoft/windows-drivers/<Version>/microsoft/Bugs Prováveis/Gestão de Memória/UseAfterFree/UseAfterFree.ql N/A
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Erros Prováveis/UninitializedPtrField.ql N/A
cpp/criptografia fraca/cng/vetor de inicialização codificado /microsoft/windows-drivers/<Version>/microsoft/Segurança/Criptografia/HardcodedIVCNG.ql N/A

Consultas gerais em C++ do pacote microsoft/cpp-queries

ID Localização Enumeração de fraqueza comum
cpp/offset-use-before-range-check /microsoft/cpp-queries/<Version>/Boas Práticas/Erros Prováveis/OffsetUseBeforeRangeCheck.ql CWE-120, CWE-125
CPP/multiplicação-inteiro-conversão-para-long /microsoft/cpp-queries/<Version>/Prováveis Bugs/Aritmética/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
CPP/verificação de overflow com sinal /microsoft/cpp-queries/<Version>/Erros Prováveis/Aritmética/SignedOverflowCheck.ql CWE-128, CWE-190
cpp/upcast-array-aritmética-de-apontadores /microsoft/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/uso incorreto do operador 'não' /microsoft/cpp-queries/<Version>/Erros Prováveis/Erros de Digitação Prováveis/IncorrectNotOperatorUsage.ql CWE-480
CPP/Tamanho-suspeito /microsoft/cpp-queries/<Version>/Prováveis Bugs/Gestão de Memória/SuspiciousSizeof.ql CWE-467
cpp/local não inicializado /microsoft/cpp-queries/<Version>/Prováveis Erros/Gestão de Memória/UninitializedLocal.ql CWE-457, CWE-665
C++/Chamada variadic não terminada /microsoft/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
CPP/variável condicionalmente não inicializada /microsoft/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql CWE-457
cpp/suspicious-add-sizeof /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql CWE-468
CPP/escalonamento de ponteiro suspeito /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
CPP/suspeito-ponteiro-escala-vazio /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/função-potencialmente-perigosa /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/overflow-buffer /microsoft/cpp-queries/<Version>/Security/CWE/CWE-119/OverflowBuffer.ql CWE-119, CWE-121, CWE-122, CWE-126

Consultas Obrigatórias

A suíte mustrun.qls contém consultas que devem ser executadas para passar a certificação WHCP. Estas consultas podem não precisar necessariamente de ser corrigidas devido a potenciais falsos positivos, mas devem ter os seus resultados revistos e quaisquer bugs reais encontrados corrigidos. Um DVL gerado sem resultados para estas verificações falha no teste do Logótipo de Ferramentas Estáticas.

Para o Windows 11, versão 26H1, as consultas expostas pelo mustrun.qls e recommended.qls são idênticas.