Verificador de Aplicativos – Visão geral

Resumo

O Verificador de Aplicativos (AppVerifier) é uma ferramenta de verificação de runtime para código não gerenciado que auxilia na localização de erros sutis de programação, problemas de segurança e problemas limitados de privilégios de conta de usuário que podem ser difíceis de identificar com técnicas normais de teste de aplicativo.

Visão geral

Um dos maiores desafios enfrentados por programadores, arquitetos de software, testadores e consultores de segurança é entender os caminhos de execução variáveis de seus aplicativos quando implantados em produção. Mesmo com o acesso ao código-fonte, é difícil entender tudo o que ocorrerá durante a execução devido a uma variedade de dependências (por exemplo, vários grupos que contribuem para o código ou aproveitam componentes externos). O Microsoft AppVerifier pode desempenhar um papel útil para ajudar a gerenciar essa complexidade e os possíveis efeitos colaterais dos bugs. O AppVerifier auxilia na localização de erros de programação, problemas de segurança e problemas de privilégio de conta de usuário que podem ser difíceis de identificar durante uma passagem de teste típica.

O Verificador de Aplicativos (AppVerif.exe) é uma ferramenta de verificação dinâmica para aplicativos no modo de usuário. Essa ferramenta monitora as ações do aplicativo enquanto o aplicativo é executado, sujeita o aplicativo a uma variedade de estresses e testes e gera um relatório sobre possíveis erros na execução ou design do aplicativo.

O Verificador de Aplicativos pode detectar erros em aplicativos de modo de usuário que não se baseiam no código gerenciado, incluindo drivers de modo de usuário. Ele encontra erros sutis de programação que podem ser difíceis de detectar durante testes de aplicativo padrão ou testes de driver.

Você pode usar o Verificador de Aplicativos sozinho ou em conjunto com um depurador de modo de usuário. O usuário atual deve ser membro do grupo Administradores no computador.

Instalando o AppVerifier

O Verificador de Aplicativos está incluído no SDK ( Software Development Kit) do Windows . Para instalar o Verificador de Aplicativos, marcar a caixa para ele durante a instalação do SDK.

Captura de tela do menu main verificador de aplicativos com um único aplicativo de teste selecionado e testes listados no lado direito.

O que é AppVerifier?

O AppVerifier é uma ferramenta projetada para detectar e ajudar a depurar corrupção de memória, vulnerabilidades críticas de segurança e problemas limitados de privilégios de conta de usuário. O AppVerifier auxilia na criação de aplicativos confiáveis e seguros monitorando a interação de um aplicativo com o sistema operacional Microsoft Windows e criando o perfil do uso de objetos, do registro, do sistema de arquivos e das APIs do Win32 (incluindo heaps, identificadores e bloqueios). O AppVerifier também inclui verificações para prever o desempenho do aplicativo em ambientes não administradores.

Quando usado em todo o ciclo de vida de desenvolvimento de software, o AppVerifier pode trazer benefícios de custo para os esforços de desenvolvimento, pois facilita a identificação de problemas no início quando eles são mais fáceis e baratos de corrigir. Ele também ajuda a detectar erros que podem ter passado despercebidos e garante que o aplicativo final possa ser executado em ambientes restritos (por exemplo, não administradores).

Problemas identificados pelo AppVerifier

O AppVerifier ajuda a determinar:

Quando o aplicativo está usando APIs corretamente:

  • APIs TerminateThread não seguras.
  • Uso correto de APIs de TLS (Armazenamento Local de Thread).
  • Uso correto de manipulações de espaço virtual (por exemplo, VirtualAlloc, MapViewOfFile).
  • Se o aplicativo está ocultando violações de acesso usando tratamento de exceção estruturado.
  • Se o aplicativo está tentando usar identificadores inválidos.
  • Se há corrupção de memória ou problemas no heap.
  • Se o aplicativo fica sem memória em poucos recursos.
  • Se o uso correto de seções críticas está ocorrendo.
  • Se um aplicativo em execução em um ambiente administrativo será executado bem em um ambiente com menos privilégios.
  • Se há possíveis problemas quando o aplicativo está em execução como um usuário limitado.
  • Se há variáveis não inicializadas em chamadas de função futuras no contexto de um thread.

