Compartilhar via


Teste dos recursos de segurança do Windows

Testa o aplicativo para verificar se ele usa os recursos de segurança do Windows e ACLs fortes.

Histórico

Alterar as proteções de segurança padrão do Windows pode colocar os clientes em risco elevado.

Detalhes do teste

Testa a segurança do aplicativo executando o BinScope Binary Analyzer e o Attack Surface Analyzer.

Ações corretivas

Solucione o problema identificado pelos testes. Compile e teste novamente o aplicativo.

Testes do Analisador de Binários BinScope

Os testes do Analisador de Binários BinScope examinam os arquivos binários do aplicativo em busca de práticas de programação e compilação que o tornam menos vulnerável a ataques ou a ser usado como um vetor de ataque.

Os testes do Analisador de Binários BinScope verificam o uso correto destes recursos relacionados à segurança:

  • AllowPartiallyTrustedCallersAttribute
  • Proteção de manipulação de exceções /SafeSEH
  • Prevenção de Execução de Dados
  • ASLR (Address Space Layout Randomization)
  • Ler/gravar seção PE compartilhada
  • AppContainerCheck
  • ExecutableImportsCheck
  • WXCheck

AllowPartiallyTrustedCallersAttribute

Mensagem de erro do Kit de Certificação de Aplicativos Windows: Falha no teste APTCACheck

O atributo AllowPartiallyTrustedCallersAttribute (APTCA) habilita o acesso a código totalmente confiável a partir de código parcialmente confiável em assemblies assinados. Quando você aplica o atributo APTCA a um assembly, chamadores parcialmente confiáveis podem acessar esse assembly durante a vida do assembly, o que pode comprometer a segurança.

O que fazer se o seu aplicativo for reprovado pelo teste

Não use o atributo APTCA em assemblies com nome forte, a menos que seu projeto exija e os riscos sejam bem entendidos. Nesses casos, verifique se todas as APIs estão protegidas com as devidas demandas de segurança de código de acesso. O APTCA não tem efeito quando o assembly faz parte de um aplicativo da Windows Store.

Comentários

