Bundesamt für Sicherheit in der Informationstechnik

M 5.159 Übersicht über Protokolle und Kommunikationsstandards für Webserver

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

Verantwortlich für Umsetzung: Administrator

Über (Kommunikations-)Protokolle wird in der IT der Informationsaustausch zwischen Prozessen bzw. IT-Komponenten geregelt (siehe auch M 5.39 Sicherer Einsatz der Protokolle und Dienste ). Damit auch Prozesse von Applikationen, die von verschiedenen Entwicklern erstellt wurden, miteinander kommunizieren können, müssen die Informationen nach vorher festgelegten Regeln übertragen werden. Diese Vorschrift wird als Protokoll bezeichnet. Diese Prozesse können beispielsweise Serverdienste oder Clientapplikationen sein. Auch zwischen lokalen Prozessen kann der Austausch von Informationen über Protokolle geregelt werden.

Im Zusammenhang von Webservern werden zahlreiche verschiedene Protokolle eingesetzt, die im folgenden beschrieben werden:

Hypertext Transfer Protocol (HTTP)

Das am häufigsten eingesetzte Protokoll zur Datenübertragung im Web ist HTTP. Es handelt sich dabei um ein Protokoll der Anwendungsschicht des TCP / IP -Referenzmodells. Die Version 1.1 ist in RFC 2616 definiert und basiert auf dem Client-Server-Prinzip. Das bedeutet, dass stets vom Client eine Anfrage gestellt wird (Request), welche vom Web-Server beantwortet wird (Response). Das Protokoll arbeitet zustandslos, was bedeutet, dass nach erfolgter Datenübertragung ( z. B. einer Web-Seite) die Verbindung zum Server wieder geschlossen und nicht aufrechterhalten wird.

Bei HTTP handelt es sich um ein Klartextprotokoll, wodurch alle übertragenen Daten von einem möglichen Angreifer mitgelesen werden können. Eine entsprechende Verbesserung bietet HTTPS, welches eine verschlüsselte Verbindung auf Basis von TLS oder SSL zwischen Web-Server und Browser ermöglicht.

HTTPS

HTTPS (HTTP über SSL bzw. HTTP über TLS) ist eine Variante von HTTP, bei der Authentisierung und Datenübertragung durch Verschlüsselung und Zertifikate geschützt werden können. HTTPS wird im RFC 2818 spezifiziert.

Meist benutzt ein Webserver, der HTTPS unterstützt, den TCP-Port 443. Beim Einsatz von HTTPS muss beachtet werden, dass TLS auch einen Betriebsmodus kennt, in dem keine Verschlüsselung stattfindet. Bei entsprechenden Sicherheitsanforderungen sollte am HTTPS-Proxy verhindert werden, dass entsprechende Verbindungen aufgebaut werden können.

WebDAV

WebDAV steht für "Web-based Distributed Authoring and Versioning" und ist ein offener Standard zur Bereitstellung und Verwaltung von Dateien auf einem Web-Server. WebDAV erweitert die Version 1.1 des HTTP-Standards um zusätzliche Funktionen. Die WebDAV-Kommunikation zwischen Client und Server erfolgt ausschließlich über den HTTP-Port 80. Dies stellt einen wesentlichen Vorteil gegenüber anderen Protokollen mit vergleichbaren Funktionen, wie etwa FTP , dar. Diese verwenden für Befehls- und Datenaustausch unterschiedliche Verbindungen, wodurch es häufig zu Konfigurationsproblemen bei Paketfiltern kommt.

Neben einfachen Datei-Operationen wie dem Hochladen, Umbenennen und Löschen von Dateien bietet WebDAV auch eine Versionskontrolle, die es erlaubt, Dateien mit mehreren Benutzern zu bearbeiten. Um all diese Funktionen nutzen zu können ist jedoch eine vorherige Authentisierung der einzelnen Benutzer über die in HTTP zur Verfügung stehenden Authentisierungsverfahren erforderlich. Für jeden Benutzer können unterschiedliche Berechtigungen vergeben werden. Dabei können beispielsweise auch nur bestimmte Dateitypen erlaubt oder verboten werden. So können die Dateiendungen von ausführbaren Dateien (wie .exe) blockiert werden, um einer unbeabsichtigten Verbreitung von Schadprogrammen vorzubeugen.

XML-RPC

XML-RPC (Extensible Markup Language Remote Procedure Call) ist ein Protokoll zum Aufruf von Funktionen auf entfernten Systemen, wobei die übertragenen Daten in einer XML-Struktur abgebildet werden. Die eigentliche Übertragung der XML-RPC-Nachrichten wird mit Hilfe von HTTP durchgeführt. Remote Procedure Calls (RPCs), wie sie beispielsweise durch XML-RPC umgesetzt werden, stellen die wesentliche Grundlage für verteilte Systeme dar. Sie ermöglichen es, Funktionen auf entfernten Systemen über ein Netz aufzurufen.

Da Funktionsaufrufe und Rückgabewerte in XML abgebildet werden, erfolgt eine Abstraktion von den zugrunde liegenden Programmiersprachen und Betriebssystemen. Dies bedeutet, dass Aufrufe unabhängig von der konkret verwendeten Programmiersprache bzw. des Betriebssystems erfolgen können. Funktionsaufrufe bestehen dabei aus dem Namen der Funktion, die aufgerufen werden soll, und den dazugehörigen Parametern. Funktionsrückgabe-Werte werden in einer ähnlichen Struktur wieder vom Server an den Client zurückgeliefert.

In XML-RPC sind keine dezidierten Sicherheitsmaßnahmen vorgesehen. Es ist daher erforderlich, diese in der Programmlogik jenes Systems zu implementieren, welches XML-RPC für entfernte Funktionsaufrufe verwendet.

SOAP

SOAP stand ursprünglich für "Simple Object Access Protocol". Dieses Akronym wird jedoch seit der Version 1.2 nicht mehr verwendet, da dieses die Funktionalität des Protokolls verfälschend beschreibt. Es handelt sich um ein Rahmenwerk, das den Austausch von Daten zwischen Systemen über ein Netz regelt. Mit SOAP werden Aufrufe von Funktionen auf entfernten Systemen ermöglicht. Es kann somit als Nachfolger von XML-RPC verstanden werden. SOAP-Nachrichten basieren ebenfalls auf einer XML-Struktur und können mit Hilfe unterschiedlicher Protokolle übertragen werden. Beispiele dafür sind sowohl das für E-Mail-Übertragungen bekannte SMTP als auch das bereits besprochene HTTP. Um eine verschlüsselte Verbindung einsetzen zu können, ist auch die Verwendung von HTTPS möglich. Eines der wichtigsten Anwendungsgebiete von SOAP ist die Bereitstellung und Nutzung von Web-Services.

Datenbankkonnektoren

Datenbankkonnektoren stellen eine standardisierte Schnittstelle zu Datenbanken und den zugehörigen Datenbank-Management-Systemen (DBMS) zur Verfügung. Sie ermöglichen es, unabhängig vom verwendeten DBMS, auf die in der Datenbank abgelegten Daten zuzugreifen oder diese zu verändern. Zusätzlich übernimmt ein Datenbankkonnektor den Auf- und Abbau sowie die Verwaltung einer Datenbankverbindung. Dadurch wird die Implementierung von Datenbankzugriffen im Zuge der Softwareentwicklung wesentlich vereinfacht. Datenbankkonnektoren erlauben einen sehr einfachen Zugriff auf Tabellen von Datenbanken oder Funktionen eines DBMS. Für die Verwaltung der Datenbanken und deren Inhalten verwenden Datenbankkonnektoren bekannte Datenbanksprachen wie etwa SQL. Bekannte Datenbankkonnektoren sind unter anderem ODBC (Open Database Connectivity) und JDBC (Java Database Connectivity).

SQL

SQL ist ein Akronym für "Structured Query Language" und dient als Datenbanksprache. Mit Hilfe von SQL-Anweisungen können Datenbestände definiert, abgefragt und verändert werden. Somit werden in SQL die Elemente von Datenverarbeitungssprache, Datenbeschreibungssprache und Datenaufsichtssprache vereint. Obwohl auch andere Datenbanksprachen existieren, hat sich SQL bei allen gängigen Datenbanken etabliert und ist auch von ANSI und ISO standardisiert.

