共用方式為


滲透測試 (裝置基本概念)

裝置基本概念滲透測試會執行各種形式的輸入攻擊,這是安全性測試的重要元件。 攻擊和滲透測試可協助識別軟體介面中的弱點。

滲透

滲透測試包含兩種測試類別:模糊測試和 I/O SpyI/O 攻擊 測試。 模糊測試也是 裝置路徑 Exceriser 測試控管的功能。

測試 描述

停用 I/O Spy

停用 1 或更多裝置上的 I/O Spy

測試二進位檔: Devfund_IOSpy_DisableSupport.wsc

測試方法: DisableIoSpy

參數: - 請參閱 裝置基本概念測試參數

DQ

顯示已啟用 I/O Spy 的裝置

顯示已啟用 I/O Spy 的裝置。

測試二進位檔: Devfund_IOSpy_DisplayEnabledDevices.wsc

測試方法: DisplayIoSpyDevices

啟用 I/O Spy

在一或多個裝置上啟用 I/O Spy

測試二進位檔: Devfund_IOSpy_EnableSupport.wsc

測試方法: EnableIoSpy

參數: - 請參閱 裝置基本概念測試參數

DQ

DFD - 指定 IoSpy 資料檔案的路徑。 預設位置為 %SystemDrive%\DriverTest\IoSpy

模糊 Misc API 測試

模糊 Misc API 測試是決定驅動程式是否可以處理來自核心模式驅動程式的各種常見呼叫的測試。

