Sécuriser un serveur Apache avec PHP : la problématique

Logo PHPLe PHP est un langage web qui permet de faire des sites web dynamiques. Ce qui a fait sa popularité c’est sa simplicité d’utilisation dans la mesure où n’importe qui peut donner 10€ à OVH ou à 1&1 et avoir un espace d’hébergement compatible PHP. C’est souvent le langage de programmation sur lequel démarrent beaucoup de programmeurs autodidactes. Quand on lit ca, on peut se dire « Chouette ! C’est cool PHP on peut programmer simplement pleins de trucs trop biens ! Si je m’y mettais ?! ». D’un coté, c’est pas faux, vous allez nous coder un super site tout moche parcque vous savez pas utiliser Photoshop. D’un autre coté, vous allez surement coder un site bourré de failles de sécurité.

Et oui, les sites PHP sont souvent bourrés de faille car les programmeurs débutants n’ont souvent pas de connaissance en programmation sécurisée. Si c’est vous à titre personnel, vous vous ferez démonter votre site perso et vous irez pleurer mais les conséquences ne seront pas dramatiques. Par contre, si vous vous appelez « Web Agency », « Web Designer » ou tout autre appelation d’origine non controlée vous allez venir vous plaindre à votre hébergeur car il n’a pas sécurisé son serveur alors que c’est votre code qui est pourri. Et ca, ca m’énerve.

Après avoir râlé, il faut quand même admettre que l’hébergeur d’un serveur web peut avoir une responsabilité dans la compromission de votre site web. Ce cas de figure n’est valable que sur un serveur mutualisé.

Vous venez donc de monter votre serveur web tout beau tout neuf sur votre serveur dédié. Vous avez l’agréable sensation d’avoir accompli quelque chose vraiment bien, normal. Ce que vous ne ressentez pas c’est le manque de sécurité total de votre installation. Je vous rassure, on ne ressent ce genre de choses que quand c’est bien trop tard.

Problèmes de droits

Par défaut, Apache exécute tous les sites web ou VirtualHosts avec l’utilisateur par défaut, www-data sur les distributions type Debian ou apache sur les distributions type RHEL. Quand je parle d’exécution, je parle de lecture des fichiers HTML (parfaitement anodin) mais aussi d’exécution de scripts PHP. Cela veut dire que tous les sites ont les mêmes droits en lecture et en écriture, quelque chose du genre 775 avec en propriétaire www-data. Si vous avez bien fait le calcul, cela signifie que rien n’empêche un script PHP d’aller lire/modifier/détruire un fichier d’un autre VirtualHost. Normal, ces fichiers ont les mêmes droits.

Avec ce type de configuration par défaut, n’importe quel client peut aller lire les fichiers d’un autre client pour peu qu’il soit un peu futé. Il va pouvoir y lire des lignes de code mais aussi des identifiants SQL par exemple… Qui dit identifiants SQL dit base de données remplie de données. De quoi y faire un vrai festin.

Problèmes de modification de droits

Vous êtes conscients du problème des droits et vous avez donc créé un utilisateur pour chaque site web avec un uid différent bien évidemment (ne rigolez pas c’est du vécu). Le soucis c’est que chaque utilisateur va avoir la possibilité de faire un « chmod » sur tous les fichiers de son site et donc de tout passer en 777, c’est tellement plus simple.Au final, on revient donc à la situation précédente ou n’importe quel site peut lire/modifier/détruire les fichiers des autres sites.

De plus, vu que le serveur web s’exécute toujours en www-data, vous devez donner les droits d’écriture à www-data si vous voulez que le serveur web puisse écrire. Ceci donne également la possibilité à des scripts PHP d’autres sites d’aller jouer avec tous les fichiers qui sont en écriture pour le serveur web.

Un unique fichier de configuration

Ensuite, lorsque vous installez PHP sur votre distribution préférée, vous avez un seul fichier php.ini qui régit par défaut toutes les variables de PHP pour le serveur. Vous vous faites donc une configuration ultra top sécurisée ou alors vous le laissez par défaut, mais on va supposer la première option. Le seul soucis c’est que vu que vous hébergez pleins de clients, vous avez pleins de demandes différents telles que l’activation du fopen ou register_globals qui sont des failles de sécurité ultra connues. Vous refusez de leur activer ? Ils refusent de vous payer, logique. Donc vous l’activez. Et là, c’est le drame, vous l’avez activé pour 200 sites.

Vous l’aurez bien compris, une installation par défaut d’Apache et PHP est très peu sécurisée dans le cas d’utilisation dans le cadre d’un serveur web mutualisé. Je vous présenterais dans la suite des billets les solutions pour répondre à ces problèmes car il en existe, rassurez-vous.

Pfsense : FreeBSD mais en bien

