Sicherheitscheckliste für TYPO3-Installationen: Schotten dicht

Web-Dienste wie md5.rednoize.com ermöglichen es, einen md5-Hash-Wert in ein Klartextpasswort zurückzuwandeln.
Für viele Softwareanwendungen kursieren im Internet Anleitungen, die beschreiben, wie man Sicherheitslücken ausnutzt, sogenannte Exploits. Auf entsprechenden Websites [1] kann man nach dem Namen einer Applikation suchen und erhält eine Liste mit Beispielcode für einen möglichen Angriff.
Während dort für eine bekannte CMS-Anwendung allein im ersten Monat dieses Jahres 21 Exploits veröffentlich wurden, findet sich für TYPO3 kein einziger Eintrag. Dies bedeutet allerdings nicht, dass TYPO3 vollkommen sicher ist. Der Quellcode des Basissystems wird zwar sorgfältig geprüft, sowohl von dem Entwicklungsteam selbst als auch durch externe Audits von Anwenderseite, aber dennoch lassen sich Fehler nicht vollständig ausschließen.
Ein möglicher Schwachpunkt sind vor allem die über 3.600 derzeit verfügbaren TYPO3-Erweiterungen, die von vielen unterschiedlichen Entwicklern bereitgestellt werden. Je nach Erfahrung, Sicherheitsbewusstsein und Disziplin der Programmierer kommt es immer wieder vor, dass in Extensions Sicherheitslücken durch Cross-Site-Scripting (XSS) oder SQL-Injection entdeckt werden.
Die bekannt gewordenen Schwachstellen werden vom TYPO3-Security-Team veröffentlicht [2], hier ist der Anwender bzw. Administrator gefordert, entsprechende Updates zeitnah einzuspielen. Das Abonnement der TYPO3-Announce-Liste [3] ist unbedingt empfehlenswert, um über sicherheitsrelevante Ereignisse informiert zu werden.
Das TYPO3-Security-Cookbook [4] liefert zudem wichtige Hinweise zur sicheren Konfiguration. Darüber hinaus sollten ein paar wichtige Grundregeln beachtet werden, um einen langfristig stabilen und sichern Betrieb der Website zu gewährleisten.
Sichere Kennwörter
Obwohl jeder Anwender weiß, dass man sichere Passwörter verwenden sollte, zeigt die Praxis, dass diese Regel in vielen Fällen nicht umgesetzt wird. Zu trivial gewählte Kennwörter ermöglichen es einem Angreifer, sich unbemerkt in Systeme einzuloggen. Mit Hilfe sogenannter Wörterbuch-Attacken ist es möglich, Hunderttausende Kennwörter mit automatisierten Skripten in kurzer Zeit durchzuprobieren. Beliebte Kombinationen wie der Name des Partners oder der Kinder zusammen mit Ziffern wie 123 oder dem Geburtsjahr sind auch mit Verfahren des Social-Engineering [5] einfach zu knacken.
Ein sicheres Kennwort besteht aus einer Kombination von Buchstaben in Groß-/Kleinschreibung, Ziffern sowie Sonderzeichen und sollte mindestens neun Zeichen lang sein. Alle kürzeren Passwörter, auch in beliebig kryptischer Schreibweise, sind unsicher. Applikationen speichern die Kennwörter in der Regel als Hash-Wert. Dies ist eine mathematische Einweg-Funktion, die eine Berechnung des ursprünglichen Werts im Klartext nicht zulässt. Komplette Datenbanken mit allen möglichen Passwörtern bis zu acht Zeichen und dem dazugehörigen Hash-Werten gibt es jedoch im Internet zu kaufen – die Lieferung erfolgt in der Regel auf Festplatten, da die Datenbanken zu groß für Speichermedien wie DVDs sind.
Auch eine Online-Suche [6] nach passenden Passwörtern zu Hash-Werten ist möglich, auch wenn in diesem Fall „nur“ 50 Millionen Einträge abrufbar sind. Einen Anhaltspunkt für ein halbwegs sicheres Passwort kann eine
einfache Suchabfrage danach liefern: Findet Google ein Ergebnis, sollte
man ein besseres Kennwort wählen.
Unbedingt befolgt werden sollte die Regel, nicht das gleiche Kennwort für die Anmeldung bei verschiedenen Programmen oder Websites zu verwenden. Um eine Vielzahl unterschiedlicher Passwörter sicher zu verwalten, gibt es praktische Softwarelösungen [7]
[8].
Regelmäßige Backups
Eine sorgfältig durchdachte Backup-Strategie ist Bestandteil jedes Sicherheitskonzepts. Für das Backup einer TYPO3-Installation ist die Sicherung der drei Verzeichnisse „fileadmin“, „typo3conf“ und „uploads“ sowie der Datenbank erforderlich. Um den Inhalt einer MySQL-Datenbank in einer Datei zu speichern, verwendet man den folgenden Befehl:
mysqldump –opt -u username -pkennwort datenbankname > backup.sql
Listing 1
Die Datensicherung sollte regelmäßig und automatisiert erfolgen. Wichtig dabei ist, nicht nur ein Backup des letzten Tages zu erstellen, da manche Fehler erst nach einiger Zeit entdeckt werden. Sinnvoll ist es auch, ein zusätzliches Backup in regelmäßigen Abständen auf einem externen Medium zu speichern, etwa einer DVD.
Erfolgt eine Datensicherung auf der gleichen Festplatte wie die zu sichernden Daten, so muss darauf geachtet werden, dass die Speicherung außerhalb des „Document Root“ erfolgt, damit kein Zugriff auf die gesicherten Daten über einen Browser erfolgen kann. Dies gilt insbesondere auch für den Datenbank-Dump.
Damit notfalls eine Wiederherstellung der Daten aus einem Backup reibungslos funktioniert, sollte der Vorgang getestet und dokumentiert werden. Einerseits kann damit überprüft werden, ob die Datensicherung ordnungsgemäß erstellt wurde, andererseits ist der Zeitpunkt, an dem man ein Backup einspielen muss, denkbar schlecht geeignet, um erst nach einer Anleitung zu suchen.
Konfiguration von FTP-Zugängen
Nach Möglichkeit sollte man auf die Verwendung von FTP als Übertragungsprotokoll komplett verzichten, denn die Übertragung der Logindaten sowie der anschließende Datentransfer erfolgen unverschlüsselt. Abhilfe schaffen hier nur Übertragungen über SFTP (Secure File Transfer), SCP (Secure Copy) oder FTPS (FTP über SSL). Beim Einsatz aller genannten Protokolle muss darauf geachtet werden, dass der Anwender nur Zugriff auf ein für ihn bestimmtes Verzeichnis wie „fileadmin/user_upload/user123“ erhält.
Übernimmt man dagegen die Standardeinstellungen bei der Einrichtung des Zugangs (meist „/“), so erhält der Anwender Zugriff auf das gesamte TYPO3-Projektverzeichnis. Damit kann er dann auch die Datei „localconf.php“ im Verzeichnis „typo3conf“ herunterladen, bearbeiten und wieder hochladen und sich damit einen Admin-Zugang zum Installtool und dem TYPO3-Backend verschaffen.
Verzeichnis-Index ausschalten
In der Standardkonfiguration von Apache ist die Anzeige des Inhalts eines Verzeichnisses standardmäßig aktiviert. Wird eine in der URL angegebene Datei nicht gefunden, wird an Stelle eines 404-Fehlers der Inhalt des gesamten Verzeichnisses im Browser angezeigt. Um dies zu verhindern, muss in der Datei „httpd.conf“ eine Zeile geändert werden:
# vorher Options All Indexes FollowSymLinks # nachher Options All FollowSymLinks
Listing 2
Eine einfache Abfrage bei Suchmaschinen kann ansonsten sensitive Informationen liefern, die einen Angriff auf die Website ermöglichen. Dazu gehören im einfachsten Fall Informationen über die eingesetzten Extensions und deren Datum. Ein einfacher Abgleich mit den Security-Bulletins liefert den Hinweis, ob hier ein verwundbares System vorliegt.