Testes do AppVerifier

O AppVerifier consiste em conjuntos de testes chamados "camadas de verificação". Elas podem ser ativadas ou desativadas para cada aplicativo que está sendo testado. Ao expandir a camada de verificação dentro da área de testes, os testes específicos são exibidos. Para ativar um teste para o aplicativo, selecione a caixa marcar ao lado dele. Para ativar uma camada de verificação inteira, como Noções básicas, selecione a caixa marcar no nível superior.

Há treze tipos diferentes de testes que o AppVerifier pode executar.

Noções básicas – no mínimo, você deve executar o Verificador de Aplicativos com a configuração Básico selecionada. Cada um deles testará uma área que causará falhas ou outros cenários negativos, que têm um impacto direto e significativo da experiência do cliente. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Compatibilidade – Os testes da Camada de Verificação de Compatibilidade ajudam a identificar um aplicativo que pode ter problemas com o sistema operacional Microsoft Windows. Muitas dessas verificações também podem ser usadas para testar os requisitos do logotipo. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Cuzz – a camada de verificação Cuzz (Concurrency Fuzzing) detecta bugs de simultaneidade e condições de corrida de dados. O Cuzz ajusta o agendamento de thread injetando atrasos aleatórios em pontos-chave no código de um aplicativo. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Simulação de pouco recurso – simulação de pouco recurso tenta simular um ambiente em poucos recursos, como falta de memória. Essa simulação identificará bugs que ocorrem em condições de memória insuficiente. Isso também é conhecido como Injeção de Falha.Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

LuaPriv – Os testes do LuaPriv (Previsão de Privilégios de Conta de Usuário Limitado) são preditivos e diagnósticos, um trabalho para solucionar problemas relacionados à execução de um aplicativo com privilégio administrativo e se esse aplicativo funcionaria também se fosse executado com menos privilégios (geralmente, como um usuário normal). Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Diversos - Diversos consiste em testes para uma variedade de testes, como para APIs perigosas que tomam ações inseguras. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Rede – os testes de rede procuram o uso inadequado de APIs do WinSock. Por exemplo, se uma API de Rede chamou antes de um WSAStartup() bem-sucedido ou depois que uma chamada WSACleanup() bem-sucedida de balanceamento foi feita. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

NTLM – Monitora o uso das APIs de autenticação AcquireCredentialsHandle e InitializeSecurityContext para detectar usos do protocolo NTLM. O NTLM é um protocolo de autenticação desatualizado com falhas que potencialmente comprometem a segurança dos aplicativos e do sistema operacional. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Impressão – o Verificador de Impressão ajuda a localizar e solucionar problemas que podem resultar quando um aplicativo chama o subsistema de impressão. O Verificador de Impressão tem como alvo as duas camadas do subsistema de impressão, a camada PrintAPI e a camada PrintDriver. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Serviços Web – a Camada de Verificação da API de Serviços Web do Windows (WWSAPI) funciona para marcar para uso adequado do WWSAPI, como uma WWSAPI que está sendo chamada, que faz referência a um objeto WWSAPI intrínseco inválido ou WWSAPI sendo chamado com referências a um único objeto threaded já em uso. Para obter mais detalhes, consulte Verificador de Aplicativos – Testes no Verificador de Aplicativos

Serviços – os serviços testam marcar para o uso adequado dos Serviços windows. Por exemplo, os serviços estão sendo iniciados e interrompidos corretamente. Para obter informações sobre as exceções de código de parada geradas por esses testes, consulte Verificador de Aplicativos – Parar Códigos e Definições.

