Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

fr:Attaques par Force Brute

Page d'accueil du Codex en français - Télécharger WordPress en français
Les utilisateurs francophones se retrouvent sur le site WordPress-Francophone, notamment sur son forum d'entraide.

Contrairement aux piratages qui se concentrent sur des vulnérabilités dans un logiciel, une attaque par force brute est le type de méthode la plus simple pour accéder à un site : il essaye des noms d'utilisateur et des mots de passe, encore et encore, jusqu'à ce qu'il arrive à entrer. Souvent considéré comme "inélégante", cette méthode fonctionne très souvent lorsque les gens utilisent des mots de passe comme « 123456 » et les noms d'utilisateur comme « admin ».

En bref, ils s'attaquent au maillon faible de la sécurité de tout site Web : Vous.

En raison de la nature de ces attaques, vous pouvez voir la mémoire de votre serveur exploser, provoquant des problèmes de performance. C'est dû au nombre de requêtes HTTP (c'est le nombre de fois que quelqu'un visite votre site) qui est tellement élevé que les serveurs sont à cours de mémoire.

Ce genre d'attaque est pas endémique à WordPress, cela arrive avec chaque application Web ici ou là, mais WordPress étant populaire cela fait donc de lui une cible fréquente.

Protégez-vous

Un point d'attaque commun sur WordPress est de s'acharner sur le fichier wp-login.php encore et encore jusqu'à ce qu'ils entrent ou que le serveur meurt. Vous pouvez faire certaines choses pour vous protéger.

= N'utilisez pas l'Identifiant 'admin'

La majorité des attaques supposent que les gens utilisent l'identifiant « admin » en raison du fait que les premières versions de WordPress utilisaient cela par défaut. Si vous utilisez encore ce nom d'utilisateur, créez un nouveau compte, transférez tous les articles à ce compte, et changer 'admin' à un profil abonné (ou supprimez-le complètement).

Vous pouvez utiliser l'extension Admin Renamer Extended pour changer le nom d'utilisateur en place.

De bons mots de passe

L'objectif avec votre mot de passe est de le rendre difficile à deviner pour d'autres personnes et résistant pour résister à une attaque par force brute. Il existe beaucoup de générateurs automatiques de mot de passe qui peuvent être utilisés pour créer des mots de passe sécurisés.

WordPress dispose également d'un système de mesure de la force du mot de passe qui s'affiche lors du changement de votre mot de passe dans WordPress. Utilisez-le lorsque vous changez votre mot de passe pour assurer que sa solidité est adéquate.

Vous pouvez utiliser l'extension Appliquer des mots de passe forts pour forcer les utilisateurs à définir des mots de passe sûrs.

Les choses à éviter lors du choix d'un mot de passe :

  • Toute permutation de votre propre nom, nom d'utilisateur, le nom de l'entreprise ou le nom de votre site web.
  • Un mot issu d'un dictionnaire dans toutes les langues.
  • Un mot de passe court.
  • Un mot de passe exclusivement numérique ou alphabétique (un mélange des deux est préférable).

Un mot de passe sécurisé est nécessaire pas simplement pour protéger le contenu de votre blog. Un pirate qui accède à votre compte administrateur est en mesure d'installer des scripts malveillants qui peuvent potentiellement compromettre tout votre serveur.

Pour augmenter encore la force de votre mot de passe, vous pouvez activer Two Step Authentication (en anglais) pour protéger davantage votre blog.

Extension

Il y a beaucoup d'extensions disponibles pour limiter le nombre de tentatives de connexion faites pour votre site. Sinon, il y a aussi beaucoup d'extensions que vous pouvez utiliser pour empêcher les gens d'accéder à wp-admin complètement.

Protéger votre serveur

Si vous décidez de verrouiller wp-login.php ou wp-admin, vous pouvez trouver obtenir une erreur 404 ou 401 lorsque vous tentez d'accéder à ces pages. Pour éviter cela, vous devrez ajouter ce qui suit à votre fichier .htaccess.

ErrorDocument 401 default

Vous pouvez avoir l'erreur 401 qui pointe sur 401.html, mais le point visé n'est pas WordPress.

Pour Nginx vous pouvez utiliser la directive error_page mais vous devez fournir une url absolue.

error_page  401  http://example.com/forbidden.html;

Protection de wp-login.php par mot de passe

Protéger par un mot de passe votre fichier wp-login.php (et le dossier wp-admin) peut ajouter une couche supplémentaire à votre serveur. Parce qu'un mot de passe protégeant wp-admin peut casser une extension utilisant ajax sur la partie publique du site, il est généralement suffisant de ne protéger simplement que wp-login.

Pour ce faire, vous devrez créer un fichier .htpasswd. Beaucoup d'hébergeurs ont des outils pour le faire pour vous, mais si vous avez à le faire manuellement, vous pouvez utiliser ceci htpasswd generator (en anglais). Tout comme votre fichier .htaccess (qui est un fichier qui n'est seulement qu'une extension), .htpasswd n'aura également pas de préfixe.

Vous pouvez soit mettre ce fichier en dehors de votre dossier web public (pas dans /public_html/ ou /domain.com/, en fonction de votre hébergeur), ou vous pouvez le mettre dans le même répertoire, mais vous aurez envie de faire un peu de travail de sécurité supplémentaire dans votre fichier .htaccess si vous le faites.

Une fois que vous avez téléchargé le fichier .htpasswd, vous devez dire au .htaccess où il est placé. En supposant que vous avez mis .htpasswd dans le répertoire d'accueil de votre compte utilisateur et votre nom d'utilisateur de votre .htpasswd est mysecretuser, alors vous mettez dans votre .htaccess :

# Empêcher Apache de délivrer les fichiers .ht*
<Files ~ "^\.ht"> Order allow,deny Deny from all </Files>

# Protection wp-login
<Files wp-login.php>
AuthUserFile ~/.htpasswd
AuthName "Private access"
AuthType Basic
require user mysecretuser
</Files>

L'emplacement réel des AuthUserFile dépend de votre serveur, et le 'require user' changera en fonction du nom d'utilisateur que vous choisirez.

Si vous utilisez Nginx vous pouvez protéger par un mot de passe votre fichier wp-login.php en utilisant le HttpAuthBasicModule (en anglais). Ce bloc doit être à l'intérieur de votre bloc de serveur.

location /wp-login.php {
    auth_basic "Administrator Login";
    auth_basic_user_file .htpasswd;
}

The filename path is relative to directory of nginx configuration file nginx.conf The file should be in the following format:

user:pass
user2:pass2
user3:pass3

Les mots de passe doivent être encodés par la fonction crypt(3). Vous pouvez utiliser en ligne htpasswd generator (en anglais) pour crypter votre mot de passe.

Limiter l'accès à wp-admin par IP

Si vous êtes la seule personne qui a besoin de se connecter à votre espace d'administration et que vous avez une adresse IP fixe, vous pouvez refuser l'accès de wp-admin à tout le monde sauf vous par un fichier .htaccess.

Remarque : Attention votre FAI ou votre ordinateur peuvent changer votre adresse IP fréquemment, on appelle cela l'adressage IP dynamique plutôt que de l'adressage IP fixe. Il peut être utilisé pour une variété de raisons, comme économiser de l'argent. Si vous suspectez que ce soit le cas, trouvez comment modifier les paramètres de votre ordinateur ou contactez votre FAI pour obtenir une adresse fixe afin d'utiliser cette procédure.

Créez un fichier texte brut appelé .htaccess dans un éditeur de texte et ajoutez :

# Bloquer l'accès à wp-admin.
order deny,allow
allow from x.x.x.x 
deny from all

Remplacer x.x.x.x avec votre adresse IP. Votre fournisseur d'accès Internet peut vous aider à établir votre adresse IP. Ou vous pouvez utiliser un service en ligne comme What Is My IP (en Anglais).

Pour Nginx vous pouvez ajouter un bloc d'emplacement dans votre bloc de serveur qui fonctionne de la même manière que l'exemple ci-dessus Apache.

error_page  403  http://example.com/forbidden.html;
location /wp-admin {
  deny    192.168.1.1;
  allow   192.168.1.0/24;
  allow   10.1.1.0/16;
  deny    all;
}

Notez que l'ordre de deny/allow est de la plus haute importance. Vous pourriez être tenté de penser que vous pouvez changer l'ordre des directives d'accès et tout fonctionnera. En fait, ce n'est pas le cas. Le changement de l'ordre dans l'exemple ci-dessus présente aura pour résultat de refuser l'accès à toutes les adresses.

Si votre thème ou vos extensions utilisent AJAX, vous aurez probablement besoin d'ajouter un groupe supplémentaire de paramètres à votre .htaccess de manière à ce que cette fonctionnalité continue de fonctionner :

# Autoriser les accès à wp-admin/admin-ajax.php
<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Enregistrez le fichier et transférer-le dans à votre dossier wp-admin.

Encore une fois pour Nginx si vous limitez l'accès wp-admin et et que vous utilisez ajax vous aurez besoin d'ajouter un autre bloc d'emplacement à votre bloc de serveur.

location /wp-admin/admin-ajax.php {
    allow all;
}

Vous pouvez ajouter plus d'une adresse IP autorisée en utilisant :

# Bloquer l'accès à wp-admin.
order deny,allow
allow from x.x.x.x 
allow from y.y.y.y 
allow from z.z.z.z 
deny from all

Cela peut être utile si vous utilisez plus d'un fournisseur d'accès Internet pour administrer votre site (si par exemple, vous accédez également à la zone d'administration de votre site par votre opérateur de téléphonie mobile) ou si vous avez un très petit groupe de gens qui sont autorisés à accéder à la zone d'administration de votre site.

Si vous avez besoin pour permettre l'accès à un grand bloc d'adresses IP, essayez d'utiliser quelque chose comme :

# Bloquer l'accès à wp-admin.
order deny,allow
allow from x.x.x.* 
deny from all

Utiliser par exemple 192.168.1.* permettrait l'accès à toutes les adresses IP dans la plage 192.168.1.

Refuser l'accès à toute requête sans référent

Étendu à partir de Combatting Comment Spam (en anglais), vous pouvez l'utiliser pour empêcher quiconque qui ne soumet pas le formulaire de connexion d'y accéder :

# Stopper les attaques de connexions et commentaires indésirables
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_METHOD} POST
	RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
	RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
	RewriteCond %{HTTP_USER_AGENT} ^$
	RewriteRule (.*) http://%{REMOTE_ADDR}/$1 [R=301,L]
</ifModule>

Nginx - Interdire les requêtes sans référent

location ~* (wp-comments-posts|wp-login)\.php$ {
        if ($http_referer !~ ^(http://example.com) ) {
          return 405;
        }
      }

Changez example.com par votre domaine. Si vous utilisez le multisite avec des domaines mappés, vous aurez besoin de changer example.com par (example.com|example.net|example4.com) et ainsi de suite.

ModSecurity

Si vous utilisez ModSecurity, vous pouvez suivre les conseils de Frameloss - Arrêter les connexions par force brute contre WordPress (en anglais). Cela exige l'accès de niveau root sur votre serveur, et vous aurez peut-être besoin de l'aide de votre hébergeur.

Si vous utilisez ModSecurity 2.7.3, vous pouvez ajouter les règles dans votre fichier .htaccess à la place.

Fail2Ban

Fail2ban est un démon Python qui fonctionne en tâche de fond. Il vérifie les fichiers journaux qui sont générés par Apache (ou SSH par exemple), et sur certains événements, il peut ajouter une règle de pare-feu. Il utilise un filtre avec une expression régulière. Si cette expression régulière est détectée par exemple 5 fois en 5 minutes, il peut bloquer cette adresse IP pendant 60 minutes (ou n'importe quel autre ensemble de nombres). L'installation et la configuration Fail2ban nécessitent un accès root.

Listes de blocage

Il semble que la plupart des attaques par force brute sont des hôtes en provenance de Russie, du Kazakhstan et d'Ukraine. Vous pouvez choisir de bloquer les adresses IP qui proviennent de ces pays. Il y a des listes de blocage disponibles sur Internet que vous pouvez télécharger. Avec un peu de scripts shell, vous pouvez ensuite charger les règles de blocages dans iptables. Vous devez être conscient que vous bloquez les utilisateurs légitimes ainsi que des attaquants. Assurez-vous que vous pouvez justifier et expliquer cette décision à vos clients.

Outre les les listes de blocage par pays, il y a des listes avec les adresses IP des spammeurs connus. Vous pouvez également les utiliser pour les bloquer avec iptables. Il est bon de mettre à jour ces listes régulièrement.

La mise en place de listes noires et iptables nécessitent un accès root.

Services Cloud/Proxy

Des services comme CloudFlare et Sucuri CloudProxy peuvent également aider à atténuer ces attaques en bloquant les adresses IP avant qu'elles n'atteignent votre serveur.

Voir également