Maintenant que nous avons signé pour l’appartement en zone de desserte de l’offre fibre optique de Numéricable, il va falloir concevoir un réseau local digne de ce nom et digne de ce débit. Je vais donc vous présenter sur les blogs les différents éléments qui constitueront mon futur réseau local. Le premier élément que je vais vous présenter est Pfsense.

pfsense-logo

Pfsense est une distribution basée sur FreeBSD. Son objectif est de proposer une distribution orientée réseau disposant de la puissance de FreeBSD mais de la simplicité d’une interface web. Autant vous dire que Pfsense atteint parfaitement cet objectif. La liste de fonctionnalités de Pfsense est tout simplement impressionante.

Dans le cas d’un réseau local simple, Pfsense peut être installé soit sur un PC standard soit sur un plateforme embarquée. Pour effectuer l’installation sur une plateforme embarquée, des images à copier sur des cartes mémoires sont disponibles sur le site. La différence entre la version standard et la version embarquée c’est que la version embarquée ne supporte pas l’ajout de « packages ». Les packages sont des applications que l’on peut rajouter pour ajouter ajouter des fonctionnalités. L’installation sur une plateforme standard se fait par le biais d’un CD.

dashboard

Tout d’abord, cette distribution assure les fonctionnalités standards d’un firewall qu’on trouve n’importe où dans la nature. Elle assure tous les types de NAT à l’exception du NAT-T (NAT Transversal). Elle assure le filtrage « stateful » selon un grand nombre de critères (adresse niveau 3 et 4, système d’exploitation,  …) ainsi que la création d’alias pour simplifier vos règles de filtrage. Elle assure les services réseau classiques (DHCP, DNS, NTP). Vous aurez également à votre disposition tous les graphs que vous pouviez imaginer.

Ensuite, elle assure des fonctionnalités plus avancées mais avec toujours autant de simplicité. A partir d’une carte wifi (Atheros de préférence bien sur), Pfsense vous crée un point d’accès wifi avec chiffrement et authentification. En activant une option supplémentaire, vous pouvez avoir un portail captif qui s’authentifie soit contre une base Radius soit contre une base locale. Vous avez également la possibilité de mettre en place tous genres de VPN que ce soit de l’OpenVPN ou de l’IPsec. Vous pouvez également rajouter de la redondance dans votre installation avec le protocole CARP qui est un équivalent du VRRP Cisco. Je pense que ca fera un peu beaucoup pour mon réseau ! Et j’allais oublier, cette distribution est capable d’assurer le routage avec des protocoles tels que OSPF, RIP et BGP.

Au final, cette distribution dispose d’une liste de fonctionnalités très fournie et accessibles très simplement. J’ai eu l’occasion de déployer un firewall Pfsense sur un réseau publique disposant d’une connexion directe vers Internet en 100Mbit/s symétrique. Nous dépassions systématiquement les 70.000 sessions TCP en cours et le firewall n’a jamais faiblit alors que le matériel sous-jacent n’était qu’un Celeron 3Ghz.

Les livres pour comprendre Xen 1

Je souhaiterais vous présenter les livres qu’il faut acheter pour pouvoir mieux comprendre Xen. J’ai eu l’occasion d’avoir chacun entre mes mains et de les lire de manière plus ou moins approfondie que ce soit en livre papier ou en ebook. Tous ces livres sont en anglais car il n’existe pas encore de version traduite. Si vous n’êtes des méga jedi de l’anglais, va falloir faire un effort mais globalment ca reste de l’anglais technique assez abordable.

Je trouve que les livres restent un moyen extrêmement efficace de se renseigner sur un sujet même informatique. Avec les projets libres, on a tendance à préférer la documentation en ligne qui est le plus souvent de bonne qualité. Cependant, l’avantage du livre est qu’il est disponible partout et utilisable dans les transports en commun et autres lieux non propices à l’utilisation d’un ordinateur portable. Son autre avantage est historique dans la mesure où par tradition les livres sont considérés être des sources d’information plus fiables qu’une page web. Ceci se module au cas par cas car il arrive que des documentations en ligne soient largement supérieures qu’un livre. Au final, le livre reste nettement plus agréable à lire et à gribouiller qu’un document en ligne.

Running Xen: A Hands-On Guide to the Art of Virtualization

RunningXen

Ce livre est le premier que je me suis fourni car la version ebook est facilement trouvable sur Internet (en version légale bien sur… ou sur Safari Online). Un aperçu est disponible sur Google Books. Il s’agit d’un livre qui a pour objectif d’être pratique et de vous accompagner dans l’installation et le déploiement d’un serveur Xen. Il est assez court et plutôt concis. Le début effectue un tour d’horizon des solutions de virtualisation pour rapidement passer à Xen. Ensuite, le livre effectue un tour complet, détaillé et clair de la configuration de Xen. Vous nous trouverez pas d’explications particulièrement précises sur le fonctionnement de Xen mais plus un aperçu très pratique. Après avoir lu ce livre, vous saurez configurer des domaines de paravirtualisation comme de virtualisation matérielle assistée dans quasiment tous leurs aspects.

