8 conseils essentiels pour sécuriser le serveur d’applications Web



Les serveurs d’applications web sont généralement conçus pour être accessibles au grand public, les exposant de fait à de nombreuses menaces.

Si certaines de ces menaces sont facilement anticipables et évitables, d’autres sont imprévisibles et peuvent survenir sans crier gare. Afin de limiter ce dernier cas de figure, nous vous proposons une liste de conseils essentiels pour assurer une sécurité maximale de vos serveurs d’applications web.

Avant de passer en revue ces recommandations, il est crucial de comprendre qu’un serveur d’applications web n’est pas une entité isolée. Il constitue l’élément central d’une infrastructure web, permettant l’hébergement et l’exécution d’une application. Par conséquent, sa sécurisation passe par la protection de l’ensemble des éléments qui l’entourent et qui composent l’environnement applicatif.

Un environnement basique d’hébergement et d’exécution d’applications web inclut le système d’exploitation (Linux, Windows), le logiciel serveur web (Apache, Nginx), ainsi qu’un serveur de base de données. Si un seul de ces éléments est compromis, des attaquants peuvent y accéder et mener des actions malveillantes.

Une première mesure fondamentale consiste donc à consulter les directives de sécurité et les meilleures pratiques pour chacun de ces composants. Ceci étant posé, examinons quelques règles de sécurité de bon sens applicables à la plupart des environnements d’applications web.

Le pare-feu : une nécessité à ne pas négliger

Il serait facile de penser que votre pare-feu réseau est suffisant pour vous protéger. Mais ce serait une erreur.

Certes, votre pare-feu assure la protection de votre réseau, en filtrant les accès de l’extérieur vers l’intérieur. Mais il laisse malheureusement une porte ouverte aux attaquants pour s’introduire dans votre serveur d’applications web.

Comment est-ce possible ?

C’est simple : votre pare-feu réseau doit autoriser au minimum le trafic entrant sur les ports 80 et 443 (pour HTTP et HTTPS). Il ne peut pas distinguer la nature du trafic qui transite par ces ports.

Pour protéger votre application, vous avez besoin d’un pare-feu applicatif web (WAF). Ce dernier analyse spécifiquement le trafic web et bloque toute tentative d’exploitation de failles de sécurité telles que les attaques XSS (Cross-Site Scripting) ou les injections de code. Un WAF fonctionne sur le même principe qu’un antivirus classique, il cherche des modèles connus dans le flux de données et bloque les requêtes malveillantes.

Pour être efficace, un WAF doit maintenir sa base de données à jour avec les dernières menaces connues, afin de pouvoir les bloquer. Le problème des systèmes de défense basés sur des modèles est que votre application peut être la première victime d’une menace inconnue de votre WAF.

C’est pourquoi votre application web a besoin de plusieurs niveaux de protection en plus de votre pare-feu réseau.

Identifier les vulnérabilités spécifiques au web

Ne partez pas du principe que votre serveur d’applications web est sans faille uniquement parce que votre analyseur de sécurité réseau le déclare.

Les analyseurs réseau ne sont pas capables de détecter les vulnérabilités spécifiques aux applications. Pour les identifier et les corriger, il est nécessaire de soumettre vos applications à une série de tests et d’audits, tels que des tests d’intrusion, des analyses « boîte noire » et des audits du code source. Cependant, aucune de ces méthodes n’est infaillible. L’idéal est d’en utiliser le plus possible pour éliminer le maximum de vulnérabilités.

Par exemple, des scanners de sécurité comme Invicti, s’assurent qu’aucun code exploitable n’atteigne l’environnement de production. Néanmoins, il peut exister des failles logiques qui ne peuvent être détectées que par un audit manuel du code. L’audit manuel, en plus d’être coûteux, est réalisé par des humains et est donc sujet à erreur. Une bonne alternative consiste à intégrer ce type d’audit dans le processus de développement en sensibilisant vos développeurs.

Sensibiliser les développeurs à la sécurité

Les développeurs ont souvent tendance à considérer que leurs applications fonctionnent dans un monde idéal, où les ressources sont infinies, où les utilisateurs ne font pas d’erreurs et où il n’y a pas de personnes mal intentionnées. Malheureusement, ils doivent tôt ou tard faire face aux problèmes du monde réel, notamment ceux qui concernent la sécurité de l’information.

Lors du développement d’applications web, les codeurs doivent connaître et mettre en œuvre des mécanismes de sécurité afin de s’assurer qu’elles sont exemptes de vulnérabilités. Ces mécanismes doivent faire partie d’un guide des meilleures pratiques que l’équipe de développement doit respecter.

Les audits de qualité logicielle permettent de vérifier la conformité aux meilleures pratiques. Ces dernières et les audits sont les seuls moyens de détecter des vulnérabilités logiques telles que, par exemple, le passage de paramètres non chiffrés et visibles dans une URL, qu’un attaquant pourrait facilement modifier à des fins malveillantes.

Désactiver les fonctionnalités superflues

En supposant que vos applications web soient aussi exemptes d’erreurs que possible et que votre infrastructure web soit sécurisée, voyons ce qui peut être fait au niveau du serveur lui-même pour le protéger.