測試包含下列測試:

  • 呼叫 ZwReadFileZwWriteFile、指定有效的資料緩衝區指標、不同的長度 (包括零) ,以及不同的位元組位移,包括零、-1 和 64 位位元組位移。

  • 取消 I/0 並排清緩衝區的呼叫。

  • 一系列的目錄查詢呼叫,使用具有有效使用者資料緩衝區指標的一般檔案資訊類別,以及包含零) (不同的緩衝區長度。

  • 目錄查詢呼叫類似于由執行于 Virtual DOS Machine (VDM) 的程式所發出的呼叫。

  • 呼叫 以擷取具有不同緩衝區大小和長度之檔案的擴充屬性。

  • 呼叫來建立和關閉區段物件,其區段頁面保護和區段配置屬性 (認可區段、影像檔區段) 。

  • 鎖定和解除鎖定檔案的呼叫。

  • 呼叫 以擷取磁片區的配額專案。

  • 檔案屬性測試,這是一系列的檔案屬性查詢,具有 ObjectAttributes 結構的有效指標。

    檔案屬性測試具有選擇性的零長度測試。 擷取檔案的擴充屬性時,模糊測試會將空白 (零長度) 查詢和不正確緩衝區位址傳遞給驅動程式。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoMiscAPITest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

具有零長度查詢測試的模糊 Misc API

此測試會執行與模糊 Misc API 測試相同的測試,這次會在嘗試擷取檔案的擴充屬性時,將空白 (零長度) 查詢和不正確緩衝區位址傳遞給驅動程式。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoMiscAPIWithZeroLengthTest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

模糊開啟和關閉測試

此測試會執行數千個 create-open-close 序列。

如需此測試的詳細資訊,請參閱 關於模糊開啟和關閉測試

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoOpenCloseTest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

模糊查詢和設定檔案資訊測試

此測試會發出呼叫來擷取和變更裝置的物件、檔案和磁片區資訊。

查詢和設定檔案資訊測試期間,模糊測試會發出呼叫,以擷取和變更 基本開啟作業 和其他開啟作業所開啟之裝置的物件、檔案和磁片區資訊,包括模糊子開啟測試所執行的作業。

模糊測試會發出每個查詢或設定呼叫至少 1024 次,並具有有效的緩衝區和各種緩衝區長度和檔案資訊類別。 每個類型的一個要求也會以不正確緩衝區指標和零緩衝區長度傳送。

如果您使用 ChangeBufferProtectionFlags 參數來設定保護選項,模糊測試會在每個查詢中變更緩衝區的安全性設定,並設定呼叫。

此測試也會執行模糊子開啟測試。

此測試會使用 ZwQueryInformationFileZwSetInformationFileZwQueryVolumeInformationFileZwSetVolumeInformationFile 函式。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoQueryAndSetFileInformationTest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

模糊查詢和設定安全性測試

此測試會發出呼叫以擷取安全性描述元,並變更裝置的安全性狀態。

查詢和設定安全性測試期間,模糊測試會發出呼叫以擷取安全性描述元,並變更 基本開啟作業 和其他開啟作業所開啟之裝置的安全性狀態,包括模糊子開啟測試所執行的作業。

模糊測試會發出每個查詢或設定呼叫至少 1024 次,其中包含有效的緩衝區,以及各種緩衝區長度和安全性資訊類型, (OWNER_SECURITY_INFORMATION、GROUP_SECURITY_INFORMATION、DACL_SECURITY_INFORMATION、SACL_SECURITY_INFORMATION,以及沒有資訊類型) 。 每個類型的一個要求也會以不正確緩衝區指標和零緩衝區長度傳送。

如果您使用 ChangeBufferProtectionFlags 參數來設定保護選項,模糊測試會在每個查詢中變更緩衝區的安全性設定,並設定呼叫。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoQueryAndSetSecurityTest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

模糊隨機 FSCTL 測試 /模糊隨機 IOCTL 測試

此測試會使用函式代碼、裝置類型、資料傳輸方法和從指定值範圍隨機選取的存取需求,發出 DeviceIoControl 函式的一系列呼叫。 呼叫包括輸入和輸出緩衝區,其有效和不正確緩衝區指標和長度,以及隨機產生的內容。

在隨機測試期間,模糊測試會使用函式代碼、裝置類型、資料傳輸方法和從指定值範圍隨機選取的存取需求,發出 DeviceIoControl 函式的一系列呼叫。 呼叫包括輸入和輸出緩衝區,其有效和不正確緩衝區指標和長度,以及隨機產生的內容。

模糊測試會在 基本開啟作業 和其他開啟測試期間開啟的所有裝置上執行隨機測試。 您可以使用下列參數來自訂此測試:

  • 使用 MinFunctionCodeMaxFunctionCode 來指定呼叫中使用的 IOCTL 或 FSCTL 函式程式碼範圍

  • 使用 MinDeviceTypeMaxDeviceType 來指定呼叫中使用的裝置類型範圍

  • 使用 SeedNumber 指定亂數產生常式的種子編號。

模糊測試用來為測試產生亂數的函式會使用 種子編號,這是亂數產生演算法的起始數位。 若要重現測試條件,請使用 種子編號 參數來指定原始測試試用版中使用的種子編號。

量身訂做隨機測試包含在隨機測試中。 量身打造的隨機測試會使用隨機測試結果,更詳細地檢查驅動程式對 IOCTL 或 FSCTL 要求的回應。 量身打造的隨機測試會探查隨機測試遺漏的區域,以及驅動程式未根據隨機測試呼叫傳回的狀態如預期回應的區域。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoRandomIOCTLTest、DoRandomFSCTLTest

參數: - 請參閱 裝置基本概念測試參數

MinInBuffer

MaxInBuffer

MinOutBuffer

MaxOutBuffer

MaxRandomCalls

MaxTailoredCalls

SeedNumber

MinDeviceType

MaxDeviceType

MinFunctionCode

MaxFunctionCode

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

模糊子開啟測試

測試會執行一系列快速呼叫,以開啟裝置命名空間中的物件。 在這些呼叫中,它會傳遞以裝置開頭的路徑,並包含不同長度和內容的任意名稱和非授權字串。

相對開啟測試期間, (也稱為 「子開啟測試 」,) 模糊測試會嘗試開啟裝置 命名空間中的物件。

在此測試期間,模糊測試會執行一系列快速呼叫,以使用 基本開啟作業 和其他開啟作業開啟之裝置命名空間中的物件。 在這些呼叫中,Fuzz 測試會通過以裝置開頭的路徑,並包含長度和內容的任意名稱和非授權字串。

此測試會決定驅動程式或檔案系統在其命名空間中如何管理開啟的要求。 特別是,如果驅動程式在其命名空間中不支援開啟要求,則必須藉由失敗要求來防止未經授權的存取,或在使用IoCreateDevice 或 IoCreateDeviceSecure來建立裝置物件時設定FILE_DEVICE_SECURE_OPEN裝置特性。

如需裝置命名空間的詳細資訊,請參閱 控制裝置命名空間存取

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoSubOpensTest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

使用 Streams 測試開啟模糊子

此測試會嘗試在裝置上開啟各種具名資料流程。 此測試會使用一系列任意資料流程名稱,其中的內容和字元可能適用于某些裝置上的其他用途。

串流測試期間,模糊測試會嘗試在裝置上開啟各種具名資料流程。 測試會使用一系列任意串流名稱,其中的內容和字元可能適用于某些裝置上的其他用途。 此測試會判斷驅動程式是否可以正確處理資料流程要求,特別是當驅動程式匯出不支援或預期資料流程的裝置時。

具名資料流程是檔案物件的屬性。 您可以藉由寫入檔案名、冒號和資料流程的名稱來指定具名資料流程,例如「File01.txt: AccessDate」,其中 AccessDate 是具名資料流程,也就是File01.txt檔案的屬性。

模糊測試會記錄測試中使用的資料流程名稱。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoSubOpensWithStreamsTest

參數: - 請參閱 裝置基本概念測試參數

DoPoolCheck

DQ

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

模糊Zero-Length緩衝區 FSCTL 測試/模糊Zero-Length緩衝區 IOCTL 測試

此測試會發出 DeviceIoControl 函式的一系列呼叫,其輸入和輸出緩衝區長度為 0。 此測試會使用不同的函式程式碼、裝置類型、資料傳輸方法和存取需求來產生不同的檔案系統控制程式代碼。

在Zero-Length緩衝區測試期間,模糊測試會發出 一系列對 DeviceIoControl 函 式的呼叫,且輸入和/或輸出緩衝區長度為 0。 測試會使用不同的函式程式碼、裝置類型、資料傳輸方法和存取需求來產生不同的 I/O 控制程式碼。 如需 I/O 控制項程式碼內容的相關資訊,請參閱 定義 I/O 控制項代碼

若要測試驅動程式處理不正確緩衝區指標,這些使用者模式呼叫中的緩衝區指標會指定核心虛擬位址空間中的高位址,例如 0xFFFFFC00) 。

