Test di penetrazione (nozioni fondamentali sul dispositivo)
I test di penetrazione dei concetti fondamentali del dispositivo eseguono varie forme di attacchi di input, che sono un componente fondamentale dei test di sicurezza. I test di attacco e penetrazione consentono di identificare le vulnerabilità nelle interfacce software.
Penetrazione
I test di penetrazione includono due categorie di test: test fuzz e test di attacco di I/O e I/O. I test Fuzz erano anche una funzionalità dello strumento di test Device Path Exceriser .
Test | Descrizione |
---|---|
Disabilita I/O Spy |
Disabilita I/O Spy su 1 o più dispositivi. Test binario: Devfund_IOSpy_DisableSupport.wsc Metodo di test: DisableIoSpy Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DQ |
Display I/O Spy-enabled Device |
Visualizzare i dispositivi con I/O Spy abilitato su di essi. Test binario: Devfund_IOSpy_DisplayEnabledDevices.wsc Metodo di test: DisplayIoSpyDevices |
Abilitare I/O Spy |
Abilitare I/O Spy su uno o più dispositivi. Test binario: Devfund_IOSpy_EnableSupport.wsc Metodo di test: EnableIoSpy Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DQ DFD : specifica il percorso del file di dati IoSpy. Il percorso predefinito è %SystemDrive%\DriverTest\IoSpy |
Test dell'API Fuzz Misc |
I test dell'API Fuzz Misc sono test che determinano se il driver può gestire un'ampia gamma di chiamate comuni dai driver in modalità kernel. I test includono i test seguenti:
File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoMiscAPITest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
API Fuzz Misc con test di query di lunghezza zero |
Questo test esegue gli stessi test del test dell'API Fuzz Misc e questa volta passa una query vuota (lunghezza zero) e un indirizzo di buffer non valido al driver durante il tentativo di recuperare gli attributi estesi di un file. File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoMiscAPIWithZeroLengthTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz open and close test |
Questo test esegue migliaia di sequenze create-open-close. Per informazioni dettagliate su questo test, vedere Informazioni sul test fuzz aperto e chiuso. File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoOpenCloseTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Test delle informazioni sui file fuzz e set file |
Questo test genera chiamate per recuperare e modificare le informazioni sull'oggetto, il file e il volume dei dispositivi. Durante il test delle informazioni su query e set file, il test Fuzz esegue chiamate per recuperare e modificare le informazioni sull'oggetto, il file e il volume dei dispositivi aperti dalle operazioni di base open operations e da altre operazioni aperte, incluse le operazioni eseguite dal test di apertura secondaria Fuzz. Il test Fuzz genera ogni query o imposta una chiamata almeno 1024 volte con un buffer valido e una varietà di lunghezze del buffer e classi di informazioni sui file. Viene inviata anche una richiesta di ogni tipo con un puntatore del buffer non valido e una lunghezza del buffer zero. Se si usa il parametro ChangeBufferProtectionFlags , che imposta l'opzione di protezione, il test Fuzz varia l'impostazione di sicurezza nel buffer in ogni query e imposta la chiamata. Questo test esegue anche il test Fuzz Sub-opens. Questo test usa le funzioni ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFile e ZwSetVolumeInformationFile . File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoQueryAndSetFileInformationTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Test di sicurezza set e query fuzz |
Questo test genera chiamate per recuperare il descrittore di sicurezza e modificare lo stato di sicurezza dei dispositivi. Durante la query e imposta test di sicurezza, il test Fuzz genera chiamate per recuperare il descrittore di sicurezza e modificare lo stato di sicurezza dei dispositivi aperti dalle operazioni di base e da altre operazioni aperte, incluse le operazioni eseguite dal test di apertura secondaria Fuzz. Il test Fuzz genera ogni query o imposta una chiamata almeno 1024 volte con un buffer valido e un'ampia gamma di lunghezze del buffer e tipi di informazioni di sicurezza (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION e nessun tipo di informazioni). Viene inviata anche una richiesta di ogni tipo con un puntatore del buffer non valido e una lunghezza del buffer zero. Se si usa il parametro ChangeBufferProtectionFlags , che imposta l'opzione di protezione, il test Fuzz varia l'impostazione di sicurezza nel buffer in ogni query e imposta la chiamata. File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoQueryAndSetSecurityTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Test CASUALE CASUALE FUZZTL /Test IOCTL casuale Fuzz |
Questo test genera una serie di chiamate alla funzione DeviceIoControl con codici di funzione, tipi di dispositivo, metodi di trasferimento dei dati e requisiti di accesso selezionati in modo casuale da un intervallo di valori specificato. Le chiamate includono buffer di input e output con puntatori e lunghezze del buffer validi e non validi e contenuto generato in modo casuale. Durante i test casuali, il test Fuzz invia una serie di chiamate alla funzione DeviceIoControl con codici di funzione, tipi di dispositivo, metodi di trasferimento dei dati e requisiti di accesso selezionati in modo casuale da un intervallo di valori specificato. Le chiamate includono buffer di input e output con puntatori e lunghezze del buffer validi e non validi e contenuto generato in modo casuale. Il test Fuzz esegue i test casuali su tutti i dispositivi aperti durante le operazioni di apertura di base e test aperti aggiuntivi. È possibile personalizzare questo test usando i parametri seguenti:
La funzione usata dal test Fuzz per generare numeri casuali per il test usa un numero di inizializzazione, un numero iniziale per l'algoritmo di generazione di numeri casuali. Per riprodurre le condizioni di test, usare il parametro numero di inizializzazione per specificare il numero di inizializzazione usato nella versione di valutazione del test originale. Un test casuale personalizzato viene incluso come parte del test casuale. Il test casuale personalizzato usa i risultati del test casuale per esaminare in modo più dettagliato la risposta dei driver alle richieste IOCTL o XAMLTL. Le aree di probe di test casuali personalizzate perse dal test casuale e quelle su cui il driver non rispondeva come previsto in base allo stato restituito dalle chiamate di test casuali. File binario di test: Devfund_DevicePathExerciser.dll Metodi di test: DoRandomIOCTLTest, DoRandomFSCTLTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo MinInBuffer MaxInBuffer MinOutBuffer MaxOutBuffer MaxRandomCalls MaxTailoredCalls SeedNumber MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Test con apertura secondaria fuzz |
Il test esegue una serie rapida di chiamate per aprire oggetti nello spazio dei nomi del dispositivo. In queste chiamate passa un percorso che inizia con il dispositivo e include nomi arbitrari e stringhe senza senso di lunghezza e contenuto variabili. Durante un test aperto relativo, noto anche come test sub-aperto, il test Fuzz tenta di aprire oggetti nello spazio dei nomi del dispositivo. Durante questo test, il test Fuzz esegue una rapida serie di chiamate per aprire oggetti nello spazio dei nomi dei dispositivi aperti usando operazioni open di base e altre operazioni aperte. In queste chiamate, il test Fuzz supera un percorso che inizia con il dispositivo e include nomi arbitrari e stringhe senza senso di lunghezza e contenuto variabili. Questo test determina il modo in cui il driver o il file system gestisce le richieste aperte nello spazio dei nomi. In particolare, se il driver non supporta le richieste aperte nello spazio dei nomi, deve impedire l'accesso non autorizzato, con esito negativo delle richieste o impostando la caratteristica del dispositivo FILE_DEVICE_SECURE_OPEN quando usa IoCreateDevice o IoCreateDeviceSecure per creare l'oggetto dispositivo. Per altre informazioni sullo spazio dei nomi di un dispositivo, vedere Controllo dell'accesso allo spazio dei nomi dei dispositivi. File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoSubOpensTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz Sub-opens with Streams test |
Questo test tenta di aprire un'ampia gamma di flussi di dati denominati nel dispositivo. Il test usa una serie di nomi di flusso arbitrari con contenuto e caratteri che potrebbero essere validi per altri usi in alcuni dispositivi. Durante il test dei flussi, il test Fuzz tenta di aprire un'ampia gamma di flussi di dati denominati nel dispositivo. I test usano una serie di nomi di flusso arbitrari con contenuto e caratteri che potrebbero essere validi per altri usi in alcuni dispositivi. Questo test determina se il driver può gestire correttamente le richieste del flusso di dati, soprattutto se il driver esporta un dispositivo che non supporta o prevede flussi di dati. Un flusso di dati denominato è un attributo di un oggetto file. È possibile specificare un flusso di dati denominato scrivendo il nome del file, i due punti e il nome del flusso di dati, ad esempio "File01.txt: AccessDate" dove AccessDate è un flusso di dati denominato, ovvero un attributo del file File01.txt. Il test Fuzz registra i nomi dei flussi usati nel test. File binario di test: Devfund_DevicePathExerciser.dll Metodo di test: DoSubOpensWithStreamsTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Test BUFFER BUFFERTL Zero-Length/Test IOCTL buffer fuzz Zero-Length |
Questo test genera una serie di chiamate alla funzione DeviceIoControl con lunghezze del buffer di input e/o output pari a 0. Il test genera codici di controllo del file system diversi usando codici di funzione diversi, tipi di dispositivo, metodi di trasferimento dei dati e requisiti di accesso. Durante il test del buffer Zero-Length, il test Fuzz invia una serie di chiamate alla funzione DeviceIoControl con lunghezze di input e/o buffer di output pari a 0. Il test genera codici di controllo I/O diversi usando codici di funzione diversi, tipi di dispositivo, metodi di trasferimento dei dati e requisiti di accesso. Per informazioni sul contenuto dei codici di controllo di I/O, vedere Definizione dei codici di controllo di I/O. Per testare la gestione del driver di puntatori del buffer non validi, i puntatori al buffer in queste chiamate in modalità utente specificano gli indirizzi elevati nello spazio di indirizzi virtuali del kernel, ad esempio 0xFFFFFC00). Il test Fuzz esegue il test Zero-Length Buffer su tutti i dispositivi aperti durante i test aperti di base e aggiuntivi. È possibile personalizzare questo test usando i parametri di comando MinFunctionCode e MaxFunctionCode per specificare l'intervallo di codici di funzione IOCTL o MDFTL usati nelle chiamate e MinDeviceType e MaxDeviceType per specificare l'intervallo di tipi di dispositivo usati nelle chiamate. File binario di test: Devfund_DevicePathExerciser.dll Metodi di test: DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Eseguire attacchi di I/O |
Esegue attacchi di I/O nel dispositivo o nei dispositivi specificati. Test binario: Devfund_IOAttack_DeleteDataFile.wsc Metodo di test: RunIoAttack Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo DQ |
Informazioni sul test fuzz aperto e di chiusura
Il test fuzz aperto e chiuso usa diversi modi per aprire e chiudere le istanze del dispositivo o dei dispositivi specificati: operazioni di apertura di base, operazioni di apertura diretta del dispositivo e test di apertura e chiusura.
Operazioni aperte di base
Durante le operazioni di apertura di base, il test Fuzz apre ripetutamente (crea) istanze dei dispositivi specificati o dei dispositivi esportati dal driver specificato usando metodi e opzioni diversi.
Il test Fuzz esegue sempre le operazioni di apertura di base. Non è necessario selezionarli e non è possibile escluderli da una sessione di test.
Il test Fuzz esegue tutte le operazioni aperte in modalità utente chiamando i servizi di sistema (Routine ZwXxx) appropriati per il dispositivo. Se una chiamata aperta restituisce un handle al dispositivo, il test Fuzz usa l'handle per eseguire gli altri test del dispositivo selezionati per la sessione di test.
Esistono cinque tipi di operazioni aperte di base:
Standard aperto. Il test Fuzz apre il dispositivo in modo asincrono e specifica solo il nome del dispositivo nativo.
Aprire con la barra rovesciata aggiunta. Il test Fuzz emette una chiamata aperta per il nome del dispositivo seguito da una barra rovesciata (), ad esempio \device\cdrom\, come se la chiamata fosse per aprire una directory radice all'interno del dispositivo.
Questa operazione determina il modo in cui il driver o il file system gestisce le richieste aperte nello spazio dei nomi. In particolare, se il dispositivo non supporta le richieste aperte nello spazio dei nomi, il driver deve impedire l'accesso non autorizzato, con esito negativo delle richieste o impostando la caratteristica del dispositivo FILE_DEVICE_SECURE_OPEN quando chiama IoCreateDevice o IoCreateDeviceSecure per creare l'oggetto dispositivo.
Aprire come named pipe. Il test Fuzz apre il dispositivo e stabilisce una named pipe al dispositivo. Il parametro di accesso (ShareAccess) viene inizialmente impostato su lettura e scrittura, ma viene modificato se la richiesta non riesce. Se il dispositivo non supporta named pipe, la richiesta avrà esito negativo.
Aprire come mailslot. Il test Fuzz apre il dispositivo come mailslot. Se il dispositivo non supporta questo tipo di connessione, la richiesta non riesce.
Aprire come connessione ad albero. Il test Fuzz apre il dispositivo come connessione ad albero da usare nell'accesso alla rete remota. Il parametro di accesso (ShareAccess) viene inizialmente impostato su lettura e scrittura, ma viene modificato se la richiesta non riesce. Se il dispositivo non supporta questo tipo di connessione, la richiesta non riesce.
I parametri usati nelle chiamate aperte variano in base alle caratteristiche del dispositivo e rendono probabile che le chiamate abbiano esito positivo. Ad esempio, se un'operazione di apertura di base non riesce perché la chiamata non soddisfa i requisiti di sicurezza del dispositivo, il test Fuzz ripete l'operazione di apertura con una richiesta di accesso minore. Ad esempio, se un'operazione aperta che ha richiesto l'accesso in scrittura restituisce un errore di violazione di sicurezza, l'apertura viene ripetuta con una richiesta di accesso in lettura.
Operazioni di apertura diretta del dispositivo
Durante le operazioni di apertura diretta del dispositivo, il test Fuzz apre direttamente il dispositivo, come dispositivo, non come file in un file system. Le operazioni direct device open sono sempre sincrone. Se la chiamata ha esito positivo, il test Fuzz usa l'handle fornito per eseguire altri test selezionati.
Aprire e chiudere il test
Durante il test Open e Close, il test Fuzz crea diversi thread, ognuno dei quali esegue migliaia di sequenze create-open-close. Questo verifica la capacità del conducente di gestire un volume straordinario di chiamate altrimenti semplici e previste.
Il test Apri e Chiudi usa le stesse opzioni usate nelle operazioni aperte di base e apri con i test della barra rovesciata aggiunta e vengono eseguiti subito prima di questi test.
Argomenti correlati
Come testare un driver in fase di esecuzione con Visual Studio
Come selezionare e configurare i test dei concetti fondamentali del dispositivo
Test fondamentali del dispositivo
Sono stati forniti plug-in I/O semplici WDTF
Come testare un driver in fase di esecuzione da un prompt dei comandi