Il est par contre assez regrettable qu’il ne fournisse que relativement peu d’informations non-techniques. Ce livre est plus un guide d’installation et de configuration de Xen qu’une encyclopédie de Xen ou bien même une explication du fonctionnement interne de Xen. Ceci ne le rend pas moins intéressant bien entendu, le public visé n’est juste pas tout à fait le même.

La grosse plus-value de ce livre est la facilité avec laquelle il est possible de contacter les auteurs qui sont très investis dans la communauté Xen. Pour se faire, il est possible de passer par la mailing liste dont le lien est publié sur le site du livre ou bien, soit par la mailing liste officielle Xen (xen-users) soit directement par le mail personnel des auteurs que vous trouverez sans difficulté sur ces mailing lists.

C’est quoi Xen ?

Xen_logo

Je vais être amené à vous parler régulièrement de Xen dans ce blog car j’ai régulièrement été amené à travailler dessus. Avant de pouvoir vous parler en long en large et en travers de cet outil, je souhaitais faire un petit billet récapitulant ce qu’est Xen et ce que ce n’est pas.

Pour rester dans la définition, voici ce que Wikipedia France propose comme définition :

Xen est un logiciel libre de virtualisation, plus précisément un hyperviseur de machine virtuelle. Il est développé par l’université de Cambridge au Royaume-Uni. Xen permet de faire fonctionner plusieurs systèmes d’exploitation virtuels (invités) sur une seule machine hôte.

La version de Wikipedia Anglais est la suivante :

Xen is a virtual machine monitor for IA-32 (x86, x86-64), IA-64 and PowerPC 970 architectures. It allows several guest operating systems to be executed on the same computer hardware concurrently. Xen was initially created by the University of Cambridge Computer Laboratory and is now developed and maintained by the Xen community as free software, licensed under the GNU General Public License (GPL2).

Pour résumer les deux définitions, Xen est une solution de virtualisation. La virtualisation est la technique informatique qui permet d’exécuter plusieurs systèmes d’exploitation indépendants sur une même machine physique. Cependant, et vous le savez bien, il existe de nombreuses solutions de virtualisation dont on entend bien plus parler. Parmi ces dernières, nous pourrions citer le géant VMWare ou bien Hyper-V de Microsoft ou encore OpenVZ. Toutes ces solutions sont pourtant bien différentes entre elles et par rapport à Xen.

La spécificité de Xen et ce qui a créé son succès est lié à son fonctionnement. Le projet Xen a été le premier a implémenter la paravirtualisation. Mais, qu’est ce que la paravirtualisation ? La paravirtualisation consiste à interposer entre un système d’exploitation un hyperviseur qui sera l’interface primaire entre le matériel et le reste des couches applicatives. Cette hyperviseur aura donc un accès privilégié aux ressources physiques et pourra ensuite en déléguer une partie aux systèmes d’exploitation virtualisés.

Donc, si vous avez bien compris, vu que l’hyperviseur est l’interface entre les ressources physiques et les couches applicatives, il n’y a plus de notion de système d’exploitation invité et système d’exploitation hôte comme cela peut être le cas chez les autres. Tout est virtualisé ! De plus, les systèmes d’exploitation ont été modifiés pour prendre en compte la présence de l’hyperviseur. Un petit schéma récapitualtif (fait par Romain Hinfray, jedi des schémas sur PowerPoint) :

virtus

L’hyperviseur Xen a pour objectif d’être le plus minimaliste possible. Pas question de se connecter à l’hyperviseur via une console SSH ou via une console applicative. L’hyperviseur est un point très sensible en termes de sécurité. Si vous controlez l’hyperviseur, vous controlez tout ! Ouai mais c’est bien… mais comment je fais pour administrer mon plateforme de virtualisation ?! Et bien comme je l’ai dit précédemment, l’hyperviseur a pour rôle de distribuer une partie de ses accès au matériel vers les autres systèmes d’exploitation. Dans le cas de Xen, un domaine, nommé domaine 0, aura de nombreux privilèges permettant notamment de controler l’accès aux ressources physiques, l’exécution des autres systèmes d’exploitation et le réglage des paramètres de l’hyperviseur.

Quel avantage a donc la paravirtualisation ? La vitesse, beaucoup de vitesse ! Au lieu de devoir émuler X architectures matérielles, on va en émuler aucune car les systèmes d’exploitation auront été modifiés pour prendre en compte le fait qu’ils s’exécutent au dessus d’un hyperviseur. Pour vous donner un ordre d’idée, un système d’exploitation s’exécutant au dessus de Xen accuse un perte de l’ordre de 5% alors qu’un système d’exploitation s’éxecutant au dessus de VMWare accuse une perte de l’ordre de 20% jusqu’à 80% !