模糊測試會在基本和其他開啟測試期間開啟的所有裝置上執行Zero-Length Buffer 測試。 您可以使用 MinFunctionCodeMaxFunctionCode 命令參數來自訂此測試,以指定呼叫和 MinDeviceTypeMaxDeviceType 中使用的 IOCTL 或 FSCTL 函式程式碼範圍,以指定呼叫中使用的裝置類型範圍。

測試二進位檔: Devfund_DevicePathExerciser.dll

測試方法: DoZeroLengthBufferIOCTLTest、 DoZeroLengthBufferFSCTLTest

參數: - 請參閱 裝置基本概念測試參數

MinDeviceType

MaxDeviceType

MinFunctionCode

MaxFunctionCode

DoPoolCheck

TestCycles

ChangeBufferProtectionFlags

Impersonate

FillZeroPageWithNull

執行 I/O 攻擊

在指定的裝置或裝置上執行 I/O 攻擊

測試二進位檔: Devfund_IOAttack_DeleteDataFile.wsc

測試方法: RunIoAttack

參數: - 請參閱 裝置基本概念測試參數

DQ

關於模糊開啟和關閉測試

模糊開啟和關閉測試採用數種開啟和關閉指定裝置或裝置實例的不同方式: 基本開啟作業直接裝置開啟作業,以及 開啟和關閉測試

基本開啟作業

基本開啟作業期間,模糊測試會重複開啟, (使用不同的方法和選項,建立指定裝置或指定驅動程式所匯出之裝置的) 實例。

模糊測試一律會執行基本開啟作業。 您不需要選取它們,也無法從測試會話中排除它們。

模糊測試會呼叫適用于裝置的系統服務 (ZwXxx 常式) ,以在使用者模式中執行所有開啟作業。 如果開啟呼叫傳回裝置的控制碼,模糊測試會使用控制碼來執行針對測試會話選取的其他裝置測試。

基本開放式作業有五種類型:

  • 標準開啟。 模糊測試會以非同步方式開啟裝置,並只指定原生裝置名稱。

  • 以新增的反斜線開啟。 模糊測試會發出裝置名稱的開啟呼叫,後面接著反斜線 () ,例如 \device\cdrom\,就像呼叫是在裝置內開啟根目錄一樣。

    這項作業會決定驅動程式或檔案系統在其命名空間中如何管理開啟的要求。 特別是,如果裝置不支援在其命名空間中開啟要求,則驅動程式必須藉由失敗要求來防止未經授權的存取,或在呼叫IoCreateDevice 或 IoCreateDeviceSecure時設定FILE_DEVICE_SECURE_OPEN裝置特性來建立裝置物件。

  • 以具名管道開啟。 模糊測試會開啟裝置,並建立裝置的具名管道。 存取參數 (ShareAccess) 一開始設定為讀取和寫入,但如果要求失敗,則會調整。 如果裝置不支援具名管道,它應該會失敗要求。

  • 以 mailslot 開啟。 模糊測試會將裝置開啟為 mailslot。 如果裝置不支援這種類型的連線,它應該會失敗要求。

  • 以樹狀結構連接開啟。 模糊測試會將裝置開啟為樹狀結構連線,以用於遠端存取。 存取參數 (ShareAccess) 一開始設定為讀取和寫入,但如果要求失敗,則會調整。 如果裝置不支援這種類型的連線,它應該會失敗要求。

開啟呼叫中使用的參數會因應裝置的特性而有所不同,而且可能會讓呼叫成功。 例如,如果基本開啟作業失敗,因為呼叫不符合裝置的安全性需求,模糊測試會重複開啟作業,並要求較少的存取權。 例如,如果要求寫入存取權的開啟作業傳回安全性違規錯誤,則會重複開啟並要求讀取權限。

直接裝置開啟作業

直接裝置開啟作業期間,模糊測試會將裝置直接開啟為裝置,而不是檔案系統中的檔案。 直接裝置開啟作業一律為同步。 如果呼叫成功,模糊測試會使用提供的控制碼來執行其他選取的測試。

開啟和關閉測試

開啟和關閉測試期間,模糊測試會建立數個執行緒,每個執行緒都會執行數千個建立-open-close 序列。 這可測試驅動程式處理大量不尋常、簡單且預期的通話的能力。

「開啟」和「關閉測試」會使用相同的選項,在 基本開啟作業 和以新增的反斜線測試中開啟,並在這些測試之前執行。

如何使用 Visual Studio 在執行時間測試驅動程式

如何選取及設定裝置基本概念測試

裝置基本概念測試

提供的 WDTF 簡單 I/O 外掛程式

如何從命令提示字元在執行時間測試驅動程式