Partager via


Meilleures pratiques de sécurité pour C++

Cette rubrique contient des informations sur les outils et les applications pratiques de sécurité recommandés. L'utilisation de ces ressources et de ces outils n'immunise pas les applications contre les attaques, mais diminue le risque de celles-ci.

Fonctionnalités de sécurité de Visual C++

Cette section traite des fonctionnalités de sécurité intégrées au compilateur et à l'éditeur de liens Visual C++.

  • /GS (Vérification de la sécurité de la mémoire tampon)
    Cette option du compilateur indique au compilateur d'insérer le code de détection du débordement dans les fonctions qui courent un risque d'être exploitées. Lorsqu'un débordement est détecté, l'exécution est interrompue. Cette option est activée par défaut.

  • /SAFESEH (L'image est dotée de gestionnaires d'exceptions sécurisés)
    Cette option de l'éditeur de liens indique à l'éditeur de liens d'inclure dans l'image de sortie une table qui contient l'adresse de chaque gestionnaire d'exceptions. Pendant l'exécution, le système d'exploitation utilise cette table pour s'assurer que seuls les gestionnaires d'exceptions légitimes sont exécutés. Cela contribue à empêcher l'exécution de gestionnaires d'exceptions introduits par une attaque malveillante à l'exécution. Cette option est désactivée par défaut.

  • /NXCOMPAT, /NXCOMPAT (compatible avec la prévention de l'exécution des données)
    Ces options du compilateur et de l'éditeur de liens activent la compatibilité de prévention de l'exécution des données. Celle-ci permet d'empêcher l'UC d'exécuter des pages ne contenant pas de code.

  • /analyze (Analyse du code d'entreprise)
    Cette option du compilateur active l'analyse du code, qui signale les problèmes de sécurité potentiels, tels que le dépassement de mémoire tampon, la mémoire non initialisée, le déréférencement de pointeur null et les fuites de mémoire. Cette option est désactivée par défaut. Pour plus d'informations, consultez Vue d'ensemble de l'analyse du code C/C++.

  • /DYNAMICBASE (Utiliser la randomisation du format d'espace d'adresse)
    Cette option de l'éditeur de liens permet de générer une image exécutable pouvant être chargée à des emplacements différents dans la mémoire au début de l'exécution. Cette option rend également l'emplacement de la pile en mémoire beaucoup moins prévisible.

Sécurité CRT améliorée

La bibliothèque Runtime C (CRT) a été étendue afin d'inclure des versions sécurisées des fonctions qui présentent des risques en matière de sécurité. (La fonction strcpy de copie de chaîne non contrôlée, par exemple.) Les versions les plus anciennes et moins sûres de ces fonctions sont maintenant déconseillées et leur utilisation entraîne donc des avertissements à la compilation. Nous vous recommandons fortement d'utiliser les versions sécurisées de ces fonctions CRT plutôt que de supprimer ces avertissements de compilation. Pour plus d'informations, consultez Security Features in the CRT.

Bibliothèque SafeInt

La bibliothèque SafeInt Library aide à empêcher le dépassement sur les entiers ainsi que d'autres erreurs exploitables pouvant survenir lorsque l'application exécute des opérations mathématiques. La bibliothèque SafeInt inclut la SafeInt Class, la SafeIntException Class et plusieurs SafeInt Functions.

La classe SafeInt protège des dépassements d'entiers et des tentatives de division par zéro. Elle vous permet de gérer des comparaisons entre valeurs de types différents et fournit deux stratégies de gestion des erreurs. Dans la stratégie par défaut, la classe SafeInt lève une exception de classe SafeIntException pour indiquer la raison pour laquelle une opération mathématique ne peut pas être exécutée. Dans la deuxième stratégie, la classe SafeInt arrête l'exécution du programme. Vous pouvez également définir une stratégie personnalisée.

Chaque fonction SafeInt protège une opération mathématique d'une erreur exploitable. Vous pouvez utiliser deux types de paramètres sans devoir les convertir au même type. Utilisez la classe SafeInt pour protéger plusieurs opérations mathématiques.

Itérateurs vérifiés

Un itérateur vérifié est un itérateur qui applique des limites de conteneur. Par défaut, lorsqu'un itérateur vérifié est hors limites, il génère une exception et arrête l'exécution du programme. Un itérateur vérifié fournit d'autres niveaux de réponse, en fonction des valeurs assignées aux définitions de préprocesseur telles que _SECURE_SCL_THROWS et _ITERATOR_DEBUG_LEVEL. Par exemple, au niveau _ITERATOR_DEBUG_LEVEL=2, un itérateur vérifié fournit de nombreuses vérifications d'exactitude dans le mode débogage à l'aide d'assertions. Pour plus d'informations, consultez Checked Iterators.

Analyse du code managé

L'outil d'analyse du code managé, également connu sous le nom de FxCop, est un outil qui vérifie la conformité des assemblys aux règles de conception de Microsoft .NET Framework. FxCop analyse le code et les métadonnées de chaque assembly et recherche des défaillances dans les domaines suivants :

  • Conception des bibliothèques

  • Localisation

  • Conventions d'attribution d'un nom

  • Performances

  • Sécurité

L'outil d'analyse du code managé est inclus dans Visual Studio Application Lifecycle Management et peut également être téléchargé à l'adresse https://code.msdn.microsoft.com/gotdotnet.aspx.

Windows Application Verifier

Disponible dans le cadre de l'Application Compatibility Toolkit, l'Application Verifier (AppVerifier) est un outil qui peut aider les développeurs à identifier la compatibilité, la stabilité et les problèmes de sécurité potentiels des applications.

L'AppVerifier surveille comment une application utilise le système d'exploitation. Il observe le système de fichiers, le Registre, la mémoire et les API pendant que l'application est en cours d'exécution, et recommande des solutions pour corriger les problèmes qu'il découvre au niveau du code source.

Le vérificateur vous permet d'exécuter les opérations suivantes :

  • Tester les erreurs potentielles de compatibilité des applications, provoquées par des erreurs de programmation courantes.

  • Rechercher dans une application les problèmes liés à la mémoire.

  • Tester la conformité d'une application avec les exigences des programmes d'attribution de logos actuels tels que ceux de Windows 7 et de Windows Server 2008 R2.

  • Identifier les problèmes de sécurité potentiels d'une application.

Windows Application Compatibility Toolkit est disponible sur la page « Compatibilité des applications » (page éventuellement en anglais) du site Web TechNet (éventuellement en anglais).

Caractéristiques de sécurité du .NET Framework

Configuration de la stratégie de sécurité fournit des indications et des outils permettant d'ajuster les stratégies de sécurité du .NET Framework.

Comptes utilisateur Windows

L'utilisation de comptes utilisateur Windows appartenant au groupe Administrateurs expose les développeurs et, par extension, les utilisateurs, à des problèmes de sécurité. Pour plus d'informations, consultez Exécution en tant que membre du groupe Utilisateurs.

Augmentation de la sécurité à l'aide du contrôle de compte d'utilisateur sous Windows Vista

Le contrôle de compte d'utilisateur (UAC) est une fonctionnalité de Windows Vista dans laquelle les comptes d'utilisateurs ont des privilèges limités. Pour plus d'informations, consultez Répercussions du contrôle de compte utilisateur sur votre application.

Voir aussi

Référence

System.Security

Concepts

Répercussions du contrôle de compte utilisateur sur votre application

Autres ressources

Sécurisation des applications