Perf - O teste perf marcar para uso eficiente de APIs que afetam o desempenho do sistema e o consumo de energia, como chamar uma função do Windows que usa um período de espera incorreto. Para obter informações sobre as exceções de código de parada geradas por esses testes, consulte Verificador de Aplicativos – Parar Códigos e Definições.

Trava - O trava testa o uso de APIs que fazem com que o sistema fique sem resposta, por exemplo, quando o thread DllMain está aguardando outro thread que foi bloqueado. Para obter informações sobre as exceções de código de parada geradas por esses testes, consulte Verificador de Aplicativos – Parar Códigos e Definições.

Como o AppVerifier funciona?

O AppVerifier funciona modificando as tabelas de método DLLs não gerenciadas para que as verificações necessárias sejam executadas antes que a função real seja executada (isso também é chamado de "Gancho de Função"). Por exemplo, o endereço do método CreateFileA da API win32 é substituído por um método AppVerifier interno que disparará uma série de testes que, quando positivos, serão registrados.

Quando novos processos são iniciados, o uso de técnicas de Conexão de Tabela de Método do AppVerifier é controlado por entradas feitas em chaves específicas do Registro. Se a entrada do Registro existir, a DLL do AppVerifier será carregada em um processo recém-criado que manipulará as substituições da Tabela de Métodos nas DLLs existentes e posteriormente carregadas. Como esses ganchos são feitos quando a DLL é carregada, não é possível usar o AppVerifier em um processo que já está em execução.

A interface do usuário do AppVerifier é usada para controlar as configurações da Chave do Registro e para fornecer informações sobre os logs existentes. Depois que o aplicativo e os testes forem definidos na interface do usuário e o botão "Salvar" for clicado, as configurações do Registro serão feitas. Em seguida, o aplicativo precisará ser reiniciado, o que iniciará o monitoramento. É importante observar que as configurações persistirão até que o aplicativo seja removido do AppVerifier.

Quando um problema é identificado, ocorrerá uma parada de verificador. O número fornecido é usado para identificar a natureza exata e o motivo de sua ocorrência.

Uso do Verificador de Aplicativos no Ciclo de Vida de Desenvolvimento de Software

Você deve usar o Verificador de Aplicativos em todo o ciclo de vida de desenvolvimento de software.

Fase de requisitos – o AppVerifier deve ser planejado e o tempo alocado para sua execução e acompanhamento.

Fase de design – planeje o uso do Verificador de Aplicativos e defina quais componentes (módulos, DLLs ou EXEs) serão testados.

Fase de implementação – execute o Verificador de Aplicativos em builds estáveis (de Alfa a RTM) dos diferentes componentes em desenvolvimento (é importante testar os componentes individual e coletivamente).

Fase de verificação – os testadores devem executar todos os seus testes (manuais e automáticos) com o Verificador de Aplicativos, pois essa será a primeira vez que o aplicativo será enviado por push para os limites e o comportamento inesperado e os dados serão enviados. O AppVerifier também é uma ferramenta poderosa para consultores de segurança que fazem auditorias (caixa preta e caixa branca), pois permitirá a enumeração rápida de vetores reais (ou potenciais) de ataque/exploração.

Fase de lançamento – clientes e consultores de segurança podem usar o AppVerifier nos binários liberados para identificar possíveis vulnerabilidades de segurança.

Fase de suporte e manutenção – use o Verificador de Aplicativos para garantir que as alterações de código (por exemplo, atualizações, service packs) não introduzam regressões.

Tópicos da seção

Esta seção contém os seguintes tópicos.

Verificador de Aplicativos – Recursos

Verificador de Aplicativos – Testando aplicativos

Verificador de Aplicativos – Testes no Verificador de Aplicativos

Verificador de Aplicativos – Parar códigos e definições

Verificador de Aplicativos – Depuração de Paradas do Verificador de Aplicativo

Verificador de Aplicativos – Perguntas frequentes