Suche
Sichere Single-Page-Webanwendungen

Werde nicht das nächste Ashley Madison!

Philipp Burgmer

Philipp Burgmer

Single-Page-Anwendungen stellen in punkto Sicherheit neue Herausforderungen an Entwickler. Philipp Burgmer zeigt in seiner Session auf der W-JAX 2015 anhand von Codebeispielen, wie man sich vor Dingen wie Cross-Site Scripting, Cross-Site Request Forgery und Code-Injection schützen kann – und welche Gefahren sonst noch so lauern. Im folgenden Beitrag gibt er einen kleinen Vorgeschmack und beschreibt nützliche Tools und Tutorials, mit denen man sich ins Thema Sicherheit von Webanwendungen vertiefen kann.

Werde nicht das nächste Ashley Madison!

Sicherheit in Web-Anwendungen ist ein alter Hut. Dazu hat jeder schon genug Artikel gelesen und Vorträge gehört, könnte man meinen. Doch die Realität zeigt uns ein anderes Bild. Fast wöchentlich tauchen neue Meldungen über gehackte Webseiten auf. Und wir können uns sicher sein, dass das nur die berühmte Spitze des Eisbergs ist, denn die meisten Hacker gehen mit ihren Erfolgen nicht so hausieren wie im Fall AshleyMadison. Und wir können auch sicher sein, dass hier auf Seiten der gehackten nicht nur Anfänger Fehler gemacht haben, sondern auch erfahrenen Entwicklern Flüchtigkeitsfehler passiert sind.

Die Gründe für die Entstehung von Sicherheitslücken in Web-Anwendungen sind vielfältig. Zum einen erreichen heute auch viele Web-Anwendungen eine beachtliche Komplexität, so dass kaum noch jemand einen Überblick über den gesamten Code hat. Zum anderen besteht das Web aus einer Vielzahl an gewachsenen Technologien (HTTP, DOM, JavaScript, Cookies, …), die alle ihre eigenen Tücken und Herausforderungen haben, deren Zusammenspiel aber oft die eigentliche Herausforderung ist. Browsern merkt man es heute immer noch stark an, dass sie eigentlich nie für solch komplexe Anwendungen entworfen wurden. Das Security-Model ist an vielen Stellen sehr umständlich und APIs wie das DOM schreien geradezu danach, Fehler zu machen und Lücken einzubauen.

Um eine sichere Web-Anwendung entwickeln zu können, brauchen wir zum einen eine sichere Architektur. Zum anderen müssen wir sicheren Code schreiben und dabei z.B. aufpassen, dass wir keine unsicheren APIs verwenden. Beim Code müssen wir aber auch sicherstellen, dass wir uns an die Architektur und das Security-Model unserer Anwendung halten.

Die im Fall AshleyMadison veröffentlichten internen E-Mails zeigen, dass sich die Entwickler über diverse Sicherheitslücken bewusst waren. Die Rede ist von Cross-Site-Scripting und SQL Injection [1], also altbekannten Problemen auf Code-Ebene. Warum die Probleme überhaupt da waren, warum sie nicht behoben wurden, und ob die Hacker letztendlich über diese Lücken ins System gelangten, darüber lässt sich nur spekulieren. Letztendlich ist es auch irrelevant. Wir müssen bei unseren Anwendungen dafür sorgen, dass Lücken nicht da sind, damit sie bei uns nicht ausgenutzt werden können.

Regelmäßige Security-Audits sind da natürlich ein gutes Mittel. Doch sie sind aufwändig und teuer. Jedem, der hier jedoch nach den Kosten fragt, sei mit einer Gegenfrage geantwortet: Was kostet der Ernstfall? Der Fall AshleyMadison zeigt das gut: Schon allein die Anwaltskosten für die bereits eingereichte Sammelklage dürfte deutlich teurer werden [2]. Ganz zu schweigen von den oft horrenden Schadensersatzsummen in den USA und dem völlig zerstörten Ruf der Seite.

Es geht jedoch auch eine Stufe kleiner. Es müssen nicht immer gleich White Hats und speziell ausgebildete Penetrationstester ans Werk, um unsere Lücken zu finden. Wie bereits erwähnt, waren den Entwicklern Fehler bekannt. Das heißt auch, dass sie die grundsätzlichen Probleme kannten. Ein Code-Review oder ein eigener kleiner Penetrationstest kann schon einige leichter zu findenden Lücken aufzeigen. Und diese würden ja wahrscheinlich auch von einem Hacker als erstes entdeckt und dann ausgenutzt. Behoben werden sollten die Fehler dann auch noch …

Ein 100% sicheres System werden wir wohl nie erreichen können. Wir müssen es aber so sicher machen wie möglich, um es dem Angreifer nicht unnötig leicht zu machen. Wenn der Aufwand zu hoch ist, sind wir kein lohnendes Ziel mehr. Darauf basiert ja letztendlich auch unsere Kryptografie.

Das System so sicher zu machen wie möglich, fängt in aller erster Linie damit an, dass die Entwickler wissen, was sie tun. Wir Entwickler müssen uns mit den von uns verwendeten Technologien auseinandersetzten und unser Handwerk beherrschen. Es wird doch immer von Engineering geredet. Damit wir wie ein Ingeneur etwas bauen können, müssen wir wissen, was wir da eigentlich tun. Ansonsten bezeichnen wir uns wohl doch besser als Künstler …

Tutorials & Literatur