Un conseil de base est de réduire le nombre de points d’entrée potentiellement vulnérables. Si un attaquant parvient à exploiter un seul composant du serveur, l’ensemble du serveur peut être compromis.

Faites la liste des ports ouverts et des services ou démons qui s’exécutent sur votre serveur, puis fermez, désactivez ou arrêtez ceux qui ne sont pas indispensables. Le serveur doit être dédié à l’exécution de vos applications web uniquement. Envisagez de transférer toutes les fonctionnalités supplémentaires sur d’autres serveurs de votre réseau.

Utiliser des environnements distincts pour le développement, les tests et la production

Les développeurs et les testeurs ont besoin de privilèges sur leurs environnements de travail qu’ils ne doivent pas avoir sur le serveur d’applications en production. Même si vous leur accordez une confiance aveugle, leurs mots de passe peuvent facilement être divulgués et tomber entre de mauvaises mains.

Outre les mots de passe et les privilèges, les environnements de développement et de test contiennent généralement des portes dérobées, des fichiers journaux, du code source ou d’autres informations de débogage susceptibles d’exposer des données sensibles telles que les noms d’utilisateur et les mots de passe des bases de données. Le déploiement de l’application web doit être effectué par un administrateur, qui doit s’assurer qu’aucune information sensible n’est exposée après l’installation sur le serveur en production.

Le même principe de séparation doit s’appliquer aux données de l’application. Les testeurs et les développeurs préfèrent souvent travailler avec des données réelles, mais il n’est pas conseillé de leur donner accès à la base de données de production, ou même à une copie de celle-ci. En dehors des problèmes de confidentialité évidents, la base de données peut contenir des informations de configuration qui révèlent des paramètres internes du serveur, tels que les adresses de points de terminaison ou des noms de chemin d’accès.

Mettre à jour régulièrement les logiciels du serveur

Bien que cela puisse paraître évident, il s’agit d’une des tâches les plus souvent négligées. SUCURI a découvert que 59 % des applications CMS étaient obsolètes, ce qui représente un risque non négligeable.

De nouvelles menaces apparaissent chaque jour, et la seule façon de protéger votre serveur est d’installer systématiquement les derniers correctifs de sécurité.

Nous avons vu précédemment que les pare-feu réseau et les scanners de sécurité réseau ne suffisent pas à empêcher les attaques sur les applications web. Ils restent néanmoins indispensables pour protéger votre serveur contre les menaces courantes telles que les attaques DDoS. Veillez donc à ce que ces applications soient toujours à jour et protègent efficacement votre activité.

Restreindre les accès et les privilèges

Une mesure de sécurité de base consiste à chiffrer et à « tunnelliser » le trafic d’accès à distance, comme le protocole RDP et SSH. Il est également conseillé de limiter la liste des adresses IP autorisées à accéder à distance au serveur, en bloquant toute tentative de connexion provenant d’une adresse IP non autorisée.

Les administrateurs accordent parfois tous les privilèges possibles aux comptes de service par facilité, car ils savent que cela « permet de tout faire fonctionner ». Néanmoins, cette pratique est dangereuse, car les attaquants peuvent exploiter les vulnérabilités des services pour pénétrer le serveur. Si ces services s’exécutent avec des privilèges d’administrateur, les attaquants peuvent prendre le contrôle total du serveur.

Un bon équilibre entre sécurité et praticité implique que chaque compte, qu’il s’agisse d’un compte de connexion ou d’un compte de service, ne dispose que des privilèges strictement nécessaires à l’accomplissement de ses tâches.

Par exemple, il est judicieux de créer des comptes distincts pour les différentes tâches d’administration : un pour effectuer des sauvegardes, un autre pour nettoyer les fichiers journaux, et encore d’autres pour modifier la configuration des services. Il en va de même pour les comptes de base de données : une application n’a besoin, en général, que des autorisations pour lire et écrire des données et non pour créer ou supprimer des tables. Elle doit donc s’exécuter avec un compte aux privilèges limités aux actions qu’elle doit effectuer.

Surveiller attentivement les journaux du serveur

Les fichiers journaux sont d’une grande utilité.

Les administrateurs doivent les consulter régulièrement afin de détecter tout comportement suspect avant qu’il ne cause des dommages. L’analyse des fichiers journaux vous apporte de nombreuses informations utiles pour mieux protéger votre application. En cas d’attaque, ils peuvent vous indiquer quand et comment elle a commencé, et vous aider à mieux maîtriser la situation.

Vous devez également mettre en place une procédure automatisée pour supprimer les anciens fichiers journaux ou pour élaguer les informations obsolètes, afin d’éviter qu’ils ne consomment tout l’espace de stockage disponible sur le serveur.

Dernier conseil : restez informé !

De nombreuses informations gratuites et utiles sont disponibles sur Internet pour vous aider à protéger vos applications web. Suivez les blogs de sécurité spécialisés (comme celui-ci) et restez à l’écoute de ce qui se passe dans l’industrie de la sécurité et du web.

Les tutoriels, cours, vidéos et livres sont également d’excellentes sources d’information. Essayez de consacrer une ou deux heures par semaine à la veille sur l’actualité du secteur. Cela vous permettra d’avoir l’esprit tranquille en sachant que vous faites ce qu’il faut pour assurer la sécurité de vos applications.