• 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 20/03/2024

Évitez les pièges de la conception non sécurisée

bannière décorative

Cette catégorie réfère à des lacunes ou des défauts dans les étapes de conception qui ne prennent pas en compte les principes de sécurité, laissant ainsi le champ libre à diverses vulnérabilités.

Découvrez un cas d’attaque

En début d'année 2020, un défaut de conception significatif a été découvert dans le réseau social populaire TikTok par la société de sécurité CheckPoint

Cette vulnérabilité résidait dans la fonction de recherche d'amis de l'application et présentait des risques graves pour la sécurité et la vie privée de ses utilisateurs.

La faille permettait à des acteurs malveillants d'accéder à des données personnelles sensibles des utilisateurs, y compris leurs dates de naissance, adresses e-mail et autres informations privées. Plus alarmant encore, elle ouvrait la porte à des manipulations malveillantes telles que la suppression de contenus, le changement du statut de vidéos de privées à publiques, et la modification de contenus postés par les utilisateurs.

La vulnérabilité a mis en lumière l'importance d'intégrer des principes de sécurité dès les premières étapes de conception d'une application, surtout dans un contexte où la protection des données personnelles est primordiale.

Identifiez la conception non sécurisée et son impact

Une conception non sécurisée fait référence à l'absence de prise en compte des aspects de sécurité dans la phase de conception de votre application web. Cela peut inclure (sans se limiter) :

  • Le manque de contrôles d'accès,

  • L'insuffisance de chiffrement des données sensibles,

  • Ou la négligence des pratiques de sécurité dans la gestion des interactions entre différents composants du système.

C’est très large, aurais-tu des exemples précis ?

Voyons ensemble quelques exemples précis de conception non sécurisée.

Des mécanismes de récupération de mot de passe vulnérables

Une application permet à un utilisateur de réinitialiser son mot de passe en répondant à des questions de sécurité facilement devinables ou accessibles publiquement (comme "Quelle est votre ville de naissance ?").

Un attaquant pourrait utiliser les sources ouvertes comme les réseaux sociaux afin de trouver les réponses aux questions correspondant à votre compte et modifier votre mot de passe sans que vous n’en ayez conscience.

Un système de réservation de cinéma vulnérable

Un cinéma propose des tarifs réduits pour les réservations de groupe avec une limite de quinze personnes par réservation. Un attaquant pourrait exploiter cette fonctionnalité pour effectuer de nombreuses réservations massives, par exemple en réservant 600 places dans tous les cinémas simultanément, sans verser d'acompte. Cette situation pourrait entraîner des pertes financières significatives pour le cinéma et des désagréments pour les clients réguliers.

Un site e-commerce vulnérable aux bots

Un site d’e-commerce ne protège pas contre les bots qui achètent en masse des articles très demandés, comme des cartes graphiques haut de gamme. Ces bots revendent ensuite les produits à des prix élevés sur le marché secondaire. Cette situation peut nuire à la réputation des détaillants et des fabricants, tout en frustrant les clients légitimes.

La conception non sécurisée est une vaste catégorie. Souvent, ces problèmes viennent du fait qu'on n'a pas correctement évalué les risques liés au logiciel ou au système développé.

Je suis en train de concevoir une nouvelle application web, comment éviter ce genre d’erreurs ?

Très bonne question, voyons à présent comment vous en protéger !

Protégez votre application web en corrigeant les erreurs de conception

Concrètement, admettons que vous êtes un nouvel architecte, à qui l’on donne en charge un projet d’application web. Voici de bonnes pratiques que vous pourriez mettre en place et des points de vigilance sur lesquels vous pourriez vous focaliser :

1. Stockage non protégé des informations d’identification : la gestion des identités et des accès utilisateurs (mot de passe ou système de génération de certificats) doit être prévue pour être la plus fiable qu’il soit possible d’être. 

2. Violation des limites de la confiance : Il arrive parfois que dans le même "coffre-fort" numérique, on mélange sans le vouloir des objets de valeur avec des objets sans importance. Cette situation se produit lorsqu'on ne distingue pas clairement les données fiables des données non fiables. Sans un mécanisme rigoureux de validation des entrées, le système back-end pourrait devenir la porte dérobée parfaite pour des échanges de données non sécurisés.

3. Critères d'observabilité : l’observabilité est caractérisée par la capacité de déduire l’état d’un système ou d’une application par rapport à ce qu’elle renvoie comme information. Il peut s'agir de journaux produits par exemple ou encore de métriques.

4. Gestion des rôles : l’architecture d’un système, application comme infrastructure, doit être étudiée en prenant en compte les différents rôles qui seront prévus, ou configurables. Une matrice d’habilitation à placer en fonction des rôles peut être un point de départ à la réflexion.

OK, j’ai bien pris en compte ces vigilances, d’accord, mais comment est-ce que je peux m’en protéger ?

Vous pourriez commencer par suivre les pratiques suivantes :

  • Mettre en place un cycle de vie de développement : des frameworks, comme OpenSAMM (en anglais) existent pour formuler des stratégies de sécurité des applications adaptées aux risques spécifiques auxquels elles sont confrontées.

  • Mettre en place des tests unitaires et d’intégration automatisés : une couverture de code complète, avec des tests automatisés, couplée à une logique de DevSecOps permettent de réduire les risques.

  • Gérer de façon granulaire des ressources : Lors des phases de récupération des besoins métier, il est important de bien recueillir et évaluer les exigences techniques et fonctionnelles, dont la confidentialité des données de l’application. Ensuite, bien mettre en place et appliquer une gestion sécurisée des droits d’accès.

  • Séparer les couches systèmes et réseau de l’application : en divisant le déploiement en sous-systèmes modulaires ou en réseaux virtuels, il est plus facile de restreindre le niveau d'accès à des données et des ressources spécifiques. Ainsi, il est difficile pour les pirates d'étendre leur champ d'accès en cas d'attaque.

Beaucoup de points sont à vérifier dans cette catégorie, par quoi commencer ?

Comme pour les autres catégories du TOP 10, l’OWASP a produit une cheatsheet en rapport avec la conception sécurisée d’une application que vous pouvez suivre.

Afin d'éviter les pièges de la conception non sécurisée, nous verrons dans la dernière partie de ce cours comment il vous est possible de concevoir de manière la plus sécurisée possible une application web. Cela, en s’appuyant sur le cycle de vie du développement logiciel sécurisé.

En résumé

  • L'attaque de 2020 contre TikTok démontre la nécessité d'intégrer des principes de sécurité dès les premières étapes de la conception d'une application pour éviter les vulnérabilités graves.

  • Les erreurs de conception peuvent être nombreuses et toucher différentes fonctions, comme la sécurité des mots de passe, la réservation et la protection contre les bots sur les sites de vente. 

  • Pour éviter au maximum ces risques, il est important d'adopter des stratégies de conception sécurisée.

  • Intégrer des pratiques de sécurité comme OpenSAMM, réaliser des tests unitaires et d'intégration automatisés, gérer de manière granulaire les ressources, et séparer les couches systèmes et réseau sont des étapes clés pour renforcer la sécurité dès la conception.

Dans le prochain chapitre, nous allons explorer les catégories A05:2021 et A06:2021 de l'OWASP, qui mettent l'accent sur la nécessité de maintenir une configuration de sécurité adéquate et d'utiliser des composants à jour pour prévenir les vulnérabilités dans vos applications web. Vous êtes prêt ?

Exemple de certificat de réussite
Exemple de certificat de réussite