Neue Möglichkeiten der Interaktion benötigen einen verstärkten Schutz: Anwendungen im Web 2.0 absichern
Zu den häufigsten Attacken auf Community-Sites gehört die „SQL-Injection“. Sie sieht auf den ersten Blick aus wie eine harmlose Anfrage. Wenn jedoch der Angreifer im Eingabefeld „Name“ statt des Nachnamens einen SQL-Befehl eintippt und der Befehl akzeptiert wird, kann er auf diesem Wege ohne Berechtigung sensible Informationen aus der Datenbank anfordern. Bösartige Requests in großer Menge können sogar ganze Webanwendungen lahmlegen. Ein Hacker könnte einen String übergeben, wie zum Beispiel „1 OR 1“:
$value = $_GET['value']; $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $this->user_table, 'uid='.$value );
Listing 1
Die Abfrage endet dann folgendermaßen:
$GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $this->user_table, 'uid=1 OR 1 );
Listing 2
Das liefert als Ergebnis alle rows von „$this->user_table“. Dagegen schützt nur die Validierung aller Eingaben, die bei der SQL-Abfrage genutzt werden.
Weitere Attacken
„Man-in-the-middle-Attacken“ sind sehr aufwändig und werden hauptsächlich gegen Banken verwendet. Dabei schaltet sich der Datendieb zwischen die beiden Kommunikationspartner – beispielsweise Verkäufer und Kunde. Da nach dem Janusprinzip beiden Teilnehmern der jeweils andere vorgespiegelt wird, gelingt es ihm, Datenströme an seine Adresse umzulenken.
Unter „Session Riding“ versteht man die unberechtigte Übernahme einer HTTP-Session. Kommandos werden in eine bestehende Session eines Benutzers eingeschmuggelt. Die Kommandos werden dann mit den Rechten des angegriffenen Benutzers ausgeführt. Beim „Session Hijacking“ übernimmt der Angreifer die gesamte Session des Benutzers und kann so mit den Rechten des Benutzers arbeiten. Beide Session Attacken werden vornehmlich bei Shops, Partnerportalen oder auch bei eBay verwendet.
„Cross Site Scripting“ (XSS) zielt vor allem auf Foren- und Portalsysteme sowie auf Web 2.0-Anwendungen und versucht, den Browser dazu zu bringen, bestimmte Aktionen im Namen des legitimen Benutzers durchzuführen. Besondere Vorsicht ist mit Ausgaben von unvalidierten Eingaben mittels „echo“ angebracht. Code wie „echo $_REQUEST[‚value‘];“ kann für Besucher einer Webanwendung gefährlich sein.
„Visual Spoofing“ bezeichnet einen Angriff, bei dem einem Anwender suggeriert wird, er befände sich in einer vertrauten, gesicherten Umgebung. Tatsächlich werden jedoch auf einer manipulierten Webseite Originalelemente des Browsers durch Plagiate ersetzt. Zum Beispiel wird ein Schloss-Symbol in der Statuszeile dargestellt, auch wenn keine gesicherte HTTPS-Verbindung besteht. Ein Doppelklick darauf öffnet ein gefälschtes Dialogfenster, das ein vermeintlich vertrauenswürdiges Zertifikat anzeigt. Das Vorgehen wird auch „Phishing“ genannt und ist hauptsächlich im Finanzbereich anzutreffen. Überprüfen Sie bei Bankbesuchen immer die URL. Bei „Brute-Force-Attacken“ werden alle möglichen Kombinationen einer Eingabe, zum Beispiel einer Session-ID, ausprobiert, um einen gültigen Wert zu ermitteln. Solche Attacken treffen in erster Linie die Server selbst. Deshalb gilt es, ein gutes Root-Password zu nutzen und es häufig zu wechseln. „Cookie Manipulation“ bezeichnet das Ändern der Werte von Cookies, die Web-Applikationen im Webbrowser des Benutzers hinterlegen, um einen Status zu speichern. Normalerweise gibt der Browser die Cookies unverändert an die Applikation zurück.
Serversicherheit
Es gibt keine 100-prozentige Sicherheit, deshalb sind regelmäßige Server-Updates ein Muss. In aktuellen PHP-Versionen sind Sicherheitseinstellungen bereits relativ gut definiert. Einstellungen wie „Register_Globals=On“ oder ähnliches gehören schon lange nicht mehr zur Standardeinstellung. Darüber hinaus sollten folgende Einstellungen in der „php.ini“ verändert werden:
allow_url_include = Off
Listing 3
Dadurch wird verboten, dass URLs (z. B. http:// oder ftp://) in Verbindung mit „include()“- oder „required()“-Anweisungen verwendet werden können.
allow_url_fopen = Off
Listing 4
Über die Direktive „allow_url_fopen“ kann PHP eine URL wie eine lokale Datei behandeln und URLs an jede PHP-Funktion, die einen Dateinamen erwartet, etwa „readfile()“ oder „fopen()“, übergeben. Wird das nicht ausgeschaltet, erhalten Angreifer die Möglichkeit, Remote-Code auf dem Server ausführen zu lassen.
Bei MySQL sollte jeder Account, der Rechte auf mehrere oder alle Datenbanken hat (Admin-Account), nur über den Localhost verwendet werden. Wenn kein externer Zugriff auf die Datenbank benötigt wird und die Datenbank über Sockets ansprechbar ist, lässt sich die komplette Netzwerkfunktionalität des MySQL-Daemon mit folgender Anweisung in der „my.cnf“-Datei abstellen:
skip-networking
Listing 5
Ein erlaubter externer Datenbankzugriff bedeutet immer ein gewisses Risiko, da der Server zum Beispiel über eine Brute-Force-Attacke angegriffen werden kann. Folgende Anweisung bindet den Server an eine feste IP- Adresse:
bind-address = 192.168.0.1
Listing 6
Bei der Nutzung von externen Datenbanken empfiehlt sich, eine SSL-Verbindung, VPN oder einen SSH-Tunnel zu verwenden, um die Daten verschlüsselt zu übertragen. Wenn als IP die 127.0.0.1 genutzt wird (also der Localhost), kann mit folgender Anweisung die Namensauflösung deaktiviert werden:
skip-name-resolve
Listing 7
Wie sicher ist TYPO3?
Neben Methoden zur Absicherung des Webservers muss auch die Webanwendung über ein ausgereiftes Sicherheitskonzept verfügen, um die Sicherheit des Gesamtsystems zu gewährleisten. Dabei geht von den Extensions die größte Gefahr für eine TYPO3-Installation aus. Damit die Sicherheit für einzelne Webseiten gewährleistet ist, sollte "AllowGlobalInstall" deaktiviert sein. Damit ist sichergestellt, dass kein gefährlicher Code in das „src-Verzeichnis“ kommt. Überhaupt sollte man versuchen, mit den Extensions auszukommen, die vom Sicherheitsteam (typo3.org) kontrolliert wurden. Sie bieten eine relativ hohe Sicherheit und sind am Vermerk „reviewed“ zu erkennen.
TYPO3 verfügt über eine ausgeklügelte Benutzerverwaltung, sowohl für Frontend- als auch für Backend-Benutzer. Durch das einfache Gruppieren von Benutzern und das Verwalten von Backend-Zugriffen mittels ACL (Access Control List) hat der Administrator tiefgehende Optionen, die manipulierbar sind. Einziger Nachteil ist, dass TYPO3 die Frontend-Benutzer mit dem Passwort in Klartext speichert. Das Problem kann aber mit einer Extension gelöst werden (kb_md5fepw) [1]. Viele weitere Hinweise zur Absicherung gibt es im TYPO3-Security-Cookbook [2].
Web-Application-Firewall (WAF)
Einen guten Schutz gegen eine Vielzahl von Angriffen auf Webanwendungsebene bietet die Open-Source-Lösung „ModSecurity“. Ohne Eingriffe in bestehende Netzwerkinfrastrukturen ermöglicht sie zudem "HTTP traffic monitoring" sowie Echtzeit-Analysen. Das benötigte Regelwerk muss dabei über die systemeigene „RuleLanguage“ in die config-Datei eingepflegt werden.
SecRule REQUEST_URI|ARGS|REQUEST_BODY "highlight=.*(\'|\%[a-f0-9]{4})(\.|\/|\|\%[a-f0-9]{4}).+?(\'|\%[a-f0-9]{4})"
Listing 8
Web-Applikationen mit Content Management Systemen oder Onlineshops schützt die professionelle Lösung „web of defence“ vor Angriffen. Auch vor solchen, die von keiner herkömmlichen Sicherheitslösung wie Firewall oder Antivirusprogramm erkannt und abgewehrt werden. Dazu zählen SQL-Injection, Web-Defacement, XSS oder Session-Manipulationen. Die Lösung identifiziert und klassifiziert Angriffe und verhindert unberechtigte Zugriffe auf die hinter der Webanwendung liegenden Datenbanken und operativen Systeme. So bleiben geschäftskritische oder sensible Informationen wie Kundendaten und Produktinformationen sicher – vor allem auch während laufender Transaktionen, wenn die Systeme offen und damit angreifbar sind.
Fazit
Durch die wachsende Interaktion zwischen Webseiten und Benutzern im Web
2.0 einerseits und die dafür eingesetzten Skripte (Ajax) andererseits
entstehen neben dem erhöhten Komfort auch viele neue Angriffsflächen für den Datenklau und anderen Missbrauch. Damit verändern sich
in puncto Sicherheit auch die Anforderungen an Entwickler. Letztlich werden der wirtschaftliche Erfolg und die Konkurrenzfähigkeit in Zukunft nicht nur von funktionierender IT bestimmt, sondern genauso von der gebotenen Sicherheit. Dem Faktor Kundenvertrauen kommt eine zentrale Bedeutung zu, die nicht unterschätzt werden sollte.