Esse teste é realizado apenas em código gerenciado (C#, .NET, etc.).

Proteção de manipulação de exceções /SafeSEH

Mensagem de erro do Kit de Certificação de Aplicativos Windows: Falha no teste SafeSEHCheck

Um manipulador de exceções é executado quando o aplicativo encontra uma condição excepcional, tal como um erro de divisão por zero. Como o endereço do manipulador da exceção é armazenado na pilha quando uma função é chamadas, ele ficaria vulnerável a um ataque de estouro de buffer se algum software malicioso substituísse a pilha.

O que fazer se o seu aplicativo for reprovado pelo teste

Habilite a opção /SAFESEH no comando vinculador ao compilar o seu aplicativo. Essa opção está ativada por padrão nas configurações de Versão do Visual Studio. Verifique se essa opção está habilitada nas instruções de compilação para todos os módulos executáveis do seu aplicativo.

Comentários

O teste não é realizado em arquivos binários de 64 bits ou em arquivos binários para o chipset ARM porque eles não armazenam endereços do manipulador de exceções na pilha.

Prevenção de Execução de Dados

Mensagem de erro do Kit de Certificação de Aplicativos Windows: Falha no teste NXCheck

Este teste verifica se o seu aplicativo executa código armazenado em um segmento de dados.

O que fazer se o seu aplicativo for reprovado pelo teste

Habilite a opção /NXCOMPAT no comando vinculador ao compilar o seu aplicativo. Essa opção está ativada por padrão em versões do vinculador com suporte à Prevenção de Execução de Dados (DEP).

Comentários

Recomendamos que você teste os seus aplicativos em uma CPU habilitada para DEP e conserte qualquer falha indicada.

ASLR (Address Space Layout Randomization)

Mensagem de erro do Kit de Certificação de Aplicativos Windows: Falha no teste DBCheck

O ASLR carrega imagens executáveis em locais imprevisíveis da memória, o que dificulta a ação de softwares mal-intencionados que esperam que um programa seja carregado em um determinado endereço virtual para operar de maneira previsível. Seu aplicativo e todos os componentes usados por ele devem oferecer suporte para ASLR.

O que fazer se o seu aplicativo for reprovado pelo teste

Habilite a opção /DYNAMICBASE no comando vinculador ao compilar o seu aplicativo. Verifique se todos os módulos usados pelo seu aplicativo usam essa opção do vinculador.

Comentários

Normalmente, o ASLR não afeta o desempenho. Mas, em alguns cenários, há um ligeiro aumento do desempenho em sistemas de 32 bits. É possível que o desempenho seja prejudicado em um sistema muito congestionado que possua muitas imagens carregadas em muitos locais diferentes da memória.

Esse teste apenas é realizado em aplicativos gravados em código gerenciado, por exemplo, com o uso do C# ou do .NET Framework.

Ler/gravar seção PE compartilhada

Mensagem de erro do Kit de Certificação de Aplicativos Windows: falha no teste SharedSectionsCheck.

Arquivos binários com seções graváveis marcadas como compartilhadas são uma ameaça à segurança. Não compile aplicativos com seções graváveis compartilhadas, a não ser que isso seja realmente necessário. Use CreateFileMapping ou MapViewOfFile para criar um objeto de memória compartilhados devidamente protegido.

O que fazer se o seu aplicativo for reprovado pelo teste

Remova todas as seções compartilhadas do aplicativo e crie objetos de memória compartilhados chamando CreateFileMapping ou MapViewOfFile com os devidos atributos de segurança e depois recompile seu aplicativo.

Comentários

Esse teste apenas é realizado em aplicativos gravados em linguagens não gerenciadas, por exemplo, com o uso do C# ou do C++.

AppContainerCheck

Mensagem de erro do Kit de Certificação de Aplicativos Windows: falha no teste AppContainerCheck.

AppContainerCheck verifica se o bit appcontainer no cabeçalho PE de um binário executável está definido. Aplicativos da Windows Store devem ter o bit appcontainer em todos os arquivos .exe e em todas as DLLs não gerenciadas para serem executados corretamente.

O que fazer se o seu aplicativo for reprovado pelo teste

Se um arquivo executável nativo for reprovado no teste, verifique se você usou o vinculador e o compilador mais recentes para criar o arquivo e se usou o sinalizador /appcontainer no vinculador.

Se um executável gerenciado falhar no teste, verifique se você usou o vinculador e o compilador mais recentes, como o Microsoft Visual Studio, para criar o aplicativo da Windows Store.

Comentários

Esse teste é realizado em todos os arquivos .exe e em todas as DLLs não gerenciadas.

ExecutableImportsCheck

Mensagem de erro do Kit de Certificação de Aplicativos Windows: falha no teste ExecutableImportsCheck.

Uma imagem PE é reprovada nesse teste quando sua tabela de importação foi inserida em uma seção de código executável. Isso poderá ocorrer se você tiver habilitado a mesclagem de .rdata para a imagem PE, definindo o sinalizador /merge do vinculador Visual C++ como /merge:.rdata=.text.

O que fazer se o seu aplicativo for reprovado pelo teste

Não mescle a tabela de importação em uma seção de código executável. Verifique se o sinalizador /merge do vinculador Visual C++ não está definido para mesclar a seção “.rdata” em uma seção de código.

Comentários

Esse teste é realizado em todo o código binário, com exceção de assemblies inteiramente gerenciados.

WXCheck

Mensagem de erro do Kit de Certificação de Aplicativos para Windows: Falha no teste WXCheck.

A verificação ajuda a garantir que um binário não tenha nenhuma página mapeada como gravável e executável. Isso pode acontecer se o binário tem uma seção gravável e executável ou se SectionAlignment do binário é menor que PAGE_SIZE.

O que fazer se o seu aplicativo for reprovado pelo teste

O binário não pode ter uma seção gravável ou executável, e o valor SectionAlignment do binário deve ser pelo menos igual ao seu PAGE_SIZE.

Comentários

Esse teste é feito em todos os arquivos .exe e em todas as DLLs nativas não gerenciadas.

Um executável pode ter uma seção gravável e executável quando é criado com Editar e Continuar ativado (/ZI). Desativando Editar e Continuar, a seção inválida não está presente.

PAGE_SIZE é o SectionAlignment padrão para executáveis.

Arquivos banidos da Windows Store

Mensagem de erro do Kit de Certificação de aplicativos Windows: falha no teste de verificação de arquivo banido.

Os aplicativos da Windows Store não devem conter determinados arquivos. Esses arquivos possuem uma versão mais recente disponível que fornece aperfeiçoamentos importantes de segurança, confiabilidade ou de outros tipos. A Microsoft bloqueia esses arquivos no Kit de Certificação de Aplicativos Windows para garantir que todos os desenvolvedores usem a versão atual.

A verificação de arquivo banido no Kit de Certificação de Aplicativos Windows atualmente verifica os seguintes arquivos:

Analisador de Superfície de Ataque

Os testes do Analisador de Superfície de Ataque examinam mudanças no estado do sistema, parâmetros de tempo de execução e objetos protegíveis que ocorrem após a instalação e a execução de um aplicativo em busca de deficiências de segurança específicas. Corrigir essas deficiências não impõe nenhuma penalidade de desempenho. Não poderemos certificar o seu aplicativo para a Windows Store se ele tiver qualquer uma dessas deficiências de segurança.

Os testes do Analisador de Superfície de Ataque se aplicam a todas as linguagens de programação e procuram essas deficiências de segurança em um aplicativo.

  • Arquivos executáveis seguros que possuem ACLs fracas
  • Diretórios seguros que contêm objetos e ACLs fracas
  • Chaves do registro seguras com ACLs fracas
  • Serviços que permitem acesso a contas não administrativas e que são vulneráveis a falsificações
  • Serviços que apresentam rápidas reinicializações ou que podem ser reiniciados mais de duas vezes a cada período de 24 horas

Arquivos executáveis seguros que possuem ACLs fracas

Esse teste procura arquivos executáveis seguros que possuem ACLs (listas de controle de acesso) fracas, verificando essas ACLs em cada arquivo executável novo ou alterado que pertence a um Administrador. Essas ACLs devem impedir que usuários não administradores modifiquem esses arquivos. O Analisador de Superfície de Ataque testa arquivos executáveis (.exe) e também arquivos que possam incluir conteúdo executável, como scripts e arquivos de ajuda.

O que fazer se o seu aplicativo for reprovado pelo teste

Se essa deficiência for detectada no seu aplicativo, verifique e remova os seguintes direitos para qualquer conta não administrativa: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA ou FILE_WRITE_DATA, DELETE

Comentários

ACLs fracas permitem que usuários não administradores alterem um arquivo executável. Se um arquivo executável tiver sido alterado, talvez ele não funcione conforme esperado. Se os direitos de acesso não estiverem corretamente configurados, um invasor poderia substituir ou alterar o conteúdo desse arquivo e fazer com que ele se comportasse de maneira mal-intencionada.

Diretórios seguros que contêm objetos e ACLs fracas

Esse teste procura diretórios seguros que contenham objetos e ACLs fracas, verificando essas ACLs em busca de hierarquias de pastas novas ou alteradas. ACLs hierárquicas (ou ACLs herdadas) controlam o acesso a todos os arquivos e pastas dentro de uma pasta. As ACLs nessas pastas devem impedir que usuários não administradores modifiquem essas pastas ou seu conteúdo.

Em vez de sinalizar cada arquivo executável e subpasta que não esteja devidamente protegido, esse teste identifica a pasta mais alta em uma hierarquia que possui ACLs fracas.

O que fazer se o seu aplicativo for reprovado pelo teste

Se essa deficiência for detectada no seu aplicativo, verifique e remova os seguintes direitos para todas as contas não administrativas no diretório identificado pelo teste, de forma que esses direitos não possam ser herdados: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, FILE_WRITE_DATA, FILE_DELETE_CHILD e DELETE. Isso pode envolver a mudança do sinalizador Inherited na ACL do diretório raiz.

Depois de corrigir os direitos no diretório raiz, talvez você também precise corrigir os direitos de arquivos executáveis individuais, conforme descrito em Arquivos executáveis seguros que possuem ACLs fracas.

Comentários

Esse teste identifica uma hierarquia de diretórios e seus arquivos que possuem ACLs fracas, concedendo direitos inapropriados para usuários não administradores. Como essa hierarquia pode ter sido causada por direitos herdados incorretos, procure primeiro esses direitos herdados antes de os alterar nos arquivos e diretórios descendentes.

Chaves do registro seguras com ACLs fracas

Esse teste procura chaves do registro seguras que possuem ACLs (listas de controle de acesso) fracas, verificando as ACLs de chaves novas ou alteradas no hive do registro Local Machine (HKLM). Apenas os Administradores devem ter acesso de gravação ao hive do registro Local Machine.

O que fazer se o seu aplicativo for reprovado pelo teste

Remova estes direitos do objeto identificado pelo teste, para todas as contas não administrativas GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, KEY_SET_VALUE, KEY_CREATE_SUBKEY e DELETE.

Comentários

Valores do registro nessa seção podem determinar onde encontrar arquivos executáveis, como .exe e .dll. Os aplicativos também usam chaves do registro no hive do registro Local Machine para armazenar ou ler o caminho de um arquivo executável. Se um invasor alterasse essa chave, por exemplo, modificando o valor para o caminho de um executável não confiável, um aplicativo poderia executar o arquivo incorreto.

Se uma chave do registro parecer fazer referência a um arquivo executável, esse teste examinará as ACLs da chave para ver se ela está concedendo direitos não apropriados para uma conta não administrativa.

Serviços que permitem acesso a contas não administrativas e que são vulneráveis a falsificações

Esse teste procura serviços novos ou alterados que permitem acesso a contas não administrativas, verificando as ACLs nesses serviços. Novos serviços não devem ter ACLs fracas no caminho dos binários, na DLL do host, nas chaves do registro ou no serviço propriamente dito, pois talvez elas permitam que um usuário não administrador modifique a forma como esse serviço é executado.

O que fazer se o seu aplicativo for reprovado pelo teste

Corrija os arquivos individuais, conforme descrito em Arquivos executáveis seguros que possuem ACLs fracas.

Comentários

Serviços que possuem direitos genéricos e específicos de serviços associados. Esse teste procura direitos inapropriados concedidos a contas não administrativas. Se os direitos não estiverem seguros, um invasor poderia redirecionar o serviço em questão de forma a executar um arquivo não confiável quando ele fosse iniciado.

Por exemplo, um invasor poderia chamar ChangeServiceConfig para alterar o caminho do arquivo executável do serviço.

Serviços que apresentam rápidas reinicializações ou que podem ser reiniciados mais de duas vezes a cada período de 24 horas

Esse teste procura serviços que possam ser reiniciados frequentemente, verificando a configuração desses serviços. Serviços não devem ser reiniciados mais de duas vezes em um período de 24 horas.

O que fazer se o seu aplicativo for reprovado pelo teste

Altere o Reset Period do serviço para impedir que ele seja reiniciado mais de duas vezes em um período de 24 horas.

Comentários

Esse teste procura uma vulnerabilidade relacionada ao ASLR (Address Space Layout Randomization). O ASLR é um recurso que carrega código executável em locais aleatórios na memória, dificultando a criação de explorações confiáveis de vulnerabilidades de segurança. Se um invasor puder fazer com que um serviço seja reiniciado repetidamente, ele poderia utilizar força bruta para carregar o código executável em todos os locais possíveis e neutralizar o ASLR.

Esse teste examina os elementos lpsaActions da estrutura Service Failure Actions em busca de valores SC_ACTION_REBOOT e SC_ACTION_RESTART. Esses valores podem ser configurados com a chamada de ChangeServiceConfig2.

O teste determina se existem mais de duas ações, se os seus valores de retardamento são inferiores a 24 horas e se o período de reinicialização do servidor é inferior a 24 horas.