Sécurité sur vos sites: analyse, prévention et actions


Quelques points de détails sur la sécurité de vos sites.

On me demande parfois en quoi consiste mon travail de sécurisation des sites. Répondre à cette question de sécurité est un dilemme.

Expliquer ce que je fais, c’est bien sur un risque que le clients décide de le faire lui-même. Mais la sécurité passe aussi par de la transparence. Plus c’est clair, plus c’est fiable, et cela rassure le client.

Il y a aussi un risque que les pirates tentent de contourner ces mesures s’ils savent comment elles fonctionnent. Aussi je vais rester assez vague sur l’aspect technique.

 

Site hébergé ou non

Il y a 2 types de sites que je gère pour vous : ceux hébergés sur mes serveurs, et ceux hébergés ailleurs. Sur mes serveurs, j’ai un niveau d’accès plus important, ce qui permet des sécurisations plus poussées.

Serveur Web. Crédit : Shmuel Csaba Otto Traian [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia CommonsPour fonctionner, un site web a besoin d’un ensemble de couches logiciels et matérielles. Tout en haut de la pyramide, il y a la machine avec ses disques, sa mémoire et sa carte réseau. Sur cette machine, il y a un système d’exploitation, qui fait la passerelle entre le matériel et les logiciels. Ensuite on a un serveur Web puis votre site. Autour gravitent d’autres logiciels, tels qu’un serveur de cache, un environnement d’exécution (PHP), et divers modules ou assistants. Chaque brique de la pyramide à sa fonction, mais aussi ses propres failles de sécurité.

Sur un site non hébergé sur mes serveurs, je n’ai pas d’accès au matériel, au système d’exploitation et en général pas d’accès au serveur web. Ces points ne peuvent donc pas être sécurisés par moi. C’est le travail du prestataire qui vous héberge.

 

Protections coté serveurs

Un serveur est un ordinateur, qui est optimisé pour des besoins spécifiques. Il a plus de mémoire et d’espace disque qu’un ordinateur de bureau en général. J’ai fais le choix de prendre mes serveurs chez OVH. J’ai testé plusieurs prestataires et, pour l’heure, c’est eux que j’utilise.
L’une des première protection, c’est de doubler les machines, en avoir toujours une disponible si un serveur tombe en panne. Ensuite, sur chaque machine, on utilise plusieurs disques pour stocker vos données. Si l’un tombe en panne, il y a toujours une copie des données immédiatement disponible. C’est de la sécurité par redondance.

Les données sont également copiées chaque nuit sur une machine externe à OVH.sécurité: protection par firewall

Niveau système d’exploitation, un parefeu est en place. C’est une barrière entre Internet et les services du serveur. Toutes les portes sont fermées, sauf celles strictement nécessaire (web, mail, ssh, sftp) et tout ce qui passe par les portes ouvertes est filtré. En cas de problème détecté (scans de ports, IP connues, etc), un filtre bloque l’IP du visiteur au niveau de la brique réseau de la pyramide, donc très en amont de vos donnes. L’un des outils utilisé est Fail2Ban, et il bloque aujourd’hui à lui seul entre 50 à 200 attaques par jour.

Sur le service web, les protections sont multiples. Les attaques peuvent prendre des formes diverses, les réponses aussi. Une attaque courante vise à surcharger les sites. Aussi il y a des limites au nombre de requêtes simultanées, il y a également un cache disque, afin de fournir les fichier depuis la mémoire et non depuis les disques durs (cela évite qu’ils grillent !). Ces attaques sont difficiles à parer, parce qu’elles utilisent en général de multiples IP sources. Si votre site est sur mes serveurs, le parefeu va modérer les flux de chaque IP, au niveau serveur. On agit avant d’atteindre la couche du serveur web, presque au niveau de la carte réseau.

 

Protection coté services

Lorsqu’un « visiteur » passe les protections niveau machine, ou si votre site n’est pas hébergé sur mes machines, sa requête arrive au niveau « services » de la pyramide. Il existe plusieurs types de service. En général, vous utilisez les services web et mail. Chaque service est géré par un ou plusieurs logiciels. La réception d’e-mail, par exemple, implique un service de réception des messages, un service anti-spam, un service de remise au destinataire. L’envoi implique entre autres un service de gestion de file d’attente, d’un anti-spam, et d’un service de transfert. On retrouve ici aussi des pyramides de sous-services.

Je gère sur les services mail des modules anti-spam, depuis peu. J’étais en effet opposé au traitement du contenu de vos messages, estimant que même réalisé par une machine, cela reste une intrusion dans votre sphère privée. J’ai trouvé un moyen de lutter contre le spam, sans avoir besoin d’analyser le contenu de vos e-mails. Pour cela, le serveur mail refuse systématiquement tous les messages reçus, en renvoyant à l’expéditeur une notification de surcharge temporaire. Tous les serveurs mail légitimes (Google, Microsoft, Yahoo, etc..) vont comprendre cette notification et retransmettre le message après quelques minutes. Cette fois, nous l’accepterons. Un serveur d’envoi de spam n’aura pas le temps de traiter ces rejets, son but étant d’envoyer le plus vite possible. Il ne renverra pas le message.
Ensuite nous utilisons un autre filtre, SpamAssasin, pour vérifier les expéditeurs connus et les bloquer, toujours sans analyse du contenu de vos mails.

Sur le service FTP, les utilisateurs sont (volontairement) rares et il ne peuvent se connecter que depuis une IP fixe et connue à l’avance. C’est une contrainte de me fournir votre IP avant de pouvoir vous connecter, mais ce service est ainsi bien sécurisé. Pour la plupart d’entre vous, c’est moi qui gère la mise en ligne de votre site, cette contrainte n’est pas gênante.

Sur le service Web, après les filtres coté matériel, les requêtes qui sont présentées au serveur Web sont analysées. Selon les type de sites, certaines requêtes peuvent être purement ignorée. Par exemple, si votre site utilise WordPress, il n’y a aucune raison qu’une requête contient des scripts SQL. Si c’est le cas, elle ne sera même pas transmise à votre WordPress. Une requête n’a pas non plus de raison d’être à destination d’un fichier interne à WordPress, tous les accès devant passer par le fichier « index.php ». De fait, on bloque systématiquement les accès directs aux fichiers. Au final, il y a une trentaine de règles qui analysent les méthodes d’accès et les fichiers demandés, et qui ne laisse passer au final que les requêtes bien formées.

Malgré tout, une requête bien formée n’est pas forcement amicale. L’accès à la page d’identification est correct, mais peut servir à un pirate. D’autres protections modifient donc la page d’identification, en ajoutant un champ invisible aux humains (il sera donc toujours vide), mais visible d’une machine. Un agent automatisé va donc remplir ce champ 99 % du temps et donc sera détecté. C’est simple, et diablement efficace. Une autre protection consiste à compter le nombre d’erreurs de mots de passe. Au delà de 3, c’est louche, on verrouille. Un client légitime n’aura qu’a me contacter pour être débloqué, le pirate sera éjecté.

Parmi les requêtes bien formées, on trouve des recherches de fichiers. Les requêtes concernent des pages connues pour avoir des failles (dans certains plugins de WordPress, par exemple). Les pirates ne sachant pas quelques plugins sont installés, ils tentent des requêtes au hasard. Au delà de 5 requêtes vers des pages qui n’existent pas, le système déduit qu’il s’agit d’un comportement anormal et bloque le visiteur indélicat. Un visiteur légitime ou un moteur de recherche suit les liens de votre site, il ne tombe jamais vers des pages qui n’existent pas et ne déclenche pas la sécurité.

 

Prévention des risques

Détecter les attaques et les bloquer, c’est bien, mais le mieux serait de les éviter. En sécurité, on parle alors de prévention des risques.

Dans ce domaine, j’agis également sur vos sites, en particulier sur les CMS tels que WordPress. Ces logiciels facilitent la création de sites, mais ils sont très « bavards ». Regardez le code source de votre site, et par défaut, WordPress et ses plugins y indiquent leurs versions. On trouve parfois la version du serveur Web et de PHP. Ces informations facilitent le travail de recherche de failles. Si vous utilisez WordPress 4.2.5, je peux trouver facilement sur internet la liste des vulnérabilités de cette version (https://wpvulndb.com/wordpresses/425). En masquant les informations inutiles, on complique le travail du pirate et on augmente la sécurité. Ces informations inutiles sont fréquentes et sont parfois cachées dans des endroits étonnants. Vos photos, par exemple, contiennent le nom de l’appareil photo, les paramètres de la prise de vue, le logiciel d’édition, mais aussi parfois la géolocalisation. Cette information semble anodine, mais par recoupement, on peut parfois trouver votre adresse postale, puis votre nom, et donc deviner l’identifiant de connexion à votre site.

Concernant les identifiants de connexion justement, on évitera de conserver sur les sites les identifiants par défaut tels que « admin » et les mots de passe tels que « pass » que l’on trouve, par exemple, avec Guppy. Toutes les informations « par défaut » sont des failles potentielles. Par précaution, on les renomme ou on les supprime. WordPress, par exemple, utilise pour sa base de données des tables qui ont toujours le même nom, préfixées toujours par les mêmes caractères « wp_ ». Simplement changer aléatoirement ce préfixe empêche les pirates de connaître le nom des tables. C’est prévu dans WordPress, mais peu d’utilisateurs le font.

La sécurité n’est jamais absolue. Il existera toujours de failles. Une partie de mon travail consiste à suivre les découvertes de failles et de correctifs, et de les appliquer sur votre site lorsque c’est possible. C’est un travail long et difficile de documentation, très consommateur de temps.

Prévenir les risques, c’est aussi disposer de copies du site et de la base de données. En cas d’attaque réussie, il sera alors plus facile de restaurer le site. Selon les sites, je réalise des sauvegardes sur un rythme entre 1 et 30 jours. Ces sauvegardes sont stockées à 3 endroits géographiquement différents. A ce sujet, combien de photos avez-vous sur votre téléphone ou votre PC ? Combien sont irremplaçables, et parmi celles-ci, combien en avez-vous sauvegardés ? Sur une clé USB de 16Go à 15€, par exemple, vous pouvez stocker des années de photos précieuses.