Cookie-Diebstahl schnell und erfolgreich unterbinden

Cookies: Auch im Web verlockend

Heutige Web-Anwendungen sind ohne Cookies kaum noch vorstellbar. Anhand dieser kleinen Datenschnipsel, die auf den Festplatten der Besucher hinterlegt werden, kann die Webseite jeden Nutzer eindeutig identifizieren und ihn – sofern er die Cookies nicht regelmäßig löscht – auch jederzeit wiedererkennen. Kritisch wird es jedoch dann, wenn ein Angreifer in den Besitz dieser sensiblen Informationen kommt und die Identität des Opfers stiehlt. Nachfolgend werden mehrere Ansätze gezeigt, wie man diesen Diebstahl verhindern kann.

Um allerdings zu verstehen, wie man die eigenen Cookies erfolgreich schützt, ist es von Vorteil zu wissen, wie ein Angreifer diese zu stehlen versucht – getreu dem Motto des chinesischen Militärstrategen Sun Tsu:

Kenne deinen Feind und kenne dich selbst ...

Wie funktioniert Cookie-Klau aus Sicht des Diebes?

Um Cookies zu stehlen, bedienen sich Angreifer diverser Methoden. Die wohl klassischste besteht darin, eine Lücke im Code der Webseite zu entdecken, über die sich Cross-Site-Scripting (XSS) realisieren lässt. Ist diese Hürde erst einmal genommen, muss es dem Angreifer nur noch gelingen, das Opfer dazu zu bewegen, auf einen präparierten Link zu klicken. Typischerweise ist dieser in einer HTML-codierten E-Mail versteckt.

Noch einfacher – und gefährlicher – wird es allerdings, wenn es sich nicht um reflektiertes, sondern persistentes XSS handelt. Dann nämlich kann der Angreifer seinen Skript-Code direkt auf der Webseite platzieren, zum Beispiel als Blog-Kommentar, Wiki-Seite oder Foren-Beitrag.

In diesem Fall muss er auch keinen Link mehr präparieren und ihn – in eine möglichst glaubwürdige Geschichte verpackt – via E-Mail versenden, sondern lediglich warten, bis Anwender die Webseite besuchen. Deren Browser starten den hinterlegten JavaScript-Code dann meist ohne Murren und versorgen den Dieb mit Cookies in Hülle und Fülle.

Die gute Nachricht ist jedoch, dass sich derartige Szenarien schneller und einfacher unterbinden lassen, als man vermuten würde.

Sichere Programmierung und Source Code Reviews

Wer beim Schutz seiner Anwender und deren Daten auf Nummer sichergehen will, muss bei der eigenen Web-Applikation anfangen: Die Themen Sicherheit im Allgemeinen und sichere Programmierung im Speziellen sollten den gesamten Entwicklungsprozess begleiten und nicht erst zum Schluss angesprochen werden.

Große Software-Konzerne leben es vor und Studien untermauern es: Wer Fehler kontinuierlich behebt und sauber programmiert, spart auf lange Sicht sowohl viel Zeit als auch unnötige Kosten.

Dennoch sind Fehler nie ganz auszuschließen und auch aufmerksamen Entwicklern werden sie immer mal wieder unterlaufen. Und genau für diesen Fall empfehlen sich regelmäßige Source Code Reviews, bei denen die komplette Applikation automatisiert auf Fehler überprüft wird. Wer darüber hinaus noch manuelle Stresstests einsetzt, kann seine Anwendung guten Gewissens online zur Verfügung stellen.

Cookies richtig verwenden: HttpOnly und secure

Durch sichere Programmierung und Source Code Reviews lassen sich viele typische Software-Bugs vermeiden, doch ein Restrisiko bleibt bestehen. Diesem kann man mit Cookie-Attributen wie HttpOnly am besten begegnen.

Wie im obigen Szenario beispielhaft gezeigt, basieren Angriffe mit dem Ziel, Cookies zu stehlen, häufig darauf, den Anwender zum unbeabsichtigten Starten von JavaScript im Browser zu veranlassen. Was aber, wenn der Browser dem Skript-Code das Auslesen der Cookie-Werte schlicht untersagt? Dann würden alle Angriffe ins Leere laufen. Genau dies bewirkt das HttpOnly-Attribut, das alle modernen Browser unterstützen.

Ein weiteres wichtiges Attribut ist secure. Dieses sollte immer dann gesetzt werden, wenn die Website sensible Daten via HTTPS überträgt. Secure stellt sicher, dass der Cookie nur verschlüsselt übertragen werden darf. Aber: Garantiert HTTPS nicht bereits größtmöglichen Schutz?

Das Cookie-Attribut secure ist deshalb so wichtig, weil große Websites oft aus zahlreichen Komponenten bestehen. Hier passiert es unter Umständen schnell, dass fast alle Daten verschlüsselt übertragen werden, doch eine – scheinbar harmlose – Funktion den Cookie unverschlüsselt anfordert und alle Sicherheitsbemühungen zunichte macht.

Um dieses Leck zu schließen, erzwingt secure eine stets sichere Übertragung des Cookies und blockiert alle unverschlüsselten Zugriffsversuche.

Permanentes HTTPS bietet maximalen Schutz

Zwar gibt es kaum noch Websites, die komplett auf HTTPS verzichten, doch noch immer verwenden viele Betreiber diese Technologie falsch. Statt Cookies während der gesamten Sitzung durch permanentes HTTPS zu schützen oder eine sichere Übertragung durch das oben vorgestellte Attribut secure zu gewährleisten, werden oft nur besonders sensible Informationen verschlüsselt übertragen – beispielsweise das Anmeldeformular mit den Zugangsdaten.

