La semaine suivant la mise en production du site de notre vitolphiliste amateur, son site était hacké et son hébergeur le met en demeure de cesser l’envoi de spam.
Cette histoire vous semble exagérée ? Elle ne l’est pas, beaucoup de personnes pensent encore aujourd’hui que c’est « le » site qui est visé lors d’une attaque et non les ressources de celui-ci.
C’est la plus grossière et, pourtant, fréquente erreur en matière de sécurisation : « Cela ne me concerne pas » se dit le webmaster.

securite


En réalité, peu d’attaques sont le fait d’un être humain qui tente de pénétrer votre site. Les attaques sont le fait de scripts qui scannent le web à la manière d’un moteur de recherche (ce n’est pas un employé de Google qui scanne votre site n’est-ce pas ?). Ces scripts sont aussi connus sous le nom de « bots » ; ils utilisent différents moyens pour trouver votre site dont par exemple la technique dite « Google Dorks » qui est d’une simplicité monstrueuse. Imaginons une faille dans un composant Joomla! hypothétique nommé com_collection. Cette faille a été publiée sur des sites internet tels que des bases de données de hackeurs. Dès ce moment, le site de notre ami est en grand danger car, bien entendu, ses URLs ont été indexées par Google et il utilise une ancienne version, non à jour, de com_collection. En lançant la recherche paramétrée in-url:index.php?option=com_collection site:.fr le bot va obtenir de Google la liste des sites en .fr où l’extension est installée ; sites n’ayant pas activé la réécriture des URLs. Disposant de cette liste, le script va lancer des requêtes vers le site pour exploiter la faille qui a été rapportée. Game over puisque l’extension qui s’y trouve n’était pas à jour, la faille a été exploitée, le virus mis en place et le bot va répertorier votre site dans sa base de données Powned puis passer au site suivant. Tout cela est totalement automatisé. Et le virus mis en place, que fait-il ? Ici, aussi, une fausse croyance est de penser qu’il n’y a qu’un seul virus. En fait, le virus se duplique à de multiples endroits sur le site pour multiplier ses chances d’y rester longtemps et il est souvent multiple : l’un pour envoyer des spams, l’autre pour forcer le téléchargement d’un logiciel, d’autres pour faire du black hat SEO, participer à des attaques de déni de service (DDoS), …

!!!!!!!« — Et toi, comment fais-tu pour sécuriser ton site Joomla! ? — Oh, tu sais, mon site n’est pas intéressant pour des hackeurs, je n’y parle que de vitolphiluménie. Je ne risque donc rien. Tu crois ? Oui, bien sûr, j’en suis certain puisqu’il n’y a rien à y voler et j’ai si peu de visiteurs… »

Ok, j’ai bien compris ! Que puis-je faire pour garder les bots à distance ?

Mauvaise nouvelle : pas grand-chose. Nous l’avons vu, les bots sont des scripts qui scannent le web à la recherche de potentielles failles. Lorsqu’il arrive sur un site sécurisé, il va quand même essayer d’exploiter les failles. Mais, toute la différence est là, il ne réussira pas. La sécurisation du site est un mécanisme, constant !, qui va fermer portes et fenêtres et bloquer toutes tentatives d’infiltrations. Mécanisme constant car la protection d’hier ne sera pas suffisante demain.

1. Choisir un hébergeur de qualité

Quelle que soit la sécurisation intrinsèque de votre site, si l’hébergeur est mauvais, votre site sera une passoire. Le choix d’un bon hébergeur est crucial ! Un exemple : certains proposent encore des hébergements sur des antiques PHP 4 (alors que PHP 7 pointe le bout de son nez). Comparez les hébergeurs, étudiez les techniques de sécurisation, de backup, d’isolation qu’ils proposent. Suivent-ils les versions de PHP en installant systématiquement la dernière version mineure sur votre site ?

2. Un site par hébergement

