Udostępnij za pośrednictwem


Zapytania CodeQL i zestawy do testowania sterowników systemu Windows

Repozytorium GitHub Microsoft CodeQL udostępnia trzy zestawy zapytań, które upraszczają kompleksowe przepływy pracy dewelopera sterowników. Te pakiety są zawarte w pakiecie Microsoft/windows-drivers CodeQL i korzystają z zapytań unikatowych dla tego pakietu i ogólnych zapytań C++ z pakietu microsoft/cpp-queries pack.

  • recommended.qls zawiera szeroki zestaw testów typowych błędów sterownika i C/C++. Zalecamy domyślne uruchamianie tego pakietu i przeglądanie wyników.
  • mustrun.qls zawiera kontrolki, które muszą być uruchamiane w celu uzyskania certyfikacji Programu Zgodności Sprzętu Windows (WHCP). Ponieważ te zapytania mogą w niektórych przypadkach generować fałszywie dodatnie wyniki, niepowodzenie tych testów nie powiedzie się testowi logo narzędzi statycznych, ale deweloperzy powinni przejrzeć wyniki i naprawić i prawdziwe błędy. DVL wygenerowane bez wyników dla tych kontroli nie przejdzie testu logo narzędzi statycznych. W przypadku wersji 26H1 pliki mustrun.qls i recommended.qls są identyczne.
  • mustfix.qls służy jako podzbiór zapytań must-run i zawiera kontrole, które zgłaszają problemy, które muszą zostać rozwiązane w celu przekazania certyfikatu WHCP. DVL wygenerowany z błędami w przestrzeganiu tych reguł nie przechodzi testu Logo narzędzi statycznych.

Aby uzyskać szczegółowe informacje na temat zawartości zestawów zapytań, zobacz CodeQL Query and Suites (Zapytania i pakiety CodeQL).

Konieczne do naprawienia kwestie dotyczące certyfikacji WHCP

Poniższy podzbiór zapytań to Must-Fix dla certyfikacji WHCP, który również znajduje się w zalecanym pakiecie poprawek . Ten zestaw reguł jest zawarty w pliku mustfix.qls.

Wiele z poniższych reguł odpowiada Wspólnemu Wyliczeniu Słabości (CWE) lub wcześniejszym Ostrzeżeniom Analizy Kodu.

Poprawa problemów wymagających naprawy z pakietu Microsoft/Windows-drivers

identyfikator Lokalizacja Common Weakness Enumeration (CWE) / Ostrzeżenie z analizy kodu
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql N/A
cpp/sterowniki/rozszerzone-przestarzałe-api /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql Ostrzeżenie C28719, Ostrzeżenie C28726, Ostrzeżenie C28735, Ostrzeżenie C28750
cpp/incorrect-string-type-conversion-ignore-puchar-casts /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Konieczne do poprawy zapytania z pakietu microsoft/cpp-queries

identyfikator Lokalizacja Wspólne wyliczenie słabości
cpp/bad-addition-overflow-check /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/wrong-number-format-arguments /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-queries/<Version>/Likely Bugs/Memory Management/SuspiciousCallToStrncat.ql CWE-119, CWE-251, CWE-676, CWE-788
cpp/unsafe-use-of-this /microsoft/cpp-queries/<Version>/Likely Bugs/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/tls-settings-misconfiguration /microsoft/cpp-queries/<Version>/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql CWE-326
cpp/boost/use-of-deprecated-hardcoded-security-protocol /microsoft/cpp-queries/<Version>/Likely Bugs/Protocols/UseOfDeprecatedHardcodedProtocol.ql CWE-327
cpp/zbyt mało argumentów /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-rtlcomparememory /microsoft/cpp-queries/<Version>/Microsoft/Likely Bugs/Drivers/IncorrectUsageOfRtlCompareMemory.ql N/A
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/iniekcja przez wiersz poleceń /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078, CWE-088
cpp/niekontrolowana-operacja-procesowa /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/kontrolowana-przez-użytkownika-nul-terminacja-zainfekowana /microsoft/cpp-queries/<Version>/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql CWE-170
cpp/comparison-with-wider-type /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/niebezpieczna-funkcja-przepełnienie /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

Pakiet recommended.qls zawiera wszystkie zapytania z pakietu mustfix.qls oraz następujące zapytania z pakietów microsoft/windows-drivers i microsoft/cpp-queries.

Ogólne zapytania dotyczące sterowników z pakietu microsoft/windows-drivers

