Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A opção Verificações de Segurança do Verificador de Driver monitora o driver em busca de erros comuns que possam resultar em vulnerabilidades de segurança. Esta opção está disponível a partir do Windows Vista.
Especificamente, a opção Verificações de segurança procura o seguinte comportamento inadequado do driver:
Chamando rotinas ZwXxx do kernel com endereços de modo de usuário como parâmetros. Quando o driver chama qualquer rotina ZwXxx , o Verificador de Driver verifica se nenhum dos parâmetros são endereços de modo de usuário. Ao chamar qualquer rotina ZwXxx , o KPROCESSOR_MODE atual se torna KernelMode e todos os parâmetros passados para essa rotina são tratados como se fossem endereços de modo kernel. Assim, o driver deve sondar quaisquer buffers de modo de usuário recebidos de aplicativos e colocá-los na memória de modo kernel (por exemplo, em um bloco de pool ou estrutura de dados alocada na pilha do kernel) antes de chamar a rotina ZwXxx do kernel. O driver deve usar o buffer capturado em vez do buffer de modo de usuário como um parâmetro da rotina ZwXxx .
Chamar rotinas ZwXxx do kernel usando parâmetros UNICODE_STRINGs malformados. Quando o driver chama qualquer rotina ZwXxx, o Verificador de Controladores verifica todos os parâmetros que são valores UNICODE_STRING. Os erros comuns detetados pelo Verificador de Driver em tais cadeias de caracteres incluem:
- O campo de buffer aponta para a memória do modo de usuário.
- Os parâmetros Length ou MaximumLength estão incorretos. Por exemplo, MaximumLength<Length. Ou um ou ambos os valores é um número ímpar. Ambos os valores devem ser sempre iguais porque representam o número de bytes usados para representar uma cadeia de caracteres Unicode.
Chamando rotinas ZwXxx do kernel com uma estrutura de OBJECT_ATTRIBUTES incorreta como parâmetro. Quando o driver chama qualquer rotina ZwXxx, o Verificador de Driver verifica todos os parâmetros que são estruturas OBJECT_ATTRIBUTE. Os membros de cada parâmetro de estrutura OBJECT_ATTRIBUTE são submetidos às mesmas verificações para endereços de modo de usuário e valores de UNICODE_STRING descritos acima.
Parâmetros Irp-RequestorMode> e I/O Request inconsistentes. Sempre que o Irp-RequestorMode> é definido como KernelMode, o Verificador de Driver verifica se nenhum parâmetro de solicitação de E/S, Irp-AssociatedIrp.SystemBuffer> ou Irp-UserBuffer>, são endereços de modo de usuário.
A partir do Windows 7, quando você habilita qualquer opção Verificador de driver, o verificador de driver verifica o seguinte comportamento de driver:
O contador de referência de objeto muda de 0 para 1. Quando o gerenciador de objetos do kernel do Windows cria um objeto, como um objeto File ou um objeto Thread, o contador de referência do novo objeto é definido como 1. Chamadas para funções do sistema, como ObReferenceObjectByPointer ou ObReferenceObjectByHandle , incrementam o contador de referência. Cada chamada para ObDereferenceObject para o mesmo objeto diminui o contador de referência.
Depois que o contador de referência atinge o valor 0, o objeto se torna elegível para ser liberado. O gerenciador de objetos pode liberá-lo imediatamente ou liberá-lo mais tarde. O Verificador de Driver verifica chamadas subsequentes para ObReferenceObjectByPointer e ObReferenceObject para o mesmo objeto. Essas chamadas alteram o contador de referência de 0 para 1, o que significa que o driver incrementou o contador de referência de um objeto já liberado. Isso é sempre incorreto porque pode corromper outras alocações de memória.
Ativando esta opção
Você pode ativar a opção Verificações de Segurança para um ou mais drivers usando o Gerenciador de Verificadores de Driver ou a linha de comando Verifier.exe. Para obter detalhes, consulte Selecionando Opções do Verificador de Controladores.
Usando a linha de comando
Na linha de comando, a opção Verificações de Segurança é representada pelo Bit 8 (0x100). Para ativar as Verificações de Segurança, use um valor de sinalizador de 0x100 ou adicione 0x100 ao valor do sinalizador. Por exemplo:
verifier /flags 0x100 /driver MyDriver.sysA opção ficará ativa depois de reiniciar o computador.
A partir do Windows Vista, você também pode ativar e desativar as Verificações de Segurança sem reiniciar o computador adicionando o parâmetro /volatile ao comando. Por exemplo:
verifier /volatile /flags 0x100 /adddriver MyDriver.sysEssa configuração entra em vigor imediatamente, mas é perdida quando você desliga ou reinicia o computador. Para obter detalhes, consulte Usando Configuração Volátil.
A opção Verificações de Segurança também está incluída nas configurações padrão. Por exemplo:
verifier /standard /driver MyDriver.sysUsando o Gestor do Verificador de Drivers
- Inicie o Driver Verifier Manager. Digite Verifier numa janela da Linha de Comandos.
- Selecione Criar configurações personalizadas (para desenvolvedores de código) e clique em Avançar.
- Selecione configurações individuais de uma lista completa.
- Selecione Verificações de segurança.
O recurso Verificações de Segurança também está incluído nas configurações padrão. Para usar esse recurso no Gerenciador de Verificadores de Driver, clique em Criar Configurações Padrão.