Aracılığıyla paylaş


Windows Sürücü Testi için CodeQL Sorguları ve Paketleri

Microsoft CodeQL GitHub deposu, uçtan uca sürücü geliştirici iş akışını basitleştirmek için üç sorgu paketi sağlar. Bu paketler microsoft/windows-drivers CodeQL paketine dahil edilir ve bu pakete özgü sorgulardan ve microsoft/cpp-queries paketinden genel C++ sorgularından yararlanılır.

  • recommended.qls , yaygın sürücü ve C/C++ hataları için geniş bir denetim kümesi içerir. Bu paketi varsayılan olarak çalıştırmanızı ve sonuçları gözden geçirmenizi öneririz.
  • mustrun.qls , Windows Donanım Uyumluluk Programı (WHCP) sertifikasını geçirmek için çalıştırılması gereken denetimler içerir. Bu sorgular bazı durumlarda hatalı pozitif sonuçlara neden olabileceğinden, bu denetimlerin başarısız olması Statik Araçlar Logo testinin başarısız olmasına neden olmaz, ancak geliştiricilerin sonuçları gözden geçirmesi ve düzeltmesi ve gerçek hataları düzeltmesi gerekir. Bu denetimler için sonuç olmadan oluşturulan DVL, Statik Araçlar Logo testi başarısız olur. 26H1 için mustrun.qls ve recommended.qls aynıdır.
  • mustfix.qls , çalıştırılması gereken sorguların bir alt kümesi olarak görev alır ve WHCP sertifikasını geçirmek için düzeltilmesi gereken sorunları bildiren denetimler içerir. Bu kurallarda hatalarla oluşturulan dvl, Statik Araçlar Logo testini geçmiyor.

Sorgu paketlerinin içeriğinin ayrıntıları için bkz. CodeQL Sorguları ve Paketleri.

WHCP sertifikası için mutlaka düzeltilmesi gereken sorgular

Aşağıdaki sorgu alt kümesi WHCP sertifikası için Düzeltilmelidir ve Önerilen Düzeltme paketine de eklenmiştir. Bu kural kümesi mustfix.qls dosyasına dahildir.

Aşağıdaki kuralların çoğu Ortak Zayıflık Numaralandırması'na (CWEs) veya önceki Kod Analizi Uyarılarına karşılık gelir.

Microsoft Windows Sürücüleri paketindeki Düzeltilecek sorgular

Kimlik Yer Ortak Zayıflık Numaralandırması / Kod Analizi Uyarısı
cpp/drivers/wdk-deprecated-api /microsoft/windows-drivers/<Version>/drivers/general/queries/WdkDeprecatedApis/wdk-deprecated-api.ql Mevcut Değil
cpp/drivers/extended-deprecated-apis /microsoft/windows-drivers/<Version>/drivers/general/queries/ExtendedDeprecatedApis/ExtendedDeprecatedApis.ql C28719 Uyarısı, C28726 Uyarısı, C28735 Uyarısı, C28750 Uyarısı
cpp/incorrect-string-type-conversion-ignore-puchar-casts /microsoft/windows-drivers/<Version>/microsoft/Security/CWE/CWE-704/WcharCharConversionLimited.ql CWE-704

Düzeltmesi Zorunlu microsoft/cpp-queries paketindeki sorgular

Kimlik Yer Ortak Zayıflık Numaralandırması
cpp/kötü-toplama-taşma-kontrolü /microsoft/cpp-queries/<Version>/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql CWE-190, CWE-192
cpp/yanlış sayı formatı argümanları /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/bunun güvenli olmayan kullanımı /microsoft/cpp-queries/<Version>/Likely Bugs/OO/UnsafeUseOfThis.ql CWE-670
cpp/boost/tls-ayarlarının yanlış yapılandırılması /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/çok az bağımsız değişken /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 Mevcut Değil
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 - Bu, 'zayıf kripto' algoritmalarına ilişkin Microsoft tarafından yasaklanmış modlar listesidir. /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/komut satırı ekleme /microsoft/cpp-queries/<Version>/Security/CWE/CWE-078/ExecTainted.ql CWE-078, CWE-088
cpp/kontrolsüz-işlem-operasyonu /microsoft/cpp-queries/<Version>/Security/CWE/CWE-114/UncontrolledProcessOperation.ql CWE-114
cpp/hatalı sınırlanmış-yazma /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
Kullanıcı Kontrollü Null Sonlandırma Kirlenmiş /microsoft/cpp-queries/<Version>/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql CWE-170
cpp/geniş türle karşılaştırma /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

