Cette page vous a-t-elle été utile ?
Votre avis sur ce contenu est important. N'hésitez pas à nous faire part de vos commentaires.
Vous avez d'autres commentaires ?
1500 caractères restants
MSDN Library

Principes de base de la sécurité des applications Web

Dernière mise à jour le 31 août 2004
Sur cette page

Dans ce module Dans ce module
Objectifs Objectifs
S'applique à S'applique à
Introduction Introduction
Nous sommes sécurisés : nous avons un pare-feu. Nous sommes sécurisés : nous avons un pare-feu.
Quel sens donner au mot « sécurité » ? Quel sens donner au mot « sécurité » ?
Menaces, vulnérabilités et attaques : définitions Menaces, vulnérabilités et attaques : définitions
Comment créer une application Web sécurisée ? Comment créer une application Web sécurisée ?
Sécuriser votre réseau, votre hôte et votre application Sécuriser votre réseau, votre hôte et votre application
Sécurisation de votre réseau Sécurisation de votre réseau
Sécurisation de votre hôte Sécurisation de votre hôte
Sécurisation de votre application Sécurisation de votre application
Principes de sécurité Principes de sécurité
Résumé Résumé
Informations complémentaires Informations complémentaires

Dans ce module

Ce module explique le concept de sécurité des applications Web et présente la terminologie essentielle. Le modèle conventionnel de la forteresse dépend trop du pare-feu et des défenses de l'hôte, et il n'est pas suffisant pour les applications Web connectées à des réseaux hostiles ou exposées à des employés malveillants. Vos applications doivent être conçues et créées selon des principes d'élaboration et de développement sécurisés qui obéissent à des notions fiables de sécurité.

Ce module propose une stratégie de défense avancée qui permet de sécuriser votre application Web en appliquant la sécurité dans les trois couches suivantes : réseau, hôte et application.

Objectifs

Ce module vous permettra :

  • d'examiner les éléments fondamentaux de la sécurité : l'authentification, l'autorisation, l'audit, la confidentialité, l'intégrité et la disponibilité ;

  • de comprendre comment les menaces, les faiblesses et les attaques sont reliées entre elles ;

  • de définir et de savoir utiliser les catégories de configuration de la sécurité du réseau et de l'hôte ;

  • de définir et de savoir utiliser les catégories de vulnérabilités des applications ;

  • de comprendre les principes essentiels de la sécurité ;

  • d'apprendre à créer une application Web sécurisée et de reconnaître l'importance du processus de modélisation de la menace ;

  • de comprendre les avantages d'une approche globale de la sécurité.

S'applique à

Application Web

Introduction

Lorsqu'il est question de sécurité des applications Web, on pense immédiatement à ces pirates qui endommagent les sites Web, volent des numéros de cartes de crédit et bombardent les sites d'attaques de refus de service. Il est fréquent aussi de penser aux virus, aux chevaux de Troie et aux vers. Ce sont là les types de problèmes le plus largement évoqués car ils représentent quelques-unes des menaces les plus importantes auxquelles sont confrontées les applications Web actuelles.

Mais ils ne sont pas les seuls. D'autres problèmes essentiels sont fréquemment sous-estimés. Les menaces internes dues à des administrateurs malfaisants, des employés hostiles et des utilisateurs occasionnels qui tombent par erreur sur des données sensibles représentent un risque non négligeable. Le plus gros problème est peut-être l'ignorance.

La solution pour assurer la sécurité d'une application Web dépasse la technologie. Elle suppose un processus progressif d'implication des personnes et de recours à certaines pratiques.

Nous sommes sécurisés : nous avons un pare-feu.

Le malentendu est courant ; tout dépend de la menace. Par exemple, un pare-feu peut ne pas détecter des entrées malveillantes transmises à votre application Web. Imaginez de même le cas d'un administrateur malveillant qui dispose d'un accès direct à votre application.

