Introduction à la sécurité des applications web
Quelques chiffres sur le Web et la sécurité
Le monde de l’Internet est devenu indispensable et ancré dans la vie quotidienne d’une bonne partie d’entre nous. En 2015, 42 % de la population mondiale serait connectée à Internet dont 2,060 milliards d’inscrits sur les réseaux sociaux. Google, Amazon, YouTube, Facebook, Twitter, Apple ou Microsoft font partie de notre quotidien ou sont amenés à en faire partie. En effet, d’après une étude du cabinet Gartner sortie en octobre 2016, 20 % de nos actions quotidiennes auront une interaction avec un des sept géants de l’Internet. Ainsi, l’augmentation du nombre des objets connectés, l’expansion des réseaux sociaux et la transformation digitale des entreprises permettent le développement croissant de l’Internet mais aussi du Web. Effectivement, il y a quinze ans, le Web était surtout un espace dédié aux blogs, sites vitrines ou boutiques en ligne. Aujourd’hui, celui-ci s’invite dans les applications mobiles, métiers, embarquées et cloud. Payer ses impôts, faire ses courses, faire des rencontres ou préparer un voyage passe inévitablement de près ou de loin par le monde du Web car cette technologie est disponible partout et tout le temps.
Mais qu’en est-il de la sécurité ? Toujours...
À qui s’adresse ce livre ?
Les développeurs, testeurs et chefs de projet sont concernés par l’ensemble de l’ouvrage et peuvent utiliser celui-ci pour monter en compétence sur les aspects techniques et fonctionnels de la sécurité web tels que la modélisation des menaces, la protection des données personnelles et le secure code.
Les responsables de la sécurité des systèmes d’information (RSSI) et managers en sécurité désirant s’informer sur les modèles de sécurité existants ou ayant pour objectif de sécuriser au mieux le développement et l’opérationnel au sein d’un cycle de développement classique ou DevOps ont la possibilité d’utiliser cet ouvrage comme matrice pour insérer des processus, formations et méthodes de sécurité.
L’ouvrage cible également les Pentesters ou curieux voulant s’améliorer ou s’initier aux principaux risques et vulnérabilités du Web en pratiquant des exercices et en s’informant sur les aspects théoriques des failles.
Anatomie d’une application web
Les applications web se complexifient et les bibliothèques, les langages, les plateformes permettant de contribuer à la création d’une application web sont de plus en plus nombreux et populaires. Alors que le métier de webmaster était en vogue dans les années 2000 et que celui-ci suffisait à la création d’un site web, aujourd’hui il est courant d’entendre les désignations telles que Front, Back, Full stack, UX, Lead Dev et intégrateur dans les équipes chargées de développer des applications.
Le prêt à l’emploi est de plus en plus populaire avec les solutions cloud dont l’objectif est d’apporter la plateforme de travail sans se préoccuper de l’infrastructure et de permettre ainsi de se concentrer sur le code (PaaS).
L’arrivée du HTML5 et des navigateurs de plus en plus performants a permis de rendre possibles des suites bureautiques (Office 365, Google Apps), systèmes d’exploitation (Chrome OS, ZeroPC), jeux… à partir d’une application web.
Malgré toute sa complexité, le Web repose toujours sur un modèle client-serveur dont voici une illustration :
Cette illustration montre l’interconnexion entre les différents éléments indispensables d’une application web dynamique. Plusieurs...
Frameworks et CMS
Devenus indispensables dans le monde du développement en général, les frameworks (bibliothèques) ont comme particularité d’aider les développeurs dans la conception d’une application. Que ce soit Spring, .NET, Symfony, Django pour le back ou AngularJS et jQuery pour le côté front, les frameworks sont partout. Certains comme Bootstrap permettent l’uniformité des applications sur les navigateurs de chaque appareil (mobile, tablette, workstation), d’autres proposent une architecture prête à l’emploi et une production de code plus rapide. Les frameworks ne remplacent pas les langages, mais se superposent à ceux-ci.
L’illustration ci-dessus montre quelques frameworks utilisés en back et front. AngularJS et jQuery pour le JavaScript côté front et Symfony, Django et Spring pour PHP, Python et Java par exemple. Recourir aux frameworks permet aux applications de gagner en sécurité, à condition qu’ils soient bien utilisés.
Un autre outil très populaire a aussi envahi le monde du Web depuis plus de 10 ans. Les Content Management System (CMS) tels que WordPress et Drupal pour les sites et blogs, Prestashop pour l’e-commerce et phpBB pour les forums sont devenus incontournables. À la différence des frameworks, les CMS sont plus user-friendly car ils sont étudiés...
Méthodes classiques et méthodes agiles
Après avoir fait une introduction sur les différentes technologies et topologies autour du Web, il est important d’étudier les différentes méthodes de développement utilisées par les organisations pour fabriquer des applications.
Les derniers chapitres de cet ouvrage étant consacrés à la sécurisation des cycles de développement, il est indispensable de poser les fondations sur les méthodes utilisées au sein des cycles.
La méthode traditionnelle dite en cascade (Waterfall) a pour particularité d’être décomposée en plusieurs phases. Une fois une phase terminée, il est possible de passer à l’autre phase et ainsi de suite. Voici une illustration d’un cycle de développement Waterfall :
La phase Exigences correspond généralement à l’analyse des besoins clients alors que la phase Conception correspond plutôt à la réflexion autour de l’architecture de l’application et à la façon d’arriver au résultat escompté. La phase Code se charge du développement logiciel et la phase Test permet de vérifier la qualité et sécurité de celui-ci.
Même si cette méthode paraît concrète et logique, elle peut avoir quelques...
Sécurité des systèmes d’information
Avant même de commencer l’étude de la sécurité des applications et ses fondamentaux, il est nécessaire de poser les bases de la sécurité organisationnelle.
En effet, la sécurité technique est un des maillons de la chaîne de la sécurité et non la chaîne en tant que telle.
On appelle système d’information (SI) l’organisation des ressources permettant de gérer l’information au sein des entreprises. Son directeur, nommé DSI (directeur des systèmes d’information), a la lourde tâche d’aider les entreprises dans l’accompagnement digital des choix stratégiques de l’entreprise ou bien dans l’orchestration de l’ensemble physique (backup, stockage, réseau) et logique (logiciel) de celle-ci.
Le monde devenant de plus en plus informatisé, les SI s’agrandissent. Afin de gérer et établir des règles, il est nécessaire de mettre en place de la gouvernance.
La gouvernance est l’art et la manière de gérer un SI en établissant des obligations, procédures ou référentiels tels que COBIT et ITIL. Les décideurs tels que le DSI et le RSSI (responsable de la sécurité des systèmes d’information) sont en charge de la gouvernance...
Les différents axes de sécurisation d’une application web
Les applications web font entièrement partie du système d’information des organisations, et certaines applications sont d’ailleurs centrales dans une entreprise. C’est le cas des pure players, dont les affaires tournent autour de leur application web et mobile, comme les boutiques en ligne, réseaux sociaux, médias web et startups. D’autres organisations ayant des applications métier indispensables aux besoins de leur business doivent aussi se concentrer sur la sécurité et prendre en compte dans leur périmètre les applications web.
Sécuriser une application web passe par des contrôles techniques, mais pas uniquement. En effet, la prise en compte des besoins en sécurité de l’entreprise, l’analyse de risque, la formation et la surveillance doivent se faire avant toute mise en place de test de pénétration ou contrôle technique en tout genre. Cela se nomme parfois l’approche top-bottom, qui signifie que les éléments à intégrer en premier sont généralement liés au management pour arriver ensuite au technique, le tout appelé cycle de développement sécurisé ou S-SDLC en anglais (Secure Software Development Life Cycle).
Mais que contient un cycle de développement sécurisé...
DevSecOps
Comme vu précédemment, une organisation est communément segmentée en plusieurs pôles d’activités, dont deux sont étroitement liés à l’intégration et à la livraison des applications. Le pôle développement (Dev) dont l’objectif est de créer, développer les applications et le pôle opérationnel (Ops) qui a pour mission d’intégrer les applications, gérer les serveurs et administrer le parc informatique.
La séparation des « Dev » et « Ops » peut s’avérer normale dans certaines organisations, mais elle ne l’est pas pour les entreprises nécessitant une intégration et une livraison rapide des applications.
Pour améliorer les performances dans ces processus, le DevOps a pour fonction de rassembler les deux pôles (Dev et Ops) et de créer une chaîne continue contenant l’ensemble des actions de développement et opérationnelles, le tout avec des méthodes agiles.
L’illustration ci-dessus montre une chaîne DevOps classique permettant le déploiement d’une application avec des outils utilisés par les développeurs et d’autres intégrés par des administrateurs systèmes (Ops).
L’avantage de ce modèle est la rapidité...