Für das eigene Heim- oder das gesicherte Firmennetzwerk mag dieser Ansatz zwar gerade noch sicher genug sein, in einem öffentlichen WLAN kann er jedoch schnell zum Verhängnis werden.

Wie ein solcher Angriff in WLAN-Hotspots aussehen könnte, hat ein Sicherheitsforscher auf der letztjährigen ToorCon in San Diego mithilfe des Tools Firesheep sehr anschaulich demonstriert. Firesheep ist eine Firefox-Erweiterung, mit der sich die im Netzwerk herumschwirrenden Cookies blitzschnell sammeln und anschließend die Sessions der Nutzer übernehmen lassen.

Bei fehlendem Cookie-Attribut secure braucht es dazu nur einen einzigen unverschlüsselten Request via HTTP, um Firesheep Tür und Tor zum Diebstahl der Cookies zu öffnen. Und diese sind fast ebenso wertvoll wie die durch HTTPS gesicherten Zugangsdaten selbst: Mit den Cookies kann der Dieb auf der Website alles tun, wozu auch der echte Nutzer befugt ist.

Wer seinen Besuchern bestmöglichen Schutz garantieren will, sollte die Cookies durch secure sichern und den kompletten Datenverkehr ausschließlich via HTTPS abwickeln. Das verhindert feindliche Übernahmen der Sitzungen und versteckt alle noch so kleinen Informationshäppchen vor den Augen Dritter.

Browser-Erweiterungen und Web Application Firewalls (WAF)

Um den Cookie-Diebstahl auch aufseiten der Clients zu unterbinden, bieten sich verschiedene Ansätze an: Einer besteht in der Nutzung von Add-ons, die die Verwendung von HTTPS erzwingen sollen. Eine konkrete Implementierung dieser Idee stellt etwa die Firefox-Erweiterung HTTPS Everywhere dar.

Dieses (von der Electronic Frontier Foundation bereitgestellte) Plugin stellt sicher, dass Daten von und zu einer Website im Zweifelsfall immer verschlüsselt übertragen werden. Was gut klingt, hat jedoch einen Haken: Einige Seiten reagieren auf “erzwungene” HTTPS-Anfragen anders als auf die erwarteten HTTP-Anfragen, was zu Problemen führen kann.

Ein anderer Ansatz, um auf Browser-Seite aktiv gegen Cookie-Diebstahl vorzugehen, besteht im Einsatz von XSS-Filtern. Mit Microsoft, Apple und Google haben die größten Anbieter bereits Filter in ihre neuesten Browser integriert, die reflektiertes XSS unterbinden sollen. Für Firefox stehen entsprechende Erweiterungen wie NoScript zur Verfügung.

Dass jedoch nicht alles Gold ist, was glänzt, zeigte sich beim Internet Explorers 8 an einem sehr pikanten Fall: Durch einen Fehler im XSS-Filter ließ sich unter gewissen Voraussetzungen JavaScript im Kontext einer Seite starten, die an sich gar nicht verwundbar war. Erst der eingeschaltete XSS-Filter ermöglichte es, den Skript-Code einzuschleusen. Das Problem wurde jedoch sehr schnell behoben.

Wie XSS-Filter im Browser versuchen auch Web Application Firewalls, manipulierte Anfragen zu erkennen und vor ihrer Ausführung aufseiten der Server abzufangen. Um Fehler möglichst auszuschließen, blockieren WAFs wie z.B. das quelloffene ModSecurity die Anfrage vollständig und leiten standardmäßig auf eine vordefinierte Seite um.

Komplexere Filter gehen teilweise so weit, dass sie den gefährlichen Skript-Code "on the fly" entfernen und dann den legitimen Rest weiterverarbeiten. Dieser Ansatz mag zwar nutzerfreundlicher sein, wenn er gelingt, ist aber enorm riskant, da er voraussetzt, dass der Filter absolut einwandfrei funktioniert.

Fazit

Im Internet unserer Tage mit seinen vielen dynamischen Web-Anwendungen sind die Cookies der Nutzer ein wertvolles Gut, das es vor den Augen Unbefugter zu schützen gilt. Und gerade öffentliche Funknetze sind es, in denen Sorglosigkeit und mangelhafte Sicherheit der Applikationen Nutzer unnötig gefährden.

Wie wir gesehen haben, ist häufig keine teure Hardware oder spezielle Software nötig, um ein hohes Maß an Schutz zu gewährleisten. Fast alle Sicherheitsmechanismen sind bereits vorhanden und stehen zumeist frei zur Verfügung – sie müssen allerdings auch konsequent eingesetzt werden.

Weiterführende Informationen

Haben Sie Fragen zum Thema IT-Sicherheit? Möchten Sie Risiken minimieren und Sicherheitslücken in Ihrem Unternehmen identifizieren und stopfen? Die erfahrenen IT-Experten von //SEIBERT/MEDIA/SYSTEMS beraten Sie gerne - bitte sprechen Sie uns unverbindlich an. Ausführliche Informationen finden Sie auch auf unserer speziellen Seite zum Thema Internet-Security-Beratung.

Sicherheitsüberprüfungen von Websites durch //SEIBERT/MEDIA
Password Manager Pro: Verschlüsselte und sichere Speicherung und Übertragung von Passwörtern
Warum Unternehmen Penetrationstests durchführen sollten (und eigentlich auch müssen)


Mitwirkender an Konzeption und Umsetzung: Benjamin Kendinibilir
Foto: Robyn Lee unter CC-Lizenz


Mehr über die Creative-Commons-Lizenz erfahren