Sicherheit von TYPO3-Webanwendungen

Immer wieder hört und liest man in den Medien von Hacks, Sicherheitslücken und Datendiebstahl. Doch was ist bei Webanwendungen alles Sicherheitsrelevant, worauf kommt es an und welche Sicherheitslücken gibt es eigentlich? Diesen Fragen wollen wir in diesem Blogbeitrag auf den Grund gehen.

Das Thema Sicherheit von Webanwendungen sollte von Anfang an beachtet werden, denn durch Sicherheitslücken können sehr unangenehme Folgen für den Betreiber/das Unternehmen nach sich ziehen. Zum Beispiel könnten Benutzerdaten gestohlen werden, die Website Offline sein oder fragwürdiger Content von Angreifern über die Website ausgespielt werden. Zuerst schauen wir uns mal die häufigsten Sicherheitsrisiken von Webanwendungen (unabhängig von CMS, Programmiersprache, Server etc.) an. Eine Liste mit den häufigsten Sicherheitsrisiken wird von einer unabhängigen Organisation namens OWASP (Open Web Application Security Project) ermittelt und veröffentlicht. Diese Organisation hat es sich zum Ziel gemacht, Webanwendungen sicherer zu gestalten und Hilfestellungen für Programmierer zur Verfügung zu stellen. 

(SQL-)Injections

Durch Verarbeitung von nicht vertrauenswürdigen Daten (zBsp. Benutzereingaben, Daten von externen Systemen) erhält der Angreifer Zugriff auf die Website (und zB. die Datenbank). Gegen diese Angriffe kann man sich relativ leicht schützen, indem man Benutzereingaben überprüft und bekannte Methoden zur Abwehr (Prepared Statements, Verwenden von Tabellen Präfix etc.) einsetzt.

Cross-Site-scripting (XSS)

Bestimmte Zeichen und Befehle müssen maskiert werden, da andernfalls die Angreifer Schadcode direkt auf der Website ausführen können. Durch diesen Angriff können die Angreifer Schadcode auf der Website ausspielen oder zB. Cookies auslesen und verwenden. Gegen diesen Angriff kann man sich schützen, indem man die Ausgabe auf der Website maskiert (Output Escaping).

TYPO3 Security
Security von TYPO3 Websites

Fehler im Authenti­fizierungs­management

Gibt es auf der Website einen Benutzerbereich (zB. auch für das Backend eines CMS-Systems) müssen sich die Benutzer beim Login authentifizieren. Dies geschieht in der Regel mittels Benutzername/Passwort oder einem Social-Login. Auch durch fehlerhaftes Session-Management können Angreifer Zugriff auf Benutzerkonten erlangen. Abhilfe hierfür schafft eine Absicherung gegen Brute-Force-Attacken, verschlüsselte Übertragen der Benutzerdaten per SSL/https.

Unsichere direkte Objektreferenzen

Durch ungeschützte Parameterübergabe auf einer Website können Angreifer auf Daten zugreifen, auf welche diese keinen Zugriff haben dürfen. Ein Beispiel hierfür wäre, wenn es in einer Webanwendung einen Link zum Abruf einer Rechnung gibt zB. various.at/invoices?id=124. Hier können die Angreifer nun andere Rechnungs-Id’s versuchen. Ist der Zugriff nicht geschützt, erlangt der Angreifer Zugriff auf Rechnungen, für welche er keinen Zugriff haben darf.

Nutzung von Komponenten mit bekannten Schwachstellen

In komplexen Webanwendungen werden Erweiterungen/Bibliothken/Plug-Ins von Dritt-Anbietern verwendet. Diese sind natürlich für Angreifer besonders interessant, da diese in einer Vielzahl von Webanwendungen verwendet werden. Hat man hier eine Sicherheitslücke gefunden (zB. in einem weit verbreiteten Wordpress-Plugin) hat man gleich Zugriff auf alle Websites, welche diese Komponente verwenden. Abhilfe schafft hierbei, dass man nicht unzählige Fremd-Plugins verwendet und diese regelmäßig auch aktualisiert. Auch sollte man nur Komponenten einsetzen, welche „maintained“ (also gepflegt, gewartet, weiterentwickelt) werden. Nach dem GO-Live sollte man diese Komponenten laufend aktualisieren.

