Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As credenciais de nome de utilizador e palavra-passe continuam comuns para autenticação, mesmo que métodos mais fortes como certificados, biometria e chaves de acesso se tornem mais comuns. Chaves de encriptação e outros segredos também requerem proteção. Os sistemas de software devem gerir estas credenciais de forma segura para resistir ao roubo de credenciais, ataques de repetição e movimentos laterais por parte dos atacantes.
Warning
Nunca codifiquem palavras-passe fixas, chaves API, strings de ligação ou outros segredos no código-fonte. Segredos codificados fixamente são extraídos trivialmente por atacantes através de descompiladores, inspeção de memória ou fugas de código-fonte. Esta é uma das vulnerabilidades de credencial mais comuns exploradas no mundo real.
Importante
Quando terminar de usar palavras-passe ou segredos na memória, sobreescreva imediatamente o buffer chamando o SecureZeroMemory. Ao contrário de memset, o compilador não pode otimizar de forma a eliminar SecureZeroMemory, garantindo que os segredos são realmente apagados.
Gestão moderna de credenciais
Para novos desenvolvimentos no Windows, use estas abordagens por ordem de preferência:
- Elimine as palavras-passe sempre que possível. Use o Windows Hello, passkeys (FIDO2/WebAuthn) ou autenticação baseada em certificado para evitar manipular passwords por completo.
- Use o Gestor de Credenciais do Windows. Chame CredWrite e CredRead para armazenar e recuperar credenciais no cofre de credenciais do SO, que as encripta com a chave de sessão de login do utilizador.
- Usa DPAPI para armazenamento secreto local. Chame CryptProtectData para cifrar segredos que têm de ser persistidos localmente. O DPAPI associa a encriptação à conta do utilizador ou à máquina, proporcionando defesa em profundidade.
- Para credenciais de serviço, use identidades geridas ou cofres de chaves. Os serviços a correr no Azure devem usar identidades geridas. Os serviços on-premises devem recuperar segredos de um cofre seguro em tempo de execução, em vez de os armazenar em ficheiros de configuração.
Princípios de gestão de palavras-passe
Quando as palavras-passe devem ser manipuladas em código:
- Recolha as palavras-passe o mais tarde possível e descarte-as o mais cedo possível. Minimize a janela durante a qual o segredo existe na memória.
- Nunca registe palavras-passe ou segredos. Certifique-se de que os registos de diagnóstico, os registos de eventos e os memory dumps de falha não contêm informação de credenciais.
- Nunca transmita palavras-passe em texto simples. Usa sempre TLS/HTTPS ou um canal encriptado equivalente.
- Formule pedidos em segurança. Utilize CredUIPromptForWindowsCredentials para obter credenciais através da caixa de diálogo padrão de credenciais do Windows, que impõe o isolamento seguro do ambiente de trabalho.
Para mais informações sobre ameaças e mitigações: