Поделиться через


Запросы и наборы CodeQL для тестирования драйверов Windows

Репозиторий Microsoft CodeQL GitHub предоставляет три набора запросов для упрощения комплексного рабочего процесса разработчика драйвера. Эти наборы включены в пакет CodeQL microsoft/windows-drivers и используют запросы, уникальные для этого пакета, а также общие запросы C++ из пакета microsoft/cpp-queries.

  • рекомендуется.qls содержит широкий набор проверок для распространенных ошибок драйвера и C/C++. Мы рекомендуем запустить этот набор по умолчанию и просмотреть результаты.
  • mustrun.qls содержит проверки, которые должны выполняться для прохождения сертификации программы совместимости Windows для оборудования (WHCP). Поскольку эти запросы могут привести к ложным срабатываниям в некоторых случаях, неудача этих проверок не приведет к провалу теста на соответствие логотипу статических инструментов, но разработчики должны внимательно просматривать результаты и исправлять реальные ошибки. DVL, созданный без результатов для этих проверок, не проходит испытания для логотипа статических инструментов. Для 26H1 mustrun.qls и recommended.qls идентичны.
  • mustfix.qls является подмножеством обязательных к выполнению запросов и содержит проверки, указывающие на проблемы, которые необходимо исправить для прохождения сертификации WHCP. DVL, созданный с ошибками в этих правилах, не проходит тест статических инструментов на соответствие логотипу.

Для получения подробной информации о содержимом наборов запросов см. раздел Запросы и наборы CodeQL.

запросы Must-Fix для WHCP-сертификации

Ниже приведены подмножества запросов , которые необходимо исправить для сертификации WHCP, а также включены в набор рекомендуемых исправлений . Этот набор правил включен в mustfix.qls.

Многие из следующих правил соответствуют общим предупреждениям по перечислению слабых мест (CWEs) или предыдущим предупреждениям анализа кода.

Запросы, которые необходимо исправить, из пакета драйверов Microsoft/windows

Идентификатор Местоположение Общее перечисление слабых / местПредупреждение анализа кода
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers/<Version>drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql Не применимо
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql Предупреждение C28719, предупреждение C28726, предупреждение C28735, предупреждение C28750
cpp/неправильное преобразование типа строки - игнорировать преобразования puchar-кастов /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Обязательные к исправлению запросы из пакета microsoft/cpp-queries

Идентификатор Местоположение Общее перечисление слабых мест
cpp/ошибка проверки переполнения сложения /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/wrong-number-format-arguments /microsoft/cpp-queries/<Version>/Вероятные ошибки/Формат/НеправильноеКоличествоАргументовФормата.ql CWE-234, CWE-685
cpp/проверка-переполнения-указателя /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/небезопасное-использование-this /microsoft/cpp-queries/<Version>/Likely Bugs/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/tls-настройки-неправильная конфигурация /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/too-few-arguments /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 Не применимо
cpp/microsoft/public/weak-crypto/запрещенные-алгоритмы-шифрования /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedEncryption.ql CWE-327
cpp/microsoft/public/weak-crypto/capi/запрещенные режимы /microsoft/cpp-queries/<Version>/Microsoft/Security/Cryptography/BannedModesCAPI.ql CWE-327
cpp/microsoft/public/weak-crypto/cng/запрещенные режимы /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/command-line-injection /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078, CWE-088
cpp/неконтролируемое выполнение процесса /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/управляемая пользователем завершение с нулевым байтом – загрязнение /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/dangerous-function-overflow /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

Рекомендуемый набор qls включает все запросы из набора mustfix.qls, а также следующие запросы из пакетов microsoft/windows-drivers и microsoft/cpp-queries.

Общие запросы драйверов из пакета драйверов Microsoft/Windows