Weitere häufige Sicherheitsrisiken, auf welche wir hier nicht mehr weiter eingehen wollen, sind:

  • Sicherheitsrelevante Fehlkonfigurationen
  • Verlust der Vertraulichkeit sensibler Daten
  • Fehlerhafte Autorisierung auf  Anwendungsebene
  • Cross-Site-Request-Forgery
  • Ungeprüfte Um- und Weiterleitungen

Maßnahmen um sich gegen Angriffe zu schützen

Nun werden wir auf einige Maßnahmen eingehen, welche wir ergreifen um unsere Webanwendungen sicherer zu gestalten:

  • Die Website wird gegen Angriffe wie z.B. Cross-Site-Scripting (XSS), Session-Hijacking und SQL-Injection geschützt
  • Alle Login-Bereiche werden durch den Einsatz von aufwendigen Passwörtern (z.B. mindestens 8 Zeichen, davon mindestens 1 Zahl und 1 Sonderzeichen) geschützt. Einfache Passwörter können nicht vergeben werden
  • Sensitive Daten werden aus Datenschutzgründen AES-verschlüsselt in der Datenbank abgelegt
  • Keine Verwendung von deprecated (nicht mehr unterstützten) Methoden
  • Einsatz nur von wirklich benötigten Erweiterungen/Plug-Ins: „Vertraue keinen Code den du nicht selbst geschrieben hast“
  • Benutzereingaben werden Client- und Server-seitig validiert
  • Verwendung von bekannten Methoden, um die Sicherheit zu erhöhen (Prepared Statements, Verwenden von Tabellen Präfix, SSL etc.)
  • Einsatz von TYPO3 als CMS-System: TYPO3 ist eines der sichersten Content-Management-Systeme und bringt automatisch schon viele Aspekte mit, mit welchen eine Website gegen Angriffe geschützt wird (Session-Management, XSS, Prepared-Statements, Error-Konfiguration etc.).
  • Regelmäßige Updates von TYPO3
  • Regelmäßige Updates der verwendeten Software-Komponenten
  • Regelmäßige Updates des Servers/Betriebssystem-Komponenten
  • Absicherung gegen automatische Formularübermittlung (BOT-Protection)
  • Einsatz von Logging/Protokollierung und Überwachung unserer Systeme
  • Einsatz/Empfehlung von vertrauenswürdigen und sicheren Hosting-Providern
  • Verwendung von verschlüsselten Verbindungen (SSL)
  • Beratung und Aufklärung der Kunden im Bereich „Sicherheitsmanagement bei Webanwendungen“
  • Sinnvolle Konfiguration der php.ini-Datei (Hier können schon einige Risiken ausgeschlossen werden – allow_url_fopen, safe_mode, display_errors etc.)

Zusätzlich werden unsere Website bei unseren Kunden von den dortigen IT-Security-Abteilungen regelmäßig im Rahmen von PEN-Tests (Penetrations-Test) auf Sicherheit und Robustheit überprüft.

Benutzeranmeldung

Bei Websites mit eigenem Benutzerbereich haben wir einen Ablauf entwickelt, welcher Benutzernameldungen bestmöglich gegen Angriffe schützt:

  • Benutzerkonten müssen aktiviert werden (Double Opt-In)
  • Registrierungsformular mit Bot-Protection schützen
  • Benutzerseiten sind für andere Benutzer nicht verfügbar (403 – Zugriff verweigert)
  • „Passwort vergessen“-Funktion: Hier empfehlen wir, eine allgemeine Meldung wie „Sollten wir Ihre E-Mail-Adresse in der Datenbank gefunden haben, erhalten Sie eine E-Mail zum Ändern des Passworts“. Ansonsten könnten Angreifer diese Methode nützen um zu sehen, ob eine E-Mail-Adresse registriert ist oder nicht.
  • Einsatz von sicherem Session-Management
  • Passwörter werden niemals im Klartext übertragen oder gespeichert (auch nicht per Mail versendet).
  • Einsatz von sicheren Passwortstrategie: Mindestens 1 Großbuchstabe, 1 Kleinbuchstabe, Ziffern und Sonderzeichen -> Mind. 8 Zeichen lang).

