JoomION Security Scanner

Dokumentation · Paket pkg_joomionscanner (Komponente + Task-Plugin + System-Plugin) · für Joomla 5 und 6

1. Überblick & Funktionsweise

Der JoomION Security Scanner durchsucht eine Joomla-Installation nach Schadcode, manipulierten Dateien und Einbruchsspuren. Er kombiniert mehrere unabhängige Prüfverfahren und gleicht die Site gegen vertrauenswürdige Referenzen ab.

  • Mehrschichtige Erkennung: Integritäts-Baseline, Kernabgleich mit joomla.org, Signaturen, Entropie-Analyse, Backdoor-/Rechteausweitungs-Muster, .htaccess- und Härtungs-Prüfung, Datei-Platzierung/Tarnung, Herkunfts-Prüfung (installiert vs. eingeschleust), Benutzer-Audit und Schwachstellen-Feeds.
  • Chunked-Scan über AJAX: Der Scan läuft in kleinen Paketen (Chunks). So werden auch große Sites ohne Timeout und ohne Blockade der Backend-Session geprüft; der Fortschritt ist live sichtbar.
  • Niemals löschen – nur Quarantäne: Verdächtige Dateien werden ausschließlich in einen geschützten Quarantäne-Bereich verschoben, nie automatisch gelöscht. Jeder Fund bleibt überprüf- und wiederherstellbar.
  • Aktive Härtung optional dazu: Neben dem reinen Erkennen kann der Scanner auf Wunsch auch selbst absichern – Verzeichnisschutz per .htaccess und ein zusätzlicher Passwortschutz vor /administrator.

Ablauf in Kürze (die Scan-Seite zeigt die ersten vier Schritte zusätzlich als Pfeil-Grafik):

  1. NVD-API-Schlüssel eintragen (optional, aber empfohlen).
  2. joomla.org-Kernreferenz laden.
  3. Schwachstellen-Datenbank aktualisieren.
  4. Baseline erstellen (nur auf einer nachweislich sauberen Site).
  5. Scan starten (chunkweise über AJAX).
  6. Funde prüfen (nach Schweregrad sortiert, mit Erklärung) und reagieren: in Quarantäne verschieben, in die Baseline übernehmen oder als Fehlalarm markieren.
  7. Optional: geplante Scans + E-Mail-Benachrichtigung, Verzeichnis-/Administrator-Schutz einrichten.

2. Installation & Aktivierung

Das Paket `pkg_joomionscanner` installiert in einem Schritt die Komponente com_joomionscanner (Backend-Oberfläche & Scan-Engine) und zwei Plugins:

  • Task-Plugin `plg_task_joomionscanner` – für geplante (automatische) Scans über die Joomla-Aufgabenplanung. Ohne dieses Plugin funktionieren manuelle Scans trotzdem.
  • System-Plugin `plg_system_joomionscanner` – prüft gedrosselt (höchstens 1× pro Stunde, nur für Super-User) bei jedem Backend-Seitenaufruf, ob eine neue Scanner-Version verfügbar ist, damit Joomlas eigene Update-Benachrichtigung zuverlässig erscheint.
Neu installierte Plugins sind in Joomla standardmäßig deaktiviert. Nach der Installation erscheint deshalb ein Hinweis mit Buttons zum direkten Aktivieren beider Plugins.
Nach der Installation: Hinweis, dass das Task-Plugin noch aktiviert werden muss Die Einstellungen des Task-Plugins „JoomION Sicherheits-Scanner"
  1. Paket pkg_joomionscanner-X.YY.ZZ.zip unter System → Installieren hochladen.
  2. Beide Plugins aktivieren (System → Plugins, oder über die Aktivieren-Buttons oben auf jeder Scanner-Seite).
  3. Vor dem ersten Scan eine Integritäts-Baseline erstellen – das liefert die besten Ergebnisse.

3. Die Backend-Bereiche

