Vue d'ensemble des menaces de sécurité des applications Web
Mise à jour : novembre 2007
Si des utilisateurs inconnus peuvent accéder à votre application Web, Il est presque certain que des utilisateurs malveillants essaieront d'accéder de manière non autorisée à votre application. Les serveurs qui sont accessibles au public sur Internet sont constamment analysés à la recherche de failles. Par conséquent, il est recommandé de prendre des précautions et d'intégrer une sécurité dans toutes vos applications Web.
Pour plus d'informations sur les méthodes conseillées en matière d'écriture de code sécurisé et de sécurisation des applications, consultez le manuel « Writing Secure Code » de Michael Howard et David LeBlanc ou l'aide fournie par Microsoft Patterns and Practices.
La technologie de sécurité ne représente qu'une partie de la solution
L'implémentation de la sécurité ne représente qu'une partie de la solution. La vigilance est également indispensable. Même si votre système dispose de nombreuses protections, il vous faut le surveiller attentivement :
Analysez les journaux des événements de votre système. Surveillez les tentatives de connexion répétées à votre système et les demandes en nombre trop élevées auprès de votre serveur Web.
Conservez votre serveur d'application constamment à jour par rapport aux mises à jour de sécurité les plus récentes pour Microsoft Windows et Services Internet (IIS) ainsi que pour Microsoft SQL Server ou d'autres sources de données que votre application peut utiliser.
Modélisation des menaces
La compréhension des menaces représente un aspect important du développement d'une application sécurisée. Microsoft a élaboré un système de classification des différentes menaces : usurpation, falsification, répudiation, divulgation d'informations, déni de service et élévation de privilège sous le nom de STRIDE (Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege ). Les sections suivantes présentent brièvement ces menaces et la façon dont elles s'appliquent aux applications Web.
Usurpation
Usurper signifie emprunter l'identité d'un utilisateur ou d'un processus de manière non autorisée. L'usurpation peut se traduire par le simple fait d'entrer des informations d'identification d'un autre utilisateur. Une utilisation malveillante peut aussi modifier le contenu d'un cookie pour prétendre qu'il s'agit d'un utilisateur différent ou que le cookie provient d'un autre serveur.
En général, vous pouvez éviter toute usurpation à l'aide de procédures d'authentification rigoureuses. Chaque fois que quelqu'un demande l'accès à des informations non publiques, assurez-vous de l'identité de la personne. Vous pouvez également éviter l'usurpation en conservant les informations d'identification de façon sécurisée. Ne conservez pas, par exemple, un mot de passe ou d'autres informations sensibles dans cookie, car un utilisateur malveillant peut facilement le trouver ou le modifier.
Falsification
Falsifier signifie modifier ou supprimer une ressource sans autorisation. C'est le cas par exemple de l'altération d'une page Web par un utilisateur malveillant qui accède à un site et en modifie les fichiers. L'utilisation d'une attaque de script constitue un moyen de falsification indirect. Un utilisateur malveillant envoie du code (script) exécutable en le masquant comme entrée d'utilisateur d'une page ou sous forme de lien.
La première défense contre la falsification consiste à utiliser la sécurité Windows pour verrouiller les fichiers, répertoires et autres ressources Windows. L'application doit également s'exécuter avec les privilèges minimums. Vous pouvez vous protéger contre les attaques de script en vous méfiant systématiquement de toute information provenant d'un utilisateur, voire d'une base de données. Chaque fois que vous obtenez des informations d'une source non fiable, vérifiez qu'elles ne contiennent aucun code exécutable.
Répudiation
Une menace répudiation implique le traitement d'une transaction de telle façon qu'aucune preuve des entités de sécurité impliquées ne subsiste à la transaction. Dans une application Web, cela peut se traduire par l'usurpation des informations d'identification d'un utilisateur innocent. Là encore, vous pouvez vous protéger de la répudiation à l'aide de procédures d'authentification rigoureuses. Utilisez, en plus, les fonctionnalités du journal de Windows pour conserver une trace de l'ensemble des activités ayant eu lieu au niveau du serveur.
Divulgation d'informations
La divulgation d'informations désigne simplement le vol ou la révélation d'informations supposées être privées. Un exemple typique est le vol de mots de passe, mais la divulgation d'informations peut impliquer l'accès à n'importe quel fichier ou ressource du serveur.
Le meilleur moyen de se défendre contre la divulgation d'informations est de ne disposer d'aucune information à divulguer. Par exemple, si vous ne stockez pas les mots de passe, les utilisateurs malveillants ne pourront pas les voler. Une alternative au stockage des mots de passe consiste à ne stocker que leur hachage. Lorsqu'un utilisateur présente ses informations d'identification, vous pouvez hacher le mot de passe de l'utilisateur et comparer uniquement les deux hachages. Si vous stockez des informations sensibles, sécurisez-les à l'aide de la sécurité Windows. Utilisez également l'authentification pour garantir que seuls les utilisateurs autorisés puissent accéder aux informations restreintes. Si vous devez exposer des informations sensibles, il est recommandé de chiffrer les informations lorsqu'elles sont stockées et d'utiliser SSL (Secure Sockets Layer) pour chiffrer les informations lorsqu'elles sont envoyées au et à partir du navigateur.
Déni de service
Une attaque de déni de service vise à réduire de façon délibérée la disponibilité d'une application. La surcharge d'une application Web de sorte qu'elle ne puisse pas servir les utilisateurs ordinaires en est un exemple classique. Des utilisateurs malveillants peuvent aussi simplement tenter de provoquer l'arrêt de votre serveur.
IIS vous permet de limiter les applications, c'est-à-dire de restreindre le nombre de demandes auxquelles elles répondent. Vous pouvez refuser l'accès à des utilisateurs ou adresses IP connus comme étant malveillants. Pour garder vos applications en ligne vous devez exécuter du code fiable. Vous devez intégralement tester votre application et, dans la mesure du possible, effectuer les actions appropriées en cas d'erreurs.
Élévation de privilège
L'élévation de privilège consiste, pour un utilisateur malveillant, à obtenir un niveau d'autorisation plus élevé que celui qui lui est normalement assigné. Par exemple, une élévation de privilège réussie consiste, pour un utilisateur malveillant, à obtenir des privilèges d'administrateur de votre serveur Web, ce qui lui donne accès à toutes les données sur le serveur ainsi qu'au contrôle des fonctions serveur.
Pour vous protéger de l'élévation de privilège, exécutez l'application avec les privilèges les plus faibles possible. Par exemple, il est recommandé de ne pas exécuter les applications ASP.NET en tant qu'utilisateur SYSTEM (administrateur).