Accueil » Open-source, Sécurité info

Protéger wordpress contre les attaques massives

4 mars 2009 lu 5 199 fois 9 Commentaires

Envoyer à un ami






Envoyer à un ami

Des solutions de blogs clé-en-main

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 problématique

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).

Télécharger le script : wp_admin_rename

#!/bin/sh
newname="admwordpress"
wordpress_path="/var/www/wordpress"
# remplace wp-admin dans les fichiers
for i in `grep -Ri "wp-admin" $wordpress_path | 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 "wp-login" $wordpress_path | cut -d":" -f 1 | sort | uniq`
do
sed -i 's/wp-login/'$newname-login'/gi' $i
done
# renomme le wp-admin.css
mv $wordpress_path/wp-admin/wp-admin.css $wordpress_path/wp-admin/$newname.css
# renomme le repertoire wp-admin
mv $wordpress_path/wp-admin $wordpress_path/$newname
# renomme le fichier wp-login.php
mv $wordpress_path/wp-login.php $wordpress_path/$newname-login.php

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. :-)

9 Commentaires »

  • Cédric Pernet a écrit:

    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 :-)

  • Eric F. a écrit:

    Bonjour !

    Ce serait plus pratique à récupérer si le script n’était pas transformé par Wordpress :-)

  • Bruno Valentin (auteur) a écrit:

    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

  • fred a écrit:

    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

  • Bruno Valentin (auteur) a écrit:

    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.

  • Aureika a écrit:

    Bonsoir,

    Intéressant et intelligent votre apport.

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

    Aureika

  • Mickael a écrit:

    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”. »

  • Bruno Valentin (auteur) a écrit:

    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

  • penguin en smoking a écrit:

    Salut, très intéressant votre article je vais tester ca ;)
    merci

Laissez votre réponse!

Ajouter votre commentaire ci-dessous, ou mettre un lien sur votre site. Vous pouvez aussi souscrire à la liste des commentaires par RSS.

Soyez gentils. Restez dans le sujet traité, et évitez le spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ceci est un blog compatible Gravatar. Pour obtenir votre avatar reconnu globalement, enregistez-vous sur Gravatar.