Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le credenziali di nome utente e password rimangono comuni per l'autenticazione, anche se metodi più efficaci come certificati, biometrici e passkey diventano più diffusi. Anche le chiavi di crittografia e altri segreti richiedono la protezione. I sistemi software devono gestire queste credenziali in modo sicuro per resistere al furto di credenziali, agli attacchi di riproduzione e allo spostamento laterale da parte degli utenti malintenzionati.
Avvertimento
Non inserire mai nel codice sorgente password, chiavi API, stringhe di connessione o altre informazioni sensibili codificate in modo statico. I segreti hardcoded vengono facilmente estratti da utenti malintenzionati che usano decompilatori, ispezione della memoria o perdite di codice sorgente. Si tratta di una delle vulnerabilità delle credenziali più comuni sfruttate in natura.
Importante
Al termine dell'uso di password o segreti in memoria, sovrascrivere immediatamente il buffer chiamando SecureZeroMemory. A differenza di memset, il compilatore non può eliminare tramite ottimizzazione SecureZeroMemory, garantendo che i segreti vengano effettivamente cancellati.
Gestione moderna delle credenziali
Per un nuovo sviluppo su Windows, usare questi approcci in ordine di preferenza:
- Eliminare le password ove possibile. Usare Windows Hello, passkey (FIDO2/WebAuthn) o l'autenticazione basata su certificati per evitare di gestire completamente le password.
- Usa Gestione credenziali di Windows. Chiamare CredWrite e CredRead per archiviare e recuperare le credenziali nell'insieme di credenziali del sistema operativo, che le crittografa con la chiave di sessione di accesso dell'utente.
- Usare DPAPI per l'archiviazione privata locale. Chiamare CryptProtectData per crittografare i segreti che devono essere salvati in modo permanente in locale. DPAPI collega la crittografia all'account utente o al computer, fornendo difesa approfondita.
- Per le credenziali di servizio, usa identità gestite o key vault. I servizi in esecuzione in Azure devono usare le identità gestite. I servizi on-premises devono recuperare i segreti da un vault sicuro in fase di esecuzione anziché archiviarli nei file di configurazione.
Principi di gestione delle password
Quando le password devono essere gestite nel codice:
- Raccogliere le password il più tardi possibile e rimuoverle il prima possibile. Ridurre al minimo la finestra durante la quale il segreto esiste in memoria.
- Non registrare mai password o segreti. Assicurarsi che i log diagnostici, i registri degli eventi e i dump di arresto anomalo non contengano dati di autenticazione.
- Non trasmettere mai password in testo non crittografato. Usare sempre TLS/HTTPS o un canale crittografato equivalente.
- Richiedi conferma in modo sicuro. Usare CredUIPromptForWindowsCredentials per raccogliere le credenziali tramite la finestra di dialogo standard delle credenziali di Windows, che impone l'isolamento sicuro del desktop.
Per altre informazioni sulle minacce e le mitigazioni: