Condividi tramite


Controlli di sicurezza del driver verifier

L'opzione Controlli di sicurezza di Driver Verifier monitora il driver per individuare 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 non corretto del driver seguente:

  • Chiamata delle routine del kernel ZwXxx con indirizzi in modalità utente come parametri. Quando il driver chiama qualsiasi routine ZwXxx , Driver Verifier verifica che nessuno dei parametri sia indirizzi in modalità utente. Quando si chiama qualsiasi routine ZwXxx , il KPROCESSOR_MODE corrente diventa KernelMode e tutti i parametri passati a tale routine vengono considerati come se fossero indirizzi in modalità kernel. Di conseguenza, il driver deve verificare tutti i buffer in modalità utente ricevuti dalle applicazioni e trasferirli nella memoria del kernel (ad esempio, in un blocco di pool o in una struttura di dati allocata nello stack del kernel) prima di chiamare la routine ZwXxx del kernel. Il driver deve usare il buffer acquisito anziché il buffer in modalità utente come parametro della routine ZwXxx .

  • Chiamata di routine kernel ZwXxx con UNICODE_STRING in formato non valido come parametri. Quando il driver chiama una routine ZwXxx qualsiasi, Driver Verifier controlla tutti i parametri che sono valori di tipo UNICODE_STRING. Gli errori comuni rilevati da Driver Verifier in tali stringhe includono:

    • Il campo del buffer fa riferimento alla memoria in modalità utente.
    • I parametri Length o MaximumLength non sono corretti. Ad esempio , MaximumLength<Length. Oppure uno o entrambi questi valori sono un numero dispari. Entrambi questi valori devono essere sempre pari perché rappresentano il numero di byte utilizzati per rappresentare una stringa Unicode.
  • Richiamo delle routine ZwXxx del kernel con una struttura OBJECT_ATTRIBUTES errata come parametro. Quando il driver chiama una routine ZwXxx, Driver Verifier controlla i parametri che sono strutture OBJECT_ATTRIBUTE. I membri di ogni parametro della 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 richiesta I/O non coerenti. Ogni volta che 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 Verifier verifica il comportamento del driver seguente:

Il contatore dei riferimenti agli oggetti cambia da 0 a 1. Quando gestione 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 a funzioni di sistema come ObReferenceObjectByPointer o ObReferenceObjectByHandle incrementano 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 o liberarlo in un secondo momento. Driver Verifier verifica la presenza di 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.

l'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 del Verificatore Driver.

  • Uso della riga di comando

    Nella riga di comando, l'opzione Controlli di sicurezza è rappresentata da Bit 8 (0x100).At the command line, the Security Checks option is represented by Bit 8 (0x100). Per attivare i controlli di sicurezza, usare un valore flag di 0x100 o aggiungere 0x100 al valore del flag. Per 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 i controlli di sicurezza senza riavviare il computer aggiungendo il parametro /volatile al comando. Per esempio:

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

    Questa impostazione è effettiva immediatamente, ma viene persa quando si arresta o si riavvia il computer. Per informazioni dettagliate, vedere Uso di impostazioni volatili.

    L'opzione Controlli di sicurezza è inclusa anche nelle impostazioni standard. Per esempio:

    verifier /standard /driver MyDriver.sys
    
  • Uso del Driver Verifier Manager

    1. Avviare il Manager verifica driver. Digitare Verifier in una finestra del Prompt dei Comandi.
    2. Selezionare Crea impostazioni personalizzate (per sviluppatori di codice) e quindi fare clic su Avanti.
    3. Selezionare Selezionare le singole impostazioni da un elenco completo.
    4. Selezionare Controlli di sicurezza.

    La funzionalità Controlli di sicurezza è inclusa anche nelle impostazioni standard. Per usare questa funzionalità in Gestione driver verifier, fare clic su Crea impostazioni standard.