Die Komponente gliedert sich in acht Menüpunkte (Komponenten → JoomION SecurityScanner).

Auf jeder Backend-Seite steht oben links eine Statusleiste für beide Plugins: ist ein Plugin aktiv, erscheint ein schlichter „Zum Plugin"-Button; ist es deaktiviert, erscheint stattdessen eine rote Warnung mit direktem Aktivieren-Button.
Deaktiviertes Plugin: rote Warnung mit direktem Aktivieren-Button Aktiviertes Plugin: schlichter „Zum Plugin"-Button

Dashboard

Startseite mit einer Schritt-für-Schritt-Anleitung (10 Punkte: Schwachstellen-DB, Kernreferenz, beide Plugins, Verzeichnisschutz, Administrator-Schutz, Baseline, Benutzer-Audit, Scan, Funde) mit jeweils eigenem Erledigt-Status, außerdem Karten für Verzeichnisschutz und Administrator-Schutz.

Das Dashboard mit der Schritt-für-Schritt-Anleitung

Scan

Startet und steuert den eigentlichen Scan (Voll-, Integritäts- und Inhalts-Scan) und zeigt den Live-Fortschritt (chunkweise), die gerade geprüften Pfade und eine Zusammenfassung am Ende. Nach Abschluss erscheint eine Meldung – „Alles in Ordnung" oder „Achtung – Auffälligkeiten gefunden".

Ganz oben steht eine Pfeil-Grafik mit den ersten vier Schritten (NVD-Schlüssel → Kernreferenz → Schwachstellen-DB → Scan starten); ein Klick auf einen Pfeil löst direkt die passende Aktion aus.

Die Buttons zum Laden der Kernreferenz und zum Aktualisieren der Schwachstellen-Datenbank sind ampelfarbig: Rot = dringend nötig (fehlt), Gelb = Auffrischung empfohlen (Datenbank älter als 24 Stunden), Weiß = frisch und ohne Abweichung. Bei Kernreferenz und den einzelnen Schwachstellen-Quellen (VEL/NVD) wird zusätzlich das Datum des letzten Ladevorgangs angezeigt.

Hier werden außerdem die Schwachstellen-Quellen aktualisiert (Buttons VEL und NVD) sowie der NVD-API-Schlüssel / GitHub-Token gespeichert. Der NVD-Import läuft gechunkt und kann mehrere Minuten dauern – währenddessen erscheint ein Warte-Hinweis mit Spinner und ein pulsierender Fortschrittsbalken (gelb↔rot beim Laden, grün bei Abschluss).

Die Scan-Seite mit Quellen-Status und Start-Buttons

Erweiterungen

Listet die installierten Erweiterungen mit Hersteller-/Eigentümer-Erkennung und gleicht sie mit der Schwachstellen-Datenbank ab (bekannte CVEs zu verwundbaren Versionen). So siehst du auf einen Blick, welche Erweiterung ein bekanntes Sicherheitsrisiko trägt. Von hier aus lässt sich auch ein gezielter Scan nur für ausgewählte Erweiterungen starten.

Funde

Die zentrale Ergebnisliste. Jeder Fund enthält Typ, Schweregrad, Datei/Objekt und eine verständliche Erklärung (was es bedeutet, warum es auffällt, was zu tun ist). Ein zusätzliches Filter-Pulldown erlaubt die Suche nach installierten Erweiterungen. Von hier aus werden Funde in Quarantäne verschoben, in die Baseline übernommen, als geprüft/Fehlalarm markiert oder (bei Dateiänderungen) im Diff verglichen.