Für Anwendungen und Web-Angebote, die auf SQL-Anweisungen für Datenbank-Abfragen zurückgreifen, müssen einige Sicherheitsmaßnahmen umgesetzt werden. Beispielsweise muss eine Anfälligkeit für SQL-Injections vermieden werden. Bei SQL-Injections handelt es sich um Schwachstellen bei Web-Angeboten, welche ungewollten Zugriff auf Datenbankinhalte erlauben. Diese Schwachstellen entstehen dann, wenn Web-Angebote Benutzereingaben nicht ausreichend filtern und Angreifer die SQL-Abfrage beeinflussen können. Können SQL-Abfragen manipuliert werden, besteht die Möglichkeit, Datenbestände vollständig auszulesen, zu verändern oder zu löschen.

Eine gebräuchliche Maßnahme zum Schutz vor SQL-Injections ist die Verwendung von Stored Procedures. Dabei handelt es sich um eine Funktion des DBMS, zusammenhängende Anweisungen und Abläufe als fertige Prozeduren zu speichern. Dadurch hat ein Angreifer nicht mehr die Möglichkeit, die SQL-Abfrage durch eine SQL-Injection zu verändern. Ein ähnlicher Schutz gegen SQL-Injections kann mit Hilfe von Frameworks erreicht werden. Frameworks, wie z. B. Hibernate, bilden eine zusätzliche Abstraktionsschicht zwischen Datenbank und der Implementierung des Datenbankzugriffs. Das Framework bietet dabei eine Schnittstelle für Programmierer, welche von der tatsächlich verwendeten Datenbank unabhängig ist und welche zur Ablage beliebiger Objekte geeignet ist.

Werden keine Stored Procedures oder Frameworks eingesetzt, so müssen alle Daten, die von Benutzern stammen und als Datenbankeingabe verwendet werden, einer Eingabevalidierung unterzogen werden. Dabei werden die Zeichen gefiltert, mit denen die SQL-Anweisung und somit die Durchführung der Datenbankabfrage beeinflusst werden kann. Anwendungen, die SQL-Anweisungen für Datenbank-Abfragen verwenden, sind immer wieder anfällig für SQL-Injection-Angriffe.

Techniken für den Aufruf entfernter Prozeduren

Eine bekannte und oftmals eingesetzte Technik zum Aufruf entfernter Prozeduren ist CORBA (Common Object Request Broker Architecture). Dabei handelt es sich um einen Standard für verteilte Systeme, der es ermöglicht, Kommunikationsverbindungen zwischen Prozessen auf unterschiedlichen Systemen aufzubauen und Daten auszutauschen. Durch eine von Programmiersprachen unabhängige Schnittstellen-Definition (Interface Definition Language, IDL) können Programme, die in unterschiedlichen Programmiersprachen implementiert wurden, miteinander kommunizieren. Um eine Kommunikationsverbindung zwischen zwei Prozessen aufbauen zu können, werden auf beiden Seiten sogenannte Object Request Broker (ORB) benötigt. Diese werden in der von der jeweiligen Seite verwendeten Programmiersprache implementiert und haben die Aufgabe, Daten zu empfangen beziehungsweise zu versenden. Die Kommunikation zwischen einzelnen ORBs kann entweder über herstellerspezifische Protokolle oder über das herstellerunabhängige Internet Inter-ORB Protocol (IIOP) erfolgen.

Ähnliche Konzepte wie CORBA stehen auch in verschiedenen Programmiersprachen zur Verfügung. Zwei der gebräuchlichsten Möglichkeiten in diesem Zusammenhang sind RMI (Remote Method Invocation) und DCOM (Distributed Component Object Model). Das aus dem Java-Umfeld stammende RMI erlaubt den Aufruf von entfernten Java-Methoden. DCOM stellt ein objektorientiertes RPC-System auf dem DCE-Standard zur Verfügung. Bei DCE (Distributed Computing Environment) handelt es sich um einen Industriestandard für verteilte Anwendungen, welches auf dem Client-Server-Modell basiert.

Da offene Architekturen mit Funktionsaufrufen über Systemgrenzen hinweg eine Vielzahl an Schnittstellen bieten, muss besonderes Augenmerk darauf gelegt werden, wer auf diese Schnittstellen zugreifen darf und welche Daten übertragen werden. Sicherheitsaspekte, insbesondere die Authentisierung von Teilnehmern, werden in der CORBA Security Specification abgedeckt.

Stand: 12. EL Stand 2011