共用方式為


驅動程式驗證器安全性檢查

驅動程式驗證器的 [安全性檢查] 選項會監視驅動程式是否有可能導致安全性弱點的常見錯誤。 從 Windows Vista 開始,此選項可供使用。

具體而言,「安全性檢查」選項會尋找下列不當驅動程式行為:

  • 呼叫核心 ZwXxx 常式時以使用者模式位址作為參數。 當驅動程式呼叫任何 ZwXxx 常式時,驅動程式驗證器會檢查沒有任何參數是使用者模式位址。 呼叫任何 ZwXxx 常式時,目前的KPROCESSOR_MODE會變成 KernelMode,而傳遞至該常式的任何參數都會被視為核心模式位址。 因此,驅動程式必須檢查從應用程式收到的任何使用者模式緩衝區,並將它放入核心模式下的記憶體(例如,在核心堆疊上配置的緩衝池或資料結構中),才能呼叫核心 ZwXxx 例程。 驅動程式必須使用擷取的緩衝區,而不是使用者模式緩衝區作為 ZwXxx 常式的參數。

  • 呼叫內核 ZwXxx 常式,使用格式不正確的 UNICODE_STRINGs 作為參數。 當驅動程式呼叫任何 ZwXxx 常式時,驅動程式驗證器會檢查任何UNICODE_STRING值的參數。 驅動程式驗證器在這類字串中偵測到的常見錯誤包括:

    • 緩衝區欄位指向使用者模式記憶體。
    • Length 或 MaximumLength 參數不正確。 例如, MaximumLength<Length。 或者這些值中的一個或兩個是奇數。 這兩個值都必須一律為偶數,因為它們代表用來表示 Unicode 字串的位元組數。
  • 呼叫核心例程 ZwXxx 時使用不正確的 OBJECT_ATTRIBUTES 結構體作為參數。 當驅動程式呼叫任何 ZwXxx 常式時,驅動程式驗證器會檢查OBJECT_ATTRIBUTE結構的任何參數。 每個OBJECT_ATTRIBUTE結構參數的成員都會受到上述使用者模式位址和UNICODE_STRING值的相同檢查。

  • Irp->RequestorMode 和 I/O 要求參數不一致。 每當 Irp-RequestorMode> 設定為 KernelMode 時,驅動程式驗證器都會檢查,確保沒有 I/O 要求參數 Irp-AssociatedIrp.SystemBuffer>Irp-UserBuffer> 是使用者模式位址。

從 Windows 7 開始,當您啟用任何驅動程式驗證器選項時,驅動程式驗證器會檢查下列驅動程式行為:

物件參考計數器從 0 變更為 1。 當 Windows 核心物件管理員建立物件時,例如 File 物件或 Thread 物件,新物件的參考計數器會設定為 1。 呼叫系統函式,例如 ObReferenceObjectByPointerObReferenceObjectByHandle 會增加參考計數器。 針對相同物件呼叫 ObDereferenceObject 的每次呼叫都會遞減參考計數器。

在參考計數器達到 0 值之後,物件就符合釋放的資格。 物件管理程式可能會立即釋放它,或稍後可能會釋放它。 驅動程式驗證器會檢查相同物件的 ObReferenceObjectByPointerObReferenceObject 的後續呼叫。 這些呼叫會將參考計數器從 0 變更為 1,這表示驅動程式已遞增已釋放物件的參考計數器。 這總是不正確的,因為它可能會損壞其他記憶體配置。

啟用此選項

您可以使用驅動程式驗證器管理員或 Verifier.exe 命令列,啟用一或多個驅動程式的 [安全性檢查] 選項。 如需詳細資訊,請參閱 選取驅動程式驗證器選項

  • 使用指令列

    在命令列中,「安全檢查」選項由 位元 8 (0x100) 表示。 若要啟動安全檢查,請使用旗標值 0x100 或將0x100新增至旗標值。 例如:

    verifier /flags 0x100 /driver MyDriver.sys
    

    重新啟動計算機後,該選項將處於活動狀態。

    從 Windows Vista 開始,您也可以將 /volatile 參數新增至命令,以啟用和停用安全性檢查,而無需重新啟動電腦。 例如:

    verifier /volatile /flags 0x100 /adddriver MyDriver.sys
    

    此設定會立即生效,但在您關閉或重新啟動電腦時會遺失。 如需詳細資訊,請參閱 使用動態設定

    「安全檢查」選項也包含在標準設定中。 例如:

    verifier /standard /driver MyDriver.sys
    
  • 使用驅動程式驗證器管理員

    1. 啟動驅動程式驗證器管理員。 在命令提示字元視窗中輸入 驗證程式
    2. 選擇 [[為程式代碼開發人員建立自訂設定]],然後按一下 [下一步]。
    3. 選擇 從完整清單中選取個別設定
    4. 選取 [安全性檢查]。

    安全檢查功能也包含在標準設定中。 若要在驅動程式驗證器管理員中使用這項功能,請按兩下 [建立標準設定]。