Bereits als Fehlalarm oder geprüft markierte Funde werden standardmäßig ausgeblendet (Hinweis mit Link „trotzdem anzeigen") und erscheinen erst wieder, wenn sich die betroffene Datei tatsächlich ändert oder ein neuer Scan sie erneut findet. Eine separate, dezente Übersichts-Liste unten auf der Seite zeigt Dateien ohne verdächtige Code-Muster (z. B. unbekannte, aber unauffällige Dateien) – auch diese lassen sich direkt per Checkbox in die Baseline übernehmen.

Die Fundeliste mit Aktions-Buttons (In Quarantäne, Als Fehlalarm markieren) Fundeliste (Fortsetzung) mit der ruhigen Übersichts-Liste unauffälliger Dateien Detailansicht einer geprüften Datei ohne verdächtige Code-Muster

Baseline

Verwaltet die Integritäts-Baseline – einen festgehaltenen Soll-Zustand aller Dateien (Prüfsummen). Spätere Scans melden jede Abweichung (geänderte, neue, fehlende Dateien). Die Baseline sollte direkt nach einer sauberen Installation/Pflege neu erstellt werden.

Die Baseline-Verwaltung

Benutzer-Audit

Prüft Joomla-Benutzerkonten auf Auffälligkeiten – z. B. unerwartete Super-Admin-Konten, verdächtige Anlage-Muster oder Rechteausweitungen.

Der Benutzer-Audit mit der Liste der Super-User/Administratoren

Listen

Auswertungs-Ansicht mit drei Tabs, jeweils mit Detail-Spalte und Erklärung je Eintrag:

  • .htaccess – alle gefundenen .htaccess-Dateien mit Status (OK / auffällig). Auffällige zeigen Befund + ⓘ Erklärung, unauffällige „✓ Unauffällig".
  • Auffällige Namen – Dateien/Ordner mit verdächtigem Namensmuster, mit Schweregrad und Erklärung.
  • Geänderte Kerndateien – Kerndateien, die vom offiziellen joomla.org-Release abweichen, mit Detail/Erklärung und Diff-Vergleich (Original ↔ aktuell).
Der Tab „Alle .htaccess-Dateien"

Info

Eingebaute Hilfe: erklärt die Schweregrade, die Fundtypen und den empfohlenen Umgang mit jedem Fund.

Die eingebaute Hilfeseite mit Erklärung aller Schweregrade und Fundtypen

4. Was der Scanner prüft

ModulPrüfung
Integritäts-Baseline Vergleich aller Dateien gegen den gespeicherten Soll-Zustand.
Kernabgleich (joomla.org) Originaldateien des Joomla-Kerns gegen die offiziellen Referenzen – erkennt veränderte/untergeschobene Kerndateien anhand ihres SHA-256-Hashes.
Signaturen Bekannte Schadcode-Muster (Webshells, Dropper).
Entropie-Analyse Stark verschleierter/komprimierter Code über seine „Zufälligkeit".
Backdoor / Rechteausweitung Muster für Hintertüren und das Anlegen privilegierter Konten.
.htaccess-Prüfung Auffällige Regeln/Weiterleitungen in .htaccess-Dateien.
Härtung Offene Einfallstore / fehlende Absicherungen in der Konfiguration.
Platzierung & Tarnung Ausführbare Dateien an falschen Orten, getarnte Doppelendungen.
Herkunfts-Prüfung Ob eine Datei über den Joomla-Installer kam oder nicht im Manifest einer Erweiterung deklariert ist.
Benutzer-Audit Auffällige Benutzerkonten/Rechte.
Schwachstellen-Feed Abgleich installierter Erweiterungen mit bekannten CVEs.

5. Schweregrade

Jeder Fund erhält einen Schweregrad. Er steuert auch die Schwelle für E-Mail-Benachrichtigungen.

StufeWertBedeutung
Info 10 Reine Information, kein Risiko.
Niedrig 20 Geringfügig auffällig, meist harmlos – beobachten.
Mittel 40 Sollte geprüft werden (z. B. geänderte Datei, .htaccess).
Hoch 70 Dringend prüfen (Schadcode-Signatur, Backdoor, bekannte CVE).
Kritisch 90 Höchste Priorität – sofort handeln.

6. Fundtypen im Detail

FundtypSchwereBedeutung
Schadcode-Signatur (signature) Hoch Datei enthält ein bekanntes Schadcode-Muster (Webshell).
Verschleierter Code (entropy) Mittel Stark verschleierter Code – häufig, nicht immer, bösartig.
Dropper / Code-Injektion (code_injection) Hoch Code, der weiteren Schadcode nachlädt.
Rechteausweitung / Backdoor (privilege_escalation) Hoch Versuch, Rechte auszuweiten oder ein Hintertür-Konto anzulegen.
Bekannte Schwachstelle (known_vulnerability) Hoch Installierte Version mit dokumentierter Lücke.
Potenzielle Code-Schwachstelle (code_vulnerability) Niedrig Code-Muster, das eine Schwachstelle sein könnte.
Härtung / offenes Einfallstor (hardening) Mittel Fehlende Absicherung / unsichere Konfiguration.
Geänderte Kerndatei (core_changed) Mittel Eine Joomla-Kerndatei weicht von der Referenz ab.
Geänderte Datei (changed_file) Mittel Datei hat sich gegenüber der Baseline verändert.
Fehlende Kerndatei (missing_file) Mittel Eine erwartete Kerndatei fehlt.
Fremde Datei (unknown_file) Niedrig–Hoch Datei gehört weder zum Kern noch zu Erweiterungen/Baseline. Bei Skript-Endungen (z. B. .php) höher eingestuft.
Nicht deklarierte Datei (undeclared_file) Info–Mittel Liegt im Ordner einer Erweiterung, ist aber nicht Teil von deren Installations-manifest – wurde also nicht direkt vom Joomla-Installer ausgeliefert.
Auffällige .htaccess (htaccess) Mittel Verdächtige Regeln in einer .htaccess.
Ausführbare Datei am falschen Ort (placement) Hoch z. B. PHP-Datei im Upload-/Medienordner.
Getarnte Doppelendung (double_extension) Hoch z. B. bild.jpg.php – Tarnung.
Auffälliger Name (naming) Niedrig–Hoch Dateiname folgt einem verdächtigen Muster (z. B. Steuerzeichen oder verdächtiges Schlüsselwort im Namen).
Auffälliges Benutzerkonto (user_account) Mittel Konto mit ungewöhnlichen Rechten.
Funde vom Typ „Fremde Datei", „Nicht deklarierte Datei" oder „Auffälliger Name" ohne zusätzlichen Code-Fund werden nur dann automatisch abgeschwächt und in die ruhige Übersichts-Liste verschoben, wenn ihr Schweregrad unter „Mittel" liegt. Bereits als „Hoch" eingestufte Funde dieser Art (z. B. eine unbekannte PHP-Datei) bleiben in der Hauptliste sichtbar und über alle Aktionen bedienbar.

7. Schwachstellen-Datenbank (CVE)

Der Scanner gleicht installierte Erweiterungen mit mehreren Quellen ab und führt die Ergebnisse zusammen (Merge/Dedup):

  • VEL-Feed (JSON): die *Joomla Vulnerable Extensions List* als primäre Quelle.
  • NVD (optional): die *National Vulnerability Database* – nutzbar mit eigenem API-Schlüssel (höhere Abfrage-Limits).
  • Quellen werden zusammengeführt und dedupliziert, sodass jeder CVE nur einmal erscheint; für jede Quelle wird das Datum des letzten Ladevorgangs separat angezeigt.
Den NVD-API-Schlüssel hinterlegst du direkt auf der Scan-Seite oder in der Konfiguration. Er ist optional – ohne ihn funktioniert der VEL-Abgleich weiterhin, allerdings mit niedrigeren NVD-Abfrage-Limits. Kostenlos anfordern unter nvd.nist.gov/developers/request-an-api-key.

8. Quarantäne statt Löschen

Der Scanner löscht niemals automatisch. Verdächtige Dateien werden in einen geschützten Quarantäne-Bereich verschoben:

  • Die Datei wird aus dem aktiven Web-Pfad entfernt (kann nicht mehr ausgeführt werden).
  • Sie bleibt gesichert und kann nach Prüfung wiederhergestellt oder endgültig entfernt werden.
  • Fehlalarme (False Positives) lassen sich gefahrlos rückgängig machen.
Empfehlung: vor größeren Aktionen ein Backup der Site anlegen.

9. Geplante Scans & E-Mail-Benachrichtigung

Das mitgelieferte Task-Plugin (plg_task_joomionscanner) bindet den Scanner in die Joomla-Aufgabenplanung ein:

  1. Task-Plugin aktivieren (System → Plugins).
  2. Unter System → Geplante Aufgaben eine neue Aufgabe vom Typ JoomION-Scanner anlegen und einen Zeitplan (z. B. täglich) festlegen.
  3. E-Mail-Benachrichtigung konfigurieren: Empfänger und Mindest-Schweregrad wählen – es wird nur benachrichtigt, wenn Funde diese Schwelle erreichen.

10. Update-Erkennung

Das System-Plugin (plg_system_joomionscanner) sorgt dafür, dass eine neue Scanner-Version zuverlässig in Joomlas eigener Update-Benachrichtigung erscheint – ohne es müsste zuerst manuell unter System → Aktualisierungen → Erweiterungen geprüft werden, da Joomlas Update-Balken fest an die Systemsteuerungs-/Dashboard-Seite gebunden ist.

Nach der Aktivierung prüft das Plugin bei jedem Backend-Seitenaufruf gedrosselt (höchstens 1× pro Stunde, nur für Super-User) im Hintergrund auf ein neues Release. Es hat keine eigenen Einstellungen.

11. Verzeichnisschutz (.htaccess)

Schreibt eine schützende .htaccess in kritische Verzeichnisse, die keine PHP-Ausführung enthalten dürfen: images/, tmp/, cache/, logs/, administrator/cache/, administrator/logs/ (nur tatsächlich vorhandene Verzeichnisse werden angezeigt/geschützt). Die Schutz-Datei blockiert die PHP-Ausführung und den Direktzugriff auf typische Skript-Endungen.

  • Ein Klick auf „Schutz jetzt anwenden" schreibt/aktualisiert die .htaccess in allen betroffenen Verzeichnissen; bereits vorhandene eigene Regeln in einer bestehenden Datei bleiben erhalten, nur der JoomION-verwaltete Block wird eingefügt/ersetzt.
  • Ist ein Verzeichnis für den Webserver-Prozess nicht beschreibbar, zeigt das Dashboard das explizit an (häufig auf Shared-Hosting: PHP läuft unter einem anderen Systembenutzer als der FTP-Zugang).
  • „Schutz entfernen" nimmt nur den JoomION-Block wieder heraus, fremder Inhalt bleibt unangetastet.

12. Administrator-Schutz

Zusätzliche, vom Joomla-Login unabhängige Passwortabfrage (HTTP Basic Auth) vor dem gesamten /administrator-Bereich – eine zweite Hürde vor dem eigentlichen Login. Optional, aber empfohlen.

  • Benutzername + Passwort im Dashboard eintragen (oder per Klick ein starkes Passwort generieren lassen) und „Schutz aktivieren" klicken.
  • Ist bereits eine fremde .htaccess/.htpasswd in administrator/ vorhanden (nicht von diesem Scanner angelegt), wird das erkannt und angezeigt; der JoomION-Block wird dann nur ergänzt, nicht ersetzt – anschließend den Inhalt manuell auf Widersprüche prüfen.
  • „Schutz entfernen" nimmt nur den erzwingenden .htaccess-Block wieder heraus; die .htpasswd-Datei bleibt für ein erneutes Aktivieren erhalten.
Das eingetragene Passwort wird nach dem Speichern nicht mehr angezeigt – jetzt notieren.

13. Konfiguration

Die Optionen erreichst du über Komponenten → JoomION SecurityScanner → Optionen (oben rechts).

Scan

EinstellungFunktion
Scan-Wurzeln Verzeichnisse, die gescannt werden (leer = Site-Wurzel).
Ausgeschlossene Pfade Verzeichnisse, die übersprungen werden (Standard: tmp/, cache/, administrator/cache/, administrator/logs/, media/com_joomionscanner/).
Max. Dateigröße (MB) Dateien über dieser Größe werden inhaltlich übersprungen – auch beim Kernabgleich (Standard 6, 1–64).
Chunk-Größe Anzahl Dateien pro AJAX-Paket (Standard 400, 50–5000). Kleiner = schonender.
Entropie-Schwelle Ab diesem Wert gilt Code als „verschleiert" (Standard 5.2).
NVD-API-Schlüssel Optionaler Schlüssel für die NVD-Schwachstellenabfrage.
GitHub-Token Optionales Token für höhere Abrufquoten bei Referenzdaten.

Benachrichtigung

EinstellungFunktion
Benachrichtigungs-E-Mail Empfängeradresse für Scan-Benachrichtigungen.
Mindest-Schweregrad Ab welchem Schweregrad benachrichtigt wird (Info/Niedrig/Mittel/Hoch/Kritisch).

14. Berechtigungen

Über die Joomla-Standard-Rechteverwaltung (Optionen → Berechtigungen) steuerst du, welche Benutzergruppen die Komponente nutzen dürfen. Der Scanner sollte ausschließlich Administratoren zugänglich sein.

15. Sicherheit & Datenschutz

  • Keine automatische Löschung – ausschließlich Quarantäne.
  • API-Schlüssel (NVD/GitHub) werden nur lokal in der Komponenten-Konfiguration gespeichert und nicht weitergegeben.
  • Beim Abgleich mit externen Feeds (VEL/NVD) werden nur die zum Versionsabgleich nötigen Daten abgefragt.
  • Das Administrator-Schutz-Passwort wird ausschließlich als sicherer Hash in der .htpasswd gespeichert, nie im Klartext.
  • Der Scanner ist ein defensives Werkzeug zur Absicherung der eigenen Site.
  • Lizenz: freie Software unter der GNU General Public License Version 2 (GPL v2 oder später) – keine Lizenzgebühr, kein Abo, kein Lizenzschlüssel.

16. Glossar

BegriffBedeutung
Baseline Festgehaltener Soll-Zustand aller Dateien (Prüfsummen) als Vergleichsbasis.
Chunk Ein Paket von Dateien, das pro AJAX-Aufruf geprüft wird.
Entropie Maß für die „Zufälligkeit" von Daten; hohe Werte deuten auf Verschleierung hin.
Signatur Bekanntes Muster, das eindeutig auf Schadcode hinweist.
CVE Eindeutige Kennung einer öffentlich dokumentierten Schwachstelle.
VEL Joomla Vulnerable Extensions List – Liste verwundbarer Erweiterungen.
NVD National Vulnerability Database – große CVE-Datenbank.
Quarantäne Geschützter Bereich, in den verdächtige Dateien verschoben (nicht gelöscht) werden.
Task-Plugin Bindet den Scanner in Joomlas Aufgabenplanung ein (geplante Scans).
System-Plugin Stößt bei jedem Backend-Aufruf gedrosselt eine Update-Prüfung an.
Verzeichnisschutz .htaccess-Regeln, die PHP-Ausführung in kritischen Ordnern blockieren.
Administrator-Schutz Zusätzliche, vom Joomla-Login unabhängige Passwortabfrage vor /administrator.
JoomION Security Scanner · Dokumentation zu com_joomionscanner · © JoomION

Anleitungen als PDF Deutsch | English