Les pare-feu ont-ils une place à occuper ? Naturellement. Les pare-feu sont idéaux pour bloquer les ports. Certains examinent les communications et peuvent offrir une protection très élaborée. En fait, ils font partie intégrante de votre sécurité, mais ils ne constituent pas à eux seuls une solution complète.

Ces remarques sont également valables pour le protocole SSL (Secure Sockets Layer), très bien adapté au cryptage du trafic sur le réseau. Toutefois, il ne valide pas les entrées qui parviennent à votre application et ne vous protège pas en cas de serveur mal configuré.

Quel sens donner au mot « sécurité » ?

La sécurité est essentiellement destinée à protéger les ressources. Celles-ci peuvent être des éléments tangibles, comme une page Web ou votre base de données de clients, ou plus abstraits, tels que la réputation de votre société.

La sécurité n'est pas une destination, elle est un chemin à parcourir. À mesure que vous analysez votre infrastructure et vos applications, vous identifiez des menaces potentielles et vous réalisez alors que chacune d'elles présente un degré de risque. La sécurité consiste à gérer le risque et à mettre en œuvre des contre-mesures efficaces.

Principes fondamentaux de la sécurité

La sécurité s'appuie sur les éléments suivants :

  • Authentification
    L'authentification pose la question : qui êtes-vous ? Il s'agit du processus visant à identifier de façon unique les clients de vos applications et services, qui peuvent être des utilisateurs finals, d'autres services, des processus ou des ordinateurs. En termes de sécurité, les clients authentifiés sont appelés entités.

  • Autorisation
    L'autorisation pose la question : que pouvez-vous faire ? Il s'agit de déterminer les ressources et les opérations que le client authentifié est autorisé à consulter ou à effectuer. Les ressources englobent des fichiers, des bases de données, des tables, des lignes, etc., ainsi que des ressources dites système telles que des clés de registre et des données de configuration. Les opérations incluent l'exécution de transactions telles que l'achat d'un produit, le transfert d'argent d'un compte à un autre ou l'augmentation du taux de crédit d'un client.

  • Audit
    Un audit et une journalisation efficaces sont essentiels pour la non répudiation. La non répudiation garantit qu'un utilisateur ne peut pas refuser l'exécution d'une opération ou le déclenchement d'une transaction. Par exemple, dans un système de e-commerce, des mécanismes de non-répudiation sont nécessaires pour s'assurer que le consommateur ne peut pas refuser la commande de 100 exemplaires d'un ouvrage donné.

  • Confidentialité
    La confidentialité (privacy en anglais) permet de s'assurer que les données restent privées et confidentielles et qu'elles ne peuvent pas être vues ou détournées par des utilisateurs non autorisés ou des indiscrets qui surveillent le flux du trafic sur un réseau. Le cryptage est souvent employé pour renforcer la confidentialité. Les listes de contrôle d'accès (ACL) sont un autre moyen d'imposer la confidentialité.

  • Intégrité
    L'intégrité garantit que les données sont protégées contre toute modification accidentelle ou délibérée (malveillante). Comme la confidentialité, l'intégrité est une préoccupation majeure, notamment pour les données transmises sur des réseaux. L'intégrité des données en transit est généralement assurée par des techniques de hachage et des codes d'authentification des messages.

  • Disponibilité
    En termes de sécurité, on entend par disponibilité la capacité pour des systèmes de rester disponibles pour les utilisateurs légitimes. Le but de nombreux auteurs d'attaques par refus de service est de détériorer une application ou de créer une saturation telle que les utilisateurs ne puissent plus y accéder.

Menaces, vulnérabilités et attaques : définitions

Une menace est un événement potentiel, malveillant ou autre, qui pourrait nuire à une ressource. En d'autres termes, toute opération préjudiciable à vos ressources est une menace.

Une vulnérabilité est une faiblesse qui rend possible une menace. Cette possibilité peut être due à une mauvaise conception, à des erreurs de configuration ou à des techniques de codage inappropriées et non fiables. Une validation de la saisie insuffisante est un exemple de vulnérabilité de la couche application susceptible d'aboutir à des attaques au niveau des entrées.