Ist der Apache-Webserver nicht richtig konfiguriert, gibt er Informationen zu verwendeten Extensions und deren Aktualität preis.
Gravierender wird das Problem, wenn vertrauliche Daten direkt angezeigt werden. Hierzu gehören Import-/Export-Dateien im t3d-Format, die im fileadmin-Verzeichnis abgelegt sind. Oder aber ein Dump der Datenbank, denn hier hat ein Angreifer direkten Zugriff auf die Namen der Backend-Benutzer inklusive md5-Hash des Kennworts. Ein einfacher Klick auf den Dateinamen liefert die Informationen:
-- Dumping data for table `be_users` INSERT INTO be_users VALUES (1,0,1134402664,'admin','a1e0a6bd21013666f...........
Listing 3
Backend-Benutzer
TYPO3 bietet ein ausgefeiltes Rechtemanagement, um für jeden Redakteur individuelle Zugriffsrechte festzulegen. Manche Administratoren scheuen jedoch den Aufwand für die Konfiguration und räumen den Redakteuren Admin-Rechte ein. Einem Redakteur sollte man jedoch niemals Admin-Status geben, da er ansonsten beliebige Änderungen – versehentlich oder mutwillig – durchführen kann.
Bei Backend-Benutzern, die nur für einen begrenzten Zeitraum an einer Seite arbeiten (Studenten, Zeitarbeiter, externe Dienstleister) sollte man schon beim Anlegen des Zugangs den Datumsbereich einschränken. So kann man nicht vergessen, den Account nach Abschluss der Arbeiten zu deaktivieren.

Schon beim Anlegen eines Mitarbeiters, der nur vorrübergehend Zugriff auf das TYPO3-Backend braucht, sollte man die Gültigkeit des Accounts zeitlich begrenzen.
Ein Administrator sollte auch regelmäßig die Liste der Backend-Benutzer auf gültige Einträge prüfen. Manchmal wird vergessen Benutzer zu löschen, die die Firma verlassen haben. Andererseits kann es vorkommen, dass nach einem erfolgreichen Einbruch in eine Website neue Benutzer angelegt werden, um ein erneutes Einloggen zu vereinfachen.
iFrame-Attacken
Erfolgt ein Angriff auf eine Website, so gibt es verschiedene Szenarien. Beim sogenannten Defacement (Verunstaltung) wird in der Regel die Startseite verändert, um zu demonstrieren, dass man erfolgreich in den Server eingebrochen ist. Oft wird dabei die alte Startseite als Backup gesichert, so dass eine Wiederherstellung zunächst problemlos ist. Allerdings ist damit nicht die Sicherheitslücke beseitigt, der Angriff kann also jederzeit wiederholt werden.
Neuerdings besteht die Strategie der Angreifer jedoch immer häufiger darin, dass die Änderung an der Website möglichst lange unentdeckt bleibt. Das Ziel ist hierbei, mit dem Aufruf der Seiten Schadcode nachzuladen, der dann über Sicherheitslücken im Browser Trojaner oder ähnliche Programme installiert. Diese dienen entweder zum Ausspähen von Zugangsdaten oder dazu, die (Fern-)Steuerung des Rechners zu ermöglichen, etwa zum Versand von Spam-E-Mails.
Dazu wird meist ein iFrame in die Seiten eingebunden, der Code von einem externen Server lädt. Die URL des Servers wird dabei in der Regel verschleiert oder verschlüsselt, sodass auf den ersten Blick die Funktion des iFrames nicht erkennbar wird. Der iFrame selbst wird meist mit Hilfe von CSS versteckt. So wurde zum Beispiel Anfang Februar 2009 die Website des Hamburger Abendblatts mit einem iFrame präpariert [9].
Zur Erkennung solcher Änderungen ist es ratsam, den Quellcode, insbesondere den der Startseite, regelmäßig auf ungewünschte Veränderungen zu prüfen. Dies kann über ein per Cronjob laufendes Skript erfolgen, das die Zahl der iFrames in einer Seite zählt und bei Änderungen Alarm schlägt.
Regelmäßige Updates
Auch wenn eine TYPO3-Website problemlos läuft, sollte der Administrator regelmäßige Updates durchführen. Neben dem TYPO3-Quellcode betrifft dies die verwendeten Extensions, die PHP-Version, externe Dienstprogramme wie „htmldoc“ [10] oder „xpdf“ [11] sowie das Betriebssystem des Servers. Die Regel „Never change a running system“ ist hier also nicht angebracht. Gerade bei Sicherheitsupdates ist rasches Handeln gefordert.
Nach der Veröffentlichung einer Lücke beginnt nämlich der Wettlauf zwischen den Webmastern, die ihre Software aktualisieren, und den Angreifern, die versuchen die Lücken auszunutzen. In vielen Fällen lassen sich verwundbare Seiten problemlos über Suchmaschinen finden und durch die Verfügbarkeit von Exploits folgen erste Angriffswellen oft schon wenige Stunden nach dem Bekanntwerden von Lücken.
Weitere Wartungsarbeiten
In regelmäßigen Abständen sollte geprüft werden, ob TYPO3-Extensions vorhanden sind, die gar nicht verwendet werden. Oft kommt es vor, dass eine Erweiterung zu Testzwecken installiert wird, aber anschließend nicht wieder entfernt wird. Jede nicht verwendete Extension verbraucht nicht nur Systemressourcen, sondern stellt auch eine potenzielle Sicherheitslücke dar.
Geprüft werden sollte auch die Größe der Datenbank. Im Laufe der Zeit können – je nach Konfiguration von TYPO3 – einige Datenbanktabellen (cache_pages, cache_hash, sys_stat etc.) sehr groß werden, im Extremfall etliche Gigabyte. Das System wird dadurch nicht nur langsamer, sondern irgendwann wird der Speicher nicht mehr ausreichen und die Website nicht mehr funktionieren. Ähnliches gilt für Logdateien, die von TYPO3 erstellt werden.