Pour limiter les coûts, certaines agences peu scrupuleuses achètent un hébergement standard à quelques euros par mois, en espace disque illimité, et y mettent des dizaines de sites clients. Pour peu qu’un seul site soit hacké car pas maintenu à jour, tous les sites sont en danger du fait que le virus du site1 peut aller contaminer tous les sites qui sont sur le même hébergement. Il est donc impératif d’avoir des hébergements qui soient isolés les uns des autres, ce que permet un hébergement distinct.

3. Ne conservez que le strict minimum

Durant la phase de développement du site, vous serez passé par une phase de test en essayant plusieurs templates, plusieurs extensions, … avant de poser votre choix. Il est impératif de supprimer les extensions, les modules, les plugins et les templates que vous n’utilisez plus. Ne vous contentez pas de les dépublier car le code exécutable (fichiers php) reste sur votre serveur et donc appelable depuis une URL paramétrée. Désinstallez, supprimez, nettoyez et plutôt dix fois qu’une seule. Régulièrement, faites un tour dans vos extensions et élaguez. Moins vous aurez de code php sur votre site, moins la « voilure » sera grande et plus vous passerez au travers d’attaques qui cibleront tel ou tel composant.

Sécurité Joomla!

4. Faites un suivi scrupuleux des versions

Corolaire du point ci-dessus. Mettez à jour Joomla! dès qu’une nouvelle version paraît et sans tarder si cette version est une mise-à-jour de sécurité. Vous pouvez ignorer quelques semaines une version n’apportant que des nouvelles fonctionnalités mais vous ne pouvez jamais ignorer une mise à jour de sécurité comme nous en avons eu fin 2015 par exemple où une faille 0day était largement exploitée sur le web, faille profitant d’un défaut de sécurisation de la variable user-agent du navigateur et d’une faille dans les anciennes versions de PHP (cfr le choix d’un bon hébergeur). Faites de même pour chaque extension de votre site : tenez-vous au courant des évolutions et suivez-les. Joomla! va très bientôt disposer d’un plugin de notification par email pour vous informer des mises-à-jour disponible pour votre site ; songez à l’activer.

5. Gestion des mots de passe

Une seule règle en la matière : un mot de passe complexe à usage unique. N’utilisez que des mots du type « ue40#cp6CmSi1$0@fOuK » et faites-vous un devoir de ne pas le retenir. Utilisez des coffres forts type LastPass, Dashlane, Keepass, … Vous n’aurez jamais à les retenir et vous pourrez respecter la deuxième assertion : un bon mot de passe est à usage unique. Un mot de passe pour votre administration, un autre mot de passe pour l’accès base de données, un troisième pour votre accès FTP, un quatrième pour l’accès à vos emails, etc. Ainsi, si un seul est hacké, vous gardez la main sur les autres fonctionnalités du site.

6. Installez un pare-feu

Un pare-feu est un logiciel qui va se mettre « devant » votre site et qui va agir comme un garde à l’entrée mais aussi à la sortie de votre site. Il va filtrer les accès, regarder les URLs qui sont envoyées à votre site afin de déterminer si tel accès est autorisé, si telle URL est dangereuse (ex : SQL injections) et dès lors que la requête est suspicieuse, elle sera bloquée et enregistrée dans un fichier journal. Selon les pare-feu, vous recevrez ou pas une alerte par email pour vous informer de la tentative. Lorsque le pare-feu bloque une URL, votre CMS n’est même pas accédé, tout se passe en amont. Le pare-feu va aussi jouer un rôle à la sortie du site c’est à dire par exemple interdire l’exécution de scripts qui sont déjà sur le site mais dans des dossiers où ils ne sont pas attendus. Ainsi, dans l’hypothèse où un virus aurait réussi à s’introduire dans le dossier /images, le pare-feu n’en autorisera pas son appel en URL ; le virus était réduit alors au silence. Une fois installé, ne négligez pas de configurer correctement chaque option du pare-feu selon les spécificités de votre site.

7. Protégez votre propre ordinateur

Même sous Mac ! Ayez un antivirus à jour et gardez-vous d’utiliser certains logiciels dont la sécurité est défaillante, comme le réputé FileZilla qui stocke en clair les accès FTP dans un fichier xml, préférez par exemple WinSCP (Windows) ou CyberDuck (Mac) ; pour n’en citer que deux.

