Sdílet prostřednictvím


Dotazy a sady CodeQL pro testování ovladačů windows

Úložiště Microsoft CodeQL Na GitHubu poskytuje tři sady dotazů pro zjednodušení kompletního pracovního postupu vývojáře ovladačů. Tyto sady jsou součástí balíčku CodeQL pro microsoft/windows-drivers a využívají dotazy jedinečné pro tuto sadu a obecné dotazy jazyka C++ z balíčku microsoft/cpp-queries.

  • recommended.qls obsahuje širokou sadu kontrol běžných chyb ovladače a C/C++. Tuto sadu doporučujeme spustit ve výchozím nastavení a zkontrolovat výsledky.
  • mustrun.qls obsahuje kontroly, které musí být spuštěny , aby bylo možné předat certifikaci programu WHCP (Windows Hardware Compatibility Program). Vzhledem k tomu, že tyto dotazy mohou v některých případech vést k falešně pozitivním výsledkům, selhání těchto kontrol neznamená selhání testu loga Statických nástrojů. Vývojáři by měli výsledky zkontrolovat a opravit případné skutečné chyby. Generovaný DvL bez výsledků těchto kontrol selže v testu loga Statických Nástrojů. V případě 26H1 jsou mustrun.qls a recommended.qls totožné.
  • mustfix.qls slouží jako podmnožina dotazů, které musí spouštět, a obsahuje kontroly, které hlásí problémy, které musí být opraveny , aby bylo možné předat certifikaci WHCP. DvL vygenerovaný s chybami v těchto pravidlech neprojde testem loga Statických nástrojů.

Podrobnosti o obsahu sad dotazů najdete v tématu Dotazy a sady CodeQL.

Nutné opravit dotazy k certifikaci WHCP

Následující podmnožina dotazů je nutné opravit pro certifikaci WHCP a jsou také součástí sady Doporučených oprav . Tato sada pravidel je součástí souboru mustfix.qls.

Mnoho z následujících pravidel odpovídá běžným výčtům slabosti (CWE) nebo předchozím upozorněním analýzy kódu.

Dotazy k nutné opravě z balíčku Microsoft/Windows-drivers

ID Umístění Společný výčet slabosti / Upozornění analýzy kódu
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers//<Version>drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql není k dispozici
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers//<Version>drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql Upozornění C28719, upozornění C28726, upozornění C28735, upozornění C28750
cpp/incorrect-string-type-conversion-ignore-puchar-casts /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Must-Fix dotazy z balíčku Microsoft/Cpp-Queries

ID Umístění Společný výčet slabosti
cpp/špatná-kontrola-přetečení-při-sčítání /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/špatný-formát-argumentů /microsoft/cpp-queries/<Version>//Likely Bugs/Format/WrongNumberOfFormatArguments.ql CWE-234, CWE-685
cpp/pointer-overflow-check /microsoft/cpp-queries/<Version>//Likely Bugs/Memory Management/PointerOverflow.ql CWE-758
cpp/unsafe-strncat /microsoft/cpp-querys/<Version>//Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql CWE-119, CWE-251, CWE-676, CWE-788
cpp/nebezpečné-použití-tohoto /microsoft/cpp-queries/<Version>//Likely Bugs/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/tls-settings-misconfiguration /microsoft/cpp-queries/<Version>/Pravděpodobné chyby/Protokoly/Nesprávná konfigurace TLS.ql CWE-326
cpp/boost/použití zastaralého pevně zakódovaného bezpečnostního protokolu /microsoft/cpp-queries/<Version>//Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql CWE-327
cpp/příliš málo argumentů /microsoft/cpp-queries/<Version>/Likely Bugs/Underspecified Functions/TooFewArguments.ql CWE-234, CWE-685
cpp/microsoft/public/badoverflowguard /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql CWE-190, CWE-191
cpp/microsoft/public/drivers/incorrect-usage-of-rtlcomparemory /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Drivers/IncorrectUsageOfRtlCompareMemory.ql není k dispozici
cpp/microsoft/public/weak-crypto/banned-encryption-algorithms /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/Cryptography/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/injektáž příkazového řádku /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078, CWE-088
cpp/nekontrolovaná procesní operace /microsoft/cpp-queries/<Version>/Security/CWE/CWE-114/UncontrolledProcessOperation.ql CWE-114
cpp/badly-bounded-write /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/no-space-for-terminator /microsoft/cpp-queries/<Version>//Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql CWE-120, CWE-122, CWE-131
cpp/uživatelsky řízené nulové ukončení - infikováno /microsoft/cpp-queries/<Version>/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql CWE-170
cpp/porovnání s širším typem /microsoft/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion /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/nebezpečné přetečení funkce /microsoft/cpp-queries/<Version>/Security/CWE/CWE-676/DangerousFunctionOverflow.ql CWE-242, CWE-676
cpp/nebezpečný-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