Une attaque est une action qui exploite une vulnérabilité ou exécute une menace. Il s'agit par exemple d'envoyer des données d'entrée malveillantes à une application ou de saturer un réseau en vue d'entraîner un refus de service.

Pour résumer, une menace est un événement potentiel qui peut avoir un impact négatif sur une ressource, tandis qu'une attaque réussie exploite les vulnérabilités de votre système.

Comment créer une application Web sécurisée ?

Il n'est pas possible de concevoir et de créer une application Web sécurisée tant que vous ignorez les menaces. Un processus toujours plus important qu'il est conseillé d'intégrer dans la phase de conception de votre application est la modélisation de la menace. Son objectif est d'analyser l'architecture et la conception de l'application et d'identifier les domaines potentiellement vulnérables qui permettraient à un utilisateur, même par erreur, ou à un pirate mal intentionné, de compromettre la sécurité de votre système.

Une fois que vous connaissez les menaces, gardez à l'esprit, lors de la phase de conception, l'objectif de sécurité en appliquant des principes éprouvés de longue date. En tant que développeur, vous devez appliquer des techniques de codage sûres afin d'élaborer des solutions sécurisées, robustes et résistantes aux attaques. La conception et le développement de la partie logicielle de la couche application doivent être étayés par une configuration fiabilisée du réseau, de l'hôte et de l'application sur les serveurs où le logiciel sera déployé.

Sécuriser votre réseau, votre hôte et votre application

« Dans un réseau, une vulnérabilité permettra à l'utilisateur malveillant d'exploiter un hôte ou une application. Dans un hôte, elle lui permettra d'exploiter un réseau ou une application. Dans une application, elle lui permettra d'exploiter un réseau ou un hôte. »

Carlos Lyons, Corporate Security, Microsoft

Pour créer des applications Web sécurisées, il convient d'adopter une approche globale et d'appliquer la sécurité dans les trois couches en question. Cette approche est illustrée dans la figure 1.1.

Approche globale de la sécurité

Figure 1.1
Approche globale de la sécurité

Sécurisation de votre réseau

Une application Web sécurisée s'appuie sur une infrastructure de réseau sécurisée. Cette infrastructure comprend des routeurs, des pare-feu et des commutateurs. Le rôle du réseau sécurisé n'est pas seulement de se protéger contre des attaques lancées via TCP/IP, mais aussi de mettre en œuvre des contre-mesures telles que l'instauration d'interfaces administratives sécurisées et de mots de passe forts. Le réseau sécurisé doit également assurer l'intégrité du trafic qu'il achemine. Si, au niveau de la couche réseau, vous connaissez des ports, des protocoles ou une voie de communication risquant d'être utilisés à des fins nuisibles, vous devez, à ce niveau, contrer ces menaces possibles.

Catégories des composants réseau

Ce guide divise la sécurité du réseau en catégories de composants, comme le montre le tableau 1.1.

Tableau 1.1 : Catégories de composants réseau

Composant

Description

Routeur

Les routeurs constituent la première enceinte extérieure de votre réseau. Ils acheminent des paquets de données vers les ports et les protocoles utilisés par votre application. Les vulnérabilités TCP/IP courantes sont bloquées à ce niveau.

Pare-feu

Les pare-feu bloquent les protocoles et les ports que l'application n'utilise pas. En outre, ils garantissent un trafic sécurisé sur le réseau en mettant en place un filtrage spécifique à l'application de façon à bloquer les communications malveillantes.

Commutateur

Les commutateurs servent à séparer des segments de réseau. Ils sont fréquemment négligés et on leur accorde une trop grande confiance.

Sécurisation de votre hôte