Um uns mit dem Thema Web-Security auseinanderzusetzten, müssen wir nicht gleich eine teure Spezial-Ausbildung machen. Im Netz gibt es reichlich Material, das uns langsam und vor allem mit Übungen und Beispielen an die Materie heranführt. Gute Literatur ist auch vorhanden. In meinem Talk bei der W-JAX 2015 werde ich primär auf die Architektur und das Security-Model für Single-Page-Web-Anwendungen eingehen und praktische Tipps geben. Wie erreichen wir einen Stateless Server? Wie können wir XSRF verhindern und trotzdem eine gute Usability bieten?
 Um sicheren Code zu schreiben, muss sich jeder Entwickler und jedes Team selbst mit dem Thema Web-Security und den Technologien beschäftigen. Dazu möchte ich hier ein paar Empfehlungen für Tutorials und Literatur geben, in denen erklärt wird, wie der Browser und das Web funktioniert, und vor allem auch, wie es angegriffen wird. Denn wie Simon Bennetts vom Mozilla Security Team sagt: „You cannot build secure web applications unless you know how they will be attacked“.

OWASP WebGoat

WebGoat ist eine Software zum Erlernen und Ausprobieren von gängigen Sicherheitsproblemen in Web-Anwendungen. Sie besteht aus einzelnen Lektionen, in denen zunächst theoretisch das Problem erklärt wird. Danach folgt eine Übungsaufgabe, in der die mitgelieferte Demo-Anwendung gehackt werden soll. So kann man das gerade Gelernte gleich ausprobieren und erzielt schnelle Erfolge. Oft lassen sich die Probleme, und wie sie ausgenutzt werden können, auf die eigene Anwendung übertragen, und man kann dort gleich ausprobieren, ob man von dem Problem betroffen ist. Bei der YGN Ethical Hacker Group gibt es eine Walk-Through-Video-Reihe [3]

WebGoat

http://webappsecmovies.sourceforge.net/webgoat/

 

Die Software ist in Java geschrieben und steht sowohl als deploybare WAR-Datei als auch als Standalone-Anwendung mit integriertem Tomcat auf der Projekt-Webiste bei Github bereit [4]. Wichtig dabei: Die Anwendung sollte nicht auf einem Rechner gestartet werden, der an das Internet angeschlossen ist, da sie absichtlich Sicherheitslücken enthält. Es bietet sich an, eine virtuelle Maschine zu verwenden, die nur im Host-Only-Netzwerk erreichbar ist oder gar keinen Netzwerkzugriff hat.

Learning-By-Doing Webseiten

Einen ähnlichen Ansatz wie der WebGoat verfolgen auch hackthissite [5] und metasploit-unleashed [6]. Auch hier gibt es nach kostenloser Registrierung und erfolgreichem Login eine Reihe von Anleitungen und Übungen zum Thema Web-Security.

Da die Seiten im Internet gehostet sind, muss man selbst keine Installation vornehmen. Allerdings ist man dafür darauf angewiesen, den Betreibern zu vertrauen, dass auf dem eigenen Rechner keine böswilligen Dinge gemacht werden. Bei meinen Tests konnte ich nichts dergleichen feststellen, und die Seiten machen einen vertrauensvollen Eindruck. Es bietet sich aber an, Vorsicht walten zu lassen und lieber einen Browser innerhalb einer virtuellen Maschine ohne Zugriff auf Daten des Hosts zu verwenden.

Weitere Tutorial Seiten

pentesterlab.com [7] und cybrary.it [8] bieten kostenlose Tutorials mit Videos und in Textform an, in denen es schon deutlich mehr um Penetrationstests geht, als um das Kennenlernen und das Ausprobieren. Nichtsdestotrotz werden hier auch die Grundlagen behandelt.

Wer noch einen Schritt weiter gehen möchte, kann sich die kostenlose Linux-Distribution Kali herunterladen [9]. Kali ist eine Sammlung von Programmen, die häufig für Penetrationstests eingesetzt werden. Auch für Web-Anwendungen ist einiges dabei.

KaliLinux

https://www.kali.org/

 Bücher

Wer unterhaltsam bei den ganz grundlegenden Dingen des Webs wie URL Encoding, HTTP, HTML, JavaScript usw. anfangen möchte, ist mit Tangled Web von Michal Zalewski [10] sehr gut bedient. Hier wird alles sehr ausführlich beschrieben, aber eben auch sehr kurzweilig. Das Buch ist in Deutsch und Englisch und sowohl gedruckt als auch als eBook verfügbar.

The Browser Hacker’s Handbook von Wade Alcorn et al. [11] und The Hacker Playbook 2: Practical Guide To Penetration Testing von Peter Kim [12] sind leider nur auf Englisch erschienen, bieten aber ebenfalls einen guten und tiefen Einblick in die Funktionsweise des Browsers und das Vorgehen beim Testen von Sicherheitslücken.

Geschrieben von
Philipp Burgmer
Philipp Burgmer
Philipp Burgmer ist ein Web-Native. Seit 15 Jahren in der Web-Programmierung unterwegs, gibt er sein angesammeltes und ständig aufgefrischtes Wissen gerne in Schulungen, Vorträgen bei Konferenzen und Blog-Einträgen auf blog.thecodecampus.de weiter. Er arbeitet als Entwickler, Berater und Trainer für die w11k GmbH und beschäftigt sich mit der Gestaltung und Optimierung von Benutzeroberflächen. Privat interessiert er sich für Klettern und DJing.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: