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
.htaccessund ein zusätzlicher Passwortschutz vor/administrator.
Ablauf in Kürze (die Scan-Seite zeigt die ersten vier Schritte zusätzlich als Pfeil-Grafik):
- NVD-API-Schlüssel eintragen (optional, aber empfohlen).
- joomla.org-Kernreferenz laden.
- Schwachstellen-Datenbank aktualisieren.
- Baseline erstellen (nur auf einer nachweislich sauberen Site).
- Scan starten (chunkweise über AJAX).
- Funde prüfen (nach Schweregrad sortiert, mit Erklärung) und reagieren: in Quarantäne verschieben, in die Baseline übernehmen oder als Fehlalarm markieren.
- 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.

- Paket
pkg_joomionscanner-X.YY.ZZ.zipunter System → Installieren hochladen. - Beide Plugins aktivieren (System → Plugins, oder über die Aktivieren-Buttons oben auf jeder Scanner-Seite).
- 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).
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.
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).
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.
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.
Benutzer-Audit
Prüft Joomla-Benutzerkonten auf Auffälligkeiten – z. B. unerwartete Super-Admin-Konten, verdächtige Anlage-Muster oder Rechteausweitungen.
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).
Info
Eingebaute Hilfe: erklärt die Schweregrade, die Fundtypen und den empfohlenen Umgang mit jedem Fund.
4. Was der Scanner prüft
| Modul | Prü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.
| Stufe | Wert | Bedeutung |
|---|---|---|
| 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
| Fundtyp | Schwere | Bedeutung |
|---|---|---|
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. |
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.
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.
9. Geplante Scans & E-Mail-Benachrichtigung
Das mitgelieferte Task-Plugin (plg_task_joomionscanner) bindet den Scanner in die Joomla-Aufgabenplanung ein:
- Task-Plugin aktivieren (System → Plugins).
- Unter System → Geplante Aufgaben eine neue Aufgabe vom Typ JoomION-Scanner anlegen und einen Zeitplan (z. B. täglich) festlegen.
- 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
.htaccessin 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/.htpasswdinadministrator/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.
13. Konfiguration
Die Optionen erreichst du über Komponenten → JoomION SecurityScanner → Optionen (oben rechts).
Scan
| Einstellung | Funktion |
|---|---|
| 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
| Einstellung | Funktion |
|---|---|
| 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
.htpasswdgespeichert, 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
| Begriff | Bedeutung |
|---|---|
| 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. |