Идентификатор Местоположение Предупреждение анализа кода
cpp/drivers/annotation-syntax /microsoft/windows-drivers/drivers/<Version>general/queries/AnnotationSyntax/AnnotationSyntax.ql Предупреждение C28266
cpp/drivers/current-function-type-not-correct /microsoft/windows-drivers/<Version>/drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql Предупреждение C28101
cpp/drivers/default-pool-tag /microsoft/windows-drivers/<Version>/драйверы/общие/запросы/DefaultPoolTag/DefaultPoolTag.ql Предупреждение C28147
cpp/драйверы/driver-entry-save-buffer /microsoft/windows-drivers/<Version>/drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql Предупреждение C28131
cpp/drivers/examined-value /microsoft/windows-drivers/drivers/<Version>general/queries/ExaminedValue/ExaminedValue.ql Предупреждение C28193
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers/<Version>general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql Предупреждение C28114
cpp/drivers/vazhny-vyzov-funktsii-optimizirovan-otsutstv /microsoft/windows-drivers/drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql Предупреждение C28625
cpp/drivers/improper-not-operator-on-zero /microsoft/windows-drivers//drivers/<Version>general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql Предупреждение C28650
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql Предупреждение C28268
cpp/драйверы/недопустимая-аннотация-указателя-функции /microsoft/windows-drivers/<Version>drivers/general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql Предупреждение C28165
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers/<Version>drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql Предупреждение C28133
cpp/drivers/irql-annotation-issue /microsoft/windows-drivers/drivers/<Version>drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql Предупреждение C28153
cpp/drivers/irql-cancel-routine /microsoft/windows-drivers/<Version>drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql Предупреждение C28144
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers/drivers/<Version>general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql Предупреждение C28111
cpp/drivers/irql-not-saved /microsoft/windows-drivers/drivers/<Version>drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql Предупреждение C28158
cpp/drivers/irql-not-used /microsoft/windows-drivers//drivers/<Version>general/queries/IrqlNotUsed/IrqlNotUsed.ql Предупреждение C28157
cpp/драйверы/irql-установлен-слишком-высоко /microsoft/windows-drivers/drivers/<Version>drivers/general/queries/IrqlSetTooHigh/IrqlSetTooHigh.ql Предупреждение C28150
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/drivers/<Version>drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Предупреждение C28124
cpp/drivers/irql-too-high /microsoft/windows-drivers//drivers/<Version>general/queries/IrqlTooHigh/IrqlTooHigh.ql Предупреждение C28121
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Предупреждение C28120
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/общий/запросы/KeSetEventPageable/KeSetEventPageable.ql Нет связанной проверки УЦ (Удостоверяющего Центра)
cpp/drivers/multithreaded-av-condition /microsoft/windows-drivers/<Version>drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql Предупреждение C28616
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers/<Version>drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql Предупреждение C28714
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql Предупреждение C28715
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers/drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql Предупреждение C28716
cpp/drivers/null-character-pointer-assignment /microsoft/windows-drivers/<Version>general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql Предупреждение C28730
cpp/drivers/operand-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql Предупреждение C28129
cpp/drivers/pointer-variable-size /microsoft/windows-drivers//drivers/<Version>general/queries/PointerVariableSize/PointerVariableSize.ql Предупреждение C28132
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/drivers/<Version>general/queries/PoolTagIntegral/PoolTagIntegral.ql Предупреждение C28134
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers//drivers/<Version>general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Предупреждение C28158
cpp/drivers/routine-function-type-not-expected /microsoft/windows-drivers//drivers/<Version>general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql Предупреждение C28127
cpp/drivers/str-safe /microsoft/windows-drivers//drivers/<Version>general/queries/StrSafe/StrSafe.ql Предупреждение C28146
cpp/drivers/strict-type-match /microsoft/windows-drivers//drivers/<Version>general/queries/StrictTypeMatch/StrictTypeMatch.ql Предупреждение C28139

Запросы драйвера WDM из пакета драйверов Microsoft/Windows

Идентификатор Местоположение Предупреждение анализа кода
Assuming that translation is appropriate here, it would be "cpp/драйверы/незаконный-доступ-к-полю". /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql Предупреждение C28128
cpp/drivers/illegal-field-access-2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql Предупреждение C28175
cpp/драйверы/неправильная запись в поле /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql Предупреждение C28176
cpp/drivers/init-not-cleared /microsoft/windows-drivers/<Version>wdm/queries/InitNotCleared/InitNotCleared.ql Предупреждение C28152
cpp/drivers/kewaitlocal-requires-kernel-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql Предупреждение C28135
cpp/drivers/multiple-paged-code /microsoft/windows-drivers/<Version>drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql Предупреждение C28171
cpp/drivers/ob-reference-mode /microsoft/windows-drivers/<Version>drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql Предупреждение C28126
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql Нет связанной проверки УЦ (Удостоверяющего Центра)
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlWrite/OpaqueMdlWrite.ql Предупреждение C28145
cpp/drivers/pending-status-error — ошибка статуса ожидания /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql Предупреждение C28143
cpp/драйвера/неправильное-присвоение-таблицы-распределения /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql Предупреждение C28168, предупреждение C28169

Общие запросы C++ из пакета microsoft/windows-drivers

Идентификатор Местоположение Общее перечисление слабых мест / предупреждение анализа кода
cpp/paddingbyteinformationdisclosure /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql Не применимо
cpp/badoverflowguard /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql Не применимо
cpp/infiniteloop /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql Не применимо
cpp/use-after-free /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql Не применимо
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql Не применимо
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Crytpography/HardcodedIVCNG.ql Не применимо

Общие запросы C++ из пакета microsoft/cpp-queries

Идентификатор Местоположение Общее перечисление слабых мест
cpp/offset-use-before-range-check /microsoft/cpp-queries/<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//Likely Bugs/<Version>Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/incorrect-not-operator-usage /microsoft/cpp-queries//Likely Bugs/<Version>Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/подозрительный размер /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/незавершенный вызов вариативной функции /microsoft/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/условно-неинициализированная переменная /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/подозрительное-масштабирование-указателя-void /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/потенциально опасные функции /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

Запросы обязательного выполнения

Набор mustrun.qls содержит запросы, которые должны быть выполнены для прохождения сертификации WHCP. Эти запросы не обязательно нуждаются в исправлении из-за возможных ложных срабатываний, но необходимо проверять их результаты и исправлять любые обнаруженные реальные ошибки. DvL, созданный без результатов для этих проверок, не проходит тест логотипа статических инструментов.

Для Windows 11 версии 26H1 запросы, предоставляемые mustrun.qls и recommended.qls, идентичны.