Bundesamt für Sicherheit in der Informationstechnik

M 5.161 Erstellung von dynamischen Web-Angeboten

Verantwortlich für Initiierung: IT-Sicherheitsbeauftragter, Leiter IT

Verantwortlich für Umsetzung: Administrator

Um dynamische Web-Angebote zur Verfügung stellen zu können, ist eine Programmlogik auf Server-Seite notwendig. In vielen Fällen kann diese Funktion vom Webserver übernommen werden, z. B. über einfache Skripte oder Server Side Includes (SSI). Bei komplexen Web-Angeboten wird jedoch häufig ein Web-Anwendungsserver mit einem entsprechenden Framework eingesetzt. Der Web-Anwendungsserver muss jedoch nicht notwendigerweise vom Webserver getrennt sein, da viele gängige Webserver bereits einen Web-Anwendungsserver integriert haben (z. B. Tomcat bei Apache). Die Web-Anwendungsserver beziehungsweise die zugehörigen Frameworks erlauben die Realisierung von umfassenden Web-Angeboten. Darüber hinaus wird durch diese der Zugriff auf Hintergrund- oder Alt-Systeme wesentlich vereinfacht. Häufig eingesetzte Programmiersprachen und Frameworks für dynamische Web-Angebote werden in den folgenden Abschnitten beschrieben.

CGI

CGI ist das Akronym für Common Gateway Interface und ist eine Methode, um Web-Seiten dynamisch und interaktiv zu gestalten. Die Generierung von dynamischen Inhalten wird dabei über externe Anwendungen, die vom Webserver aufgerufen werden, realisiert. Für diese Aufrufe stellt CGI eine Schnittstelle zwischen Webserver und System-Anwendung zur Verfügung. Es handelt sich daher bei CGI um keine Programmiersprache, sondern lediglich um eine Funktionalität, um Programme vom Webserver aus auszuführen. CGI-Programme können daher mit beliebigen Programmiersprachen erstellt werden, sofern sich diese vom Webserver aus aufrufen lassen. Abhängig von der verwendeten Technik liegt eine CGI-Applikation entweder als Binärdatei oder als Skript vor. Typische Beispiele für CGI-Sprachen sind C, Perl, TCL, Unix-Shell und viele andere mehr.

Da die dynamischen Funktionen von CGI-Programmen realisiert werden, müssen diese auch das benötigte Sicherheitsniveau gewährleisten. Dies bedeutet beispielsweise, dass die Überprüfung von Parametern von jedem CGI-Programm selbst durchgeführt werden muss.

SSI

Ähnlich wie CGI sind auch Server Side Includes (SSI) eine Methode, um dynamische Seiten zu erzeugen. SSI erlauben es, beliebige Dateien oder die Rückgabewerte von Systembefehlen in ein Web-Angebot einzubinden. Die Möglichkeiten, dynamische Web-Angebote zu gestalten, sind jedoch mit SSI eher begrenzt, weshalb SSI heute nur noch wenig in Verwendung ist.

Analog zu CGI ist es auch bei SSI möglich, Schwachstellen über die eingebunden Systembefehle auszunutzen. Kann beispielsweise der Pfad einer eingebundenen Datei beeinflusst werden, so können bestimmte Dateien auf dem Server ausgelesen beziehungsweise Befehle auf dem System ausgeführt werden.

PHP

PHP (Akronym für "PHP: Hypertext Preprocessor") ist eine Skript-Sprache, die es ermöglicht, dynamische Web-Angebote zu realisieren. Seit Version 4 wurde PHP um Aspekte der objektorientierten Programmierung erweitert. Wesentliche Eigenschaften von PHP sind die leichte Erlernbarkeit und die breite Unterstützung für Datenbankanbindungen.

Zudem bietet PHP eine Vielzahl an Sicherheitsfunktionen. Beispielsweise erlaubt die Verwendung von sogenannten Magic Quotes ein automatisches Erkennen und Maskieren von potenziell gefährlichen Zeichen. Auf diese Weise können viele gebräuchliche Angriffe erschwert werden. Eine weitere Sicherheitsfunktion ist das Open Base Dir, welches den Zugriff auf Dateien außerhalb eines definierten Verzeichnisses verhindert, wodurch auch die Möglichkeiten für einen Angreifer eingeschränkt sind. PHP erlaubt zudem eine Restriktion von potenziell gefährlichen Funktionen. Mit Hilfe des sogenannten Safe-Mode ist eine Einschränkung von zahlreichen Rechten möglich. Dies ist vor allem in einer Multi-Domain-Umgebung sinnvoll, in welcher mehrere Web-Angebote auf demselben Server betrieben werden.

