Sécurisation d’applications web
Cryptographie
1. Présentation et définitions
La cryptographie est une discipline de la cryptologie, s’attachant à protéger des messages, tout en assurant la confidentialité, l’authenticité et l’intégrité de ceux-ci et en s’aidant le plus souvent de secrets (aussi appelés clés). Cette science se démarque de la stéganographie, dissimulant un message au sein d’un autre message. La cryptographie est le fait de rendre inintelligible un message à quiconque n’a pas les bonnes autorisations. Cette technique est utilisée depuis l’Antiquité, mais certaines méthodes de cryptographie asymétrique datent de la fin du XXe siècle. À cause de l’utilisation d’anglicismes et de la création de chaînes de télévision dites cryptées, une grande confusion de compréhension règne, concernant les différents termes de la cryptographie. On parle de chiffrement pour l’opération de transformation d’un message en clair à l’aide d’une clé (aussi appelé texte clair), en un message incompréhensible (aussi appelé texte chiffré), pour celui qui ne dispose pas de la clé de déchiffrement. En anglais, on parle alors d’encryption key ou encore de private key, pour ce qui concerne la cryptographie asymétrique.
On appelle chiffre l’utilisation de la substitution, au niveau des lettres pour coder le texte clair. Pour ce qui est de la substitution au niveau des mots ou des phrases, on parle plutôt de code.
Ainsi, coder revient à agir sur un texte en remplaçant un mot ou une phrase par un autre mot, un nombre ou un symbole. Le cryptogramme représente le message chiffré et le cryptosystème est l’algorithme utilisé pour le chiffrement. Du coup, le fait de décrypter est l’opération consistant à retrouver le message clair correspondant au message chiffré, sans posséder la clé de déchiffrement. Les anglophones préfèrent le terme « casser des codes secrets ».
IMPORTANT : la cryptanalyse est la science analysant les cryptogrammes en vue de les décrypter. Enfin, la cryptologie est la science regroupant à...
Infrastructure PKI
1. Introduction
Lors de l’utilisation de la cryptographie à clé publique, chaque entité (qu’il s’agisse d’une personne physique ou d’un serveur), possède une paire de clés privée et publique. Afin que l’on puisse l’identifier, un utilisateur doit alors distribuer ou mettre à disposition sa clé publique, auprès des autres correspondants. Mais, dans ce cas, se pose le problème de savoir à qui appartient telle ou telle clé publique. Comment rattacher une clé publique, qui n’est rien d’autre qu’une chaîne binaire, à son propriétaire ? La solution consiste à distribuer, non pas des clés, mais plutôt des certificats numériques, contenant des clés. Un certificat numérique est un fichier contenant la clé publique d’un utilisateur et son état civil : nom, prénom, adresse électronique… En ce qui concerne les serveurs, on privilégie les informations plus techniques comme le nom complet FQDN (Fully Qualified Domain Name) du serveur, son domaine, la localisation, etc. Afin d’être reconnu comme valide et authentique, ce certificat doit être signé par un certificat de confiance provenant de l’autorité de certification (abrégé en CA pour les Anglo-Saxons), et qui est appelé certificat CA racine. Maintenant, comment reconnaître, à son tour, ce certificat CA racine, comme valide et authentique ? En règle générale, ce dernier se signe lui-même. On parle alors de certificat auto-signé. Ainsi, une PKI est une infrastructure comprenant des serveurs et des certificats, mettant à disposition ses certificats numériques. La norme la plus courante dans ce domaine de certificats numériques est la norme ITU-T X.509.
Elle peut être formée d’un seul certificat CA racine :
Il existe principalement deux grandes familles de certificats à clé publique :
-
les certificats d’autorité de certification (abrégés en certificats CA)
-
les certificats d’entités finales (aussi appelé certificats finaux)
IMPORTANT : d’après le modèle hiérarchique décrit ci-dessus...
Les certificats
1. La certification SSL
Qui n’a pas été confronté à des messages d’alertes de la part de son navigateur, lorsque les sites visités ne sont pas en HTTPS ? Cela fait quelque temps déjà que Chrome et Firefox affichent des "popups" dès que l’on parcourt une page réclamant l’authentification classique via le challenge standard Login/Password, non sécurisé par un certificat SSL. Du coup, nombre d’administrateurs s’affolent et cherchent à sécuriser un peu plus leurs sites web. Ceci n’est pas un mal, mais faut-il encore savoir comment se procurer un certificat valide (dépendant d’une autorité reconnue et officielle) et surtout, pourquoi acheter un certificat SSL ? En effet, après tout, Debian prône le "libre". Mais ce n’est pas une raison pour sacrifier la sécurité d’une entreprise et de ses applications distribuées. Nous allons donc voir distinctement les points suivants :
-
quels certificats SSL choisir
-
pourquoi acheter un certificat SSL
-
ce qu’il faut pour disposer de ses certificats SSL
-
ce que l’on peut protéger via un certificat SSL
En ce qui concerne la protection des applications web, messagerie, on utilise effectivement des certificats SSL pour chiffrer le contenu, les adresses de messagerie, et tout ce qui peut compromettre la sécurité et la confidentialité des échanges. Or, pour installer un certificat SSL, il faut être en possession des éléments ci-dessous :
-
Le certificat lui-même, dont le format dépend du serveur sur lequel on l’installe.
-
La clé privée, générée en même temps que la requête de signature du certificat, aussi appelée Certificat Signing Request (soit, en abrégé, CSR).
-
De façon optionnelle, il est également possible de se procurer une chaîne de certification intermédiaire (cela dépend des autorités de certification).
2. Les certificats multiples
Après, il faut se demander ce que l’on doit sécuriser comme adresse. En effet, les adresses (aussi appelées URL ou Uniform Resource Locator) sont présentées sous la forme http://www.exemple.org. Les deux derniers segments représentent...
Serveur web
1. Généralités
Les applications HTTP sont très répandues dans le monde informatique de nos jours. Elles sont souvent utilisées via des logiciels nécessitant le stockage et le traitement des données au sein d’une base de données, telle que MySQL, PostgreSQL ou encore MariaDB (voire même SQLite). Elles permettent de présenter les informations aux utilisateurs et représentent, de ce fait, un service frontal, qu’il faut préserver. Il faut donc s’assurer de toujours exposer un minimum d’informations au travers d’Internet. Il existe de nombreux serveurs web fonctionnant sur Debian. Mais le plus populaire reste, de très loin, Apache2. Le serveur Apache HTTP (aujourd’hui en version 2) est créé et maintenu par la fondation Apache. La première version de ce logiciel apparaît en 1995 et il s’agissait plus d’un conglomérat de correctifs et de modifications au serveur NCSA HTTP (qui à ce moment appartenait au domaine public). À cette époque, Apache était l’un des principaux rivaux du serveur web de Netscape. Aujourd’hui, ce serveur fonctionne sur n’importe quelle plateforme :
-
Microsoft Windows
-
Systèmes Unix : Solaris, BSD...
-
Systèmes Linux : Debian, CentOS, Ubuntu, Red Hat...
-
Mac OS X
La version 2 d’Apache est utilisée par de nombreux produits tiers comme WebSphere d’IBM ou Oracle de la société éponyme. Il est conçu pour prendre en charge de nombreux modules lui permettant des fonctions supplémentaires, parmi lesquelles :
-
interprétation de langage : Perl, PHP, Python, Ruby, de façon plus globale CGI
-
fonctionnement en serveur proxy
-
réécriture d’URL
-
négociation de contenu
RAPPEL : l’ensemble de son architecture est assez complexe et, dans les bonnes pratiques, il est fortement conseillé de ne charger que les modules véritablement utiles. De plus, il faut toujours s’assurer de disposer d’une des dernières versions du logiciel, car de nombreuses failles de sécurité sont systématiquement découvertes, au niveau de certains modules.
L’ensemble des possibilités d’Apache repose sur une hiérarchie de répertoires...
Les serveurs Wiki
Maintenant que l’on a introduit la thématique de la sécurisation des services web, nous pouvons maintenant voir les différentes catégories concernées dans ce genre d’application en commençant par les sites de documentation rapide locale : les Wiki.
1. Introduction
Au sein d’une entreprise, on n’est pas nécessairement obligé de créer un serveur web externe, déclaré chez un hébergeur ou un fournisseur d’accès Internet (abrégé en FAI) pour disposer d’une application web. Certains d’entre eux servent aussi à distribuer de l’information et à la connaissance, mais intégré en interne à l’infrastructure de l’organisation. Il s’agit le plus souvent de serveurs Wiki permettant de présenter succinctement des informations ou des procédures mises en œuvre au sein de l’entreprise.
RAPPEL : le mot "Wiki" vient du hawaïen et signifie rapide et/ou informel. C’est Ward CUNNINGHAM qui le premier a introduit ce terme, lorsqu’il créa son premier Wiki WikiWeb. Comme le terme Wiki était le seul à apparaître sur l’URL, il fut très vite repris. Dans "The economist" un journaliste a d’ailleurs fait remarquer que Wiki pouvait s’apparenter à l’acronyme "What I Know Is" (voici ce que je sais).
Une application wiki fonctionne avec un moteur wiki, c’est-à-dire un logiciel installé sur le système d’exploitation, disposant d’un site web actif. En fait, il s’agit d’une couche logicielle basée sur la trilogie Apache/MariaDB (ou MySQL)/PHP (aussi abrégée en AMP). Cela implique qu’il faut, bien sûr, installer, dans l’ordre :
-
Apache2
-
PHP
-
MariaDB ou MySQL
Nous n’entrerons pas en détail sur l’installation de ces trois blocs applicatifs. Le rôle d’une application wiki est généralement d’afficher de l’information. Mais faut-il encore, pour réaliser un tel site, mettre en œuvre les opérations suivantes, afin de contrôler intégralement les accès aux données manipulées par le site web :
-
identification des utilisateurs
-
modification...
Publications WordPress
Parler de la sécurisation d’applications web sans évoquer l’un des logiciels les plus complets permettant de distribuer de façon efficace et sécurisée des applications sur le web ne serait pas objectif. Aussi, pour illustrer les propos précédents et conclure ce chapitre, nous allons maintenant voir comment WordPress peut amener une réponse plus que satisfaisante aux problèmes de protection et de sécurité des serveurs web au sein des infrastructures.
1. Introduction
WordPress est un système de gestion de contenu open source. Autrement dit, en version anglaise, il s’agit d’un Content Management System (aussi appelé CMS). Ce logiciel est écrit en PHP et repose sur une base MySQL. Ses fonctionnalités permettent de créer et d’administrer les différents types de sites Internet :
-
blog
-
sites de e-commerce
-
simple vitrine électronique
Le type de licence déployée est une licence GNU GPLv2. Les concurrents directs de ce type de CMS sont Joomla et/ou Drupal. La base de données permet de stocker les informations afin de pouvoir ensuite les traiter et les analyser. Le tout est géré au travers d’un serveur. Chacune des tables de la base de données possède une fonction propre : une table de commentaires où l’on retrouve les pseudonymes, la date, le message et l’adresse e-mail des publications et une table de stockage du contenu de la publication elle-même. Le langage PHP permet de créer ainsi des sites Internet dynamiques et interactifs. Nous l’avons vu avec les sites de type Wiki. L’avantage, c’est qu’il s’agit là aussi d’un langage open source permettant aux développeurs d’ajouter leurs fonctionnalités et pouvant être elles-mêmes réutilisées ensuite. De plus, PHP communique très facilement avec la base de données. Toutefois, n’importe quel utilisateur peut utiliser WordPress sans pour autant connaître le langage PHP. En termes de fonctionnalités, WordPress est réputée pour ses nombreuses possibilités autorisant les utilisateurs experts ou non à créer un site Internet de qualité et de le personnaliser selon ses besoins. Ce genre d’application...