Compartilhar via


Práticas recomendadas de segurança para C++

Este artigo contém informações sobre ferramentas e práticas de segurança.Elas não tornam os aplicativos imunes a ataques, mas diminuem a probabilidade de ataques bem-sucedidos.

Recursos de segurança do Visual C++

Estes recursos de segurança foram incorporados ao vinculador e ao compilador do Visual C++:

  • /GS (verificação de segurança do buffer)
    Instrui o compilador a inserir o código de detecção de saturação em funções que estão em risco de serem exploradas.Quando uma saturação é detectada, a execução é interrompida.Por padrão, esta opção está ativada.

  • /SAFESEH (a imagem tem manipuladores de exceção seguros)
    Instrui o vinculador a incluir na imagem de saída uma tabela que contém o endereço de cada manipulador de exceção.Em tempo de execução, o sistema operacional usa essa tabela para garantir que apenas os manipuladores de exceção legítimos sejam executados.Isso ajuda a impedir a execução de manipuladores de exceção introduzidos por um ataque mal-intencionado em tempo de execução.Por padrão, esta opção está desativada.

  • /NXCOMPAT , /NXCOMPAT (compatível com Prevenção de Execução de Dados)
    Estas opções de compilador e vinculador habilitam a compatibilidade de DEP (Prevenção de Execução de Dados).A DEP protege a CPU contra a execução de páginas sem código.

  • /analyze (Análise do código)
    Essa opção do compilador ativa a análise de código que relata problemas potenciais de segurança, como excesso de buffer, memória não inicializada, remoção de referência do ponteiro nulo e vazamentos de memória.Por padrão, esta opção está desativada.Para obter mais informações, consulte Análise de código para visão geral do C/C++.

  • /DYNAMICBASE (usar aleatorização do layout de espaço do endereço)
    Essa opção do vinculador habilita a criação de uma imagem executável que pode ser carregada em locais diferentes na memória no início da execução.Essa opção também torna o local da pilha na memória muito menos previsível.

CRT de segurança aprimorada

A biblioteca em tempo de execução C (CRT) foi aumentada para incluir versões seguras das funções que oferecem risco de segurança — por exemplo, a função de cópia de cadeia de caracteres de strcpy não verificada.Como as versões anteriores e não seguras dessas funções estão preteridas, elas causam avisos de tempo de compilação.É recomendável usar as versões seguras dessas funções de CRT em vez de suprimir os avisos de compilação.Para obter mais informações, consulte Recursos de segurança no CRT.

Biblioteca de SafeInt

A Biblioteca de SafeInt ajuda a impedir estouros de inteiro e outros erros exploráveis que podem ocorrer quando o aplicativo executa operações matemáticas.A biblioteca de SafeInt inclui Classe SafeInt, Classe SafeIntException e várias Funções (SafeInt).

A classe de SafeInt protege contra explorações de estouro de inteiro e de divisão por zero.Você pode usá-la para tratar comparações entre valores de tipos diferentes.I fornece duas políticas de tratamento de erro.A política padrão é que a classe SafeInt lance uma exceção da classe SafeIntException para relatar por que uma operação matemática não pode ser concluída.A segunda política é que a classe SafeInt interrompa a execução do programa.Você também pode definir uma política personalizada.

Cada função de SafeInt protege uma operação matemática contra um erro explorável.Você pode usar dois tipos diferentes de parâmetros sem convertê-los no mesmo tipo.Para proteger várias operações matemáticas, use a classe SafeInt.

Iteradores verificados

Um iterador verificado impõe limites do contêiner.Por padrão, quando um iterador verificado está fora dos limites, ele gera uma exceção e finaliza a execução do programa.Um iterador verificado fornece outros níveis de resposta que dependem dos valores atribuídos às definições do pré-processador, como _SECURE_SCL_THROWS e _ITERATOR_DEBUG_LEVEL.Por exemplo, em _ITERATOR_DEBUG_LEVEL=2, um iterador verificado fornece verificações da correção abrangente no modo de depuração, que são disponibilizadas com o uso de declarações.Para obter mais informações, consulte Iteradores Verificados.

Análise de código para código gerenciado

A análise de código para código gerenciado, também conhecida como FxCop, verifica a conformidade dos assemblies de acordo com as diretrizes de design do .NET Framework.O FxCop analisa o código e os metadados de cada assembly para verificar se há falhas nestas áreas:

  • Design de biblioteca

  • Localização

  • Convenções de nomenclatura

  • Desempenho

  • Segurança

Verificador de aplicativo do Windows

O verificador de aplicativo (AppVerifier) pode ajudá-lo a identificar possíveis problemas de compatibilidade, estabilidade e segurança do aplicativo.

O AppVerifier monitora como um aplicativo usa o sistema operacional.Ele inspeciona o sistema de arquivos, o Registro, a memória e as APIs enquanto o aplicativo está em execução, e recomenda correções do código-fonte dos problemas que ele descobre.

Também é possível usar o AppVerifier para:

  • Testar possíveis erros de compatibilidade do aplicativo causados por erros comuns de programação.

  • Examinar um aplicativo por problemas relacionados à memória.

  • Identificar possíveis problemas de segurança em um aplicativo.

O AppVerifier faz parte do Application Compatibility Toolkit, disponível em Compatibilidade de aplicativos no site do TechNet.

Recursos de segurança do .NET Framework

A Configuring Security Policy descreve diretrizes e ferramentas para ajustar as políticas de segurança do .NET Framework.

Contas de usuário do Windows

O uso de contas de usuário do Windows que pertencem ao grupo Administradores expõe os desenvolvedores e — por extensão — os clientes a riscos de segurança.Para obter mais informações, consulte Executando como um membro do grupo de usuários e Como o Controle de Conta de Usuário (UAC) afeta o aplicativo.

Consulte também

Referência

System.Security

Conceitos

Como o Controle de Conta de Usuário (UAC) afeta o aplicativo

Outros recursos

Segurança no .NET Framework