• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 15/03/2023

Empêchez le piratage de session

Empêchez le piratage de session

Fin 2012, un pirate a volé une base de données du département de la Sécurité sociale de la Caroline du Sud. 3,6 millions de numéros de Sécurité sociale et 387 000 numéros de carte de crédit au total. Un vrai trésor pour un marchand d’identités usurpées.

Cette faille venait d’un mot de passe par défaut présent dans une couche d’authentification.

L’authentification est une fonctionnalité cruciale dans votre application web pour permettre à vos utilisateurs d’accéder à leur données et à leur environnement. Dans ce chapitre, nous allons voir comment sécuriser les sessions d’authentification.

Définissez le piratage de session

L’identification et l'authentification de mauvaise qualité (ou Identification and Authentication Failures, en anglais) est l’attaque qui occupait la deuxième place du classement de l’OWASP depuis 2013, sous le nom de Broken Authentication

Elle est maintenant sixième du classement. Cette baisse dans le classement démontre que l’exploitation de l’authentification est une faille courante, mais qui est de mieux en mieux protégée.

Alors qu'est-ce que c'est ?

Supposons que vous ayez un site qui exige que vous vous connectiez avec votre nom d'utilisateur et votre mot de passe pour accéder aux pages qui contiennent des informations sur votre compte. Lorsque vous vous connectez, les informations d'identification sont transmises à la base de données. Si le nom d'utilisateur et le mot de passe correspondent à ceux de la base de données, vous serez authentifié pour une session. 

À tout moment du processus d'authentification, un utilisateur malveillant peut obtenir un accès non autorisé à la session et avoir accès à des données sensibles.

Une session peut inclure des données personnelles, des données financières et l'accès à des informations protégées ou à des secrets commerciaux, par exemple.

À quoi ressemblent ces attaques ?

Le piratage de l’authentification peut être automatisé avec l’utilisation de la technique de force brute.

Lorsqu'un utilisateur malveillant a un accès non autorisé à une liste de noms d'utilisateurs et de mots de passe, une attaque appelée credential stuffing peut être utilisée pour essayer toutes les combinaisons de noms d'utilisateur et de mots de passe, jusqu'à ce que le pirate arrive à s'authentifier.

Appréhendez l'utilisation de cookies

Un cookie HTTP (également appelé cookie web, cookie Internet, cookie de navigateur ou simplement cookie) est une petite donnée envoyée depuis un site web et stockée sur l'ordinateur de l'utilisateur par un navigateur web lorsque l'utilisateur consulte le site.

Les cookies ont été conçus pour constituer un mécanisme fiable permettant aux sites web de mémoriser des informations importantes (telles que les éléments ajoutés au panier dans une boutique en ligne) ou d'enregistrer l'activité de navigation de l'utilisateur (en se connectant ou en enregistrant les pages consultées). Ils peuvent également être utilisés pour mémoriser des informations que l'utilisateur a précédemment entrées dans des champs de formulaire, telles que des noms, des adresses, des mots de passe et des numéros de carte de crédit. Voilà pourquoi il représente un intérêt pour un attaquant.

Que se passe-t-il lorsqu'un site demande d'accepter des cookies ?

Vous vous souvenez peut-être que votre navigateur vous a averti qu'un site web nécessite l'utilisation de cookies pour que vous puissiez l'utiliser ?

HTTP ne peut pas enregistrer d'informations sur votre navigateur. Un cookie est donc un fichier tiers enregistré, qui donne un accès personnalisé à l'utilisateur du site. Les cookies ont été créés pour vous faciliter la vie, de sorte que vous n’ayez pas besoin de vous reconnecter ou d'entrer les mêmes données encore et encore. Ils aident un site web à se souvenir de ce que vous avez fait sur leur site pour personnaliser l'expérience. Ces cookies ne sont accessibles que par le site web qui les a créés.

Il existe deux types de cookies : les cookies de suivi et les cookies de session.

Découvrez les cookies de suivi

Les cookies de suivi sont un type de cookie spécifique distribué, partagé et lu sur au moins deux sites web non liés, dans le but de collecter des informations ou éventuellement de vous présenter des données personnalisées.

Supposons que j'achète des graines pour mon potager d’appartement sur un site web appelé seedsell.com et qu'il télécharge un cookie sur mon navigateur avec des informations qui m'identifient. Toutes mes activités sur ce site seront enregistrées sur seedsell.com via le cookie qui contient mon identifiant.

seedsell.com permet à funnikaaaats.com d'accéder à ses données, et par conséquent funnikaaaats.com vous affiche une publicité de seedsell.com
seedsell.com partage ses cookies de suivi avec funnikaaaats.com

Puis, je décide d'aller sur le site funnikaaaats.com et soudain je vois toutes ces annonces me montrant les graines que je regardais sur seedsell.com !

Mais seul seedsell.com peut accéder aux informations des cookies stockées sur son site, alors comment funnikaaaats.com a découvert que j'aime ces graines ?

funnikaaaats.com a intégré un code pour seedsell.com à l'intérieur de son site web afin qu'il puisse accéder à votre cookie seedsell.com. Et maintenant, ces informations sont stockées sous ce cookie ID dans seedsell.com.

Maintenant, le cookie de suivi de seedsell.com sait quelles graines et vidéos de chat vous aimez.

Bien que les cookies de suivi ne peuvent pas être utilisés pour pirater une session, ils peuvent représenter un problème concernant la confidentialité et la vie privée, car ils permettent l’accès à vos habitudes de navigation.

Découvrez les cookies de session

Les cookies de session contiennent un identifiant de session. 

Supposons que vous vous connectez au site web de votre banque et que vous recevez un cookie qui est stocké dans votre navigateur et qui vous garde connecté jusqu'à ce que la session expire.

Dans ce cas, chaque session reçoit un ID de session. L'authentification peut être détournée si l'utilisateur malveillant devine le bon ID de session.

Avec le protocole HTTP, les sites web n'ont pas la possibilité d'enregistrer des informations d'authentification ou de session sauf s'ils les stockent dans un fichier sur les navigateurs. C'est à ça que servent les cookies de session.

Souvent, le navigateur enregistre un cookie qui contient les informations de session, l'ID de session, la date et l'heure d'expiration.

Protégez vos cookies 

Voici quelques recommandations pour garantir la sécurité des cookies :

  • Assurez-vous que les cookies sont chiffrés lors de la transmission via HTTPS.

  • Ne stockez pas d'informations d'identification en texte clair dans vos cookies.

  • Définissez une date d'expiration pour vos cookies de session.

  • Utilisez autant que possible le flag "httpOnly" sur le cookie de session.

Prévenez votre application des authentifications non autorisées

Des recommandations simples peuvent être appliquées :

  • Exigez de vos utilisateurs qu'ils aient un mot de passe fort, c'est-à-dire contenant des majuscules, des minuscules, des chiffres et des caractères spéciaux. Il sera ainsi plus difficile pour un utilisateur malveillant de trouver le mot de passe.

  • Il est également recommandé d'exiger des utilisateurs qu'ils changent régulièrement leur mot de passe en cas d’attaque de credential stuffing.

  • Mettez en place le verrouillage de compte lorsqu'un utilisateur essaie de se connecter un trop grand nombre de fois sans y parvenir. Cela permet d'empêcher les attaques de force brute.

  • Changez ou désactivez les comptes par défaut.

  • Implémentez une authentification forte, c’est-à-dire avec plusieurs facteurs d’authentification, comme le MOTP (Mobile One Time Passwords) ou le TOTP (Time-based One-time Password) par exemple. 

Heureusement, il existe des frameworks pour vous aider à implémenter plus facilement un code sécurisé, quel que soit le langage que vous utilisez :

  • ASP.NET Core IdentityFramework peut être intégré dans votre application web pour personnaliser vos besoins d'authentification. L'ajout d'ASP.NET Core IdentityServer vous permet d'utiliser les techniques de développement sécurisé pour l'authentification par jeton.

  • Ruby a des fonctions (gems) comme omniauth qui peuvent être implémentées pour l'authentification.

  • Java a javax.security.auth et l'API Java Authentication and Authorization Service (JAAS) qui peuvent configurer votre authentification de la bonne façon !

  • PHP a PHPSec qui peut être utilisé pour gérer la sécurité et les sessions.

Prévenez l'authentification malveillante

Une bonne pratique pour la validation des entrées est de vérifier toutes les entrées en supprimant les caractères non pertinents. 

En Java, vous pouvez créer une méthode pour hacher le mot de passe avec le framework Spring. Quel que soit le langage dans lequel vous développez, il existe plusieurs solutions qui peuvent vous permettre de sécuriser votre mécanisme d'authentification !

Dans la mesure du possible, il est préférable d’utiliser les mécanismes d’authentification présents dans les frameworks utilisés et éviter de recoder un mécanisme, et donc réinventer la roue, en prenant le risque de créer plus de problèmes de sécurité que d’en résoudre.

Au même titre qu’il faut éviter, si possible, de redévelopper un mécanisme d’authentification, il faut éviter d’écrire et d’implémenter un système de chiffrage maison, mais plutôt s’appuyer sur des bibliothèques spécialisées, OpenSSL par exemple, qui permettent d’avoir une implémentation fiable et ainsi réduire les risques de créer des failles exploitables.

Gérez les sessions et les jetons

Adopter les meilleures pratiques pour la gestion des sessions et des jetons est également important car il s'agit d'une autre forme d'authentification. Les cookies de session et les jetons peuvent rendre vos sessions vulnérables.

Voici quelques conseils pour vous aider à développer vos mécanismes d'identification et de validation de session :

  • Ne mettez pas l’ID de session dans l’URL.

  • Limitez la durée de l'ID de session.

  • Modifiez le nom d'ID de session par défaut.

Connaissez votre niveau de protection

Si j'implémente toutes ces règles, mon application web sera-t-elle sécurisée ?

Peu importe le nombre de couches de sécurité et de fonctionnalités que vous ajoutez à votre code, il y a toujours des attaques auxquelles vous ne serez pas préparé.

Restez informé des nouvelles vulnérabilités afin de sécuriser votre application contre de futures attaques. Et bien que cela puisse vous sembler évident, mettez systématiquement à jour vos bibliothèques ou tout ce qui compose votre infrastructure au plus tôt après la communication d’une vulnérabilité qui pourrait toucher votre code ou votre infrastructure.

Cependant, en respectant ces règles, vous pouvez prévenir les attaques courantes et réduire votre surface d'attaque de 80 %.

En résumé 

  • Le piratage d’authentification peut se produire lorsque les cookies ne sont pas sécurisés.

  • Utilisez la validation des entrées et limitez le nombre d'essais de connexion.

  • Les attaques par force brute et credentials stuffing sont courantes.

  • Limitez la durée des sessions.

  • Sécurisez vos cookies pour qu'ils soient transmis par l'en-tête et via HTTPS.

Dans le prochain chapitre, nous verrons comment garantir l’intégrité de vos données et logiciels.

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous
Exemple de certificat de réussite
Exemple de certificat de réussite