La sécurité des sites Internet

XP-Infos n° 17 – décembre 2010

Article

Selon les experts en la matière, la majorité des applications Web souffrent de vulnérabilités. Il est pourtant nécessaire de comprendre que la sécurité des sites Internet ne souffre pas de manichéisme : un site peut être plus ou moins sûr, et la sécurité est souvent une affaire de compromis. Elle dépend de nombreux facteurs, tels que les connaissances du développeur bien entendu, mais aussi la conception et la complexité du site, le coût et les délais de fabrication et même parfois – aussi étonnant que cela puisse paraître – de la responsabilisation de ses utilisateurs.

Plus un site est complexe, plus il est potentiellement vulnérable

La complexité d’un site Web en augmente la vulnérabilité potentielle. En effet, dans un site statique, sans code client, sans code serveur ni base de données (cf. XP-Infos n° 10), le plus grand risque est le vol de codes FTP (ces codes permettent de placer les pages HTML sur un hébergement). Sans ces codes, il est fort peu probable qu’un pirate puisse modifier un site qui ne consiste qu’en des pages HTML simples, à moins de pirater carrément l’hébergeur lui-même (mais le propriétaire d’un site ne peut intervenir, seul l’hébergeur pourra s’en protéger). Avec l’ajout de code PHP s’ajoutent les risques de faiblesses du code écrit. Là, ce n’est pas la technologie elle-même qui est en cause, ce sont les connaissances des développeurs qui entrent généralement en ligne de compte. Avec l’ajout de bases de données, s’ajoute le risque d’attaque de la base de données et du vol ou de la modification de son contenu.

Comme dans tout ensemble, physique ou virtuel, plus le système à protéger est vaste et complexe, plus les failles potentielles sont nombreuses et plus la sécurité est difficile à assurer.

L’insécurité découle bien souvent de multiples facteurs

L’insécurité d’un site peut être elle-même complexe à saisir. Une faille de sécurité peut s’avérer sans danger en soi pour les utilisateurs, mais être utile à un pirate pour réaliser une autre attaque.

Par exemple, pour garder trace des utilisateurs, les sites Internet utilisent le mécanisme de la session, qui se transmet de page en page. Cette session possède un identifiant unique qui permet de différencier les utilisateurs. Un pirate peut réussir à forcer un utilisateur à visiter un site avec un identifiant de session fixé par lui-même (« session fixation » ou fixation de session). Jusque-là, les dommages sont inexistants. Mais si l’utilisateur s’identifie et que le site ne force pas la génération d’un nouvel identifiant de session, le pirate peut – sans connaître les identifiants de l’utilisateur – alors visiter le site en présentant l’identifiant de session qu’il a préalablement fixé et se faire ainsi passer pour l’utilisateur légitime. Il a alors usurpé sa session (« session hijacking » ou détournement de session).

Les compromis entre la sécurité et l’utilisabilité

La sécurisation d’un site Internet est aussi un équilibre délicat entre la facilité d’utilisation (ou utilisabilité) et la mise en œuvre de mesures de contrôle.

Par exemple, si un site choisit de ne pas imposer un degré de complexité minimum pour les mots de passe de ses utilisateurs, il permet à ces derniers de faciliter le piratage de leur compte. Si le site n’est pas protégé contre ce type d’attaque, les pirates peuvent utiliser un robot qui envoie de multiples tentatives de connexion à un compte et teste la réponse du formulaire (« brute force attack » ou attaque par force brute). Si le nom d’utilisateur est connu, le robot essaie d’innombrables combinaisons de caractères pour le mot de passe uniquement, en commençant par exemple par des ensembles de mots ayant une signification (ce qui réduit les combinaisons possibles). Évidemment, plus le mot de passe est simple, plus il est trouvé rapidement.

Au contraire, si un site force ses utilisateurs à enregistrer des mots de passe complexes, il renforce donc considérablement sa sécurité contre ce type d’attaque, mais diminue tout aussi considérablement sa facilité d’utilisation, voire fait fuir bon nombre d’internautes ainsi forcés de retenir un mot de passe plus difficile à mémoriser.

Les compromis entre la sécurité et le coût

Comme tout travail supplémentaire, la sécurisation d’un site Internet a un coût. Créer un formulaire pour permettre à ses utilisateurs d’envoyer une demande, peut-être avec une pièce jointe, nécessite d’écrire ensuite le code qui traitera les informations et fichiers envoyés. Contrôler les données et les fichiers reçus exige des lignes de codes et des tests – et donc du travail – supplémentaires. Faire auditer le code et les logiques de défense par un tiers minimise encore les risques d’erreur, mais augmente d’autant plus le coût de développement final. On le comprendra, comme dans tous les domaines, il existe un moment où l’on fait un choix entre qualité et prix, donc entre sécurité et coût.

