Skip to main contentSkip to footer
Veröffentlichungen

ReportedIP Hive 2.1.62: Ein Audit-Trail, der das Support-Ticket beantwortet

Patrick Schlesinger
ReportedIP Hive 2.1.62 release card: audit trail with 8 trigger groups, 48 events with actor, agent and object, and 90 days of retention adjustable from 1 to 365

ReportedIP Hive 2.1.62 macht aus dem Audit-Trail, der bisher acht Konto-Hooks abhörte, ein Protokoll darüber, wer was auf einer WordPress-Website geändert hat: Einstellungen mit altem und neuem Wert, Plugins und Themes, Seiten und Beiträge, Menüs und Widgets, im eingebauten Editor gespeicherte Dateien, Benutzerkonten und im Netzwerk auch Websites und Super-Admins. Jede Zeile nennt den handelnden Benutzer, den Weg der Anfrage und das betroffene Objekt, damit das nächste Support-Ticket zu einem kaputten Permalink oder einer verschwundenen Seite eine Antwort hat, bevor jemand zu raten beginnt.

Das Update kommt über den WordPress-Admin oder als ZIP aus dem Release v2.1.62 auf GitHub. Der Audit-Trail gehört zum Business-Tarif; die Funktionsliste je Tarif steht auf der Dokumentationsseite des Hive-Plugins.

Was der Audit-Trail in 2.1.62 aufzeichnet

Bisher hörte der Trail auf Anmeldungen, Passwort-Zurücksetzungen, Profil- und Rollenänderungen. Das beantwortet „wer hat sich angemeldet”, aber nicht die Fragen, an denen ein Wartungsfall wirklich hängt: Wer hat in der Nacht die Permalink-Struktur umgestellt, in der jeder alte Link ins Leere lief? Wer hat das Shop-Plugin deaktiviert, wer das Impressum in den Papierkorb verschoben, wer Minuten vor dem weißen Bildschirm eine Theme-Datei gespeichert? Der neue Trail deckt acht Auslöser-Gruppen ab, 48 Ereignistypen insgesamt.

Auslöser-GruppeAufgezeichnete EreignisseStandard
An- und AbmeldungenAnmeldung, Anmeldung von neuer Adresse, Fehlversuch, Abmeldungaus
BenutzerkontenRegistrierung, Löschung, Profil-, E-Mail- und Passwortänderungen, Rollenänderungen mit handelndem Benutzer, Passwort-Zurücksetzungen, Kontosperren, beendete Sitzungen, bearbeitete Rollenrechtean
Seiten und BeiträgeVeröffentlicht, zurückgezogen, in den Papierkorb verschoben, wiederhergestellt, gelöscht, URL-Slug geändertan
Plugins, Themes und CoreInstalliert, aktualisiert, aktiviert, deaktiviert, gelöscht, Theme gewechselt, WordPress-Core aktualisiert, jeweils mit Version vorher und nachheran
Website-Einstellungen26 Core-Optionen wie Website-Adresse, Permalinks, Lese-, Diskussions-, Registrierungs- und Update-Einstellungen, dazu jede der 170 Hive-Einstellungen, jeweils mit altem und neuem Wertan
Menüs und WidgetsAngelegte, geänderte und gelöschte Menüs, Menüpositionen, einer Seitenleiste hinzugefügte oder daraus entfernte Widgetsan
Theme- und Plugin-Datei-EditorEine über den eingebauten Editor gespeicherte Datei, nur wenn sich die Datei tatsächlich geändert hatan
Netzwerk (Multisite)Angelegte, geänderte, archivierte und gelöschte Websites, zu einer Website hinzugefügte oder daraus entfernte Benutzer, erteilte oder entzogene Super-Admin-Rechtean

Anmeldungen bleiben standardmäßig aus, weil sie mit Abstand die lautesten Zeilen sind und Fehlversuche ohnehin im Sicherheitsprotokoll stehen, mit der Sperr-Leiter dahinter. Die übrigen sieben Gruppen sind das, was ein Support-Fall braucht, deshalb starten sie eingeschaltet.

Jede Zeile nennt Akteur, Weg und Objekt