recommended.qls paketi mustfix.qls paketindeki tüm sorguların yanı sıra microsoft/windows-drivers ve microsoft/cpp-queries paketlerinden gelen aşağıdaki sorguları içerir.

microsoft/windows-drivers paketinden genel sürücü sorguları

Kimlik Yer Kod Analizi Uyarısı
cpp/drivers/annotation-syntax /microsoft/windows-drivers/<Version>/drivers/general/queries/AnnotationSyntax/AnnotationSyntax.ql C28266 Uyarısı
cpp/sürücüler/geçerli-fonksiyon-tipi-yanlış /microsoft/windows-drivers/<Version>/drivers/general/queries/CurrentFunctionTypeNotCorrect/CurrentFunctionTypeNotCorrect.ql C28101 Uyarısı
cpp/drivers/default-pool-tag /microsoft/windows-drivers/<Version>/drivers/general/queries/DefaultPoolTag/DefaultPoolTag.ql C28147 Uyarısı
cpp/drivers/driver-entry-save-buffer /microsoft/windows-drivers/<Version>/drivers/general/queries/DriverEntrySaveBuffer/DriverEntrySaveBuffer.ql C28131 Uyarısı
cpp/drivers/examined-value /microsoft/windows-drivers/<Version>/drivers/general/queries/ExaminedValue/ExaminedValue.ql C28193 Uyarısı
cpp/drivers/irp-stack-entry-copy /microsoft/windows-drivers/<Version>/drivers/general/queries/IRPStackEntryCopy/IRPStackEntryCopy.ql C28114 Uyarısı
cpp/drivers/important-function-call-optimized-out /microsoft/windows-drivers/<Version>/drivers/general/queries/ImportantFunctionCallOptimizedOut/ImportantFunctionCallOptimizedOut.ql C28625 Uyarısı
cpp/drivers/improper-not-operator-on-zero /microsoft/windows-drivers/<Version>/drivers/general/queries/ImproperNotOperatorOnZero/ImproperNotOperatorOnZero.ql C28650 Uyarısı
cpp/drivers/invalid-function-class-typedef /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionClassTypedef/InvalidFunctionClassTypedef.ql C28268 Uyarısı
cpp/drivers/invalid-function-pointer-annotation /microsoft/windows-drivers/<Version>/drivers/general/queries/InvalidFunctionPointerAnnotation/InvalidFunctionPointerAnnotation.ql C28165 Uyarısı
cpp/drivers/io-initialize-timer-call /microsoft/windows-drivers/<Version>/drivers/general/queries/IoInitializeTimerCall/IoInitializeTimerCall.ql C28133 Uyarısı
cpp/drivers/irql-annotation-issue /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlAnnotationIssue/IrqlAnnotationIssue.ql C28153 Uyarısı
cpp/drivers/irql-cancel-routine /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlCancelRoutine/IrqlCancelRoutine.ql C28144 Uyarısı
cpp/drivers/irql-float-state-mismatch /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlFloatStateMismatch/IrqlFloatStateMismatch.ql C28111 Uyarısı
cpp/drivers/irql-not-saved /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotSaved/IrqlNotSaved.ql C28158 Uyarısı
cpp/drivers/irql-not-used /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlNotUsed/IrqlNotUsed.ql C28157 Uyarısı
cpp/drivers/irql-set-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooHigh/IrqlSetTooHigh.ql C28150 Uyarısı
cpp/drivers/irql-set-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlSetTooLow/IrqlSetTooLow.ql C28124 Uyarısı
cpp/drivers/irql-too-high /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooHigh/IrqlTooHigh.ql C28121 Uyarısı
cpp/drivers/irql-too-low /microsoft/windows-drivers/<Version>/drivers/general/queries/IrqlTooLow/IrqlTooLow.ql C28120 Uyarısı
cpp/drivers/ke-set-event-pageable /microsoft/windows-drivers/<Version>/drivers/general/queries/KeSetEventPageable/KeSetEventPageable.ql İlişkili CA denetimi yok
cpp/drivers/multithreaded-av-condition /microsoft/windows-drivers/<Version>/drivers/general/queries/MultithreadedAVCondition/MultithreadedAVCondition.ql C28616 Uyarısı
cpp/drivers/ntstatus-explicit-cast /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast/NtstatusExplicitCast.ql C28714 Uyarısı
cpp/drivers/ntstatus-explicit-cast2 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast2/NtstatusExplicitCast2.ql C28715 Uyarısı
cpp/drivers/ntstatus-explicit-cast3 /microsoft/windows-drivers/<Version>/drivers/general/queries/NtstatusExplicitCast3/NtstatusExplicitCast3.ql C28716 Uyarısı
cpp/drivers/null-character-pointer-assignment (boş karakter işaretçisi ataması) /microsoft/windows-drivers/<Version>/drivers/general/queries/NullCharacterPointerAssignment/NullCharacterPointerAssignment.ql C28730 Uyarısı
cpp/drivers/operand-assignment /microsoft/windows-drivers/<Version>/drivers/general/queries/OperandAssignment/OperandAssignment.ql C28129 Uyarısı
cpp/drivers/pointer-variable-size /microsoft/windows-drivers/<Version>/drivers/general/queries/PointerVariableSize/PointerVariableSize.ql C28132 Uyarısı
cpp/drivers/pool-tag-integral /microsoft/windows-drivers/<Version>/drivers/general/queries/PoolTagIntegral/PoolTagIntegral.ql C28134 Uyarısı
cpp/drivers/role-type-correct-used /microsoft/windows-drivers/<Version>/drivers/general/queries/RoleTypeCorrectlyUsed/RoleTypeCorrectlyUsed.ql C28158 Uyarısı
cpp/drivers/routine-function-type-not-expected /microsoft/windows-drivers/<Version>/drivers/general/queries/RoutineFunctionTypeNotExpected/RoutineFunctionTypeNotExpected.ql C28127 Uyarısı
cpp/drivers/str-safe /microsoft/windows-drivers/<Version>/drivers/general/queries/StrSafe/StrSafe.ql C28146 Uyarısı
cpp/drivers/strict-type-match /microsoft/windows-drivers/<Version>/drivers/general/queries/StrictTypeMatch/StrictTypeMatch.ql C28139 Uyarısı

Microsoft/windows-drivers paketinden WDM sürücü sorguları

Kimlik Yer Kod Analizi Uyarısı
cpp/drivers/illegal-field-access /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess/IllegalFieldAccess.ql C28128 Uyarısı
cpp/drivers/illegal-field-access-2 /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldAccess2/IllegalFieldAccess2.ql C28175 Uyarısı
cpp/drivers/illegal-field-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/IllegalFieldWrite/IllegalFieldWrite.ql C28176 Uyarısı
cpp/drivers/init-not-cleared /microsoft/windows-drivers/<Version>/drivers/wdm/queries/InitNotCleared/InitNotCleared.ql C28152 Uyarısı
cpp/drivers/kewaitlocal-requires-kernel-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/KeWaitLocal/KeWaitLocal.ql C28135 Uyarısı
cpp/drivers/multiple-paged-code /microsoft/windows-drivers/<Version>/drivers/wdm/queries/MultiplePagedCode/MultiplePagedCode.ql C28171 Uyarısı
cpp/drivers/ob-reference-mode /microsoft/windows-drivers/<Version>/drivers/wdm/queries/ObReferenceMode/ObReferenceMode.ql C28126 Uyarısı
cpp/drivers/opaque-mdl-use /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlUse/OpaqueMdlUse.ql İlişkili CA denetimi yok
cpp/drivers/opaque-mdl-write /microsoft/windows-drivers/<Version>/drivers/wdm/queries/OpaqueMdlWrite/OpaqueMdlWrite.ql C28145 Uyarısı
cpp/drivers/pending-status-error /microsoft/windows-drivers/<Version>/drivers/wdm/queries/PendingStatusError/PendingStatusError.ql C28143 Uyarısı
cpp/drivers/wrong-dispatch-table-assignment /microsoft/windows-drivers/<Version>/drivers/wdm/queries/WrongDispatchTableAssignment/WrongDispatchTableAssignment.ql C28168 Uyarısı, C28169 Uyarısı

