Gestion des mots de passe

Les informations d’identification de nom d’utilisateur et de mot de passe restent courantes pour l’authentification, même si les méthodes plus fortes telles que les certificats, la biométrie et les clés secrètes deviennent plus répandues. Les clés de chiffrement et d’autres secrets nécessitent également une protection. Les systèmes logiciels doivent gérer ces informations d’identification de manière sécurisée pour résister au vol d’informations d’identification, aux attaques de relecture et au mouvement latéral par les attaquants.

Avertissement

Ne codez jamais en dur les mots de passe, les clés API, les chaînes de connexion ou d’autres secrets dans le code source. Les secrets codés en dur sont facilement extraits par des attaquants à l’aide de décompileurs, d’inspection de la mémoire ou de fuites de code source. Il s’agit de l’une des vulnérabilités d’informations d’identification les plus courantes exploitées dans la nature.

Important

Lorsque vous avez fini d’utiliser des mots de passe ou des secrets en mémoire, remplacez immédiatement la mémoire tampon en appelant SecureZeroMemory. Contrairement à memset, le compilateur ne peut pas supprimer SecureZeroMemory lors de l’optimisation, ce qui garantit que les secrets sont réellement effacés.

Gestion des informations d’identification modernes

Pour le nouveau développement sur Windows, utilisez ces approches dans l’ordre de préférence :

  1. Éliminez les mots de passe lorsque cela est possible. Utilisez Windows Hello, les clés secrètes (FIDO2/WebAuthn) ou l’authentification basée sur des certificats pour éviter de gérer complètement les mots de passe.
  2. Utilisez le gestionnaire d’informations d’identification Windows. Appelez CredWrite et CredRead pour stocker et récupérer les informations d’identification dans le coffre d’informations d’identification du système d’exploitation, qui les chiffre avec la clé de session d’ouverture de session de l’utilisateur.
  3. Utilisez DPAPI pour le stockage secret local. Appelez CryptProtectData pour chiffrer les secrets qui doivent être conservés localement. DPAPI lie le chiffrement au compte d’utilisateur ou à l’ordinateur, fournissant une défense en profondeur.
  4. Pour les informations d’identification de service, utilisez des identités gérées ou des coffres-forts de clés. Les services s’exécutant sur Azure doivent utiliser des identités managées. Les services locaux doivent récupérer des secrets à partir d’un coffre sécurisé au moment de l’exécution plutôt que de les stocker dans des fichiers de configuration.

Principes de gestion des mots de passe

Lorsque les mots de passe doivent être gérés dans le code :

  • Collectez les mots de passe le plus tard possible et ignorez-les dès que possible. Réduisez la fenêtre pendant laquelle le secret existe en mémoire.
  • Ne consignez jamais les mots de passe ou les secrets. Vérifiez que les journaux de diagnostic, les journaux d’événements et les images mémoire sur incident ne contiennent pas de données d’authentification.
  • Ne transmettez jamais de mots de passe en texte clair. Utilisez toujours TLS/HTTPS ou un canal chiffré équivalent.
  • Rédigez vos prompts en toute sécurité. Utilisez CredUIPromptForWindowsCredentials pour collecter les informations d’identification via la boîte de dialogue d’informations d’identification standard Windows, qui applique l’isolation sécurisée du bureau.

Pour plus d’informations sur les menaces et les atténuations :