En ce qui concerne la sécurisation d'un hôte, qu'il s'agisse de votre serveur Web, d'applications ou de base de données, ce guide classe les différents paramètres de configuration sécurisée en plusieurs catégories. Grâce à cette approche, vous pouvez vous attacher à une catégorie particulière et examiner la sécurité, ou appliquer des paramètres de sécurité en relation avec cette catégorie spécifique. Lorsque vous installez un nouveau logiciel sur vos serveurs en adoptant cette optique, vous pouvez évaluer l'impact de vos paramètres de sécurité. Par exemple, examinez les questions suivantes : Le logiciel crée-t-il de nouveaux comptes ? Ajoute-t-il des services par défaut ? À quel titre les services s'exécutent-ils ? Des mappages de script sont-ils créés ?

Catégories de configuration de l'hôte

La figure 1.2 montre les diverses catégories utilisées dans la Partie IV de ce guide, « Sécurisation de votre réseau, de votre hôte et de votre application ».

Catégories de sécurité de l'hôte

Figure 1.2
a. Catégories de sécurité de l'hôte

Avec le cadre de référence fourni par ces catégories, vous pouvez de façon systématique évaluer ou sécuriser la configuration de votre serveur au lieu d'appliquer des paramètres de sécurité de manière ponctuelle et aléatoire. Ces catégories particulières sont décrites dans le tableau 1.2.

Tableau 1.2 : Description des catégories de configuration de l'hôte

Catégorie

Description

Correctifs et mises à jour

Bon nombre de risques élevés en matière de sécurité existent du fait que les vulnérabilités sont largement publiées et connues. Lorsque de nouvelles vulnérabilités sont découvertes, le code d'exploitation paraît souvent sur Internet dans les heures qui suivent la première attaque réussie. L'installation des correctifs et des mises à jour du logiciel de votre serveur est donc la première étape de la sécurisation. Si vous la négligez, vous vous exposez davantage aux risques d'attaque et de réception de code malveillant.

Services

L'ensemble des services est déterminé par le rôle du serveur et les applications qu'il héberge. En désactivant les services inutiles et inutilisés, vous réduisez rapidement et facilement les points de vulnérabilité potentiels.

Protocoles

Pour réduire la zone exposée aux attaques et limiter les possibilités offertes aux pirates, désactivez tous les protocoles réseau inutiles ou inutilisés.

Comptes

Vous devez restreindre au strict nécessaire le nombre des comptes de services et d'utilisateurs accessibles depuis un serveur. De plus, vous devez mettre en place des stratégies de compte appropriées, comme la définition de mots de passe forts.

Fichiers et répertoires

Les fichiers et les répertoires doivent être sécurisés à l'aide d'autorisations NTFS limitées qui ne permettent l'accès qu'aux comptes utilisateurs et services Microsoft Windows nécessaires.

Partages

Tous les partages de fichiers inutiles, y compris les partages d'administration par défaut s'ils ne sont pas indispensables, doivent être supprimés. Sécurisez les partages restants en définissant des autorisations NTFS limitées.

Ports

Les services qui s'exécutent sur un serveur écoutent sur des ports spécifiques en vue de répondre aux requêtes entrantes. Les ports ouverts sur un serveur doivent être connus et régulièrement contrôlés afin de garantir qu'un service non sécurisé n'est pas en écoute et disponible pour une communication. Dans le pire des scénarios, un port en écoute est détecté alors qu'il n'a pas été ouvert par un administrateur.

Audit et journalisation

L'audit est d'une aide essentielle pour identifier les intrus ou les attaques en cours. La journalisation s'avère utile pour fournir des informations valides lorsqu'il s'agit de déterminer comment a eu lieu l'attaque ou l'intrusion.

Registre

De nombreux paramètres liés à la sécurité sont gérés dans le registre. Sécurisez donc celui-ci en appliquant des listes ACL Windows limitées et en interdisant l'administration du registre à distance.

Sécurisation de votre application

Si vous examinez et analysez les principaux problèmes de sécurité dans de nombreuses applications Web, il se dégage un modèle de problèmes. Il suffit d'organiser ces derniers en catégories pour pouvoir ensuite les traiter de façon systématique. Ces ensembles de problèmes correspondent aux catégories de vulnérabilités de votre application.

