L'un des problèmes récurents que l'on peut rencontrer avec Wordpress , c'est la gestion des accès. On sait que ce système de gestion de contenu s'est vu à plusieurs reprises devenir la cible des bots cherchant à casser par force brute les accès de comptes avec des privilèges pour en prendre le contrôle, comme par exemple la désormais classique attaque par force brute sur XMLRPC que de nombreux sites ont essuyé en 2014 et qui reste à ce jour très en vogue.
Pourquoi ? Tout simplement parce que certains plugins Wordpress particulièrement populaires ( Jetpack s'il ne fallait nommer que lui) en ont besoin pour fonctionner. Un peu plus techniquement, moyennant le simple envoi d'une requête POST sollicitant la liste des méthodes disponibles (system.listMethods) sur le xmlrpc.php, celui-ci va docilement renvoyer une liste de méthodes disponibles en réponse... une providence, mais jusque là, c'est le fonctionnement normal d'une API. C'est justement cette fonctionnalité qui va par exemple permettre à un outil comme wp-scan l'énumération des utilisateurs grâce aux méthodes wp.getUserBlogs et metaWeblog.getUsersBlogs (mais pas que, car lorsque l'on souhaite abuser xmlrpc.php, d'autres méthodes sont bien utiles pour rendre son attaque la plus furtive possible). Le but ici n'étant pas de pondre un énième tutorial sur la question, nous allons nous focaliser sur quelque chose qui ne règle pas le problème, mais qui peut en limiter sensiblement les dégâts.
Si les premiers bons et seuls réflexes à avoir sont de choisir correctement ses mots de passe (en les générant aléatoirement avec des lettres majuscules et minuscules, des chiffres et des caractères spéciaux en nombre important) afin que ces derniers ne finissent pas dans un dictionnaire, de ne pas les réutiliser (en utilisant par exemple un gestionnaire de mots de passe ), il est toujours un facteur humain plus compliqué à gérer, nous le nommerons "utilisateur". L'utilisateur est un oiseau imprévisible... ou justement un peu trop prévisible, qui trouvera toujours un tas de mauvaises raisons pour ne pas observer les trois commandements de la gestion de mots de passe :
- la complexité du mot de passe
- pas de réutilisation du mot de passe
- le renouvellement fréquent du mot de passe
Il faut donc envisager, un jour ou l'autre, et en fonction de la confiance que vous lui accordez, des mesures plus ou moins drastiques. Oui, vous pouvez utiliser des systèmes de détection d'intrusion , oui vous pouvez utiliser l'excellent Fail2Ban en whitelistant, ou pas, leurs ip (spoofables), sauf que tout ceci se passera dans le dos de l'utilisateur sans qu'il n'en ai conscience et que ces méthodes ont elles aussi leurs limites, il suffit de regarder la page d'accueil du projet Fail2Ban pour comprendre. Et quoi de plus pédagogique que de sensibiliser notre utilisateur à la compromission de son compte... de ses comptes, puisque nous partons du principe qu'il utilise forcément son mot de passe ailleurs ?
Ce qui nous amène à une solution reconnue comme relativement efficace (en plus des mesures de bon sens usuelles), car très pédagogique : l'authentification à deux facteurs, voir plus si vous êtes un admin un peu revenchard cherchant à torturer le quotidien de ses utilisateurs.
Nous allons être un peu grinçant, par avance désolé, mais à chaque problème de conception de Wordpress : son plugin... Vous pensez qu'il s'agit là d'un troll ? Certes, mais juste un peu. En voici quelques exemples :
- vous souhaitez changer de nom de domaine ou passer en https, mais vous vous apercevez que Wordpress stocke protocole et nom de domaine en dur dans la base de donnée... il existe des plugins pour réécrire tout ça et forcer le https ;
- vous souhaitez désactiver Canvas, nécessaire aux Emoji, Gravatars et autres trucs parfaitement inutiles dans le core de Wordpress et dont l'intégration soulève de fait des avertissements de confidentialité ? Il y a un plugin pour ça (qui ne fonctionne d'ailleurs pas très bien ) ;
- vous souhaitez désactiver xmlrpc : il y a un plugin pour ça ; ...
Et bien bonne nouvelle, même si on se demande toujours pourquoi les Emoji sont intégrés au core Wordpress et non l'authentification à deux facteurs , il existe aussi des plugins pour durcir la procédure d'authentification de Wordpress, nous allons ici brièvement vous en présenter deux, avec deux méthodes distinctes de double authentification. Évidemment, en tant qu'adminsys ou RSSI, vous essuierez moultes contestations d'utilisateurs qui trouveront ça très compliqué. Et c'est là que vous devrez endosser une première fois votre casquette de pédagogue en expliquant les fondements de la gestion de l'identité et de l'authentification à vos utilisateurs, en leur rappelant par exemple comment un système d'information, celui de votre organisation, les reconnait. Et accessoirement pourquoi c'est important qu'ils soient bien reconnus.
On récapitule :
- L'identité numérique c'est qui nous sommes, qui nous déclarons être, et comment le système d'information nous reconnait.
- Un utilisateur s'identifie donc par qui il est, ce qu'il déclare être, ce dont il dispose pour le prouver (le mot de passe : théoriquement un secret), ce qu'il sait (secret théoriquement non partagé)
Ces bases étant posées, à vous de lui expliquer que la démarche est ici de lui offrir le "ce qu'il sait" pour que le système d'information s'assure bien que c'est lui et non un tiers.
L'authentification à deux facteurs sur Wordpress en pratique
Notre premier système d'authentification à deux facteurs pour Wordpress se nomme Twilio . Ce plugin propose une seconde authentification par l'envoi d'un code de contre-vérification via SMS.
La première étape après l'installation du plugin et de vous rendre sur le site Twilio.com pour obtenir votre clé d'API (gratuite dans le cadre d'un test).
Voici post installation notre page principale de configuration :
On va ensuite avoir besoin d'aller sur le site de Twilio, on clique sur Two Factor Authentification en bas à droite :
On crée notre "projet" d'application et on se laisse guider pour la configuration :
Il nous reste à récupérer notre clé d'API et notre token
Ce qui nous permet d'achever la configuration dans notre Wordpress
Pour vérifier que tout est ok, cliquez sur l'onglet test, lancez votre test
Et si tout s'est bien passé, vous devriez recevoir votre code par SMS:
Twilio est donc comme nous l'avons vu assez pratique et simple à mettre en place, cependant, c'est une solution américaine, dans un cloud américain, et si le plugin Wordpress (non officiel) est libre et gratuit, Twilio l'est beaucoup moins. La facturation du service se fera au volume.
C'est donc en toute logique que nous allons vous donner une alternative.
Le second plugin que nous avons testé, c'est Two Factor Authentication . Il propose une seconde vérification par l'obtention d'un code via une application mobile tierce vous permettant d'obtenir, une fois la première étape d'authentification avec votre mot de passe "classique', un code à 6 chiffres à usage unique (OTP pour One Time Password). Two Factor Authentication vous laissera le choix entre deux algorithmes :
Nous allons nous concentrer sur TOTP qui est l'algorithme le plus commun et que vos utilisateurs pourront utiliser en installant par exemple sur leur smartphone l'application Duo Mobile (de Cisco) (notez que TOTP est également compatible avec Google Authentificator et que bien d'autres applications sont disponibles). Une fois installée et un QR Code scanné, c'est cette application qui vous permettra d'obtenir votre code d'accès à 6 chiffres validant votre double authentification.
Notez que Two Factor Authentication est activable ou désactivable pour chaque rôle présent dans Wordpress et vous laisse donc la latitude de ne protéger que les comptes à privilèges et de laisser une paix relative aux utilisateurs ne jouissant d'aucun droit particulier.
Cependant, il y a bien une limite à tout cela, outre le QRCode, vous disposez d'une clé privée que vous pouvez, utiliser à la place du QRCode pour configurer votre application de TOTP. La limite étant qu'une clé privée peut se trouver, un jour ou l'autre compromise, mais sachez que les clés privées sont bien évidement révocables / réinitialisables et qu'une version premium de Two Factor Authentication vous permettra de disposer d'une fonctionnalité vous donnant accès à des codes d'urgence à usage unique.
Comme nous venons de le voir, il n'est techniquement pas bien compliqué de renforcer le processus d'authentification à notre système de gestion de contenu, il s'agit ici d'une bonne pratique qui pourrait bien vous éviter des usurpations d'identité donnant lieu à des accès de tiers indésirables, du défacement, de la fuite de données, voir de compromissions plus importantes de votre système d'informations. Sachez enfin qu'il est également possible d'utiliser son propre serveur d'authentification multifacteur, il en existe de très bons libres et opensource comme FreeOTP ou LinOTP