Protéger wordpress contre les attaques massives

wordpress

Il existe beaucoup de solutions logicielles open-source prêtes à l’emploi qui permettent aux internautes de créer leur blog ou leur site personnel et de le mettre en ligne. Parmi les plus connues, on peut citer dotclear et wordpress, mais il existe aussi des portails de gestion de contenu comme Joomla.

Ces solutions clé en main sont pratiques, demandent peu, voire aucune compétence et matière de programmation et sont rapides à mettre en place. La majorité des internautes ayant plus envie de se consacrer au fond qu’à la forme, ils adoptent donc naturellement ces logiciels lorsqu’ils souhaitent publier un contenu en ligne.

La revers de la médaille de ce type de solution, c’est l’exposition aux exploitations massives des vulnérabilités par les pirates. En effet, comme il s’agit d’une suite logicielle toute faite, les noms des fichiers et des répertoires le même pour toutes les installations de ces logiciels. Par exemple, un répertoire /images sur un site sera nommé de la même façon pour un autre site.

Cet état de fait permet à des internautes mal intentionnés, désireux de collecter des informations personnelles ou ayant simplement envie de faire parler d’eux de profiter d’une faille découverte dans ce logiciel pour s’introduire frauduleusement dans des dizaines, voire des centaines de sites web, et ceci d’une manière automatisée via l’utilisation de scripts.

Pour illustrer mon propos, prenons l’exemple de wordpress, qui est l’un des plus utilisés. Ce logiciel est pourvu d’une interface d’administration permettant de publier les articles, de créer des utilisateurs ainsi de suite. Il suffit de télécharger wordpress et de regarder les fichiers qui composent cette suite logicielle.

Sur tout site (99,99%) utilisant WordPress, on trouvera un répertoire /wp-admin, qui contient les fichiers de l’interface d’administration, et wp-login.php qui permet aux utilisateurs de s’authentifier et de se connecter sur le site. Si une faille est identifiée sur l’interface d’administration ou le fichier wp-login.php, il suffit à un script-kiddie de parcourir google pour regarder quels sites contiennent ces fichiers et donc utilisent wordpress : http://www.google.fr/search?hl=fr&q=wp-login.php&btnG=Rechercher

Ensuite, en 2 minutes, il peut exploiter la faille en question sur chacun de ces sites pour arriver à ce résultat : http://www.strangeauction.com/wp-login.php

Des solutions simples à mettre en oeuvre

Lutter contre ce fléau de l’exploitation massive n’est pourtant pas très compliqué. Il suffit de sortir de la norme et de personnaliser la solution. Je ne dis pas pour autant que le site ne contiendra plus aucune vulnérabilité, je dis juste qu’il sera moins vulnérable étant donné qu’il ne sera pas impacté par la majorité des attaques et qu’il devra faire l’objet d’une attaque ciblée et beaucoup plus longue à mettre en oeuvre pour le pirate.

Restreindre la visibilité

Par exemple, si on accède toujours à l’interface d’administration depuis une adresse IP fixe, on alors peut restreindre l’accès à l’interface en ajoutant simplement un fichier nommé .htaccess dans le répertoire wp-admin. Il contiendra une suite d’instructions qui indiqueront au serveur web le comportement à adopter en fonction de l’IP qui consulte ce répertoire.

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
allow from XXX.XXX.XXX.XXX # IP autorisée
allow from XXX.XXX.XXX.XXX # 2eme IP autorisée

Déplacer les fichiers sensibles

Une autre solution qui peut être utilisée pourrait être de renommer les répertoires et fichiers « sensibles » qui doivent rester hors de portée des pirates. Le site serait protégé encore davantage étant donné que les pirates ignoreraient même jusqu’à l’URL pour accéder à l’interface

A titre d’exemple, j’ai développé un petit script pour déplacer l’interface d’administration et le fichier wp-login.php de WordPress. Il suffit de créer ce fichier sur la machine en question (hors du répertoire de wordpress) et de paramétrer le nouveau nom du répertoire d’administration et le chemin complet vers le répertoire de wordpress. Ensuite, on peut exécuter le script qui s’occupera de modifier tous les fichiers qui pointent vers l’ancien répertoire.

Par exemple, si le nouveau nom que vous choisissez pour l’interface est « admwordpress », votre interface sera alors disponible sur http://www.votreurl.com/admwordpress ». Je doute fortement qu’un pirate ou un moteur de recherche puisse deviner cette URL par lui-même. Vous éviterez bien entendu tout lien web vers cette URL qui pourrait y conduire un moteur de recherche et donc indiquer de nouveau aux pirates l’existant d’une interface d’administration.

Bien entendu, je décline toute responsabilité sur les répercussions fâcheuses que pourrait avoir ce script sur votre wordpress. Je vous encourage à sauvegarder vos fichiers pour pouvoir les restaurer au cas où (le script est parfaitement fonctionnel chez moi).