identyfikator Lokalizacja Ostrzeżenie analizy kodu
cpp/drivers/annotation-syntax /microsoft/windows-drivers/<Version>/drivers/general/queries/AnnotationSyntax/AnnotationSyntax.ql Ostrzeżenie C28266
cpp/drivers/current-function-type-not-correct /microsoft/windows-drivers/<Version>/drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql Ostrzeżenie C28101
cpp/drivers/default-pool-tag /microsoft/windows-drivers/<Version>/drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql Ostrzeżenie C28147
cpp/drivers/driver-entry-save-buffer /microsoft/windows-drivers/<Version>/drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql Ostrzeżenie C28131
cpp/drivers/examined-value /microsoft/windows-drivers/<Version>/drivers/general/queries/ExaminedValue/ExaminedValue.ql Ostrzeżenie C28193
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers//<Version>drivers/general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql Ostrzeżenie C28114
cpp/drivers/important-function-call-optimized-out /microsoft/windows-drivers/<Version>/drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql Ostrzeżenie C28625
cpp/drivers/improper-not-operator-on-zero /microsoft/windows-drivers/<Version>/drivers/general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql Ostrzeżenie C28650
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql Ostrzeżenie C28268
cpp/drivers/invalid-function-pointer-annotation /microsoft/windows-drivers/drivers/<Version>general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql Ostrzeżenie C28165
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers/<Version>/drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql Ostrzeżenie C28133
cpp/drivers/irql-annotation-issue /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql Ostrzeżenie C28153
cpp/drivers/irql-cancel-routine /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql Ostrzeżenie C28144
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql Ostrzeżenie C28111
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Ostrzeżenie C28158
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql Ostrzeżenie C28157
cpp/sterowniki/irql-ustawiony-zbyt-wysoko /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlSetTooHigh.ql Ostrzeżenie C28150
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Ostrzeżenie C28124
cpp/drivers/irql-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql Ostrzeżenie C28121
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Ostrzeżenie C28120
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql Brak skojarzonego sprawdzania urzędu certyfikacji
cpp/sterowniki/wielowątkowe-av-condition /microsoft/windows-drivers/<Version>/drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql Ostrzeżenie C28616
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql Ostrzeżenie C28714
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql Ostrzeżenie C28715
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql Ostrzeżenie C28716
cpp/drivers/null-character-pointer-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql Ostrzeżenie C28730
cpp/drivers/operand-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql Ostrzeżenie C28129
cpp/drivers/pointer-variable-size /microsoft/windows-drivers/<Version>/drivers/general/queries/PointerVariableSize/PointerVariableSize.ql Ostrzeżenie C28132
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql Ostrzeżenie C28134
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Ostrzeżenie C28158
cpp/drivers/routine-function-type-not-expected /microsoft/windows-drivers/<Version>/drivers/general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql Ostrzeżenie C28127
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql Ostrzeżenie C28146
cpp/drivers/strict-type-match /microsoft/windows-drivers/<Version>/drivers/general/queries/StrictTypeMatch/StrictTypeMatch.ql Ostrzeżenie C28139

Zapytania dotyczące sterowników WDM z pakietu microsoft/windows-drivers

identyfikator Lokalizacja Ostrzeżenie analizy kodu
cpp/kierowcy/nielegalny-dostęp-do-pola /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Ostrzeżenie C28128
cpp/drivers/illegal-field-access-2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Ostrzeżenie C28175
cpp/kierowcy/nielegalne-zapisywanie-pola /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Ostrzeżenie C28176
cpp/drivers/init-not-cleared /microsoft/windows-drivers/<Version>/drivers/wdm/queries/InitNotCleared/InitNotCleared.ql Ostrzeżenie C28152
cpp/drivers/kewaitlocal-requires-kernel-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql Ostrzeżenie C28135
cpp/drivers/multiple-paged-code /microsoft/windows-drivers/<Version>/drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql Ostrzeżenie C28171
cpp/drivers/ob-reference-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql Ostrzeżenie C28126
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql Brak skojarzonego sprawdzania urzędu certyfikacji
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlWrite/OpaqueMdlWrite.ql Ostrzeżenie C28145
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Ostrzeżenie C28143
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Ostrzeżenie C28168, ostrzeżenie C28169

Ogólne zapytania języka C++ z pakietu microsoft/windows-drivers

identyfikator Lokalizacja Typowe wyliczenie słabości /ostrzeżenie dotyczące analizy kodu
cpp/paddingbyteinformationdisclosure /microsoft/windows-drivers/<Version>/microsoft/Prawdopodobne usterki/Naruszenia granic/PaddingByteInformationDisclosure.ql N/A
cpp/badoverflowguard /microsoft/windows-drivers/<Version>/microsoft/Prawdopodobne usterki/Konwersja/BadOverflowGuard.ql N/A
cpp/infiniteloop /microsoft/windows-drivers/<Version>/microsoft/Prawdopodobne usterki/Konwersja/InfiniteLoop.ql N/A
cpp/use-after-free /microsoft/windows-drivers/<Version>/microsoft/Prawdopodobne usterki/Zarządzanie pamięcią/UseAfterFree/UseAfterFree.ql N/A
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql N/A
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Cryptography/HardcodedIVCNG.ql N/A

Ogólne zapytania języka C++ z pakietu microsoft/cpp-queries

identyfikator Lokalizacja Wspólne wyliczenie słabości
cpp/offset-use-before-range-check /microsoft/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql CWE-120, CWE-125
cpp/integer-mnożenie-rzutowanie-do-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/incorrect-not-operator-usage /microsoft/cpp-queries/<Version>/Likely Bugs/Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-sizeof /microsoft/cpp-queries/<Version>/Prawdopodobne usterki/Zarządzanie pamięcią/SuspiciousSizeof.ql CWE-467
cpp/uninitialized-local /microsoft/cpp-queries/<Version>/Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665
cpp/unterminated-variadic-call /microsoft/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/warunkowo-niezainicjowana-zmienna /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/suspicious-pointer-scaling /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/potencjalnie niebezpieczne-funkcja /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

Zapytania typu 'Must-Run'

Pakiet mustrun.qls zawiera zapytania, które muszą zostać uruchomione w celu uzyskania certyfikacji WHCP. Te zapytania mogą niekoniecznie być naprawione z powodu potencjalnych wyników fałszywie dodatnich, ale powinny zostać przejrzyone wyniki i naprawione wszelkie rzeczywiste błędy. DVL wygenerowane bez wyników dla tych kontroli nie przejdzie testu logo narzędzi statycznych.

W przypadku systemu Windows 11 w wersji 26H1 zapytania udostępniane przez pliki mustrun.qls i recommended.qls są identyczne.