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


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

Репозиторий Microsoft CodeQL GitHub предлагает два набора запросов для упрощения разработки драйверов Windows и обеспечения соответствия программе совместимости оборудования Windows (WHCP). Рекомендуемый набор qls включает все рекомендуемые запросы для разработчиков драйверов, в то время как набор mustfix.qls фокусируется на запросах Must-Fix, необходимых для сертификации WHCP. Оба комплекта регулярно обновляются.

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

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

Этот набор правил включен в mustfix.qls.

Идентификатор Местоположение Общее перечисление слабых мест
cpp/ошибка проверки переполнения сложения codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/проверка-переполнения-указателя codeql/cpp-queries//Likely Bugs/<Version>Memory Management/PointerOverflow.ql Не применимо
cpp/too-few-arguments codeql/cpp-queries//Likely Bugs/<Version>Underspecified Functions/TooFewArguments.ql Не применимо
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-253/HResultBooleanConversion.ql CWE-253

Файл mustfix.qls содержит следующие запросы кода 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

Этот набор правил включается в windows-driver-suite/windows_mustfix_partial.qls.

Идентификатор Местоположение Общее перечисление слабых мест
cpp/windows/wdk/deprecated-api /microsoft/windows-drivers/<Version>drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql Не применимо
microsoft/Security/CWE/CWE-704/WcharCharConversionLimited /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Файл windows_mustfix_partial.qls содержит следующие запросы кода 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

Эти запросы являются частью набора запросов рекомендуется.qls в репозитории Microsoft GitHub CodeQL. Столбец "Общее перечисление слабых мест" (CWE) определяет, какие типы проблем безопасности выполняет поиск заданного запроса. Дополнительные сведения о CWEs см. на странице Mitre в CWE .

В столбце "Общее перечисление слабых мест" (CWE) показаны типы проблем безопасности, которые идентифицирует запрос.

Лучшие практики

Идентификатор Местоположение Общее перечисление слабых мест
cpp/offset-use-before-range-check codeql/cpp-queries//Best Practices/<Version>Likely Errors/OffsetUseBeforeRangeCheck.ql Не применимо

Вероятные ошибки

Идентификатор Местоположение Общее перечисление слабых мест
cpp/ошибка проверки переполнения сложения codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/integer-multiplication-cast-to-long codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/IntMultToLong.ql CWE-190, CWE-192, CWE-197, CWE-681
cpp/signed-overflow-check codeql/cpp-queries/<Version>/Likely Bugs/Arithmetic/SignedOverflowCheck.ql Не применимо
cpp/upcast-array-pointer-arithmetic codeql/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/проверка-переполнения-указателя codeql/cpp-queries//Likely Bugs/<Version>Memory Management/PointerOverflow.ql Не применимо
cpp/too-few-arguments codeql/cpp-queries//Likely Bugs/<Version>Underspecified Functions/TooFewArguments.ql Не применимо
cpp/incorrect-not-operator-usage codeql/cpp-queries//Likely Bugs/<Version>Likely Typos/IncorrectNotOperatorUsage.ql CWE-480
cpp/suspicious-add-sizeof <Version> CWE-468
cpp/uninitialized-local codeql/cpp-queries/<Version>/Likely Bugs/Memory Management/UninitializedLocal.ql CWE-457, CWE-665

Безопасность

Идентификатор Местоположение Общее перечисление слабых мест
cpp/условно-неинициализированная переменная codeql/cpp-queries/<Version>/Security/CWE/CWE-457/ConditionallyUninitializedVariable.ql. CWE-457
cpp/незавершенный вызов вариативной функции codeql/cpp-queries/<Version>/Security/CWE/CWE-121/UnterminatedVarargsCall.ql CWE-121
cpp/suspicious-pointer-scaling codeql/cpp-queries/<Version>/Безопасность/CWE/CWE-468/IncorrectPointerScaling.ql CWE-468
cpp/подозрительное-масштабирование-указателя-void codeql/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/потенциально опасные функции codeql/cpp-queries/<Version>/Security/CWE/CWE-676/PotentiallyDangerousFunction.ql CWE-676
cpp/incorrect-string-type-conversion codeql/cpp-queries/<Version>/Security/CWE/CWE-704/WcharCharConversion.ql CWE-704
cpp/comparison-with-wider-type codeql/cpp-queries/<Version>/Security/CWE/CWE-190/ComparisonWithWiderType.ql CWE-190, CWE-197, CWE-835
cpp/hresult-boolean-conversion codeql/cpp-queries/<Version>/Security/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

Рекомендуемый файл qls содержит следующие рекомендуемые запросы кода.

# 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

Эти запросы являются частью набора запросов windows_recommended_partial.qls .

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

Драйверы — общие

Идентификатор Местоположение Предупреждение анализа кода
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/общий/запросы/KeSetEventPageable/KeSetEventPageable.ql Нет связанной проверки УЦ (Удостоверяющего Центра)
cpp/drivers/role-type-correctly-used /microsoft/windows-drivers//drivers/<Version>general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql Нет связанной проверки УЦ (Удостоверяющего Центра)
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/drivers/<Version>general/queries/ExtendedDeprecatedApis.ql Предупреждение C28719, предупреждение C28726, предупреждение C28735, предупреждение C28750
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>general/queries/IrqlTooHigh/IrqlTooHigh.ql Предупреждение C28150
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>drivers/general/queries/IrqlTooLow/IrqlTooLow.ql Предупреждение C28120
cpp/драйверы/irql-установлен-слишком-высоко /microsoft/windows-drivers/drivers/<Version>drivers/general/queries/IrqlSetTooHigh/IrqlTooHigh.ql Предупреждение C28121
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/drivers/<Version>drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql Предупреждение C28124
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/drivers/<Version>general/queries/PoolTagIntegral/PoolTagIntegral.ql Предупреждение C28134
cpp/drivers/str-safe /microsoft/windows-drivers//drivers/<Version>general/queries/StrSafe/StrSafe.ql Предупреждение C28146

Драйверы — WDM

Идентификатор Местоположение Предупреждение анализа кода
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-access2 /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/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/OpaqueMdlUse/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 Предупреждение C28169

Файл windows-driver-suite/windows_recommended_partial.qls содержит следующие рекомендуемые запросы кода.

# 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