Catégories de vulnérabilités de l'application

Comment mieux mesurer la sécurité d'un système qu'en évaluant ses points faibles potentiels ? Pour mesurer la résistance de votre application, vous pouvez évaluer les catégories générales de vulnérabilités des applications. Ce faisant, vous pouvez créer des profils de sécurité des applications et les utiliser pour déterminer l'efficacité de la sécurité d'une application particulière.

Ces catégories sont utilisées dans ce guide comme cadre de référence. Du fait qu'elles représentent les domaines dans lesquels les erreurs de sécurité sont le plus souvent commises, elles permettent d'illustrer les conseils destinés aux développeurs et aux architectes. Elles servent aussi à évaluer la sécurité d'une application Web. Grâce à elles, vous pouvez vous concentrer en toute cohérence sur les choix déterminants de conception et de mise en œuvre qui affectent la sécurité de votre application. Les catégories de vulnérabilités des applications sont décrites dans le tableau 1.3.

Tableau 1.3 : Catégories de vulnérabilités des applications

Catégorie

Description

Validation de la saisie

Comment savoir si les entrées que reçoit votre application sont valides et sûres ? La validation de la saisie fait référence à la manière dont votre application filtre, nettoie ou refuse les entrées avant de poursuivre le traitement.

Authentification

« Qui êtes-vous ? » L'authentification est le processus selon lequel une entité prouve l'identité d'une autre entité, généralement par le biais d'informations d'identification, telles que le nom et le mot de passe d'un utilisateur.

Autorisation

« Que pouvez-vous faire ? » L'autorisation concerne la manière dont votre application procède à des contrôles d'accès pour les ressources et les opérations.

Gestion de la configuration

Sous quelle identité votre application s'exécute-t-elle ? À quelle base de données se connecte-t-elle ? Comment votre application est-elle administrée ? Comment les paramètres sont-ils sécurisés ? La gestion de la configuration renvoie à la manière dont votre application traite ces questions de fonctionnement.

Données sensibles

Comment votre application traite-t-elle les données qui doivent être protégées soit dans la mémoire, soit en transit, soit dans les supports de stockage ou mémoires persistantes ?

Gestion des sessions

Une session est un ensemble d'interactions associées qui se déroulent entre un utilisateur et votre application Web. La gestion de session fait référence à la manière dont votre application gère et protège ces interactions.

Cryptographie

Comment gardez-vous les éléments secrets (confidentialité ?) Comment rendez-vous vos données ou vos bibliothèques infalsifiables (intégrité) ? Quelles sources de données utilisez-vous pour les valeurs aléatoires qui doivent faire l'objet d'une cryptographie sûre ? La cryptographie désigne la manière dont votre application applique la confidentialité et l'intégrité.

Manipulation des paramètres

Les champs des formulaires, les arguments des chaînes de requête et les valeurs de cookie sont fréquemment employés comme paramètres dans votre application. La manipulation des paramètres implique à la fois la façon dont votre application évite la falsification de ces valeurs et la façon dont elle traite les paramètres d'entrée.

Gestion des exceptions

Lorsqu'un appel à une méthode échoue dans l'application, que fait celle-ci ? Quels sont les éléments révélés en pareil cas ? Renvoyez-vous des informations d'erreur simples aux utilisateurs finals ? Retransmettez-vous à l'appelant des informations d'une quelconque valeur sur l'exception survenue ? L'échec de l'application se déroule-t-il de façon ordonnée et normale ?

Audit et journalisation

Qui a fait quoi et quand ? L'audit et la journalisation permettent à l'application d'enregistrer les événements relatifs à la sécurité.

Principes de sécurité

Les recommandations utilisées dans ce guide s'appuient sur des principes de sécurité qui ont fait leur preuve. La sécurité, comme de nombreux aspects de l'ingénierie logicielle, se prête à une approche basée sur des principes essentiels qui peuvent être appliqués indépendamment de la technique d'implémentation ou du scénario de l'application. Les principaux principes de sécurité employés dans ce guide sont récapitulés dans le tableau 1.4.