Sada recommended.qls zahrnuje všechny dotazy ze sady mustfix.qls a následující dotazy z microsoft/windows-drivers a balíčků microsoft/cpp-queries.

Obecné dotazy ovladačů z sady Microsoft/windows-drivers Pack

ID Umístění Upozornění analýzy kódu
cpp/drivers/annotation-syntax /microsoft/windows-drivers/<Version>/drivers/general/queries/AnnotationSyntax/AnnotationSyntax.ql Upozornění C28266
cpp/drivers/current-function-type-not-correct /microsoft/windows-drivers//<Version>drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql Upozornění C28101
cpp/drivers/default-pool-tag /microsoft/windows-drivers//<Version>drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql Upozornění C28147
cpp/drivers/driver-entry-save-buffer /microsoft/windows-drivers//<Version>drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql Upozornění C28131
cpp/drivers/vyšetřovaná-hodnota /microsoft/windows-drivers//<Version>drivers/general/queries/ExaminedValue/ExaminedValue.ql Upozornění C28193
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers//<Version>drivers/general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql Upozornění C28114
cpp/ovladače/důležitá-funkce-volání-optimalizováno-pryč /microsoft/windows-drivers//<Version>drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql Upozornění C28625
cpp/drivers/improper-not-operator-on-zero /microsoft/windows-drivers//<Version>drivers/general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql Upozornění C28650
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql Upozornění C28268
cpp/drivers/invalid-function-pointer-annotation /microsoft/windows-drivers//<Version>drivers/general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql Upozornění C28165
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers//<Version>drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql Upozornění C28133
cpp/drivers/irql-annotation-issue /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql Upozornění C28153
cpp/drivers/irql-cancel-routine /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql Upozornění C28144
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql Upozornění C28111
cpp/drivers/irql-not-saved /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Upozornění C28158
cpp/ovladače/irql-not-used /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql Upozornění C28157
cpp/drivers/irql-set-too-high /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlSetTooHigh/IrqlSetTooHigh.ql Upozornění C28150
cpp/drivers/irql-set-too-low /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Upozornění C28124
cpp/drivers/irql-too-high /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql Upozornění C28121
cpp/drivers/irql-too-low /microsoft/windows-drivers//<Version>drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Upozornění C28120
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers//<Version>drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Žádná přidružená kontrola certifikační autority
cpp/drivers/multithreaded-av-condition /microsoft/windows-drivers//<Version>drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql Upozornění C28616
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers//<Version>drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql Upozornění C28714
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql Upozornění C28715
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers//<Version>drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql Upozornění C28716
cpp/drivers/null-character-pointer-assignment /microsoft/windows-drivers//<Version>drivers/general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql Upozornění C28730
cpp/drivers/operand-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql Upozornění C28129
cpp/drivers/pointer-variable-size /microsoft/windows-drivers//<Version>drivers/general/queries/PointerVariableSize/PointerVariableSize.ql Upozornění C28132
cpp/drivers/pool-tag-integral /microsoft/windows-drivers//<Version>drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql Upozornění C28134
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers//<Version>drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Upozornění C28158
cpp/drivers/routine-function-type-not-expected /microsoft/windows-drivers/<Version>drivers/general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql Upozornění C28127
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql Upozornění C28146
cpp/drivers/strict-type-match /microsoft/windows-drivers//<Version>drivers/general/queries/StrictTypeMatch/StrictTypeMatch.ql Upozornění C28139

