La sécurité des serveurs et des sites Internet
Les failles découvertes ces derniers mois (HeartBleed, GHOST, Shellshock,…) et les récentes affaires de piratage informatique l’ont – une fois encore – démontré : la sécurité des sites Internet et des serveurs n’est définitivement pas à prendre à la légère. Se croire totalement à l’abri par abus de confiance est peut-être la pire des erreurs (et ils sont nombreux, ceux qui croient que le .htacess de leur serveur Apache les protège de tout), la seconde étant probablement de croire que l’on n’est pas concerné parce que « trop petit » pour être une cible intéressante.
Même si pirater le site Internet d’une organisation gouvernementale, ou les serveurs de diffusion d’une grande chaine de télévision, sera considéré comme un coup d’éclat par un black hat, un script-kiddie ne refusera pas pour autant d’infiltrer le site de l’association communale de tectonic-aérobic ou la boutique en ligne d’une petite PME spécialisée dans la vente de machines à écrire. Bref, personne n’est à l’abri.
Sans parler de sécurité absolue (qu’il est de toute façon utopiste de croire possible), il existe pourtant quelques règles de bases à respecter pour sécuriser au maximum son serveur, le site Internet ou encore l’Intranet de son entreprise. Destiné aux administrateurs, webmasters mais également à M. Tout-le-Monde qui envisage de monter son site Internet perso, voici quelques notions et outils indispensables pour ne pas transformer son serveur en zone « open-bar », ou en membre VIP d’un botnet nord-coréen.
Garder son système et ses applications à jour
Un peu de retard sur les mises à jour…L’un des points les plus importants en matière de sécurité est de garder son système, ses services, ses applications et leurs plugins à jour. Quel que soit le système d’exploitation utilisé, des mises à jour de sécurité sont régulièrement proposées par les éditeurs ou la communauté (selon le cas), en plus des classiques ajouts de fonctionnalités et corrections de bugs.
C’est également le cas pour toutes les applications installées sur un serveur (Apache, MySQL, PostgreSQL, ProFTPD, Postfix, BIND…), ainsi que pour les différents CMS (Content Management System, par exemple WordPress, Magento, Drupal, phpBB, Xoops, Joomla!…) utilisés par de nombreux sites Internet. Destinées à corriger des vulnérabilités et failles découvertes au sein de ces programmes, les mises à jour de sécurité doivent être appliquées au plus vite si l’on ne veut pas être victime d’intrusions ou de « défacement ». Massivement utilisé sur Internet, WordPress est l’exemple parfait de CMS qu’il faut tenir à jour : la dernière version de ce système de gestion de contenu corrige un certain nombre de vulnérabilités, et les failles en question sont d’ores et déjà exploitées par les pirates…
Un petit coup de “emerge -avu world” (Gentoo)Selon le cas et le choix de l’administrateur, les mises à jour peuvent être installées ou proposées automatiquement (par exemple via Windows Update pour les systèmes Windows), ou bien installées manuellement via un gestionnaire de paquets tel que apt-get ou aptitude dans le cas de Debian (même si l’on peut là aussi automatiser le téléchargement et l’application des nouvelles versions des applications). Ceci demande un peu plus de travail mais permet d’éviter les mauvaises surprises, par exemple en cas de mise à jour problématique ou de problèmes de dépendances entre paquets.
Même si cela parait logique, en pratique de nombreux serveurs ne sont jamais mis à jour après leur installation initiale. Bref, nous ne le répèterons jamais assez : maintenez vos systèmes et applications à jour !
N’utiliser que les services et plugins indispensables
Plus le nombre de services tournant sur un serveur est important, plus le risque que l’un d’entre eux cache une ou plusieurs vulnérabilités susceptible d’être utilisée pour pirater le serveur est grand. Par conséquent, l’un des règles de base lorsque l’on administre un serveur (web ou autre) est de limiter au maximum le nombre de services et d’applications installés. Il en est de même pour les plugins ajoutés aux applications : n’installez que le strict nécessaire !
Sur un système Windows, la fonctionnalité « Désinstaller ou modifier un programme » et la liste des services permet déjà d’avoir une idée des programmes installés et des services en cours de fonctionnement. Sous Linux, un simple « ps aux » vous fournira la liste des services et applications en cours d’exécution. Il conviendra ensuite de désinstaller les logiciels inutiles, ou au moins de désactiver leur lancement automatique (un petit tour dans /etc/init.d/ si vous utilisez SysVinit ou systemd, ou dans /etc/init/ si vous passez par Upstart sera particulièrement instructif).
Du côté des plugins, chaque CMS utilise son propre système de gestion, mais tous permettent de gérer, d’ajouter, de supprimer ou au moins de désactiver les plugins inutiles. Une fois débarrassé de tous ces services superflus, en plus d’être plus rapide, votre serveur n’en sera que moins vulnérable aux failles. Une fois encore, notre conseil peut à première vue sembler évident, mais de nombreux systèmes d’exploitation sont installés sur des serveurs avec leurs options par défaut, et donc avec un certain nombre de services installés et automatiquement lancés…
Mettre en place et configurer un pare-feu
Le pare-feu (ou firewall) est l’une des principales « barrières de sécurité » de tout serveur qui se respecte. Qu’il s’agisse d’un service installé et lancé sur le serveur (comme Netfilter/iptables sous Linux), d’une distribution complète à installer sur une machine dédiée (Zeroshell, IPCop ou pfSense) ou d’un matériel réseau (par exemple les passerelles de sécurité de Netgear ou Juniper), un pare-feu convenablement configuré est indispensable afin de bien délimiter le réseau privé du réseau public.
iptables : ajour d’une règle
Différents types de pare-feu existent (sans état, à états ou applicatif), selon que les règles s’appliquent sur chaque paquet de manière indépendante, sur les paquets successifs d’une même connexion TCP/UDP, ou bien sur le contenu même des paquets d’une connexion afin de vérifier la conformité des paquets en fonction du protocole attendu sur ce port (le cas typique du port TCP 80 qui est censé n’être utilisé que par le protocole HTTP), voire de filtrer la liste des URL accessibles. Bien entendu, plus le pare-feu et ses règles sont complexes, plus la charge de travail sera importante.
Les pare-feu les plus récents sont en outre capables de détecter automatiquement du trafic anormal, de protéger contre les attaques DDoS et servent même de systèmes de détection et de prévention d’intrusion (IDS/IPS).
Renforcer la sécurité logicielle du serveur
Un des panneaux de contrôle de NagiosSi votre pare-feu ne propose pas de fonctionnalité de détection et de prévention d’intrusion, il est toujours possible d’utiliser d’autres logiciels pour ajouter ces protections à votre serveur.
Du côté des logiciels de prévention et protection active contre les intrusions, on peut par exemple utiliser Fail2ban (sur les systèmes Linux), un logiciel écrit en Python capable d’analyser les fichiers de logs et autres journaux système pour en extraire les adresses IP à l’origine d’attaques contre le serveur. Configurable à souhait, Fail2ban repose sur un système de « prisons » associant un fichier de logs à analyser, un filtre à appliquer sur ce journal, et des actions à mener en cas de besoin. Il est par exemple possible d’interdire temporairement l’accès au port TCP 22 (SSH) à une adresse IP à l’origine de trois précédents essais infructueux d’authentification.
Nagios est quant à lui un logiciel de supervision, de détection d’attaques et d’intrusions extrêmement modulaire. Il se compose d’un ordonnanceur de tâches (Core), d’une interface web (Frontend) et d’un ensemble de plugins qui sont autant de « sondes » surveillant le système, ses ressources et ses différents services réseaux. Grâce à ce type de logiciel, il est par exemple possible de surveiller les attaques de type SYN Flood et d’avertir l’administrateur en conséquence.
Des alternatives – gratuites ou non – et applications équivalentes (par exemple le système de détection d’intrusions Snort) existent bien entendu pour toutes les plateformes du marché…
Inspecter les logs, réaliser un audit
Si les fichiers journaux sont particulièrement intéressants à analyser de manière automatique, par exemple comme nous venons de le voir via des applications comme Fail2ban, on peut également s’y pencher « manuellement ».
Raté, je n’ai pas WordPress…
Ainsi, en analysant les fichiers d’accès d’un serveur web comme apache, on peut y découvrir des tentatives d’intrusions, des attaques ou encore des accès non autorisés. En notant l’accès à des pages théoriquement « interdites au public », il est par exemple possible de rapidement prendre les mesures nécessaires : corriger un possible problème de configuration, améliorer un script PHP ou ASP ou encore interdire une plage d’adresses IP. Chaque service dispose normalement de son ou ses propres fichiers journaux, simplifiant d’autant leur analyse. Il est également possible d’utiliser des outils dédiés à la lecture de fichiers journaux, comme l’excellent glogg.
L’audit interne ou externe du serveur
Une autre manière de vérifier la sécurité de son serveur est de réaliser un véritable audit. Des logiciels dédiés existent : Nmap (scanner de ports), Nessus (scanner de vulnérabilités) ou encore Nikto (scanner de vulnérabilités pour serveurs web) sont autant d’exemples.
Il est en outre possible de faire appel à des sociétés spécialisées dans l’audit sur la sécurité et les performances des serveurs et sites Internet. L’ANSSI (Agence Nationale de la Sécurité des Systèmes d’Information) propose ainsi une liste de prestataires d’audit de la sécurité des systèmes d’information.
Ne pas oublier la veille informationnelle
Dernier point en matière de sécurité, et non des moindres : la veille informationnelle. Il est particulièrement important de se tenir au courant régulièrement via des sites spécialisés, tels que les excellents Zataz ou Data Security Breach, sur les attaques en cours, failles et autres vulnérabilités découvertes ainsi que sur les sites Internet et serveurs récemment piratés.
Le Centre gouvernemental de veille, d’alerte et de réponse aux attaques informatiques (CERT-FR) est également une bonne source d’informations, avec une liste d’alertes en cours, des avis de vulnérabilités et des bulletins d’actualité. La base de données CVE (Common Vulnerabilities and Exposures) maintenue par l’organisme américain MITRE regroupe enfin la liste de toutes les vulnérabilités de sécurité connues (et le cas échéant corrigées) à ce jour.
Comme d’habitude, n’hésitez pas à nous proposer vos conseils dans les commentaires !