8. Installez une tâche planifiée

Si cela vous est possible, utilisez des tâches planifiées (cronjob) pour programmer l’exécution d’un script qui fera un backup de votre base de données, surveillera les modifications apportées sur les fichiers, vérifiera une fois par jour les nouveaux utilisateurs ajoutés, ...

9. Utilisez un logiciel de supervision

Il existe différents logiciels dans cette catégorie dont celui d’un ami : Watchful.li. Un logiciel de supervision va vous permettre, depuis une interface web unique, d’assurer le suivi de l’ensemble de vos sites Joomla!, de lancer des opérations de maintenance (backup, mise à jour, …) et même d’être alerté par emails en cas de problème, comme un changement dans un fichier critique du site.

Sécuriser un site web Joomla!

10. Backups, backups, backups

En cas de pépin, vous serez heureux de pouvoir repartir d’un backup propre d’avant le hack ou le plantage. Faites régulièrement des backups que vous téléchargerez en local et/ou conserverez sur un autre hébergeur. Testez le backup de temps à autre pour garantir qu’il est fonctionnel. Attention : certains virus ne se manifestent que plusieurs semaines après avoir infiltré (mais c’est à vérifier, je n’ai pas trouvé sur internet) votre site. Conservez donc longtemps vos backups pour être certain d’en posséder un d’avant le hack.

11. Derniers conseils

activez le mode de réécriture des URLs (SEF) pour éviter les URLs index.php?option=com_collection et, donc, réduire les attaques par Google Dorks ; prenez le temps de parcourir toutes les options de paramétrages de Joomla! et des extensions que vous utilisez. Par exemple désactivez toujours les possibilités d’upload dans les composants de contact si vous ne souhaitez pas permettre de sauver un fichier sur votre serveur ; configurez correctement les droits d’accès (ACLs) sur votre site selon la technique dite du least permission ; de la même manière, spécifiez des permissions (chmod) restreintes sur vos fichiers (644) et dossiers (755), les fichiers ne devant plus être modifiés pouvant être en lecture-seule (444) ; évitez d’avoir un compte nommé « admin ». Pour les attaques de type brute-force, lorsque le login est « admin », 50% du travail est déjà fait ; mettez le rapport d’erreur de Joomla! sur aucun ; Activez la double-authentification à votre site Joomla (ex. Google Authenticator ou Utilisation d’une Yubikey) ; protégez vos dossiers sensibles (/administrator, /votre-parefeu, /vos-stats, /vos-secrets, …) par l’ajout d’un fichier .htpasswd pour ajouter une seconde protection login/password ; désactivez la couche FTP dans la configuration de Joomla! (si vous l’aviez activé) puisqu’alors vos données de connexion sont stockées en clair dans le fichier configuration.php se trouvant à la racine du site ; 1 veillez à restreindre les permissions de l’utilisateur pour votre base de données (ne pas lui donner le droit de supprimer la dite base par exemple)  ; supprimez les fichiers inutiles tels que joomla.xml à la racine du site INSTALL.txt, license.txt, README.md…

Nous l’avons vu, la sécurisation d’un site web est le résultat de bons choix posés (hébergeur, politique de mots de passe, …), d’actes récurrents (mises-à-jour, backups, …) et de l’utilisation de quelques outils tiers. En suivant ces quelques principes, vous allez fortement réduire le risque de vous retrouver avec un site qui sera défacé et utilisé pour des attaques (phishing, DDos, spam, …). Si vous n’avez pas encore de pare-feu (firewall) pour protéger votre site, n’hésitez pas à consulter mon site web https://www.aesecure.com. Vous y trouverez un outil de protection gratuit ainsi que de multiples articles traitant de sécurité.

À propos de l'auteur

christophe-avonture
Christophe Avonture

Développeur de la solution aeSecure, protection et nettoyage de sites web. Co-fondateur du JUG Wallonie.