Eine Audit-Zeile trägt jetzt drei Dinge, die sie vorher nicht trug. Der handelnde Benutzer ist das angemeldete Konto, das die Änderung vorgenommen hat, nicht das Konto, um das es ging; dieses steht in den neuen Objekt-Spalten (object_type, object_id, object_label, Schema-Version 17, beim Update per dbDelta ergänzt). Der Weg sagt, wie die Anfrage hereinkam: Browser, WP-CLI, Cron, REST oder AJAX, sodass ein automatisches Plugin-Update um drei Uhr nachts von einem klickenden Administrator zu unterscheiden ist. Und das Objekt ist verlinkt, solange es existiert: eine Seite öffnet sich im Editor, ein Benutzer im Profil, ein Menü auf der Menü-Seite.

Bei Einstellungsänderungen werden alter und neuer Wert gespeichert, auf 500 Zeichen gekürzt; eine Liste wird als „hinzugekommen” und „entfernt” abgelegt statt in etwas gekürzt, das falsch zu lesen wäre. Geheimnisse erreichen die Tabelle nie: Ein Datenschlüssel oder ein Optionsname, der ein Passwort, ein Token, einen Key oder einen Code bezeichnet, hält seine Werte draußen. Das gilt für den Community Access Key genauso wie für Zugangsdaten Dritter, die eine überwachte Option enthalten könnte.

Was absichtlich keine Zeile ist

  • Automatische Speicherungen, Revisionen und Auto-Drafts sowie die internen Beitragstypen, die der Block-Editor und der Customizer selbst schreiben.
  • Die wiederholten Schreibvorgänge des Customizers auf eine Option während eines einzigen Speicherns und der zweite Hook, den WordPress für dieselbe Aktion feuert. Menüpositionen und Widget-Platzierung werden als Differenz gespeichert und auf dieser Differenz dedupliziert, eine echte zweite Änderung im selben Request landet also weiterhin.
  • Der Slug, den WordPress beim Verschieben in den Papierkorb anhängt, die Rolle, die WordPress während der Kontoanlage vergibt, und die Entfernungen je Website, die eine netzwerkweite Benutzerlöschung für jede Website auslöst.
  • Ein abgelehntes Speichern im Datei-Editor: Die Editor-Gruppe hasht die Datei, bevor Core sie schreibt, vergleicht beim Beenden der Anfrage erneut, und nur ein geänderter Hash ergibt eine Zeile.

Auslöser und Aufbewahrung sind Einstellungen

Die acht Gruppen sind Schalter auf der Karte „Datenschutz und Protokolle” der Schutz-Seite, gespeichert als reportedip_hive_audit_triggers und wie jede andere Registry-Einstellung verwaltet, sodass MainWP und die Cloud-Flottenverwaltung denselben Wert über eine ganze Flotte verteilen. Der Aufbewahrungs-Standard stieg von 30 auf 90 Tage und lässt sich zwischen 1 und 365 einstellen. Die nächtliche Bereinigung löscht nicht mehr einen begrenzten Stapel pro Tag; sie läuft in denselben Blöcken von 5.000 Zeilen unter demselben 20-Sekunden-Budget wie das Sicherheitsprotokoll, sodass eine über Monate gewachsene Tabelle in wenigen Nächten ohne lange Sperre geleert wird.

Der Audit-Reiter liest sich wie ein Protokoll

Die Tabelle unter „Aktivität” zeigt den Benutzer mit seiner Adresse, das Ereignis mit seiner Gruppe, das Objekt und einen Satz mit altem und neuem Wert. Der Filter wählt ein Ereignis oder eine ganze Gruppe, einen Benutzer, eine Adresse, einen Objekttitel und einen Datumsbereich, und die CSV- und JSON-Exporte übernehmen den aktiven Filter, die Objekt-Spalten und den Satz. Was ein Administrator auf den Bildschirm gefiltert hat, landet genau so in der Datei. Ein Link am Ende öffnet die Einstellungen für Auslöser und Aufbewahrung.

Beschriftungen folgen dem Leser, nicht dem Schreiber. Eine Einstellungs-Zeile, die eine WP-CLI- oder Cron-Anfrage geschrieben hat, löst ihre Optionsbezeichnung beim Anzeigen erneut auf. Ein deutscher Administrator sieht also „Permalink-Struktur” für eine Änderung, die eine englischsprachige Kollegin über die Kommandozeile gemacht hat.

Multisite: Netzwerk-Zeilen, Website-Zeilen und eine Seite für jeden Website-Administrator

