Controlli di sicurezza del verificatore driver
L'opzione Verifica sicurezza del driver monitora il driver per errori comuni che possono causare vulnerabilità di sicurezza. Questa opzione è disponibile a partire da Windows Vista.
In particolare, l'opzione Controlli di sicurezza cerca il comportamento errato del driver seguente:
Chiamata alle routine zwxxx del kernel con indirizzi in modalità utente come parametri. Quando il driver chiama qualsiasi routine ZwXxx , Driver Verifier verifica che nessuno dei parametri siano indirizzi in modalità utente. Quando si chiama qualsiasi routine ZwXxx , l'KPROCESSOR_MODE corrente diventa KernelMode e tutti i parametri passati a tale routine vengono considerati come se siano indirizzi in modalità kernel. Pertanto, il driver deve eseguire il probe di tutti i buffer in modalità utente ricevuti dalle applicazioni e inserirlo nella memoria in modalità kernel ,ad esempio in un blocco di pool o in una struttura di dati allocata nello stack del kernel, prima di chiamare la routine Zw Xxx del kernel. Il driver deve usare il buffer acquisito anziché il buffer in modalità utente come parametro della routine Zw Xxx.
Chiamata alle routine zwxxx del kernel con UNICODE_STRINGs non formattate come parametri. Quando il driver chiama qualsiasi routine ZwXxx , Driver Verifier controlla tutti i parametri UNICODE_STRING valori. Gli errori comuni rilevati da Driver Verifier in tali stringhe includono:
- Il campo del buffer punta alla memoria in modalità utente.
- I parametri Length o MaximumLength non sono corretti. Ad esempio, Lunghezza massimalength<. O uno o entrambi questi valori è un numero dispari. Entrambi questi valori devono essere sempre anche perché rappresentano il numero di byte usati per rappresentare una stringa Unicode.
Chiamata di routine zwxxx del kernel con una struttura di OBJECT_ATTRIBUTES non corretta come parametro. Quando il driver chiama qualsiasi routine ZwXxx , Driver Verifier controlla tutti i parametri OBJECT_ATTRIBUTE strutture. I membri di ogni parametro struttura OBJECT_ATTRIBUTE vengono sottoposti agli stessi controlli per gli indirizzi in modalità utente e i valori UNICODE_STRING descritti in precedenza.
Parametri Irp-RequestorMode> e I/O Request incoerenti. Ogni volta che l'Irp-> RequestorMode è impostato su KernelMode, Driver Verifier verifica che non siano presenti parametri di richiesta di I/O, Irp-AssociatedIrp.SystemBuffer> o Irp-UserBuffer>, sono indirizzi in modalità utente.
A partire da Windows 7, quando si abilita un'opzione Di verifica driver, driver verifica il comportamento del driver seguente:
Il contatore dei riferimenti a oggetti cambia da 0 a 1. Quando il gestore oggetti kernel di Windows crea un oggetto, ad esempio un oggetto File o un oggetto Thread, il contatore di riferimento del nuovo oggetto è impostato su 1. Chiamate alle funzioni di sistema, ad esempio ObReferenceObjectByPointer o ObReferenceObjectByHandle incrementa il contatore di riferimento. Ogni chiamata a ObDereferenceObject per lo stesso oggetto decrementa il contatore di riferimento.
Dopo che il contatore di riferimento raggiunge il valore 0, l'oggetto diventa idoneo per essere liberato. Il gestore oggetti potrebbe liberarlo immediatamente oppure potrebbe liberarlo in un secondo momento. Il verificatore driver verifica le chiamate successive a ObReferenceObjectByPointer e ObReferenceObject per lo stesso oggetto. Queste chiamate modificano il contatore di riferimento da 0 a 1, il che significa che il driver ha incrementato il contatore di riferimento di un oggetto già liberato. Questo errore non è sempre corretto perché può danneggiare altre allocazioni di memoria.
Attivazione di questa opzione
È possibile attivare l'opzione Controlli di sicurezza per uno o più driver usando Gestione verifica driver o la riga di comando Verifier.exe. Per informazioni dettagliate, vedere Selezione delle opzioni di verifica driver.
Tramite la riga di comando
Nella riga di comando l'opzione Controlli di sicurezza è rappresentata da Bit 8 (0x100). Per attivare Controlli di sicurezza, usare un valore flag di 0x100 o aggiungere 0x100 al valore del flag. Ad esempio:
verifier /flags 0x100 /driver MyDriver.sys
L'opzione sarà attiva dopo il riavvio del computer.
A partire da Windows Vista, è anche possibile attivare e disattivare Controlli di sicurezza senza riavviare il computer aggiungendo il parametro /volatile al comando. Ad esempio:
verifier /volatile /flags 0x100 /adddriver MyDriver.sys
Questa impostazione è efficace immediatamente, ma viene persa quando si arresta o si riavvia il computer. Per informazioni dettagliate, vedere Uso delle impostazioni volatili.
L'opzione Controlli di sicurezza è inclusa anche nelle impostazioni standard. Ad esempio:
verifier /standard /driver MyDriver.sys
Uso di Gestione verifica driver
- Avviare Gestione verifica driver. Digitare Verifica in una finestra del prompt dei comandi.
- Selezionare Crea impostazioni personalizzate (per gli sviluppatori di codice) e quindi fare clic su Avanti.
- Selezionare Seleziona singole impostazioni da un elenco completo.
- Selezionare Controlli di sicurezza.
La funzionalità Controlli di sicurezza è inclusa anche nelle impostazioni standard. Per usare questa funzionalità in Gestione verifica driver, fare clic su Crea impostazioni standard.