#!/bin/sh
#*******************************************************
# Name : wpchgpath.sh
# Purpose : changes wordpress default admin path
# Author : bruno@brunovalentin.com
# date : 04/05/2010
#*******************************************************

newname="admwordpress" # new admin path
wpath="/var/www" # wordpress location

# remplace wp-admin dans les fichiers
for i in `grep -Ri --binary-files=without-match "wp-admin" $wpath \
 | cut -d":" -f 1 | sort | uniq`
do
 sed -i 's/wp-admin/'$newname'/gi' $i
done

# remplace wp-login dans les fichiers
for i in `grep -Ri --binary-files=without-match "wp-login" $wpath \
 | cut -d":" -f 1 | sort | uniq`
do
 sed -i 's/wp-login/'$newname-login'/gi' $i
done

# Renomme les fichiers contenant wp-admin
find $wpath/ -type f -iname *wp-admin* | sed -e 's/\(.*\)wp-admin\(.*\)/ mv \1wp-admin\2 \1'$newname'\2/' | sh
find $wpath/ -type d -iname *wp-admin* | sed -e 's/\(.*\)wp-admin\(.*\)/ mv \1wp-admin\2 \1'$newname'\2/' | sh
find $wpath/ -type f -iname *wp-login* | sed -e 's/\(.*\)wp-login\(.*\)/ mv \1wp-login\2 \1'$newname'-login\2/' | sh

Pour les webmasters qui ont un petit côté parano (comme je peux en avoir par moment), ces deux solutions peuvent être utilisées simultanément.

Ces méthodes sont adaptables à la plupart des solutions logicielles open-source disponibles, comme les wiki par exemple. Ce n’est qu’une première étape dans la sécurisation d’un site et bien d’autres précautions supplémentaires peuvent être envisagées si vous voulez dormir sur vos deux oreilles. 🙂

Mise à jour pour WordPress à partir de la version 3.0.4 :

Le script ci-dessus a été mis à jour et est maintenant opérationnel pour toutes les versions jusqu’à la 3.1 (dernière en date à l’heure où j’écris ces lignes).

Les scripts sont disponibles sur mon github : https://github.com/boolaz/WPChangePath

22 thoughts on “Protéger wordpress contre les attaques massives”

  1. Il suffit parfois de pas grand chose pour se sentir mieux avec la sécurité de ses applications web et avec sa paranoïa 😉

    Merci pour ce post sympa qui profitera à de nombreux wordpressistes 🙂

  2. Très juste. Je vais mettre le script en download dans l’article.
    Il va falloir que je change le CSS de wordpress car il transforme le code à sa manière et les scripts deviennent du coup inexploitables en copier-coller.
    Bruno

  3. Bonjour,
    Je cherche justement la même chose, deplacer mon repertoire de login / inscription (wp-login)
    Comment exécuter ce script une fois téléchargé ?
    merci

  4. il suffit de le rendre exécutable par l’intermédiaire de la commande chmod : « chmod +x nomduscript ». Ensuite, il faut l’exécuter en faisant « ./nomducript ».

    Avant de l’exécuter, il faut vérifier que les variables newname et wordpress_path soient configurées correctement.

  5. Bonsoir,

    Intéressant et intelligent votre apport.

    Surtout par ces temps pas très pas propice à la sécurité des informations.

    Aureika

  6. Bonjour,

    Je n’ai pas compris comment l’installer: avec quel logiciel fait on ce que vous avez indiqué? J’ai cuteFTP mais les parametres chmod permettes seulement de changer les permissions en lisibles etc. (705, 777 etc.)

    « il suffit de le rendre exécutable par l’intermédiaire de la commande chmod : “chmod +x nomduscript”. Ensuite, il faut l’exécuter en faisant “./nomducript”. »

  7. Bonjour,

    On ne peut pas utiliser un client FTP pour faire ça.
    Il faut utiliser une machine sous linux ou alors un logiciel permettant d’utiliser des commandes Unix sous windows comme cygwin.
    Ensuite, on utilise le script comme indiqué localement sur sa machine.
    Et après seulement on envoie les fichiers par FTP sur le site de production.
    Cordialement,

    Bruno

  8. Salut, très intéressant votre article je vais tester ca 😉
    merci

  9. Merci pour ce tuto très complet.
    @jjsylvestre pour sécuriser les sites WordPress de mes clients j utilise l extension Itheme security ..
    Ce plugin permet de modifier votre fichier .htaccess , il détecte ce qui ne va pas ,reste à cliquer afin de corriger le problème.
    Si vous n êtes pas sur de ce que vous faites ne touchez pas aux options avancés ..

  10. Bonjour,
    Merci pour ce complément d’information j’utilise Items sécurity et Wordforce ça dépend des sites web
    par contre comment appliquer
    allow from XXX.XXX.XXX.XXX # IP autorisée
    allow from XXX.XXX.XXX.XXX # 2eme IP autorisée
    uniquement au repertoire Admin ?
    Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *