Comment sécuriser WordPress?

De nombreux sites WordPress se font pirater, souvent à cause d’un mauvais mot de passe. Et si l’on trouve de nombreux conseils pour éviter de se faire pirater, voici comment éviter le piratage avec une facilité assez déconcertante. Cet article est sans doute le plus important de tous si vous vous lancez dans WordPress.

Introduction

WordPress a mauvaise réputation à cause du nombre de sites piratés. Avec 30% des sites Web tournant sur WordPress, il n’est pas étonnant que les sites WordPress soient ouverts aux tentatives de piratage. Bien sûr, personne n’est totalement à l’abri d’un piratage mais il y a quelques moyens très simples pour éviter le pire.

Tout d’abord, j’aimerais démystifier une croyance populaire: les tentatives de piratage des sites Internet (WordPress ainsi que les autres CMSUn système de gestion de contenu (Content Management System ou CMS en anglais) est une famille de logiciels destinés à la conception et à la mise à jour dynamique de sites Web. WordPress est sans doute le plus connu de tous. Les CMS permettent de créer des sites ou des blogs avec un minimum de connaissances informatiques.) ne sont pas l’œuvre de pirates mais de logiciels automatiques. Il est très rare que quelqu’un décide de pirater votre site en particulier. Si un vrai hacker s’attaque à votre site Web, alors il usera de toutes les techniques possibles y compris l’ingénierie sociale qui lui permettra de s’introduire efficacement dans votre site.

Copie d’écran JetPack

Il existe de nombreux logiciels « malveillants » qui s’attaquent soit aux sites Web soit directement aux serveurs qui hébergent le site et, si vous avez installé l’extension Jetpack, par exemple, vous allez voir que votre site a fait l’objet de nombreuses tentatives de piratages.

Il s’agit ici du nombre de tentatives depuis la mise en place de Jetpack (mais d’autres extensions peuvent aussi être utilisées). Le nombre est assez trompeur. Le nombre d’attaques sur ce site Web est de 300 attaques par jour en moyenne ce qui signifie que le chiffre affiché est sans doute au-dessous de la réalité. mais ce n’est pas le nombre qui compte mais l’efficacité. Et les logiciels malveillants sont tout, sauf efficaces.

Le mot de passe

L’humain: seul responsable

Vous êtes responsable! Si votre site s’est fait piraté, c’est sans doute que votre mot de passe était trop facile à deviner. Sachez que c’est votre faute. Si un logiciel est capable de se connecter à votre place, c’est que votre mot de passe était trop facile à découvrir.

Bien sûr, il y a d’autres possibilités. En particulier, la mauvaise configuration de votre serveur. Si vous hébergez le serveur et que votre site Web est sous votre entière responsabilité, il est fort possible qu’une mauvaise configuration puisse entraîner un trou de sécuritéDans le jargon informatique, il s'agit d'un oubli (souvent une mauvaise configuration) qui permet à un pirate informatique de s'introduire facilement dans le serveur alors que cela ne devrait pas. À ne pas confondre avec la faille de sécurité.. C’est pourquoi, il faut que vous ayez confiance en l’hébergeur chez qui votre site Web est géré.

La seule parade vraiment efficace contre un piratage est d’utiliser une sauvegarde d’un site avant son piratage. Là encore, il faut être sûr que la sauvegarde utilisée est antérieure au piratage et qu’elle permet d’effacer les fichiers ajoutés par les pirates. Et bien entendu, il faut changer les mots de passe pour tout: utilisateurs ET base de données.

Un mot de passe doit rester simple

Un mot de passe doit rester simple! Comme vous allez le voir dans la prochaine section, inutile de trop se casser la tête. En effet, « Victor Hugo » est un meilleur mot de passe que « 1q2w3e4r ». Pourquoi? Parce que « 1q2w3e4r » correspond (sur un clavier américain ou suisse) à une suite de touches proches les unes des autres sur un clavier (1ère et 2e rangée de touches alternées).

Les pirates ne font pas preuve d’une grande inventivité. Les mots de passe utilisés sont relativement basiques. Et presque aucun d’entre eux n’utilise un espace! Surprenant? Tout simplement parce que la psychologie humaine a quelques biais qui sont exploités par les pirates. L’être humain se simplifie la vie: ainsi les mots de passes courants tels que « admin1234 » ou « F*uckYou » sont couramment utilisés. Malheureusement, ces mots de passe sont aussi secrets que la clé cachée sous le tapis, et les pirates peuvent s’infiltrer dans votre site Web en quelques minutes.

Et sans doute aussi parce que, par expérience, un site qui possède un excellent mot de passe a des chances d’être très bien protégé parce que la personne qui s’en occupe est sans doute un paranoïaque de la sécurité. Dans toutes les tentatives de piratage que notre site a reçu, presque aucun mot de passe ne possédait une espace. Surprenant? pas tant que cela. On trouve très peu d’espace dans les mots de passe: je pense que les gens hésitent à utiliser ce caractère pour je ne sais quelle raison.

Idem pour les accents. Utiliser « Théophile » vous protège fortement (sauf si votre login est « theophile »!). Ne serait-ce qu’à cause de l’accent. En général, ceux-ci sont bien reconnus par les logiciels et taper un mot de passe avec un accent est tout-à-fait possible de nos jours (ce n’était pas toujours le cas jusque dans les années 2010).

Contrairement à ce que l’on peut penser, ajouter « $ » ou « ! » à la fin d’un mot de passe comme « admin » ne change rien. Reprendre votre identifiant WordPress comme mot de passe est la pire des solutions. Y compris en ajoutant « 1234 » derrière.

Choisir son identifiant et un mot de passe incassable

Suite à nos recherches, voici des conseils très simples pour protéger efficacement votre site Web des intrusions:

  • Choisir une adresse de courrier électronique comme identifiant (c’est possible depuis WordPress 5.2).
  • Choisir un le nom d’un ami comme base du mot de passe (ex: « Jacques Tricatel ») — Pas le vôtre ou celui d’un utilisateur du site.
  • Ajouter un chiffre (votre jour de naissance, par exemple) entre le nom et le prénom de l’ami en question. On obtient alors « Jean 23 Tricatel ».

Le mot de passe a l’air simple mais quasiment impossible à casser. Combien de tentatives faudrait-il? Des millions avant de trouver. Aucun logiciel ne peut se permettre cette perte de temps et d’énergie!

Les mots de passe à éviter à tout prix:

  • Les mots de passe qui commencent par le nom de domaine (avec ou sans l’extension)!
  • Les mots de passe qui commencent par un nom d’utilisateur du site WordPress ou « admin ».
  • Les mots de passe dont les lettres sont toutes en minuscules.
  • Les mots de passe se terminant par une suite de chiffres (« 1 », « 123 », « 1234 »…) ou une année (« 2016 », « 2017 »…)
  • Les mots de passe se terminant par un caractères spécial (<, >, $…) et/ou suivi d’une suite de chiffres ou une année.

Doit-on changer son mot de passe tous les 3 mois?

Selon une croyance bien ancrée dans les DSIDirection des Systèmes Informatique. Dans les grandes entreprises, désigne les équipes chargées de décider et de faire appliquer les procédures et les règles liées au matériel informatique et à son utilisation. Les équipes sont, parfois, également en charge d'effectuer le développement et l'implémentation et la maintenance des programmes et du matériel. Généralement, les équipes du support informatique sont également rattachées à la DSI., il faut changer les mots de passe tous les trois mois. C’est extrêmement contre-productif et dangereux. L’article de Denis JACOPINI le résume assez bien: « En effet, il a été constaté qu’imposer aux utilisateurs de changer trop souvent de mot de passe complexe les amenait à choisir un mot de passe « proche » d’un choix précédent par exemple en incrémentant un chiffre en fin du mot de passe précédent (1, 2, 3, 4,…) »

Inutile de changer un mot de passe. Cela risque d’entraîner un affaiblissement de celui-ci. Il existe également quelques algorithmes qui permettent de donner un score à un mot de passe. Lorsque vous créez un nouveau site WordPress sur notre plateforme, nous vérifions le score et nous vous donnons une certaine latitude quant au choix du mot de passe. Nous avons ajouté des règles spécifiques qui peuvent faire considérablement baisser le score au point de ne pas être acceptable (en particulier si vous ne suivez pas nos conseils).

Aussi simple que cela?

Oui. Et je comprends que vous doutiez de mes dires. On dit souvent qu’un mot de passe doit faire au moins 8 caractères, comporter des caractères spéciaux, être changé tous les 3 mois… Tout cela est contre-productif. Et je voulais démystifier la sécurité (ou l’insécurité des sites WordPress). Dans la section suivante, je vous explique (en termes techniques) comment nous en sommes parvenus à nos conclusions. Vous n’êtes pas obligé de lire, mais je tenais à expliquer comment nous en étions venu à la conclusion qu’un mot de passe basique est tout-à-fait concevable pour un administrateur.

La méthodologie

Pour écrire cet article, nous avons voulu comprendre la provenance des piratages informatiques. Bien entendu, nous sommes parti du postulat que le serveur était correctement protégé et qu’il n’y avait pas de trou de sécurité au niveau de la configuration (aussi bien au niveau de Linux que du serveur Apache).

Ce qui suit est un article technique: si vous n’être pas un programmeur avec un bon niveau d’expertise, vous risquez d’être un peu perdu dans les explications.

Le code ajouté

La technique de piratage utilisée par tous les logiciels est la suivante: essayer de se connecter via le script wp-login.php (le script de connexion sur lequel vous êtes dirigé à chaque fois que vous essayez de vous connecter à la partie administrative de votre site).

L’une des choses les plus étonnantes au niveau de la sécurité, c’est que, même à ce niveau-là, les extensions sont actives. Ce qui signifie qu’une extension qui présenterait une faille de sécurité pourrait être exploitée. Cela inclut les extensions qui sont censées vous protéger… Partant de ce constat, nous avons mis en place un script qui nous a permit d’espionner TOUTES les connexions à notre site WEB, y compris les nôtres!

Le script est très simple et consiste en 3 lignes:

 if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
    @file_put_contents('/tmp/logins', json_encode($_POST) . "\n", FILE_APPEND);
 } 

Comme vous pouvez le constater, nous enregistrons toutes les tentatives de connexions (aussi bien légitimes que non légitimes) et on obtient un fichier dont les premières lignes ressemble à cela:

[]
{"log":"hibigmail-com","pwd":"maisonwp","wp-submit":"Log In","redirect_to":"https:\/\/maisonwp.com\/wp-admin\/","testcookie":"1"}
[]
{"log":"hibigmail-com","pwd":"maisonwp","wp-submit":"Log In","redirect_to":"https:\/\/maisonwp.com\/wp-admin\/","testcookie":"1"}
[]
[]
{"log":"hibigmail-com","pwd":"maisonwp","wp-submit":"Log In","redirect_to":"https:\/\/maisonwp.com\/wp-admin\/","testcookie":"1"}

Les lignes « [] » correspondent à l’appel de la page avec une méthode HTTP GET pour récupérer un cookie de session juste avant avant l’appel en POST pour tenter de se faire identifier comme utilisateur référencé. C’est donc ces lignes qui nous intéressent. Elle contiennent les données suivantes:

  • log: l’identifiant de l’utilisateur.
  • pwd: le mot de passe de l’utilisateur (oui: n’importe quelle extension peut le récupérer en clair!)
  • wp-submit: le texte du bouton « Se connecter » de la page de login. Une bonne méthode, en France, pour voir s’il s’agit d’une tentative de piratage est de vérifier la valeur. Si elle contient « Log In« , il s’agit d’une tentative à partir d’un WordPress configuré en anglais (et c’est sans doute un piratage). Elle contient « Se connecter » dans le cas contraire.
  • redirect_to: la redirection souhaitée. Comme de bien entendu, la page d’administration.
  • testcookie: interne à WordPress, toujours à 1.

Analyse des résultats

Première chose que l’on remarque: les pirates n’utilise plus (ou assez peu) l’identifiant « admin » mais l’identifiant de l’utilisateur, à savoir le nom de l’auteur des articles. Pourquoi? Parce qu’il est facile de trouver les identifiants des auteurs en scannant les pages du site. Si l’utilisateur est capable d’écrire un article et de le publier, il y a des chances que ce soit également l’administrateur du site.

Sauf que, ici, « hibigmail.com » n’est pas un identifiant valide! En fait, si vous utilisez une adresse email comme identifiant lors de la création du compte, le signe arobase (@) de l’adresse est supprimé et les points (.) sont remplacés par des tirets! Cela complique fortement le travail des logiciels malveillants car l’identifiant est, du coup, complètement faux! C’est pourquoi nous donnons le conseil de mettre une adresse e-mail plutôt qu’un simple identifiant.

À ce moment là, 100% des tentatives s’effectuent avec un identifiant erroné et n’ont strictement aucune chance d’aboutir! Même si votre mot de passe est « admin » mais ne tentez-pas le coup! Il suffirait d’améliorer un peu l’algorithme d’analyse pour arriver à passer outre ce problème mais c’est beaucoup d’effort pour rien.

Rassurez-vous, si vous avez des utilisateurs WordPress (avec le droit « éditeur ») ayant des identifiants normaux (sans point ni arobase), ce n’est pas grave. Les logiciels qui tentent, par la force, de pirater votre site ont des faiblesses. Tout d’abord, il est rare d’avoir une « attaque en force » (par déni de service), cela va mettre votre considérablement ralentir votre serveur et l’attaquant risque fort d’être repéré par les outils de surveillance de votre hébergeur. Ce qui signifie qu’un attaquant va essayer au maximum un mot de passe par seconde. Avec 3600 mots de passe en une heure, il lui faudrait énormément de temps pour finir le travail sans être certain d’y parvenir.

Comment les attaquants opèrent-ils? Il utilisent les identifiants des auteurs d’articles. Ils sont faciles à trouver: il suffit de chercher l’expression « https://{{domaine}}/author/{{identifiant}}/ » dans la page d’accueil et le tour est joué. Ensuite, les logiciels vont essayer des mots de passe standards puis des mots de passe basés sur l’identifiant ou le domaine. Ainsi nous avons pu repéré les mots de passe suivants:

  • l’absence de mot de passe (si!);
  • une suite de chiffres (« 1313 », « 00000 », « 1212 », « 1234 », « 654321 », etc.);
  • ceux basés sur « admin » suivi ou non d’une suite de chiffres(et des variantes « admin@pass », « admin@admin »…);
  • ceux basés sur le nom de domaine (« maisonwp@2019 », « maisonwp », « maisonwp123″…);
  • ceux basés sur l’identifiant (les mêmes suffixes que pour le nom de domaine);
  • ceux basé sur le clavier américain (« 1q2w3e », « 1qwerty »…);
  • et bien sûr, les incontournables: « F*ckYou », « P@ssw0rd », « Password », « Password1 », « alfa123 », « magic123 », « root », « secret », « zebda », « logitech89 » (sic) et bien d’autres…

En 3 jours, j’ai totalisé un total de 953 attaques avec 527 mots de passe différents. Et vous croyez que je suis inquiet? Pas le moins du monde…

Laisser un commentaire