Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour aider à développer des logiciels sécurisés, nous recommandons d’utiliser les bonnes pratiques suivantes lors du développement d’applications. Pour plus d’informations, consultez la rubrique Cycle de vie du développement de la sécurité Microsoft.
Cycle de vie du développement de la sécurité
Le Cycle de vie du développement de la sécurité (SDL) est un processus qui aligne une série d’activités et de livrables axés sur la sécurité à chaque phase du développement logiciel. Ces activités et livrables incluent :
- Développer des modèles de menace
- Utiliser des outils d’analyse de code
- Effectuer des revues de code et des tests de sécurité
Pour plus d’informations sur SDL, consultez la Microsoft Security Development Lifecycle.
Modèles de menace
Effectuer une analyse des modèles de menace peut vous aider à découvrir des points potentiels d’attaque dans votre code. Pour plus d’informations sur l’analyse du modèle de menace, consultez Howard, Michael et LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington. (Il est possible que cette ressource ne soit pas disponible dans certaines langues et dans certains pays).
Packs de service et mises à jour de sécurité
Les environnements de build et de test doivent refléter les mêmes niveaux de packs de service et de mises à jour de sécurité que la base d’utilisateurs ciblée. Nous vous recommandons d’installer les derniers Service Packs et mises à jour de sécurité pour toute plateforme ou application Microsoft qui fait partie de votre environnement de génération et de test et encourage vos utilisateurs à effectuer les mêmes opérations pour l’environnement d’application terminé. Pour plus d’informations sur les Service Packs et les mises à jour de sécurité, consultez Update Windows et Sécurité Microsoft.
Autorisation
Vous devez créer des applications nécessitant le moins de privilèges possible. Utiliser le moins de privilèges possible réduit le risque de compromission de votre système informatique par du code malveillant. Pour plus d’informations sur l’exécution de code avec le niveau de privilège le plus bas possible, veuillez consulter la section Exécution avec des privilèges spéciaux.
Meilleures pratiques de chiffrement
Lors de l’implémentation du chiffrement dans les applications Windows :
- Utilisez l’API de chiffrement : CNG (Next Generation) pour tout nouveau développement. CryptoAPI n’est maintenu que pour la rétrocompatibilité.
- Concevez pour l’agilité cryptographique et préparez-vous à l’ère post-quantique. N’éparpillez pas d’identifiants d’algorithme codés en dur ou de tailles de clés dans l’ensemble de votre code — isolez-les afin que les algorithmes puissent être remplacés sans devoir tout réécrire. La plateforme passe aux normes post-quantiques NIST, ML-KEM (FIPS 203) pour l’établissement de clés et les ML-DSA (FIPS 204) pour les signatures, donc privilégiez les conceptions agiles maintenant, en particulier pour les données avec une longue durée de vie de confidentialité, pour résister aux attaques « harvest-now, decrypt-later ».
- Préférer le chiffrement authentifié (AEAD). Utilisez AES-GCM afin que le chiffrement détecte également la falsification. Si vous devez utiliser un mode non authentifié tel que CBC, associez-le à un contrôle d’intégrité distinct (encrypt-then-MAC) : la confidentialité seule ne protège pas contre la modification.
- Ne réutilisez jamais un nonce (IV) avec la même clé dans AES-GCM. La réutilisation d'un nonce dans GCM est catastrophique : elle peut exposer la clé d'authentification et permettre la falsification de messages. Générez un nonce unique pour chaque opération de chiffrement, par exemple un compteur incrémentiel ou une nouvelle valeur aléatoire de 96 bits.
- N’utilisez jamais le mode de chiffrement de bloc BCE. ECB chiffre les blocs indépendamment, ce qui révèle des modèles dans les données en texte clair.
- Ne codez jamais en dur les clés de chiffrement dans le code source. Utilisez DPAPI pour la protection des clés locales ou le fournisseur de stockage de clés CNG pour les clés persistantes.
- Supprimez les secrets de la mémoire une fois que vous n’en avez plus besoin. Remplacez le contenu des clés, mots de passe et autres mémoires tampons sensibles par des zéros à l'aide de SecureZeroMemory. Contrairement à
memset, il n’est pas éliminé par le compilateur. - Utilisez des longueurs de clé de 256 bits pour AES, 2048 bits + pour RSA (3072+ préférés) et 256 bits pour ECDSA.
- Utilisez SHA-256 ou plus fort pour le hachage. N’utilisez pas MD5 ou SHA-1 à des fins de sécurité.
- Vérifiez toujours les valeurs de retour des fonctions de chiffrement. Une opération de chiffrement qui échoue silencieusement peut laisser des données stockées en texte clair.
-
Générez des nombres aléatoires à l’aide de BCryptGenRandom (CNG) ( non
rand()ou d’autres PRNG non chiffrés). PassezBCRYPT_USE_SYSTEM_PREFERRED_RNGpour utiliser le générateur préféré du système sans avoir à gérer un descripteur d’algorithme.
Informations supplémentaires
Pour plus d’informations sur les bonnes pratiques, veuillez consulter les rubriques suivantes.
| Sujet | Description |
|---|---|
|
Exécution avec des privilèges spéciaux |
Traite les implications de sécurité des privilèges. |
|
Éviter les dépassements de tampon (buffer) |
Fournit des informations sur la manière d’éviter les dépassements de tampon. |
|
Control Flow Guard (CFG) |
Traite les vulnérabilités de corruption de mémoire. |
|
Création d'une DACL |
Montre comment créer une liste de contrôle d’accès discrétionnaire (DACL) en utilisant le Security Descriptor Definition Language (SDDL). |
|
Gestion des mots de passe |
Traite les implications de sécurité de l’utilisation des mots de passe. |
| extensibilité pour développeurs Dynamic Access Control |
Orientation de base sur certains des points d’extensibilité pour les développeurs des nouvelles solutions de contrôle d’accès dynamique. |