Técnicas de mitigação de ameaças

Há várias técnicas de mitigação de ameaças disponíveis que você pode usar para proteger melhor as senhas. Essas técnicas são implementadas usando uma ou mais das seguintes tecnologias primárias.

Tecnologia Descrição
Criptografia: CNG (próxima geração) O CNG é a API criptográfica preferencial para Windows desenvolvimento. Ele dá suporte a algoritmos modernos, isolamento de chave e agilidade de criptografia. Para obter mais informações, consulte Recursos de CNG.
Listas de controle de acesso Uma lista de controle de acesso (ACL) é uma lista de proteções de segurança que se aplica a um objeto. Um objeto pode ser um arquivo, processo, evento ou qualquer outra coisa que tenha um descritor de segurança. Para obter mais informações sobre ACLs, consulte listas de Controle de Acesso.
DPAPI (API de Proteção de Dados) O DPAPI fornece funções para criptografar e descriptografar dados confidenciais associados à conta de usuário ou computador: CryptProtectData, CryptUnprotectData, CryptProtectMemory e CryptUnprotectMemory.
Gerenciador de Credenciais Windows Fornece armazenamento seguro para credenciais do usuário (senhas, certificados e outros segredos). Use CredWrite e CredRead para acesso programático. Também acessível por meio de CredUIPromptForWindowsCredentials.

Note

A CryptoAPI (as funções herdadas Crypt* ) ainda tem suporte para compatibilidade com versões anteriores, mas o novo código deve usar APIs CNG (Criptografia: Próxima Geração) para suporte a algoritmos modernos e arquitetura de segurança aprimorada.

As técnicas de mitigação de ameaças a seguir usam uma ou mais das tecnologias acima.

Obtendo senhas do usuário

Quando você permitir que o usuário configure uma senha, force o uso de senhas fortes. Por exemplo, exija que as senhas sejam um comprimento mínimo, como oito caracteres ou mais. As senhas também devem ser necessárias para incluir letras maiúsculas e minúsculas, números e outros caracteres de teclado, como o sinal de dólar ($), ponto de exclamação (!), ou maior que (>).

Depois de obter uma senha, use-a rapidamente (usando o mínimo de código possível) e apague todos os vestígios da senha. Isso minimiza o tempo disponível para um intruso "interceptar" a senha. A compensação com essa técnica é a frequência com que a senha deve ser recuperada do usuário; no entanto, o princípio deve ser empregado sempre que possível. Para obter informações sobre como obter senhas corretamente, consulte Solicitando credenciais ao usuário.

Evite fornecer opções de interface do usuário "lembre-se da minha senha". Muitas vezes, os usuários exigirão ter essa opção. Se você precisar for fornecê-la, no mínimo, certifique-se de que a senha seja salva de forma segura. Para obter informações, consulte a seção Armazenar Senhas, mais adiante neste tópico.

Limitar tentativas de entrada de senha. Após um determinado número de tentativas sem êxito, bloqueie o usuário por um determinado período de tempo. Opcionalmente, alonge o tempo de resposta para cada tentativa ao máximo. Essa técnica visa derrotar um ataque de adivinhação.

Armazenando senhas

Aviso

Nunca armazene senhas em texto sem formatação (não criptografado) – não em arquivos, no registro, na configuração ou no código-fonte. Criptografar senhas aumenta significativamente sua segurança.

Para obter informações sobre como armazenar senhas criptografadas, consulte CryptProtectData. Para obter informações sobre como criptografar senhas na memória, consulte CryptProtectMemory. Armazene senhas no mínimo possível. Quanto mais lugares uma senha for armazenada, maior a chance de um intruso encontrá-la. Nunca armazene senhas em uma página da Web ou em um arquivo baseado na Web. Armazenar senhas em uma página da Web ou em um arquivo baseado na Web permite que elas sejam facilmente comprometidas.

Depois de criptografar uma senha e armazená-la, use ACLs seguras para limitar o acesso ao arquivo. Como alternativa, você pode armazenar senhas e chaves de criptografia em dispositivos removíveis. Armazenar senhas e chaves de criptografia em uma mídia removível, como um cartão inteligente, ajuda a criar um sistema mais seguro. Depois que uma senha é recuperada para uma determinada sessão, o cartão pode ser removido, removendo assim a possibilidade de que um intruso possa obter acesso a ela.