Tableau 1.4 : Récapitulatif des principes de sécurité fondamentaux

Principe

Concepts

Compartimenter

Limitez la zone exposée aux attaques. Demandez-vous comment vous contreriez un problème. Si un pirate s'en prend à votre application, à quelles ressources peut-il accéder ? Peut-il accéder à des ressources réseau ? Comment allez-vous limiter les dommages potentiels ? L'utilisation de pare-feu, de comptes moins privilégiés et de code moins privilégié sont des exemples de compartimentation.

Utiliser le moindre privilège

En exécutant des processus qui utilisent des comptes dotés d'un minimum de privilèges et de droits d'accès, vous réduisez considérablement les possibilités d'un pirate si celui-ci réussit à compromettre la sécurité et à exécuter son code.

Appliquer une défense avancée

Utilisez plusieurs opérateurs de contrôle pour interdire l'entrée des pirates. Une défense avancée signifie que vous ne vous fiez pas à une seule couche de sécurité ou que vous n'excluez pas la possibilité de contourner ou de compromettre une couche.

Ne pas faire confiance aux entrées des utilisateurs

Les entrées des utilisateurs constituent l'arme principale du pirate lorsqu'il vise votre application. Imaginez que toutes les entrées sont malveillantes tant que le contraire n'est pas prouvé et appliquez une stratégie de défense minutieuse pour valider la saisie, en prenant des précautions spéciales pour garantir que les entrées sont validées chaque fois qu'une limite sécurisée dans votre application est franchie.

Contrôler la passerelle

Authentifiez et autorisez l'accès des appelants le plus tôt possible, dès la première passerelle.

Définir une procédure d'échec sécurisée

Si une application échoue, ne laissez pas des données sensibles accessibles. Renvoyez aux utilisateurs finals des erreurs simples qui n'exposent pas les détails internes du système. N'incluez pas de détails qui pourraient aider un pirate à exploiter les faiblesses de votre application.

Sécuriser le maillon faible

Existe-t-il dans la couche réseau un point vulnérable qu'un pirate peut exploiter ? Qu'en est-il de l'hôte ? Est-ce que votre application est sécurisée ? Tout maillon faible constitue une occasion de créer une faille dans la sécurité.

Créer des valeurs par défaut sécurisées

Le compte par défaut est-il configuré avec le minimum de privilèges ? Est-il désactivé par défaut puis explicitement activé si nécessaire ? La configuration utilise-t-elle un mot de passe en clair ? En cas d'erreur, les informations sensibles sont-elles renvoyées au client et susceptibles d'être utilisées contre le système ?

Réduire la zone exposée aux attaques

Si vous n'utilisez pas une certaine partie de l'application, supprimez-la ou désactivez-la. Réduisez les points de vulnérabilité en désactivant ou en supprimant les services, les protocoles et les fonctionnalités inutilisés. Votre serveur a-t-il besoin de tous ces services et ports ? Votre application a-t-elle besoin de toutes ces fonctionnalités ?

Résumé

Des attaques toujours plus nombreuses sont dirigées contre votre application. Elles passent directement par la porte de votre environnement via HTTP. Le modèle de forteresse conventionnel et l'installation de pare-feu et de défenses de l'hôte ne suffisent plus lorsqu'ils sont employés isolément. La sécurisation de votre application suppose l'instauration d'une sécurité au niveau des trois couches suivantes : réseau, hôte et application. Une infrastructure sécurisée de plate-forme hôte et de réseau constitue la meilleure solution. De plus, vos applications doivent être conçues et créés selon des principes d'élaboration et de développement fiables qui obéissent à des notions de sécurité ayant fait leurs preuves.

Informations complémentaires

Pour plus d'informations, reportez-vous aux ressources suivantes :

Afficher:
© 2015 Microsoft