ReportedIP Hive 2.1.62 : une piste d'audit qui répond au ticket d'assistance
ReportedIP Hive 2.1.62 transforme la piste d’audit issue de huit points de surveillance de compte en un historique indiquant qui a modifié quoi sur un site WordPress : les paramètres avec l’ancienne et la nouvelle valeur, les plugins et les thèmes, les pages et les articles, les menus et les widgets, les fichiers enregistrés dans l’éditeur intégré, les comptes utilisateurs et, sur un réseau, les sites et les super-administrateurs. Chaque ligne indique le nom de l’utilisateur concerné, la manière dont la requête a été effectuée et l’objet affecté. Ainsi, la prochaine demande d’assistance concernant un permalien cassé ou une page disparue trouvera une réponse avant même que quiconque ne commence à émettre des hypothèses.
Effectuez la mise à jour depuis l’interface d’administration de WordPress ou téléchargez le fichier ZIP de la version 2.1.62 sur GitHub. L’historique des modifications fait partie de la formule Business ; la liste des fonctionnalités par formule est disponible sur la page de documentation du plugin Hive.
Ce que consigne la piste d’audit dans la version 2.1.62
Jusqu’à présent, l’historique enregistrait les connexions, les réinitialisations de mot de passe, ainsi que les modifications de profil et de rôle. Cela permet de savoir « qui s’est connecté », mais ne répond pas aux questions qui sont au cœur d’un incident de maintenance : qui a modifié la structure des permaliens la nuit où tous les anciens liens ont commencé à ne plus fonctionner, qui a désactivé le plugin de boutique, qui a déplacé les mentions légales vers la corbeille, qui a enregistré un fichier de thème quelques minutes avant l’apparition de l’écran blanc. La nouvelle trace couvre huit groupes de déclencheurs, soit 48 types d’événements au total.
| Groupe de déclenchement | Événements enregistrés | Par défaut |
|---|---|---|
| Entrées et sorties | Connexion, connexion à partir d’une nouvelle adresse, tentative infructueuse, déconnexion | désactivé |
| Comptes utilisateurs | Inscription, suppression, profil, modification de l’adresse e-mail et du mot de passe, modification des rôles de l’utilisateur actuel, réinitialisation du mot de passe, blocage de compte, fin de session, modification des droits liés aux rôles | sur |
| Pages et articles | Publié, non publié, envoyé à la corbeille, restauré, supprimé, URL modifiée | sur |
| Plugins, thèmes et noyau | Installation, mise à jour, activation, désactivation, suppression, changement de thème, mise à jour du cœur de WordPress, avec les versions avant et après | sur |
| Paramètres du site | 26 options principales telles que l’adresse du site, les permaliens, les paramètres de lecture, de discussion, d’inscription et de mise à jour, ainsi que chacun des 170 paramètres de Hive, accompagnés chacun de leur ancienne et de leur nouvelle valeur | sur |
| Menus et widgets | Menus créés, modifiés et supprimés ; emplacements des menus ; widgets ajoutés à une barre latérale ou supprimés de celle-ci | sur |
| Éditeur de fichiers de thèmes et de plugins | Un fichier enregistré via l’éditeur intégré, dont l’enregistrement n’a lieu que lorsque le fichier a effectivement été modifié | sur |
| Réseau (Multisite) | Création, modification, archivage et suppression de sites ; ajout ou suppression d’utilisateurs d’un site ; attribution ou retrait du statut de super-administrateur | sur |
Les connexions restent désactivées par défaut, car ce sont de loin les lignes les plus « bruyantes », et les tentatives infructueuses sont déjà consignées dans le journal de sécurité, accompagnées de la séquence de blocage correspondante. Les sept autres groupes correspondent aux éléments nécessaires à la gestion d’un dossier d’assistance ; ils sont donc activés par défaut.
Chaque ligne indique le nom de l’acteur, de l’agent et de l’objet.
Une ligne d’audit contient désormais trois éléments qu’elle ne comportait pas auparavant. L’utilisateur effectif est le compte connecté qui a effectué la modification, et non le compte concerné par celle-ci ; ce dernier figure désormais dans les nouvelles colonnes de l’objet (object_type, object_id, object_label, version 17 du schéma, ajoutées par dbDelta lors de la mise à jour). L’agent indique la provenance de la requête : navigateur, WP-CLI, cron, REST ou AJAX. Ainsi, une mise à jour automatique d’un plugin à trois heures du matin se distingue d’un clic de l’administrateur sur le bouton. Et l’objet reste lié tant qu’il existe : une page s’ouvre dans l’éditeur, un utilisateur sur sa page de profil, un menu sur l’écran des menus.
Les anciennes et nouvelles valeurs sont enregistrées lors des modifications de paramètres, limitées à 500 caractères, sous la forme d’une liste indiquant ce qui a été ajouté et ce qui a été supprimé, plutôt que d’être tronquées au risque de devenir illisibles. Les informations confidentielles n’apparaissent jamais dans le tableau : une clé de données ou un nom d’option désignant un mot de passe, un jeton, une clé ou un code ne révèle pas ses valeurs, ce qui s’applique aussi bien à la Community Access Key qu’à tout identifiant tiers qu’une option figurant sur la Whitelist pourrait contenir.
Ce qui n’est délibérément pas une ligne
- Les sauvegardes automatiques, les révisions et les brouillons automatiques, ainsi que les types de publication internes que l’éditeur de blocs et le Customizer créent d’eux-mêmes.
- Les écritures répétées d’une même option par le Customizer au cours d’une seule opération d’enregistrement, et le deuxième hook déclenché par WordPress pour cette même action. Les emplacements des menus et le positionnement des widgets sont enregistrés sous forme de diff et dédupliqués sur ce diff ; ainsi, une véritable deuxième modification effectuée dans la même requête est tout de même prise en compte.
- Le suffixe ajouté par WordPress lorsqu’une entrée est déplacée vers la corbeille, le rôle attribué par WordPress lors de la création d’un compte, et les suppressions par site déclenchées par la suppression d’un utilisateur à l’échelle du réseau pour chaque site.
- Enregistrement d’un fichier par l’éditeur rejeté : le groupe de l’éditeur calcule la somme de contrôle du fichier avant que le noyau ne l’écrive, puis la compare à la fermeture ; seule une somme de contrôle modifiée génère une ligne.
Les déclencheurs et la durée de conservation sont des paramètres
Ces huit groupes correspondent à des commutateurs situés sur la fiche « Confidentialité et journaux » de la page « Protection » ; ils sont stockés sous forme de reportedip_hive_audit_triggers et gérés comme n’importe quel autre paramètre de Registry ; ainsi, MainWP et Cloud Fleet Management appliquent la même valeur à l’ensemble du parc. La durée de conservation par défaut est passée de 30 à 90 jours et peut être définie entre 1 et 365. Le nettoyage nocturne ne supprime plus un lot délimité par jour ; il s’exécute par tranches de 5 000 lignes, dans le même budget de 20 secondes que le journal de sécurité. Ainsi, une table qui s’est accumulée pendant des mois est vidée en quelques nuits sans imposer de verrouillage prolongé.
L’onglet « Audit » se présente comme un relevé
Le tableau sous « Activité » affiche l’utilisateur avec son adresse, l’événement avec son groupe, l’objet et une phrase indiquant l’ancienne et la nouvelle valeur. Le filtre permet de sélectionner un événement ou un groupe entier, un utilisateur, une adresse, le titre d’un objet et une plage de dates. Les exportations au format CSV et JSON reprennent le filtre actif, les colonnes de l’objet et la phrase ; ainsi, ce que l’administrateur a filtré à l’écran correspond exactement au contenu du fichier. Un lien situé en bas de page permet d’accéder aux paramètres de déclenchement et de conservation.
Les libellés s’adaptent au lecteur, et non à l’auteur. Une ligne de configuration générée par une requête WP-CLI ou cron redéfinit le libellé de son option au moment de l’affichage ; ainsi, un administrateur allemand verra s’afficher « Permalink-Struktur » pour une modification effectuée par un collègue anglophone depuis la ligne de commande.
Multisite : lignes de réseau, lignes de site et une page pour chaque administrateur de site
Sur un réseau, les événements qui concernent l’ensemble du réseau sont stockés sous forme de lignes de réseau : activation de plugins à l’échelle du réseau, installations et mises à jour, options du réseau, sites créés, modifiés ou supprimés, attributions de droits de super-administrateur. Les événements relatifs à un site sont associés à ce site. L’administrateur du réseau voit tout dans l’onglet « Activité », avec une colonne « Site » et un filtre « Site » qui permet de restreindre la liste à un seul site ou aux lignes du réseau. Chaque administrateur de site dispose d’une page « Journal d’audit » dans le menu du site, qui affiche uniquement les lignes de ce site, avec les mêmes filtres et les mêmes options d’exportation. Une ligne « site supprimé » subsiste après le nettoyage qui supprime les lignes propres au site supprimé, avec l’identifiant du site dans la colonne « objet ».
En dessous du plan Business, l’onglet montre ce qu’il répondrait
Dans les formules « Free », « Contributor » et « Professional », l’onglet conserve l’indicateur de formule et ajoute quatre questions auxquelles le parcours répond, un lien vers la formule ainsi que le même tableau comportant cinq lignes d’exemple. Aucune requête n’est effectuée dans ces formules, l’exportation renvoie une erreur 403 et les événements de sécurité propres à chaque formule restent consignés dans le journal des événements.
Le filtre du journal des événements permet d’effectuer des recherches et de sélectionner des groupes entiers
Le filtre d’activité du journal de sécurité proposait auparavant une liste fixe de 30 types d’événements qui n’évoluait pas au fur et à mesure de l’ajout de capteurs : il était impossible de sélectionner une validation de formulaire échouée, un seuil d’adaptateur atteint ou un Honeypot de commentaires, et le champ de recherche ne tenait absolument pas compte du type d’événement. Chaque type d’événement enregistré par le plugin, y compris les événements opérationnels, figure désormais dans un Registry unique avec son étiquette, son groupe de filtrage et sa famille de menaces, regroupés en treize sections. Un champ situé au-dessus de la liste permet de filtrer les résultats par étiquette, slug ou nom de groupe ; chaque groupe dispose d’une option permettant de sélectionner tous ses éléments, et ce champ reste masqué lorsque le navigateur n’exécute pas de JavaScript.
Corrections importantes pour une installation réelle
- Le spam lié aux formulaires était absent des deux graphiques du Dashboard. Le type de base
form_spamétait absent de la taxonomie, ce qui a entraîné la suppression de tous les seuils atteints par les adaptateurs de la répartition des menaces et de la chronologie des événements. - Trois entrées du classement faisaient référence à des slugs que personne n’écrit (
geo_anomaly,reputation_threat,admin_scanning), si bien qu’aucun graphique ne faisait apparaître d’anomalies géographiques ni de blocages liés à la réputation. Cinq slugs qui sont utilisés étaient quant à eux totalement absents. - Un type d’événement pour lequel personne ne s’est inscrit apparaît désormais sous la rubrique « Autre » au lieu d’être supprimé des classements sans laisser de trace, ce qui expliquait qu’un nouveau capteur puisse rester invisible pendant plusieurs versions.
- La couleur du badge correspond à la famille de menaces, ce qui permet de distinguer chaque capteur d’un seul coup d’œil, et non plus seulement les quatre pour lesquels une règle avait été définie.
- Un mécanisme de contrôle de régression s’applique désormais dans les deux sens : chaque « slug » généré par un appel de journalisation doit correspondre à une ligne du Registry, et chaque ligne doit avoir un responsable de l’écriture. Ce même mécanisme de contrôle s’applique également à la piste d’audit.
Quels sont les changements pour une flotte gérée ?
Une clé a été ajoutée au schéma des paramètres à distance, reportedip_hive_audit_triggerset rien n’a été supprimé ni modifié en tant que tel ; la version du schéma reste donc à 1 et un Dashboard qui n’a pas rechargé le schéma continue de fonctionner. Les lignes écrites avant la mise à jour conservent leur signification, et l’exportateur et l’effaceur RGPD prennent en charge à la fois l’ancien et le nouveau format de ligne.
La version 2.1.62 fait suite à la version 2.1.57, qui regroupait tous les paramètres sur une seule page « Protection », et à la version 2.1.54, qui avait remplacé le Setup Wizard par un guide de démarrage rapide d’une page. La documentation du plugin présente la liste actuelle des fonctionnalités par formule, ainsi que les capteurs et leurs paramètres par défaut.