Pour reprendre l’exemple d’attaque précédent, un formulaire peut vérifier le nombre de tentatives connexion rapprochées et bloquer temporairement le compte utilisateur subissant un nombre anormal de tentatives pour se protéger. Mais évidemment, cela augmente les temps de développement et de maintenance, et donc le coût de production du site.

La vulnérabilité des navigateurs

Les internautes doivent utiliser des navigateurs (ou agents utilisateur) pour parcourir le Web. Comme tout logiciel, ceux-ci sont potentiellement porteurs de vulnérabilités et peuvent ainsi exposer accidentellement, sous certaines conditions, des informations concernant leur utilisateur. Il est donc nécessaire de mettre à jour ces logiciels lorsque de telles vulnérabilités sont découvertes et que des correctifs sont publiés. Mais beaucoup d’utilisateurs ne le font pas, ce qui ouvre une faille de sécurité qui n’est pas forcément du ressort des développeurs du site Internet.

Quelques types d’attaques

Voyons quelques attaques recensées pour bien comprendre la complexité du problème et l’ampleur des failles de sécurité potentielles d’un site Internet.

Attaque d’URL sémantique (« Semantic URL attack »)

Cette technique consiste à modifier les variables passées en clair par l’URL. Ainsi, l’adresse http://www.exemple.com?utilisateur=dupont&mail=dupont@exemple.com transmet deux variables :

  • « utilisateur », dont la valeur est « dupont »
  • « mail », dont la valeur est « dupont@exemple.com ».

Si une application ne vérifie pas correctement que ces variables correspondent bien à l’utilisateur authentifié, un attaquant peut par exemple injecter du code ou se faire passer pour un autre utilisateur et découvrir des informations le concernant, modifier son mot de passe, etc., selon les défauts de l’application Web.

Bien souvent, il leur faut procéder par tentatives multiples pour trouver les failles d’un site, mais les pirates savent être patients et méthodiques, et ils créent des robots qui vont tenter de découvrir toute faille permettant des opérations illicites.

Cross-Site Scripting (XSS)

Le Cross-Site Scripting est une des attaques les plus connues.

Si un site affiche sans le contrôler du texte saisi par un utilisateur, ce dernier peut attaquer l’application Web en inscrivant par exemple du code JavaScript. Ce dernier exécutant des actions, le code sera exécuté comme s’il faisait partie de la page originelle et l’attaquant peut rediriger les informations auxquelles JavaScript a accès vers un autre site. L’attaquant peut ainsi connaître par exemple le contenu des cookies, et dans le cas d’une application Web qui utiliserait les cookies pour enregistrer le nom des utilisateurs, ou pire leur mot de passe, voler ainsi ces informations.

Injection SQL (« SQL injection »)

L’injection SQL l’une des vulnérabilités les plus courantes des applications Web.

SQL est le langage utilisé pour exécuter des actions sur les bases de données (cf. XP-Infos n° 11). L’injection SQL consiste à tenter de modifier la requête prévue par le développeur pour exécuter une action différente (illicite) sur la base de données. Par exemple, dans un formulaire de connexion contenant un nom d’utilisateur et un mot de passe, l’attaquant peut tenter d’écrire un code SQL dans l’un de ces champs pour court-circuiter la nécessité de présenter le mot de passe. Si l’application ne prend pas la peine de vérifier le contenu des deux champs et de bloquer le texte suspect, elle est vulnérable à ce type d’attaque.

Il existe de nombreux autres types d’attaques et de vulnérabilités, mais cet article ne peut être exhaustif en la matière ; son objectif est surtout de faire comprendre que la sécurité d’un site Internet découle de la mise en œuvre d’un ensemble de mesures, mais elle est aussi souvent un choix, un compromis difficile entre utilisabilité et sécurisation. De plus, la sécurité d’un site Web demande un degré d’expertise qui augmente avec le temps et les avancées technologiques. Elle entraîne donc inévitablement des coûts supplémentaires, ce qui a pour conséquence de conduire l’acheteur à faire des choix : la sécurité dépend alors également d’un compromis entre le prix et le niveau de sécurisation.

Trucs et astuces

Le mois prochain

Les redirections 301 ou comment ne pas perdre son trafic