Trotz dieser Sicherheitsfunktionen gibt es aufgrund verschiedener Funktionen (z. B. register_globals) auch einige Probleme in PHP. Diese Funktion ermöglicht beispielsweise beim Aufruf eines PHP-Skripts die Angabe von beliebigen Variablen, wodurch es einem Angreifer erleichtert wird, das Web-Angebot zu kompromittieren. In der Vergangenheit sind in PHP eine Vielzahl von Schwachstellen aufgetreten.

Neben PHP konnten sich noch weitere Skriptsprachen für die Realisierung von dynamischen Web-Angeboten etablieren. Die bekanntesten Beispiele sind Ruby, Python und Perl. Im Wesentlichen bieten all diese Skriptsprachen ähnliche Funktionen und sind daher auch ähnlichen Sicherheitsproblemen ausgesetzt. Es hat sich gezeigt, dass ein Großteil der bekannten Schwachstellen in Web-Anwendungen unabhängig von der verwendeten Programmiersprache ist.

JSP (Java Server Pages)

Java Server Pages werden in erster Linie für die Präsentationsschicht von Java-Web-Anwendungen verwendet. Die darzustellenden Daten werden meist in sogenannten JavaBeans (Container zur Datenübertragung) abgelegt, welche einen einfachen Zugriff erlauben. Es ist jedoch auch möglich, Geschäfts-Logik in JSP-Seiten zu implementieren. Dies führt allerdings zu einer unsauberen Trennung zwischen Funktion und Darstellung der Daten und steht auch im Gegensatz zum Model-View-Controller-Ansatz. Dieser sieht eine klare Trennung zwischen Daten, Funktion und Präsentation vor.

J2EE

Die Java Enterprise Edition, abgekürzt J2EE, spezifiziert eine Softwarearchitektur für transaktionsbasierte Java-Anwendungen. Damit ist es möglich, dynamische Inhalte durch das Einbetten von Java-Code in HTML - und XML -Dokumenten zu erstellen.

Java bietet eine Reihe von Sicherheitsfunktionen. So ist Java beispielsweise typensicher, was eine Überprüfung des Datentyps von Variablen und Parametern bei deren Verwendung impliziert. Java verhindert per Design Speicher-Management-Schwachstellen wie Buffer Overflows und Heap Overflows in der Anwendung. Damit ist ein Angreifer nicht mehr in der Lage, die Kontrolle über ein Programm zu erlangen, indem er den Speicherbereich des Programms mit manipulierten Eingaben befüllt. Andere Schwachstellen-Klassen stellen jedoch auch in Java eine Gefährdung dar. Mit Hilfe einer sogenannten Sandbox bietet Java jedoch die Möglichkeit, Code in einer sicheren und abgeschotteten Umgebung auszuführen, ohne dass dabei das Betriebssystem gefährdet wird. Mit Hilfe von J2EE Security ist zudem eine restriktive Verwaltung von Systemressourcen möglich.

ASP/ASP.NET/Mono

Active Server Pages (ASP) wird vor allem in Microsoft-Umgebungen verwendet, da diese Technologie in erster Linie auf dem Microsoft Internet Information Server lauffähig ist. Bei ASP handelt es sich allerdings nicht um eine eigene Programmiersprache, sondern um ein Framework, welches das Verfassen der Programmlogik in unterschiedlichen Programmiersprachen ermöglicht. ASP wird jedoch nicht mehr weiterentwickelt, sondern wurde durch dessen Nachfolger ASP.NET ersetzt. Mit Mono steht neben der Implementierung von Microsoft auch zusätzlich eine unter Unix lauffähige Variante zur Verfügung.

Für ASP.NET existiert eine Reihe von Sicherheitsfunktionen. Ein Beispiel dafür ist der Gatekeeper-Mechanismus, der aus unterschiedlichen Modulen besteht und verschiedene Sicherheitsfunktionen anbietet (z. B. Filter, Authentisierung, ...). Zudem steht ein eigenes Anti-Cross-Site-Scripting-Framework zur Verfügung. Mit Hilfe eines weiteren Frameworks kann eine rollenbasierte Zugriffskontrolle umgesetzt werden.

Web-Service

Ein Web-Service ist mit einer Web-Anwendung vergleichbar. Der Unterschied besteht darin, dass die Ausgabe von Ergebnissen nicht für einen Browser aufbereitet wird, sondern in anders strukturierter Form (z. B. SOAP) zur Verfügung gestellt wird. Durch die Vernetzung von Web-Services kann eine Service-orientierte Architektur (SOA) aufgebaut werden. Dabei werden einzelne Teile einer Anwendung als Web-Service implementiert. Diese können dann fortlaufend von mehreren Anwendungen genutzt werden. Auf diese Weise wird die Wiederverwendbarkeit von Funktionen erhöht und die Wartung der einzelnen Anwendungsteile erleichtert.

Da Web-Services die gleichen Protokolle wie Web-Anwendungen verwenden, sind sie hinsichtlich der Sicherheitsanforderungen mit Web-Anwendungen gleichzusetzen. Es existiert ein eigener Standard für Web-Service-Security (WS-Security). Auf Grund der Offenheit einer Service-orientierten Architektur muss im Vergleich zu geschlossenen Architekturen in besonderer Weise auf Zugriffsschutz geachtet werden. Für die Kommunikation mit Web-Services sind folglich die Anforderungen an Authentizität, Integrität und Vertraulichkeit besonders hoch. Das Abhören von Anfragen und den zugehörigen Antworten im Klartext sowie die Fälschung oder Veränderung von Nachrichten muss verhindert werden.

Die notwendigen Sicherheitsanforderungen können durch entsprechenden Einsatz von kryptografischen Verfahren erreicht werden. Im Sinne einer Service-orientierten Architektur ist es auch möglich, einzelne Sicherheitsmaßnahmen als eigene Services zu implementieren.

Ein wichtiger Begriff im Zusammenhang mit Web-Services ist WSDL (Web Service Description Language). Mit Hilfe von WSDL werden funktionale Angaben zu einem Web-Service gemacht, die erforderlich sind, um einen solchen Service nutzen zu können. Eine WSDL-Datei stellt die Beschreibung der Schnittstelle eines Web-Services dar. Es legt dar, welche Funktionen das Web-Service zur Verfügung stellt, wie diese aufgerufen werden und welche Parameter zum Aufruf benötigt werden. Eine WSDL-Datei enthält folglich die wesentlichen Informationen (z. B. Zugangspunkt und -protokoll), um die Nutzung von Web-Services zu ermöglichen.

Sicherheitsaspekte in Zusammenhang mit WSDL betreffen vor allem die erforderlichen XML-Parser. Diese sind notwendig, um die an den Web-Service übertragenen Daten zu verarbeiten. Da als Parser oft Eigenentwicklungen zum Einsatz kommen, sind diese für eine Vielzahl von Angriffen anfällig. Dabei werden meist absichtlich falsch gestaltete XML-Nachrichten verwendet, die zum Absturz des Parsers oder des gesamten Web-Services führen können. Ein Beispiel dafür ist eine XML-Bombe. Dabei handelt es sich um ein XML-Dokument, dessen Teilelemente mehrfach auf sich selbst referenzieren, wodurch Probleme beim Einlesen des Dokuments durch den Parser entstehen können.

Eine weitere Bedrohung für Web-Services ist das Ausspähen und Wiedereinspielen von unzureichend geschützten SOAP-Nachrichten (ein sogenannter Replay-Angriff). Dabei werden bereits übertragene und von einem Angreifer aufgezeichnete SOAP-Nachrichten beliebige weitere Male übermittelt und dadurch die Anweisungen eines legitimen Benutzers auf dem Server erneut zur Ausführung gebracht. Durch den Vorgang können Datenbestände auf der Seite des Servicebetreibers unautorisiert geändert oder gelöscht werden.

AJAX/Atlas

Atlas ist ein Framework für AJAX (Asynchronous JavaScript and XML), welches als Web-Service läuft. Mit Hilfe dieser Technologie wird versucht, Programme, die bisher nur auf PCs eingesetzt wurden, als Web-Anwendung nachzubilden. Dies bedeutet, dass Teile von Web-Seiten nachgeladen werden können, ohne dass der Rest der Seite erneut aufgebaut werden muss. Damit wird im Gegensatz zu herkömmlichen Anwendungen eine viel bessere Performance erzielt.

Der Einsatz von AJAX wird allerdings nicht empfohlen, da hierfür Benutzer auf den Clients Aktive Inhalte zulassen müssen. Bei der Verwendung Aktiver Inhalte bestehen vor allem Gefahren durch Session Riding und Cross-Site-Scripting.

Streaming Services

Mit Hilfe von Streaming Services werden in erster Linie Audio- und Videodaten zu Clients übertragen. Dies erfordert auf der Client-Seite jedoch die Verwendung spezieller Programme oder Plug-Ins für den Browser. Um Berechtigungskonzepte für die dargestellten Inhalte durchsetzen zu können, werden oft sogenannte Digital-Rights-Management-Systeme (DRMS) verwendet. Diese stellen beispielsweise sicher, dass ein Client Daten nur dann anzeigen oder kopieren kann, wenn er die entsprechenden Rechte in Form einer Lizenz besitzt.

Streaming Services verwenden ein Reihe von Protokollen, um Daten an die Clients zu senden. Am gebräuchlichsten sind dabei das Real Time Streaming Protocol (RTSP) und das Resource Reservation Protocol (RSVP).

Stand: 12. EL Stand 2011