Sicherheit von TYPO3

Wir bei Various Interactive setzten auf das CMS-System TYPO3 – und das aus einem guten Grund. TYPO3 ist ein Enterprise CMS-System und eines der sichersten der Welt. Es gibt ein eigenes TYPO3-Security-Team, welches sich um die Sicherheitsaspekte von TYPO3-Code (Die Kernfunktionalität des CMS-Systems) und TYPO3-Erweiterungen (Komponenten welche die Funktion Anwendungsspezifisch erweitert). Weiters wird TYPO3 schon seit über 20 Jahren entwickelt und hat einen sehr robusten und sicheren Kern. TYPO3 wird regelmäßig aktualisiert und gewartet – damit ist sichergestellt dass die Website auch im laufenden Betrieb mit Sicherheitsupdates versorgt wird.

Hier möchten wir noch einige Sicherhits-Features aufzählen, welche bereits Out-Of-The-Box mit TYPO3 mitgeliefert werden:

  • Login-Verfolgung: Es wird protokolliert welcher Benutzer sich wann mit welcher IP-Adresse im Backend anmeldet. Auch alle Änderungen der Benutzer werden protokolliert.
  • Benutzerverwaltung: Administratoren können Feingranular steuern, welche Benutzer (oder Gruppen), welche Rechte besitzen.
  • Zugriffslisten: Für jede Seite lassen sich detaillierte Zugriffsrechte festlegen
  • SSL/Verschlüsselung: Anmeldungen nur mittels verschlüsselter Verbindung
  • Fehler: Durch eine Konfiguration lässt sich steuern, damit keine genauen Fehlermeldungen ausgegeben werden, und diese nur für Administratoren zugänglich sind.
  • Offener Umgang mit Sicherheitslücken: TYPO3 ist Open-Source und Sicherheitslücken werden veröffentlicht und schnellstmöglich durch ein Update geschlossen.
  • Wie bereits erwähnt, gibt es ein eigenes Security-Team, welches sich ausschließlich mit der Sicherheit beschäftigt.
  • Formular-Modifikationen: Wird ein Formular verändert, wird dies automatisch erkannt und mittels des hmac-Verfahrens abgewiesen.
  • Session-Management: Fixer Bestandteil des TYPO3-Kerns.
  • Erweiterungen: TYPO3 bietet vielleicht nicht so viele Erweiterungen wie Wordpress, dafür werden diese laufend weiterentwickelt, sind ebenfalls Open-Source und Sicherheitslücken auch von der großen Community erkannt und geschlossen.
  • Definierter Update-Zyklus und Roadmap: https://typo3.org/cms/roadmap
  • Unterstützung durch eine Vielzahl an Tools: Zum Beispiel wird automatisch überprüft ob die Verzeichnisrechte sicher sind und passen.

Bekannte Sicherheitslücken

Es existieren Datenbanken mit bekannten Sicherheitslücken, welche frei im Web für jeden und jede verfügbar sind: https://www.exploit-db.com/ und https://www.cvedetails.com/. Hier kann man nachsehen, welche Sicherheitslücken in welchen Systemen aktuell bekannt sind. Um meine These das TYPO3 eines der sichersten CMS-Systemen auf dem Markt ist zu untermauern, haben wir hier eine Grafik der bekannten Sicherheitslücken aus verschiedenen CMS-Systemen:

TYPO3 Infected Websites
Um meine These das TYPO3 eines der sichersten CMS-Systemen auf dem Markt ist zu untermauern, haben wir hier eine Grafik der bekannten Sicherheitslücken aus verschiedenen CMS-Systemen