Dotazy ovladačů WDM z sady Microsoft/windows-drivers Pack

ID Umístění Upozornění analýzy kódu
cpp/drivers/illegal-field-access /microsoft/windows-drivers//<Version>drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Upozornění C28128
cpp/drivers/illegal-field-access-2 /microsoft/windows-drivers//<Version>drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Upozornění C28175
cpp/drivers/nezákonný zápis do pole /microsoft/windows-drivers//<Version>drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Upozornění C28176
cpp/drivers/init-not-cleared /microsoft/windows-drivers//<Version>drivers/wdm/queries/InitNotCleared/InitNotCleared.ql Upozornění C28152
cpp/drivers/kewaitlocal-requires-kernel-mode /microsoft/windows-drivers//<Version>drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql Upozornění C28135
cpp/drivers/multiple-paged-code /microsoft/windows-drivers//<Version>drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql Upozornění C28171
cpp/drivers/ob-reference-mode /microsoft/windows-drivers//<Version>drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql Upozornění C28126
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers//<Version>drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql Žádná přidružená kontrola certifikační autority
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers//<Version>drivers/wdm/queries/OpaqueMdlWrite/OpaqueMdlWrite.ql Upozornění C28145
cpp/ovladače/chyba-při-odesílání-stavu /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Upozornění C28143
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers//<Version>drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Upozornění C28168, upozornění C28169

Obecné dotazy jazyka C++ z balíčku microsoft/windows-drivers pack

ID Umístění Běžný výčet slabosti / Upozornění analýzy kódu
cpp/paddingbyteinformationdisclosure /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql není k dispozici
cpp/badoverflowguard /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql není k dispozici
cpp/infiniteloop /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql není k dispozici
cpp/use-after-free /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql není k dispozici
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql není k dispozici
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Cryptography/HardcodedIVCNG.ql není k dispozici

Obecné dotazy jazyka C++ z balíčku microsoft/cpp-queries

ID Umístění Společný výčet slabosti
cpp/offset-use-before-range-check /microsoft/cpp-dotazy/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql CWE-120, CWE-125
cpp/integer-multiplication-cast-to-long /microsoft/cpp-queries/<Version>//Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
cpp/signed-overflow-check /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql CWE-128, CWE-190
cpp/upcast-array-pointer-arithmetic /microsoft/cpp-queries/<Version>//Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/nesprávné použití operátoru NOT /microsoft/cpp-queries/<Version>//Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-sizeof /microsoft/cpp-queries/<Version>//Likely Bugs/Memory Management/SuspiciousSizeof.ql CWE-467
cpp/uninitialized-local /microsoft/cpp-queries/<Version>//Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665
cpp/neukončené-variadické-volání /microsoft/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/podmíněně-neinicializovaná-proměnná /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/podezřelé škálování ukazatele /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/suspicious-pointer-scaling-void /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/potenciálně nebezpečná funkce /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

povinné dotazy

Sada mustrun.qls obsahuje dotazy, které je potřeba spustit, aby bylo možné předat certifikaci WHCP. Tyto dotazy nemusí být nutně nutné opravit kvůli potenciálním falešně pozitivním výsledkům, ale měly by se zkontrolovat jejich výsledky a opravit všechny skutečné chyby. Generovaný DvL bez výsledků těchto kontrol selže v testu loga Statických Nástrojů.

U Windows 11 verze 26H1 jsou dotazy zveřejněné mustrun.qls a recommended.qls stejné.