In einem Netzwerk werden Ereignisse, die das Netzwerk als Ganzes betreffen, als Netzwerk-Zeilen gespeichert: netzwerkweite Plugin-Aktivierung, Installationen und Updates, Netzwerk-Optionen, angelegte, geänderte oder gelöschte Websites, Super-Admin-Rechte. Ereignisse auf einer Website tragen diese Website. Der Netzwerk-Admin sieht alles im Aktivitäts-Reiter mit einer Website-Spalte und einem Website-Filter, der die Liste auf eine Website oder auf die Netzwerk-Zeilen eingrenzt. Jeder Website-Administrator bekommt eine Audit-Trail-Seite im Website-Menü, die die Zeilen dieser Website zeigt und sonst nichts, mit denselben Filtern und demselben Export. Eine Zeile „Website gelöscht” überlebt die Bereinigung, die die eigenen Zeilen der gelöschten Website entfernt, mit der Website-ID in der Objekt-Spalte.

Unterhalb von Business zeigt der Reiter, was er beantworten würde

In den Tarifen Free, Contributor und Professional behält der Reiter die Tarif-Markierung und ergänzt vier Fragen, die der Trail klärt, einen Link zum Tarif und dieselbe Tabelle mit fünf Beispielzeilen. In diesen Tarifen wird nichts abgefragt, der Export antwortet mit 403, und die Sicherheitsereignisse, die jeder Tarif hat, bleiben im Ereignisprotokoll.

Der Filter des Ereignisprotokolls ist durchsuchbar und wählt ganze Gruppen

Der Aktivitätsfilter des Sicherheitsprotokolls bot bisher eine feste Liste von 30 Ereignistypen, die nicht mit den Sensoren gewachsen war: Ein gescheiterter Formular-Nachweis, ein Adapter-Schwellenwert oder ein Kommentar-Honeypot ließen sich nicht auswählen, und das Suchfeld schaut den Ereignistyp gar nicht an. Jeder Ereignistyp, den das Plugin schreibt, auch die betrieblichen, lebt jetzt in einer Registry mit Bezeichnung, Filtergruppe und Bedrohungsfamilie, gegliedert in dreizehn Abschnitte. Ein Feld über der Liste grenzt sie nach Bezeichnung, Slug oder Gruppenname ein, jede Gruppe hat einen Eintrag, der alles darin auswählt, und das Feld bleibt unsichtbar, wenn der Browser kein JavaScript ausführt.

Korrekturen, die auf einer echten Installation zählen

  • Formular-Spam fehlte in beiden Dashboard-Diagrammen. Der Basistyp form_spam war in der Taxonomie nicht vorhanden, wodurch jeder Adapter-Schwellenwert-Treffer aus der Bedrohungsverteilung und dem Ereignisverlauf herausfiel.
  • Drei Diagramm-Einträge zeigten auf Slugs, die niemand schreibt (geo_anomaly, reputation_threat, admin_scanning), sodass Geo-Anomalien und Reputationssperren in keinem Diagramm auftauchten. Fünf Slugs, die geschrieben werden, fehlten ganz.
  • Ein Ereignistyp, den niemand registriert hat, erscheint jetzt als „Sonstige”, statt spurlos aus den Diagrammen zu fallen. So konnte ein neuer Sensor mehrere Releases lang unsichtbar bleiben.
  • Das Protokoll-Badge nimmt seine Farbe aus der Bedrohungsfamilie, sodass jeder Sensor auf einen Blick zu unterscheiden ist, nicht nur die vier, die zufällig eine Regel hatten.
  • Eine Regressionssperre läuft jetzt in beide Richtungen: Jeder Slug, den ein Protokollaufruf schreibt, braucht eine Registry-Zeile, und jede Zeile braucht einen Schreiber. Dieselbe Sperre gibt es für den Audit-Trail.

Was sich für eine verwaltete Flotte ändert

Dem Schema der Fernverwaltung wurde ein Schlüssel hinzugefügt, reportedip_hive_audit_triggers, und nichts wurde entfernt oder in seiner Art geändert. Die Schema-Version bleibt bei 1, und ein Dashboard, das das Schema noch nicht neu geladen hat, arbeitet weiter. Zeilen aus der Zeit vor dem Update behalten ihre Bedeutung, und der DSGVO-Export und die Löschung decken die alte wie die neue Zeilenform ab.

2.1.62 folgt auf 2.1.57, das jede Einstellung auf eine Schutz-Seite gebracht hat, und auf 2.1.54, das den Einrichtungsassistenten durch einen einseitigen Schnellstart ersetzt hat. Die Plugin-Dokumentation führt die aktuelle Funktionsliste je Tarif, die Sensoren und ihre Standardwerte.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fill out this field
Fill out this field
Bitte geben Sie eine gültige E-Mail-Adresse ein.
You need to agree with the terms to proceed