Microsoft/windows-drivers paketinden genel C++ sorguları

Kimlik Yer Yaygın Zayıflık Numaralandırması / Kod Analizi uyarısı
cpp/paddingbyteinformationdisclosure /microsoft/windows-drivers//<Version>microsoft/Likely Bugs/Boundary Violations/PaddingByteInformationDisclosure.ql Mevcut Değil
cpp/badoverflowguard /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/BadOverflowGuard.ql Mevcut Değil
cpp/infiniteloop /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Conversion/InfiniteLoop.ql Mevcut Değil
cpp/kullanımdan sonra /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/Memory Management/UseAfterFree/UseAfterFree.ql Mevcut Değil
cpp/uninitializedptrfield /microsoft/windows-drivers/<Version>/microsoft/Likely Bugs/UninitializedPtrField.ql Mevcut Değil
cpp/weak-crypto/cng/hardcoded-iv /microsoft/windows-drivers/<Version>/microsoft/Security/Crytpography/HardcodedIVCNG.ql Mevcut Değil

Microsoft/cpp-queries paketinden genel C++ sorguları

Kimlik Yer Ortak Zayıflık Numaralandırması
cpp/aralık-kontrolü-öncesi-ofset-kullanımı /microsoft/cpp-queries/<Version>/Best Practices/Likely Errors/OffsetUseBeforeRangeCheck.ql CWE-120, CWE-125
cpp/tamsayı-çarpmayı-uzun-tipe-dönüştürme /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-aritmetic /microsoft/cpp-queries/<Version>/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql CWE-119, CWE-843
cpp/incorrect-not-operator-usage /microsoft/cpp-queries/<Version>/Muhtemel Hatalar/Muhtemel Yazım Hataları/Yanlış Değil Operatörü Kullanımı.ql CWE-480
cpp/suspicious-sizeof /microsoft/cpp-queries/<Version>/Likely Bugs/Memory Management/SuspiciousSizeof.ql CWE-467
cpp/başlatılmamış-yerel /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/koşullu olarak başlatılmamış-değişken /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/şüpheli-işaretçi-ölçekleme-boş /microsoft/cpp-queries/<Version>/Security/CWE/CWE-468/IncorrectPointerScalingVoid.ql CWE-468
cpp/potansiyel-tehlikeli-işlev /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

Zorunlu Çalıştırılacak Sorgular

mustrun.qls paketi, WHCP sertifikasını geçirmek için çalıştırılması gereken sorgular içerir. Olası hatalı pozitif sonuçlar nedeniyle bu sorguların düzeltilmesi gerekmeyebilir, ancak sonuçlarının gözden geçirilmesi ve gerçek hataların düzeltilmesi gerekir. Bu denetimler için sonuç olmadan oluşturulan DVL, Statik Araçlar Logo testi başarısız olur.

Windows 11, sürüm 26H1 için mustrun.qls ve recommended.qls tarafından sunulan sorgular aynıdır.