02.02.2014 Aufrufe

Entwurf einer anwendungsunabhängigen Zugriffskontrolle mittels ...

Entwurf einer anwendungsunabhängigen Zugriffskontrolle mittels ...

Entwurf einer anwendungsunabhängigen Zugriffskontrolle mittels ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Technische Universität Darmstadt<br />

Fachbereich: Informatik<br />

Informationstechnologie Transfer Office<br />

<strong>Entwurf</strong> <strong>einer</strong> anwendungsunabhängigen<br />

<strong>Zugriffskontrolle</strong> <strong>mittels</strong> AOP<br />

am Beispiel eines Fahrtenbuch-Dienstes<br />

Diplomarbeit<br />

Andreas Blecher<br />

Darmstadt, 15. Juli 2003<br />

Eingereicht bei:<br />

Prof. Alejandro Buchmann, Ph. D.<br />

Fachgebiet für Datenbanken und Verteilte Systeme<br />

Fachbereich Informatik<br />

Technische Universität Darmstadt<br />

Betreuung durch:<br />

Dipl.-Inform. Andreas Görlach und<br />

Dr. Mariano Cilia<br />

Informationstechnologie Transfer Office<br />

Technische Universität Darmstadt<br />

Dr.-Ing. Sven Riedel<br />

OnStar Europe<br />

GM Europe GmbH, Rüsselsheim


Erklärung<br />

Hiermit versichere ich, dass ich die vorliegende Arbeit selbständig verfasst und keine<br />

anderen als die angegebenen Quellen und Hilfsmittel verwendet habe.<br />

Aschaffenburg, 15. Juli 2003<br />

Andreas Blecher


Inhaltsverzeichnis<br />

Inhaltsverzeichnis<br />

ABBILDUNGSVERZEICHNIS .............................................................................................................III<br />

TABELLENVERZEICHNIS....................................................................................................................V<br />

ABKÜRZUNGSVERZEICHNIS ...........................................................................................................VI<br />

1 EINLEITUNG .................................................................................................................................. 1<br />

1.1 HINTERGRUND UND MOTIVATION ............................................................................................. 1<br />

1.2 PROBLEMSTELLUNG .................................................................................................................. 2<br />

1.3 ÜBERBLICK................................................................................................................................3<br />

2 SICHERHEITSANALYSE: FAHRTENBUCH-SZENARIO ...................................................... 4<br />

2.1 ÜBERBLICK: FAHRTENBUCH- SZENARIO ................................................................................... 4<br />

2.2 INTERESSENGRUPPEN UND SCHUTZZIELE .................................................................................. 5<br />

2.2.1 Sicht des Fahrers ................................................................................................................. 6<br />

2.2.2 Sicht des Dienstbetreibers.................................................................................................... 8<br />

2.2.3 Sicht des Herstellers ............................................................................................................ 8<br />

2.2.4 Sicht des Finanzamts............................................................................................................9<br />

2.3 SICHERHEITSKONZEPTE FÜR ELEKTRONISCHE FAHRTENBÜCHER............................................. 10<br />

2.3.1 Sicherheitsanforderungen .................................................................................................. 10<br />

2.3.2 Datenerhebung im Fahrzeug ............................................................................................. 11<br />

2.3.3 Vertraulichkeit der Datenübertragung .............................................................................. 14<br />

3 ZUGRIFFSKONTROLLVERFAHREN UND AOP................................................................... 17<br />

3.1 ZUGRIFFSKONTROLLLÖSUNGEN FÜR DEN SCHUTZ VON FAHRTDATEN .................................... 17<br />

3.1.1 Zugriff auf den Fahrtenbuch-Server .................................................................................. 17<br />

3.1.2 Benutzerauthentifizierung .................................................................................................. 18<br />

3.1.3 <strong>Zugriffskontrolle</strong> durch das Dateisystem bzw. die Datenbank........................................... 18<br />

3.1.4 Rollenbasierte Zugriffskontrollverfahren........................................................................... 20<br />

3.1.5 Policy-basierte Zugriffskontrollverfahren.......................................................................... 22<br />

3.2 PROBLEME ÜBLICHER ZUGRIFFSKONTROLLVERFAHREN.......................................................... 25<br />

3.2.1 Fahrtenbücher und <strong>Zugriffskontrolle</strong>n............................................................................... 25<br />

3.2.2 Vermischung von Quellcode und <strong>Zugriffskontrolle</strong>............................................................ 25<br />

3.2.3 Abhängigkeit der Anwendung vom verwendeten Verfahren .............................................. 27<br />

3.3 ANWENDUNGSUNABHÄNGIGKEIT DURCH ASPEKTORIENTIERTE PROGRAMMIERUNG (AOP)... 29<br />

3.3.1 Motivation für AOP............................................................................................................ 29<br />

3.3.2 Aspekte............................................................................................................................... 29<br />

3.3.3 Dynamische und Statische Querverbindungen .................................................................. 30<br />

3.3.4 Die Software AspectJ TM ...................................................................................................... 30<br />

I


Inhaltsverzeichnis<br />

4 ENTWURF: POLICY-BASIERTE ZUGRIFFSKONTROLLE................................................ 33<br />

4.1 GRUNDLAGEN ......................................................................................................................... 33<br />

4.1.1 Die <strong>Entwurf</strong>ziele................................................................................................................. 33<br />

4.1.2 Die Einteilung der Sicherheitsfunktionen in Pakete........................................................... 35<br />

4.1.3 Das MIX-Datenmodell ....................................................................................................... 36<br />

4.2 DIE ARCHITEKTUR DES ZUGRIFFSKONTROLLSYSTEMS ............................................................ 37<br />

4.2.1 Der Sicherheitsproxy ......................................................................................................... 37<br />

4.2.2 Die Verwaltung der Zugriffsregeln .................................................................................... 39<br />

4.2.3 Die Benutzerschnittstelle für die Policy-Verwaltung ......................................................... 41<br />

4.3 DIE ZUGRIFFSVERWALTUNG.................................................................................................... 42<br />

4.3.1 Die Verwaltung der Policy-Dateien................................................................................... 43<br />

4.3.2 Die Benutzerverwaltung..................................................................................................... 44<br />

4.3.3 Die Objektverwaltung ........................................................................................................ 45<br />

4.3.4 Die Aktionsverwaltung....................................................................................................... 46<br />

4.4 DAS SEMANTISCHE DATENMODELL ZUR ZUGRIFFSVERWALTUNG ........................................... 47<br />

4.4.1 Ontologien für die Zugriffsverwaltung............................................................................... 48<br />

4.4.2 Ontologien für die Objektverwaltung................................................................................. 49<br />

4.4.3 Ontologien für die Aktionsverwaltung ............................................................................... 50<br />

5 IMPLEMENTIERUNG DER ZUGRIFFSKONTROLLE......................................................... 51<br />

5.1 ASPEKTORIENTIERTE ZUGRIFFSKONTROLLE............................................................................ 51<br />

5.1.1 Der anwendungsspezifische Autorisierungsaspekt ............................................................ 51<br />

5.1.2 Der anwendungsunabhängige Autorisierungsaspekt......................................................... 53<br />

5.2 IMPLEMENTIERUNG DER POLICY-BASIERTEN ZUGRIFFSKONTROLLE ....................................... 54<br />

5.2.1 Speicherung von Policy Dateien in der XML Datenbank eXist ......................................... 54<br />

5.2.2 Zugriff auf die Policies <strong>mittels</strong> XPath ................................................................................ 57<br />

5.2.3 Darstellung der Zugriffsregeln als MIX-Ontologien.......................................................... 59<br />

6 SCHNITTSTELLEN UND KONFIGURATIONEN................................................................... 63<br />

6.1 DAS APPLICATION PROGRAMMING INTERFACE ....................................................................... 63<br />

6.2 KONFIGURATION ..................................................................................................................... 66<br />

6.2.1 Die Zusammenstellung der Sicherheitslösung ................................................................... 66<br />

6.2.2 Die Konfiguration der Policy-basierten <strong>Zugriffskontrolle</strong>................................................. 67<br />

6.3 VERGLEICH UND BEURTEILUNG .............................................................................................. 71<br />

7 SCHLUSSBETRACHTUNGEN................................................................................................... 72<br />

7.1 FAZIT....................................................................................................................................... 72<br />

7.2 ZUSAMMENFASSUNG DER BEITRÄGE....................................................................................... 73<br />

7.3 AUSBLICK................................................................................................................................73<br />

LITERATURVERZEICHNIS...................................................................................................................I<br />

II


Abbildungsverzeichnis<br />

Abbildungsverzeichnis<br />

ABBILDUNG 1: FAHRTENBUCH-SZENARIO (EIGENE DARSTELLUNG) ............................................................ 4<br />

ABBILDUNG 2: MODELL FAHRTENBUCH SERVER (EIGENE ABBILDUNG) ...................................................... 5<br />

ABBILDUNG 3: SICHERHEITSANFORDERUNGEN VON FAHRTENBÜCHERN (EIGENE DARSTELLUNG) ............ 11<br />

ABBILDUNG 4: MÖGLICHE RISIKEN BEI DER DATENÜBERTRAGUNG (EIGENE DARSTELLUNG) ................... 15<br />

ABBILDUNG 5: NIST CORE RBAC REFERENZMODELL (VGL. [FSG01] S. 232).......................................... 20<br />

ABBILDUNG 6: BEISPIEL FÜR EINE XACML POLICY (VGL. [DBS02] S. 11) ............................................... 24<br />

ABBILDUNG 7: ANWENDUNGSPROGRAMM INKLUSIVE RECHTEPRÜFUNG ................................................... 25<br />

ABBILDUNG 8: BEISPIELANWENDUNG OHNE ZUGRIFFSFUNKTIONALITÄT................................................... 27<br />

ABBILDUNG 9: VERTEILUNG DER ZUGRIFFSKONTROLLFUNKTIONALITÄT (IN ANLEHNUNG AN [HHI02] S. 5)<br />

.......................................................................................................................................................... 27<br />

ABBILDUNG 10: SICHERHEITSPAKETE (EIGENE DARSTELLUNG)................................................................. 35<br />

ABBILDUNG 11: ARCHITEKTUR DER ZUGRIFFSKONTROLLE (EIGENE DARSTELLUNG) ................................ 36<br />

ABBILDUNG 12: AUTORISIERUNG VON FAHRTENBUCH-ZUGRIFFEN (VGL. [BHH01] S. 323)...................... 38<br />

ABBILDUNG 13 : DAS BUTTERFLY-MODELL (VGL. [NOR01] S. 6 F.).......................................................... 40<br />

ABBILDUNG 14: „POLICYSET“ FENSTER (EIGENE DARSTELLUNG) ............................................................. 41<br />

ABBILDUNG 15: „POLICY“ FENSTER (EIGENE DARSTELLUNG) ................................................................... 42<br />

ABBILDUNG 16: SEQUENZDIAGRAMM „ZUGRIFFSKONTROLLPRÜFUNG“ (EIGENE DARSTELLUNG) ............. 43<br />

ABBILDUNG 17: SICHERHEITSSTATUS ........................................................................................................ 45<br />

ABBILDUNG 18: „ERZEUGUNG EINES NEUEN OBJEKTES“ (EIGENE DARSTELLUNG) .................................... 45<br />

ABBILDUNG 19: KLASSENDIAGRAMM AKTIONSVERWALTUNG (EIGENE DARSTELLUNG) ........................... 47<br />

ABBILDUNG 20: „POLICYSET“ DARGESTELLT ALS KLASSENDIAGRAMM (EIGENE DARSTELLUNG)............. 48<br />

ABBILDUNG 21: „POLICYSET“ DARGESTELLT ALS MIX-ONTOLOGIE (EIGENE DARSTELLUNG).................. 48<br />

ABBILDUNG 22: BEISPIELPOLICY IM MIX-FORMAT (EIGENE DARSTELLUNG) ........................................... 49<br />

ABBILDUNG 23: KLASSENDIAGRAMM: „GESCHÜTZTE KLASSE“ (EIGENE DARSTELLUNG).......................... 50<br />

ABBILDUNG 24: DIE ONTOLOGIE „GESCHÜTZTE AKTIONEN“ (EIGENE ABBILDUNG) .................................. 50<br />

ABBILDUNG 25: DER FAHRTENBUCH SPEZIFISCHE AUTORISIERUNGS ASPEKT ........................................... 51<br />

ABBILDUNG 26: DIE METHODE “GETUSERID” (EIGENE ABBILDUNG)......................................................... 52<br />

ABBILDUNG 27: POINTCUT: „AUTHORIZATIONOPERATIONS“ (EIGENE DARSTELLUNG) ............................. 53<br />

ABBILDUNG 28: POINTCUT „INITIALIZATION“ (EIGENE DARSTELLUNG)..................................................... 54<br />

ABBILDUNG 29: POINTCUT „SECUREDOBJECTCONSTRUCTORS“ (EIGENE DARSTELLUNG)......................... 54<br />

ABBILDUNG 30: ARCHITEKTUR VON EXIST (VGL. [MEI03] ABSCHNITT „FEATURES“) ............................... 55<br />

ABBILDUNG 31: BEISPIEL FÜR EIN POLICYSET ........................................................................................... 56<br />

ABBILDUNG 32: FUNKTION „QUERYASRESOURCESET“ ............................................................................. 58<br />

ABBILDUNG 33: BEISPIELE FÜR SUCHANFRAGEN ....................................................................................... 58<br />

ABBILDUNG 34: ONTOLOGIE „POLICYSET“................................................................................................ 59<br />

ABBILDUNG 35: FABRIK-METHODE „CREATEPOLICYSET()“ ...................................................................... 60<br />

III


Abbildungsverzeichnis<br />

ABBILDUNG 36: ONTOLOGIE POLICY.......................................................................................................... 60<br />

ABBILDUNG 37: BEISPIEL-POLICY AUS EINEM XML POLICYSET................................................................ 61<br />

ABBILDUNG 38: ONTOLOGIE SECUREDOBJECTTYPE.................................................................................. 62<br />

ABBILDUNG 39: ONTOLOGIE SECUREACTION ............................................................................................ 62<br />

ABBILDUNG 40: KLASSENDIAGRAMM „SECURITY FACADE“ ...................................................................... 63<br />

ABBILDUNG 41: METHODE „VIEWPOLICYSET“ DER KLASSE „SECURITY FACADE“.................................... 64<br />

ABBILDUNG 42: KLASSENDIGRAMM „SECURITY PORTAL“......................................................................... 65<br />

ABBILDUNG 43: KONFIGURATIONSDATEI „SECURITY.XML“....................................................................... 67<br />

ABBILDUNG 44: KONFIGURATIONSDATEI „POLICYCONFIGURATION.XML“ ................................................ 68<br />

ABBILDUNG 45: KONFIGURATIONSDATEI „OBJECTCONFIGURATION.XML“................................................ 69<br />

ABBILDUNG 46: BEISPIEL FÜR EINE DTD ZUR ÜBERPRÜFUNG DER VALIDITÄT DER KONFIGURATION....... 70<br />

ABBILDUNG 47: KONFIGURATIONSDATEI „ACTIONCONFIGURATION.XML“................................................ 70<br />

ABBILDUNG 48: FUNKTION „ISACTION“..................................................................................................... 71<br />

IV


Tabellenverzeichnis<br />

Tabellenverzeichnis<br />

TABELLE 1: PERSONENBEZOGENE DATEN IN EINEM FAHRTENBUCH ............................................................ 6<br />

TABELLE 2: GEFAHREN FÜR FAHRTDATEN ................................................................................................... 7<br />

TABELLE 3: SCHUTZANFORDERUNGEN DES DIENSTBETREIBERS .................................................................. 8<br />

TABELLE 4: ANFORDERUNGEN AN FAHRTENBÜCHER SEITENS DES FINANZAMTS ....................................... 10<br />

TABELLE 5: MÖGLICHKEITEN ZUR EINDEUTIGEN IDENTIFIKATION VON FAHRZEUGEN............................... 12<br />

TABELLE 6: AUTHENTIFIZIERUNG DES FAHRERS ........................................................................................ 13<br />

TABELLE 7: ELEMENTE DES CORE RBAC REFERENZMODELLS .................................................................. 21<br />

TABELLE 8: ENTWURFSZIELE DIESER ARBEIT............................................................................................. 34<br />

TABELLE 9: PAKETE FÜR EINE SICHERHEITSARCHITEKTUR FÜR EINEN FAHRTENBUCH-DIENST ................. 35<br />

V


Abkürzungsverzeichnis<br />

Abkürzungsverzeichnis<br />

Abs.<br />

Absatz<br />

AOP Aspektorientierte Programmierung (engl. aspect oriented<br />

programming)<br />

API<br />

bzw.<br />

DAC<br />

DTD<br />

EHU<br />

engl.<br />

etc.<br />

Application Programming Interface<br />

Beziehungsweise<br />

Discretionary Access Control<br />

Document Type Definition<br />

Entertainment Head Unit<br />

englisch<br />

et cetera<br />

f. folgende<br />

ff.<br />

GM<br />

GmbH<br />

GPS<br />

GUI<br />

fortfolgende<br />

General Motors<br />

Gesellschaft mit beschränkter Haftung<br />

Global Positioning System<br />

Graphical User Interface<br />

i. S. im Sinne<br />

ITO<br />

JAAS<br />

MAC<br />

MIX<br />

IT Transfer Office<br />

Java Authentication and Authorization Service<br />

Mandatory Access Control<br />

Metadata based Integration model for data X-change<br />

VI


Abkürzungsverzeichnis<br />

NIST<br />

Nr.<br />

o.J.<br />

PDA<br />

RBAC<br />

National Institute for Standards and Technology<br />

Nummer<br />

ohne Jahr<br />

Personal Digital Assistent<br />

Role Based Access Control<br />

S. Seite<br />

SSL<br />

StGB<br />

TDDSG<br />

TDSV<br />

v.a.<br />

vgl.<br />

XML<br />

XSL<br />

z.B.<br />

Secure Socket Layer<br />

Strafgesetzbuch<br />

Teledienste Datenschutz Gesetz<br />

Telekommunikationsdienste-Datenschutz-Verordnung<br />

vor allem<br />

Vergleiche<br />

Extensible Markup Language<br />

Extensible Style Language<br />

zum Beispiel<br />

VII


Einleitung<br />

1 Einleitung<br />

Diese Diplomarbeit wurde im Rahmen <strong>einer</strong> Kooperation zwischen der GM Europe<br />

GmbH und dem Forschungsinstitut IT Transfer Office (ITO) (vgl. [ITOoJ]) zum<br />

Themenbereich „Telematikdienstleistungen und –infrastrukturen“ erstellt.<br />

Im Folgenden wird der Themenbereich kurz vorgestellt und das Ziel der vorliegenden<br />

Arbeit wird beschrieben. Anschließend folgt ein Überblick über die Arbeit.<br />

1.1 Hintergrund und Motivation<br />

Der Siegeszug der Informations- und Kommunikationstechnologien hat auch vor<br />

heutigen Automobilen nicht Halt gemacht. Heute können Telematik-Anwendungen<br />

Fahrer bei der Routenführung unterstützen und mit aktuellen Verkehrsinformationen<br />

versorgen. Ermöglicht werden diese „location based services“ durch eine Kombination<br />

von Informationstechnologien, Telekommunikation und GPS-Positionsermittlung.<br />

Weitere Anwendungsbeispiele sind ein automatischer Notruf, das Tracking von<br />

gestohlenen Fahrzeugen und elektronische Fahrtenbücher, deren Ziel es ist, die<br />

Funktionalität des Fahrzeuges zu verbessern und Kosten für den Fahrer zu senken.<br />

Diese Telematik-Dienste können im Auto <strong>mittels</strong> <strong>einer</strong> „Entertainment Head Unit“<br />

(EHU) genutzt werden. Die EHU ist eine Unterhaltungselektronik, bestehend aus einem<br />

Display, einem integrierten Mobiltelefon, Autoradio, CD Laufwerk und Internet-<br />

Zugang. Alternativ kann auch ein im Fahrzeug integrierter PDA genutzt werden, um<br />

Daten vom Mobilitätsportal abzurufen (siehe z.B. OnStar Car@Web [OhmoJ]). Auf<br />

dem Mobilitätsportal (vgl. z.B. das OnStar Mobility Portal [OnSoJ]) kann der Fahrer<br />

auf seinen Kalender zugreifen oder seine persönlichen Einstellungen für die<br />

Übertragung von Verkehrs- und Städteinformationen und weiteren Diensten ändern.<br />

Ergänzt werden diese personenbezogenen Mobilitätsdienste in Zukunft um<br />

fahrzeugbezogene Dienste (vgl. [CHB02]). Diese speichern Informationen über das<br />

Fahrzeug, wie zum Beispiel Statistiken zum Benzinverbrauch, die Termine für die<br />

nächsten Inspektionen oder auch ein Fahrtenbuch. Ein elektronisches Fahrtenbuch<br />

speichert analog zu einem Fahrtenbuch in Papierform alle privaten und geschäftlichen<br />

Fahrten, damit der Fahrer beim Finanzamt die pauschal abgerechneten Fahrten<br />

nachweisen kann, um die Kosten abzusetzen.<br />

1


Einleitung<br />

1.2 Problemstellung<br />

Diese Diplomarbeit soll sich mit dem Themenkomplex der Sicherheit verteilter Dienste<br />

in Fahrzeugen anhand des Beispiels eines Fahrtenbuchs auseinander setzen und eine<br />

<strong>Zugriffskontrolle</strong> für einen Fahrtenbuch-Dienst entwickeln. Dabei sollen folgende<br />

Aspekte untersucht werden:<br />

• Aspekt „Vertraulichkeit“<br />

Hier ist die Frage zu beantworten, ob nur diejenigen Personen die Daten<br />

bekommen, die dazu autorisiert sind.<br />

• Aspekt „Authentizität“<br />

Der Aspekt „Authentizität“ untersucht, ob die Daten tatsächlich von dem<br />

angegebenen Wagen bzw. Fahrer stammen. Da mehrere Fahrer gemeinsam einen<br />

Wagen nutzen können (z.B. bei <strong>einer</strong> Car-Sharing Gesellschaft) muss sowohl<br />

das Fahrzeug als auch der Fahrer eindeutig identifiziert werden.<br />

• Aspekt „Integrität“<br />

Hier soll erörtert werden, mit welchen Verfahren man sicherstellen kann, ob der<br />

Inhalt der Daten nicht verfälscht worden ist.<br />

Da das Fahrtenbuch unabhängig von der Zugriffskontrolllösung entwickelt wurde,<br />

müssen Mechanismen gefunden werden, die eine Anpassung der Sicherheitslösung an<br />

das Fahrtenbuch, ohne Änderungen am Programmcode des Fahrtenbuches ermöglichen.<br />

Die <strong>Zugriffskontrolle</strong> soll außerdem auch von anderen Diensten eingesetzt werden<br />

können. Es wird gezeigt, dass eine solche „anwendungsunabhängige <strong>Zugriffskontrolle</strong>“<br />

mit Hilfe aspektorientierter Programmierung (AOP) realisiert werden kann.<br />

Anhand des Fahrtenbuch-Szenarios wird erörtert, welche Arten von Schnittstellen und<br />

Konfigurationsmöglichkeiten geeignet sind, um anwendungsspezifische Besonderheiten<br />

einfach zu unterstützen. Die in <strong>einer</strong> weiteren Diplomarbeit erstellte gruppenbasierte<br />

Fahrtenbuch-Anwendung (vgl. [Kor03]) wird dabei als Beispielanwendung zur<br />

Darstellung von Sicherheitsrisiken und Einsatz <strong>einer</strong> Sicherheitslösung herangezogen.<br />

2


Einleitung<br />

1.3 Überblick<br />

Diese Arbeit setzt sich aus <strong>einer</strong> Einleitung und sechs weiteren Kapiteln zusammen:<br />

In Kapitel 2 wird ein Sicherheitskonzept für ein Fahrtenbuch erstellt. Dieses umfasst<br />

neben der Autorisierung von Benutzerzugriffen auch Empfehlungen für die authentische<br />

Datenerhebung, die sichere Datenübertragung sowie den ordnungsgemäßen Betrieb des<br />

Fahrtenbuch-Servers.<br />

Kapitel 3 beschreibt, welche Zugriffskontrollverfahren in Fahrtenbüchern eingesetzt<br />

werden, und diskutiert alternative Zugriffskontrollverfahren. Außerdem wird erklärt,<br />

warum die Verwendung eines Application Programming Interfaces, wie es die meisten<br />

derartiger Verfahren einsetzen, nicht geeignet ist, um eine anwendungsunabhängige<br />

Sicherheitslösung zu realisieren. Stattdessen wird gezeigt, wie mit Hilfe von<br />

aspektorientierter Programmierung eine <strong>Zugriffskontrolle</strong> entwickelt werden kann, die<br />

in Verbindung mit beliebigen Anwendungen genutzt werden kann, ohne Anpassungen<br />

am Programmcode der Anwendung vornehmen zu müssen.<br />

Kapitel 4 beschreibt die Architektur der Sicherheitslösung und den <strong>Entwurf</strong> eines<br />

policy-basierten Zugriffskontroll-Dienstes.<br />

In Kapitel 5 wird der Prototyp der <strong>Zugriffskontrolle</strong> erläutert, der mit Hilfe von AspectJ<br />

und der XML-Datenbank eXist implementiert wurde.<br />

Kapitel 6 widmet sich der Konfigurierung der <strong>Zugriffskontrolle</strong>. Hier wird am Beispiel<br />

<strong>einer</strong> Fahrtenbuch-Anwendung gezeigt, wie die Sicherheitslösung <strong>mittels</strong> XML-<br />

Konfigurationsdateien an anwendungsspezifische Besonderheiten angepasst werden<br />

kann.<br />

3


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

2 Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

In diesem Kapitel sollen fahrtenbuchspezifische Sicherheitsaspekte wie<br />

„Vertraulichkeit“, „Authentizität“ und „Integrität“ untersucht werden.<br />

2.1 Überblick: Fahrtenbuch- Szenario<br />

Ein Fahrtenbuch hat den Zweck, alle Fahrten, die mit einem Fahrzeug durchgeführt<br />

werden, ordnungsgemäß aufzuzeichnen, um anstelle eines Pauschalbetrags die<br />

tatsächlich gefahrenen Kilometer steuerlich geltend machen zu können. Dazu muss in<br />

den Aufzeichnungen eindeutig zwischen privaten Fahrten, Fahrten zur Arbeit und<br />

geschäftlichen Fahrten unterschieden werden. Fahrtenbücher werden aber nicht nur für<br />

die Vorlage beim Finanzamt geführt. Eine Firma kann ein Fahrtenbuch auch<br />

verwenden, um sich einen Überblick über den Einsatz ihrer Firmenwagen zu<br />

verschaffen. Und manchmal kommt es vor, dass notorische Verkehrsünder zur Führung<br />

eines Fahrtenbuchs verkehrsgerichtlich verurteilt werden.<br />

Fahrtenbücher gibt es heutzutage nicht mehr nur in Papierform, sondern auch als<br />

elektronischer Dienst im Fahrzeug. Abbildung 1 zeigt die Infrastruktur, von der in<br />

diesem Szenario ausgegangen wird.<br />

Abbildung 1: Fahrtenbuch-Szenario (eigene Darstellung)<br />

Im Fahrzeug gibt es ein Fahrzeugendgerät, das die Fahrtdaten sammelt und sie dem<br />

Fahrer anzeigen kann. Um die Fahrtdaten vom Fahrzeug zum Server des<br />

Dienstbetreibers zu übermitteln, wird ein Gateway benötigt, der die Daten über<br />

Mobilfunk empfängt und sie über das Internet weiterleitet. Die Fahrtdaten werden auf<br />

dem Server des Dienstbetreibers gespeichert, so dass auch andere autorisierte Personen<br />

Zugriff auf die aktuellen Daten erhalten können und die Daten vor Verlust geschützt<br />

sind. Zudem soll es möglich sein, auch externe Daten Dritter in das Szenario<br />

4


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

einzubinden, um z.B. dem Fahrer seine Kalendereinträge als Zielortauswahl zur<br />

Verfügung zu stellen oder um Fahrtenbuch-Einträge in anderen Anwendungen zu<br />

verwenden.<br />

Das folgende Modell zeigt den Aufbau eines exemplarischen Fahrtenbuch Servers,<br />

bestehend aus den Teilen Fahrtenbuch-Verwaltung inklusive <strong>einer</strong> Personalisierungs-<br />

Komponente und <strong>einer</strong> Kundenverwaltung. Mit Hilfe der Personalisierungskomponente<br />

lassen sich z.B. Aliase für Zielorte definieren. Die Kundenverwaltung sorgt für die<br />

Verwaltung der Benutzer inklusive der notwendigen Sicherheitsfunktionen.<br />

Abbildung 2: Modell Fahrtenbuch Server (eigene Abbildung)<br />

2.2 Interessengruppen und Schutzziele<br />

Ein Sicherheitskonzept für verteilte Dienste, wie das beschriebene Fahrtenbuch, muss<br />

die speziellen Schutzanforderungen der beteiligten Personengruppen berücksichtigen.<br />

Am Beispiel der Fahrtenbuch-Anwendung sollen einige Schutzziele erläutert werden,<br />

die aus Sicht des Anbieters, der Benutzer (z.B. Fahrer) und Dritter (z.B. Finanzamt oder<br />

Werkstätten) zu berücksichtigen sind. Andere Telematik-Anwendungen können<br />

hingegen andere Schutzanforderungen aufweisen.<br />

5


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

2.2.1 Sicht des Fahrers<br />

Personen, die ein Fahrtenbuch führen (im Folgenden nur noch Fahrer genannt) sind zum<br />

Beispiel Mitarbeiter, die einen Firmenwagen haben, Fahrer in <strong>einer</strong> Fahrzeugflotte oder<br />

auch Privatpersonen. Diese Fahrer sind primär am Schutz ihrer persönlichen Fahrtdaten<br />

vor dem unbefugten Zugriff durch Dritte interessiert. Das deutsche Datenschutzgesetz<br />

verbietet daher den Dienstbetreibern die unbefugte Speicherung und Nutzung<br />

personenbezogener Daten (vgl. [Hob98] S. 50 f. und [Koc98] S. 358 f.). Die folgende<br />

Tabelle erläutert mögliche personenbezogene Daten in einem Fahrtenbuch:<br />

Daten<br />

Inhaltsdaten<br />

Nutzungsdaten<br />

Fahrtenbuch spezifische Bedeutung<br />

Zu den übertragenen Inhaltsdaten gehören vor allem die<br />

Fahrtdaten, wie z.B. Abfahrts- und Zielort. Diese Daten sind<br />

schützenswert, da sie zu Lasten des Fahrers verwendet werden<br />

könnten.<br />

Möchte ein Fahrer den Fahrtenbuchdienst nutzen, dann benötigt<br />

der Fahrtenbuchdienstbetreiber von ihm Informationen über seine<br />

Person, wie Fahrername, Fahrzeugidentifikation,<br />

Nutzungszeitraum. Nach § 6 Abs. 2 TDDSG sind Nutzungsdaten<br />

sofort nach Beendigung der Nutzung des Teledienstes zu löschen.<br />

Abrechnungsdaten Werden Verbindungsdaten für Abrechnungszwecke verwendet,<br />

dann handelt es sich gemäß § 6 Abs. 1 TDSV bzw. Nach § 6 Abs.<br />

1 TDDSG um Abrechnungsdaten. Diese Daten dürfen nicht länger<br />

gespeichert werden, als es für die Abrechnung erforderlich ist.<br />

Bestandsdaten<br />

Um den Fahrtenbuchdienst nutzen zu können, geht der Fahrer mit<br />

dem Betreiber einen Vertrag ein. Dazu werden Vertragsdaten<br />

(siehe § 4 Abs. 1 Satz 1 TDSV) für die Vertragserstellung benötigt.<br />

Üblicherweise werden Vertragsdaten dauerhaft gespeichert und<br />

bereitgehalten. Beispiele für Vertragsdaten sind der Fahrername<br />

oder die IMSI der SIM-Karte.<br />

Tabelle 1: Personenbezogene Daten in einem Fahrtenbuch<br />

6


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

Der Schutz durch das Datenschutzgesetz ist vor allem wichtig, da verschiedene<br />

Personen in Kontakt mit den Fahrtdaten kommen, und da die Daten über das<br />

Mobilfunknetz und das Internet übertragen werden müssen. Die folgende Auflistung<br />

über Gefahren für personenbezogene Fahrtdaten soll dies verdeutlichen.<br />

Gefahr<br />

Erstellung von<br />

Bewegungsprofilen<br />

Erläuterung<br />

Ein elektronisches Fahrtenbuch soll den Fahrer primär entlasten.<br />

Um die Position des Autos zu bestimmen, wird in der Regel GPS<br />

in Verbindung mit Dead Reckoning (vgl. [NEV01]) eingesetzt.<br />

Ein datenschutzrechtliches Problem hierbei ist die Möglichkeit des<br />

„Tracking’s“ der Fahrt.<br />

Diese Daten könnten für Bewegungsprofile missbraucht werden,<br />

die Rückschlüsse auf berufliche Aktivitäten und private Interessen<br />

des Fahrers geben. Abhilfe bieten hier Verschlüsselungstechniken<br />

und eine Zugriffskontrollfunktion.<br />

Missbrauch von<br />

Fahrtdaten<br />

Manipulation von<br />

Fahrtdaten<br />

Der Fahrer geht davon aus, dass die Übertragung und Speicherung<br />

der Fahrtdaten vertraulich ist. Das Recht auf informationelle<br />

Selbstbestimmung und das Fernmeldegeheimnis schützt ihn aber<br />

nur vor Eingriffen durch den Staat. Das Ausspähen von<br />

elektronischen Nachrichten durch Privatpersonen ist dagegen nur<br />

strafbar (§ 202a StGB), wenn die elektronische Übermittlung<br />

gegen unberechtigten Zugriff gesichert ist (vgl. [Hob98] S. 156 ff.<br />

und [Jae98] S. 168 ff.).<br />

Personenbezogene Daten können manipuliert werden, um dem<br />

Betroffenen zu schaden. Zum Beispiel könnte jemand versuchen,<br />

Fahrtdaten im Auto oder auf der Webseite zu löschen oder zu<br />

verändern. Aber auch der Fahrer selbst könnte versuchen,<br />

Fahrtdaten zu manipulieren oder zusätzliche einzugeben.<br />

Tabelle 2: Gefahren für Fahrtdaten<br />

7


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

2.2.2 Sicht des Dienstbetreibers<br />

Unter Dienstbetreiber wird hier eine Firma verstanden, die einen Teledienst (das<br />

elektronische Fahrtenbuch) auf einem Server anbietet. Auch der Dienstbetreiber stellt<br />

Schutzanforderungen an die Führung eines elektronischen Fahrtenbuchs.<br />

Gefahr<br />

Schutz vor<br />

unbefugtem<br />

Zugriff<br />

Hohe<br />

Verfügbarkeit<br />

Sicherung<br />

Daten<br />

der<br />

Erläuterung<br />

Der Zugriff auf Fahrtdaten darf nur nach erfolgreicher<br />

Authentifikation des Nutzers erfolgen.<br />

Da die Fahrtdaten mehrerer Fahrer und Fahrzeuge in <strong>einer</strong><br />

Datenbank gespeichert werden, muss sichergestellt sein, dass nur<br />

auf die eigenen Daten zugegriffen werden darf. Ferner sollte der<br />

Nutzer festlegen können, wer auf seine Daten Zugriff erhält und<br />

diese Zugriffsberechtigungen auch wieder entziehen können. Es<br />

sind geeignete Benutzerrollen oder Zugriffsrechte zu definieren.<br />

Die Leistung des Fahrtenbuch-Servers muss <strong>einer</strong> mittleren bis<br />

hohen Anzahl konkurrierend zugreifender Nutzer gerecht werden.<br />

Der Zugriff beschränkt sich im Wesentlichen auf Abgleichung der<br />

Fahrtdaten zwischen Fahrzeug und Server. Es muss jedoch damit<br />

gerechnet werden, dass zu bestimmten Jahreszeiten eine erhöhte<br />

Zugriffsrate aufgrund der betrieblichen und steuerlichen<br />

Abrechnungszeiträume entstehen kann.<br />

Zu sichern sind nicht nur die Fahrtbuchdaten, sondern auch die<br />

Konfigurationsdaten, da diese wichtige Informationen, wie z.B.<br />

Alias-Namen für Orte, enthalten. Ziel der Datensicherung ist es sie<br />

gegen Unauffindbarkeit und Vernichtung zu sichern.<br />

Tabelle 3: Schutzanforderungen des Dienstbetreibers<br />

2.2.3 Sicht des Herstellers<br />

Fahrzeughersteller und Hersteller von Fahrzeugendgeräten müssen dafür sorgen, dass<br />

die Geräte im Fahrzeug jederzeit verfügbar sind. Ein Ausfall eines Gerätes würde die<br />

zeitnahe Aufzeichnung von Fahrten verhindern. Ein weiteres Problem ist der begrenzte<br />

8


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

Speicher von Fahrzeugendgeräten, wodurch nur eine begrenzte Anzahl von Fahrten<br />

aufgezeichnet werden kann.<br />

Um die aufgezeichneten Fahrtdaten weiterzuverwerten, werden sie <strong>mittels</strong> eines<br />

integrierten GSM-Telefons (in Zukunft UMTS) zu einem Fahrzeugportal übertragen.<br />

Dabei ist die Vertraulichkeit der Übertragung ein Problem. Alternativ könnte man die<br />

Fahrtdaten im Auto an einen PDA über RS232 oder Bluetooth übertragen.<br />

Der Fahrzeughersteller benötigt zudem Fahrtdaten in aggregierter Form, um<br />

Rückschlüsse auf Verwendung, aufgetretene Probleme etc. zu erhalten.<br />

2.2.4 Sicht des Finanzamts<br />

Ein elektronisches Fahrtenbuch wird vom Finanzamt anerkannt, wenn sich daraus<br />

dieselben Erkenntnisse wie aus einem manuell geführten Fahrtenbuch gewinnen lassen.<br />

Das Finanzamt will daher Zugriff auf die „Originaldaten“ erhalten. Von „Originaldaten“<br />

zu sprechen, ist jedoch problematisch, da technisch gesehen, die Originaldaten im<br />

Fahrzeug gespeichert sind. Gemeint sind hiermit aber, die Daten, deren Echtheit vom<br />

Dienstbetreiber z.B. durch Verwendung von Signaturen gewährleistet werden kann. Die<br />

Speicherung der Daten in originären digitalen Dokumenten muss gewährleisten, dass<br />

eine nachträgliche Bearbeitung nicht möglich ist und dass die Dokumente in<br />

angemessener Form archiviert werden (vgl. [BfF95]).<br />

Die ordnungsgemäße Führung eines Fahrtenbuchs entspricht den Anforderungen, wie<br />

sie an elektronische Aufzeichnungen in anderen Bereichen verlangt werden, wie bei der<br />

Führung eines elektronischen Fristenbuches und bei den Grundsätzen ordnungsmäßiger<br />

Buchführung. Die Fahrten eines Firmenwagens müssen sich in ihrer Entstehung und<br />

Abwicklung nachvollziehen lassen.<br />

Aus Sicht des Finanzamts ergeben sich die folgenden Anforderungen an ein<br />

elektronisches Fahrtenbuch:<br />

9


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

Anforderung<br />

Erfassung aller<br />

Fahrten<br />

Nachvollziehbare<br />

Veränderungen<br />

Chronologisch<br />

und zeitnah<br />

Erläuterung<br />

Ein elektronisches Fahrtenbuch hat alle Fahrten, die mit einem<br />

Fahrzeug durchgeführt werden, aufzuzeichnen. Ein Fahrtenbuch,<br />

das z.B. nicht den Zweck <strong>einer</strong> geschäftlichen Reiseroute aufführt,<br />

kann vom Finanzamt abgelehnt werden (vgl. [OatoJ]).<br />

Ein elektronisches Fahrtenbuch ist nur dann ordnungsgemäß<br />

geführt i. S. des § 6 Abs. 1 Nr. 4 Satz 2 EStG, wenn nachträgliche<br />

Veränderungen der Aufzeichnungen technisch ausgeschlossen,<br />

zumindest aber dokumentiert werden. Durch die Möglichkeit <strong>einer</strong><br />

(nicht überprüfbaren) nachträglichen Änderung hätte es der<br />

Steuerpflichtige nämlich in der Hand, das Jahresergebnis s<strong>einer</strong><br />

PC-Eingaben — anders als bei einem z. B. handschriftlich<br />

geführten Fahrtenbuch — nachträglich spurlos zu ändern, um so<br />

ein für ihn „besseres Ergebnis“ zu erhalten.<br />

Das Fahrtenbuch muss fortlaufend und zeitnah geführt werden,<br />

damit es als ordnungsgemäß gelten kann. Der Zeitpunkt der<br />

Eintragung sollte erkennbar sein. Außerdem sollten die Fahrten<br />

chronologisch erfasst und aufgeführt werden (vgl. [DaB99]).<br />

Tabelle 4: Anforderungen an Fahrtenbücher seitens des Finanzamts<br />

2.3 Sicherheitskonzepte für elektronische Fahrtenbücher<br />

2.3.1 Sicherheitsanforderungen<br />

Aus den diskutierten Schutzzielen ergeben sich konkrete Sicherheitsanforderungen. Der<br />

Dienstbetreiber und die Hersteller müssen dafür sorgen, dass das Fahrtenbuch jederzeit<br />

verfügbar ist. Für die Fahrer ist nur eine Lösung geeignet, die ihnen eine vertrauliche<br />

Verwendung der Daten erlaubt, und für das Finanzamt ist es wichtig, das die<br />

Fahrtenbücher authentisch und unverfälscht sind.<br />

10


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

Abbildung 3: Sicherheitsanforderungen von Fahrtenbüchern (eigene Darstellung)<br />

Die Sicherheitsanforderungen addieren sich, so dass eine einfache Sicherheitslösung<br />

nicht ausreichen kann. Vielmehr bedarf es dem Zusammenspiel mehrerer Lösungen,<br />

wie Verschlüsselungs-, Signatur- und Zugriffskontrollverfahren.<br />

Im Folgenden werden primär Sicherheitslösungen für den Schutz der Daten im<br />

Fahrzeug und auf dem Server erörtert. Es wird speziell der Punkt<br />

Zugriffskontrollverfahren betrachtet. Zuvor wird jedoch erörtert, welche<br />

Sicherheitsrisiken bei der Datenerhebung im Fahrzeug sowie bei der Datenübertragung<br />

zum Server es gibt und welche Sicherheitslösungen sich anbieten.<br />

2.3.2 Datenerhebung im Fahrzeug<br />

Zur ordnungsgemäßen Fahrtenbuchführung sind Informationen über den Fahrer, die<br />

gefahrene Strecke und das Fahrzeug notwendig. Die Frage ist nun, wie man<br />

authentische Daten über das Fahrzeug, die Fahrtdaten und den Fahrer erhält, die nicht<br />

vom Fahrer oder Dritten manipuliert werden können.<br />

2.3.2.1 Eindeutige Identifikation des Fahrzeugs<br />

Eine dieser Fragen lautet: „Wie kann man das Fahrzeug eindeutig identifizieren?“<br />

Hierzu können folgende „Identifikationen“ verwendet werden:<br />

11


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

Möglichkeit<br />

Fahrzeugspezifische<br />

Identifikationen<br />

Eingravierte<br />

Seriennummer<br />

Elektronische<br />

Seriennummer<br />

Digitale Signaturen<br />

(vgl. [GoM02])<br />

Erläuterung<br />

Fahrzeugspezifische Merkmale wie Kennzeichen, Marke, Modell<br />

oder Farbe können zur Identifikation eines Fahrzeugs verwendet<br />

werden. Für die elektronische Identifikation reichen diese jedoch<br />

nicht aus, da sie entweder nicht eindeutig sind (z.B. Marke,<br />

Modell, Farbe) oder da sie einfach zu fälschen sind (z.B.<br />

Kennzeichen).<br />

Auch die eingravierte Seriennummer (engl. vehicle identification<br />

number (VIN)) ist für Identifikation eines Fahrzeugs <strong>einer</strong> Flotte<br />

untauglich, da sie nicht über große Entfernungen hinweg<br />

abgefragt werden kann (Problem der Ortsgebundenheit). Zudem<br />

könnte die Nummer bei der Übertragung verfälscht werden.<br />

Die Seriennummer kann auch elektronisch bei Herstellung des<br />

Fahrzeugs gespeichert werden, z.B. im Bordcomputer. Diese<br />

elektronische Nummer kann für elektronische Dienste zur<br />

eindeutigen Identifizierung des Fahrzeugs genutzt werden.<br />

Eine weitere Möglichkeit zur Identifizierung von<br />

Kraftfahrzeugen über drahtlose Netze in Kombination mit <strong>einer</strong><br />

GPS-Positionsermittlung sind digitale Signaturen. Jedes<br />

Fahrzeug erhält ein Schlüsselpaar, das zum Signieren und<br />

Verschlüsseln von Daten verwendet werden kann.<br />

Tabelle 5: Möglichkeiten zur eindeutigen Identifikation von Fahrzeugen<br />

Digitale Signaturen haben den Vorteil, dass sie auch für andere Anwendungen (wie z.B.<br />

für die Lokalisierung eines Fahrzeuges) genutzt werden könnten (vgl. [GoM02]).<br />

12


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

2.3.2.2 Authentifizierung des Fahrers<br />

Authentifizierung beweist, dass man tatsächlich die Person ist, die man vorgibt zu sein<br />

(vgl. [BHH01] S. 147). Folgende Verfahren ermöglichen eine Authentifizierung des<br />

Fahrers:<br />

Verfahren<br />

Manuelle Auswahl<br />

des Fahrernamens<br />

auf PDA<br />

Identifikation<br />

<strong>mittels</strong> Transponder<br />

Identifikation<br />

<strong>mittels</strong> Chipkarte<br />

Identifikation<br />

<strong>mittels</strong> SIM-Karte<br />

Identifikation<br />

<strong>mittels</strong><br />

Fingerabdruck<br />

Erläuterung<br />

Eine einfache Lösung ist, dass der Fahrer seine Namen auswählt<br />

und hierzu einen Vorschlagswert erhält. Kombiniert werden kann<br />

dies mit <strong>einer</strong> PDA gestützten Lösung (vgl. [IfT02a] und<br />

[IfT02b]). Für eine Authentifikation des Fahrers ist aber auch die<br />

Eingabe eines Passworts notwendig.<br />

Eine andere sehr günstige Lösung ist der Einsatz von<br />

Transpondern ([vgl. Mag01]), wobei diese keine echte<br />

Authentifikation ermöglicht, da die Transponderdaten dupliziert<br />

werden könnten.<br />

Mehr Sicherheit verspricht der Einsatz von Chip-Karten (vgl.<br />

[IbNoJ]). Sinnvoll ist eine solche Lösung wegen der damit<br />

verbundenen höheren Kosten aber nur bei Flotten oder Car<br />

Sharing Gesellschaften. Zudem könnten Fahrtdaten direkt auf der<br />

Chipkarte sicher gespeichert werden.<br />

Kostengünstiger als Chipkarten ist der Einsatz von Twin SIM-<br />

Karten (vgl. [SysoJ]). Diese Lösung bietet sich an, wenn die<br />

Fahrer mit ihrer Twin SIM-Karte im Auto auch telefonieren oder<br />

andere Telematik-Dienste übers Internet nutzen möchten.<br />

Eine weitere Alternative wäre die Authentifikation <strong>mittels</strong><br />

biometrischer Verfahren. Der Bordcomputer speichert dazu den<br />

Fingerabdruck des Daumens oder Zeigefingers. Um sich zu<br />

authentifizieren, muss sich der Fahrer mit diesem Finger auf dem<br />

Sensor identifizieren (vgl. [Non00]). Solche Lösungen haben sich<br />

bisher aber nicht durchsetzen können.<br />

Tabelle 6: Authentifizierung des Fahrers<br />

13


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

2.3.2.3 Fahrtdaten Ermittlung<br />

Nicht nur das Fahrzeug und der Fahrer müssen eindeutig identifiziert werden, sondern<br />

auch Fahrtdaten, wie gefahrene Kilometer, müssen authentisch und unverfälschbar sein.<br />

Folgende Daten sind laut Erlass des Bundesministerium für Finanzen für die Vorlage<br />

beim Finanzamt notwendig (vgl. [BfF95]):<br />

• Name des Fahrers (Alternativ könnte auch ein Pseudonym oder die<br />

Mitarbeiternummer eingetragen werden),<br />

• KFZ-Kennzeichen (oder Fahrzeugidentifikationsnummer),<br />

• Kilometerstand,Datum/Uhrzeit bei Fahrtbeginn und bei Fahrtende (werden<br />

automatisch vom Fahrzeug erfasst),<br />

• Abfahrts- und Zielort (<strong>mittels</strong> GPS-Positionsermittlung) und<br />

• Nutzungsart und Fahrtzweck (Der Fahrer muss auswählen, ob die Fahrt<br />

geschäftlich, privat oder eine Fahrt zur Arbeit ist. Außerdem ist der Fahrtzweck<br />

anzugeben, z.B. der aufgesuchte Geschäftspartner).<br />

Wenn der Fahrer zur Gruppe der Berufsgeheimnisträger, wie z.B. Ärzte, Rechtsanwälte<br />

und Steuerberater, gehört, dann muss er aufgrund des Auskunftsverweigerungsrechts<br />

keine Angaben über den Namen und die Anschrift des Mandanten machen. Für den<br />

Fahrtzweck reicht in diesem Fall die Eintragung „Mandantenbesuch“. Da aber das<br />

Finanzamt im Falle begründeten Zweifels genauere Informationen über den Fahrtzweck<br />

einfordern darf, müssen dennoch Angaben über den Mandanten gespeichert werden.<br />

Diese Daten sind vor unberechtigter Einsicht durch Dritte zu schützen (vgl. [Oat00]).<br />

2.3.3 Vertraulichkeit der Datenübertragung<br />

Abbildung 4 zeigt ein Szenario für ein verteiltes Fahrtenbuch. Es wird ein PDA<br />

verwendet, der Daten mit dem Bordcomputer im Fahrzeug abgleichen kann. Der<br />

Bordrechner sowie der PDA können über ein Mobiltelefon über den Gateway mit dem<br />

Internet verbunden werden. Ein Fahrtenbuch-Server kommuniziert mit dem Gateway<br />

über das Internet, um die Fahrtdaten aus dem Auto abzurufen.<br />

In der Kette vom PDA bis hin zum Fahrtenbuch-Server gibt es zahlreiche<br />

Angriffspunkte. Angreifer könnten versuchen, die Datenübertragung zwischen PDA<br />

und Fahrzeug, Fahrzeug und Gateway sowie zwischen dem Gateway und dem<br />

14


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

Fahrtenbuch-Server abzuhören. Zur Sicherung der Datenübertragung im Internet<br />

können die üblichen Verfahren wie SSL eingesetzt werden, die für die Zwecke eines<br />

Fahrtenbuches in den meisten Fällen ausreichen sollten.<br />

Abbildung 4: Mögliche Risiken bei der Datenübertragung (eigene Darstellung)<br />

2.3.3.1 Datenübertragung <strong>mittels</strong> mobiler Geräte und Speichermedien<br />

Zum Datenabgleich können auch mobile Geräte wie PDAs (siehe [Mag01] und<br />

[IfT02a]) oder Chipkarten (siehe [IbNoJ]) eingesetzt werden, die am Personal-<br />

Computer die Daten sichern. In Zukunft könnten auch Datenabgleichstationen (z.B. an<br />

<strong>einer</strong> Tankstelle) genutzt werden, um Daten zum Dienstbetreiber zu übertragen. Leider<br />

verfügen die Betriebssysteme der meisten Geräte noch nicht über einen ausreichenden<br />

Speicherschutz oder Verschlüsselungsbibliotheken (vgl. [BHH01] S. 150 ff.), so dass<br />

bei Verlust des Gerätes jedermann auf die Fahrtdaten zugreifen könnte.<br />

2.3.3.2 Datenübertragung <strong>mittels</strong> Mobilfunk und Internet<br />

Die Fahrtdaten können auch <strong>mittels</strong> Mobilkommunikation und Internet zum Fahrzeug-<br />

Portal übertragen werden (siehe [SysoJ]) und durch Protokolle wie WTLS und TLS<br />

geschützt werden. Da die übertragenen Daten im Gateway entschlüsselt und wieder<br />

verschlüsselt werden müssen, besteht allerdings keine Ende-zu-Ende Sicherheit (vgl.<br />

[Myn00]), außer die Daten werden bereits von der Anwendung verschlüsselt und<br />

entschlüsselt. Um zu verhindern, dass Angreifer die Kommunikation abhören, Daten<br />

15


Sicherheitsanalyse: Fahrtenbuch-Szenario<br />

ausspähen, Trojanische Pferde einspielen oder Denial-of-service Attacken starten<br />

können, ist eine Ende-zu-Ende Verschlüsselung notwendig.<br />

16


Zugriffskontrollverfahren und AOP<br />

3 Zugriffskontrollverfahren und AOP<br />

Zum Schutz der Fahrtenbuch-Daten können verschiedene Zugriffskontrollverfahren<br />

eingesetzt werden. Das folgende Kapitel diskutiert die wichtigsten<br />

Zugriffskontrollverfahren und erläutert warum diese nur bedingt für eine<br />

anwendungsunabhängige <strong>Zugriffskontrolle</strong> geeignet sind. Anschließend wird gezeigt,<br />

wie <strong>mittels</strong> aspektorientierter Programmierung diese Mängel behoben werden können.<br />

3.1 Zugriffskontrolllösungen für den Schutz von Fahrtdaten<br />

Im Folgenden wird davon ausgegangen, dass sich die Fahrtdaten auf dem Fahrtenbuch-<br />

Server befinden und vor unberechtigten Zugriffen geschützt werden müssen.<br />

3.1.1 Zugriff auf den Fahrtenbuch-Server<br />

Der Fahrtenbuchdienst soll als Teil eines Fahrzeugportals realisiert werden, welches am<br />

Fachgebiet Datenbanken und verteilte Systeme in Zusammenarbeit mit dem IT Transfer<br />

Office entwickelt wurde (siehe [CiH02]).<br />

Das Fahrzeugportal läuft auf einem J2EE Application Server und setzt Web-Services<br />

ein. Außerdem verwendet es ein semantisches Datenmodell (siehe [Bor98]) und legt<br />

Anwendungsdaten in <strong>einer</strong> XML Datenbank ab (siehe [CiH02]).<br />

Ziel ist es, die bereits bestehende Architektur, um eine Sicherheitslösung zu erweitern.<br />

Für deren Realisierung bietet sich eine aspektorientierte sowie auf einzelnen Diensten<br />

basierende Architektur an. Die Sicherheitslösung soll in Form von mehreren einzelnen<br />

Diensten realisiert werden (z.B. <strong>Zugriffskontrolle</strong>, Authentifikation und Auditing), so<br />

dass man diese ohne umfangreiche Anpassungen durch andere Implementierungen<br />

austauschen kann.<br />

Im Folgenden wird am Beispiel des Fahrtenbuch-Dienstes diskutiert, wie Anwendungen<br />

und Daten auf dem Portal vor unbefugten Zugriffen geschützt werden können.<br />

17


Zugriffskontrollverfahren und AOP<br />

3.1.2 Benutzerauthentifizierung<br />

Um auf die Fahrtenbuch-Daten zugreifen zu können, muss sich der Anwender<br />

authentisieren. Dabei können die in Kapitel 2.3.2.2 beschriebenen Verfahren<br />

(Passwörter, Chipkarten oder biometrische Verfahren), die Authentifizierung<br />

ermöglichen, in Verbindung mit Protokollen zur Verschlüsselung sowie dem Remote<br />

Procedure Call-Konzept (vgl. [Eck01] S. 354f.) zum Einsatz kommen.<br />

Die einfachste Form der Benutzerauthentifizierung ist eine Passwortabfrage. Das<br />

System verlangt die Identifikation/Kennung des Benutzers, z.B. durch ein Login-<br />

Prompt. Der Benutzer identifiziert sich durch seine Kennung und authentifiziert sich<br />

durch ein Passwort. Das System vergleicht das eingegebene Passwort mit dem in der<br />

Passwortdatei (vgl. [Eck01] S. 309). Passwortschutz wird häufig von kommerziellen<br />

Systemen eingesetzt (siehe [IbNoJ] und [SysoJ]).<br />

3.1.3 <strong>Zugriffskontrolle</strong> durch das Dateisystem bzw. die Datenbank<br />

Die Fahrtenbuch-Daten können entweder im Dateisystem des Servers abgelegt werden<br />

oder in <strong>einer</strong> eigenen Datenbank aufbewahrt werden.<br />

In Unix werden Dateien und Verzeichnisse durch das Definieren so genannter<br />

Zugriffsbits geschützt. Die ersten drei Bits legen die Rechte des Besitzers fest, d.h.<br />

lesenden, schreibenden oder ausführenden Zugriff. Die nächsten drei Bits definieren die<br />

Zugriffsrechte für Gruppenmitglieder der Gruppe des Besitzers (bzw. der Datei) und die<br />

letzten drei Bits die Zugriffsrechte aller anderen Personen. Mittels des Kommandos<br />

„chmod“ können Bits verändert werden (vgl. [Tan95] S. 339).<br />

In der neuesten Version der XML-Datenbank eXist (siehe [Mei03]) wurde ein Unix<br />

ähnlicher Zugriffschutz eingeführt, der ebenfalls Schutzbits für den Benutzer, die<br />

Benutzergruppe und weitere definiert. Es werden wie in Unix drei Zugriffsrechte<br />

(Lesen, Schreiben und Ändern) unterstützt.<br />

Eine <strong>Zugriffskontrolle</strong> auf Dateisystem-Ebene ermöglicht jedoch keine anwendungsspezifischen<br />

Anpassungen der <strong>Zugriffskontrolle</strong>. Es lässt sich nicht definieren, welche<br />

Anwendungsmethoden geschützt werden sollen, und eine differenzierte Behandlung der<br />

Daten eines Dokumentes ist ebenfalls nicht möglich. Die Einteilung der Benutzer in die<br />

drei Gruppen Besitzer, Besitzergruppe und Sonstige spiegelt in der Regel nicht die<br />

Benutzerverwaltung <strong>einer</strong> Anwendung wieder. Der Vorteil <strong>einer</strong> solchen Lösung ist<br />

18


Zugriffskontrollverfahren und AOP<br />

aber, dass sie von jedem Anwendungsprogramm sofort benutzt werden kann, unter der<br />

Voraussetzung, dass das Programm mit der Situation eines abgelehnten Zugriffs<br />

umgehen kann. Die XML-Datenbank eXist liefert beispielsweise eine<br />

Zugriffsverweigerungsausnahme an den Aufrufer zurück. Daher müsste man alle darauf<br />

basierenden Anwendungen um eine Fehlerbehandlung, die z.B. dem Benutzer eine<br />

sinnvolle Fehlermeldung ausgibt, ergänzen.<br />

Ferner ist ein Zugriffsschutz auf Dateisystem- bzw. Datenbank-Ebene wirkungslos<br />

gegenüber Angriffen von Insidern, besonders wenn es sich um Administratoren handelt<br />

(vgl. [BoP02]). Der Kunde hat dabei keine andere Möglichkeit, als dem Betreiber zu<br />

vertrauen, dass seine Systeme sicher und dessen Mitarbeiter vertrauenswürdig sind.<br />

Jedoch werden laut <strong>einer</strong> Untersuchung des FBI (siehe [CSI01]) 45% der Angriffe<br />

durch Insider durchgeführt. Zudem ist die Ansammlung personenbezogener Daten, wie<br />

sie in <strong>einer</strong> Fahrtenbuch-Datenbank vorhanden sind, immer ein interessantes Ziel für<br />

Angreifer.<br />

Um den Anwender auch vor Attacken zu schützen, kann Datenbankverschlüsselung<br />

angewendet werden. Man kann die gesamte Datenbank auf dem Server verschlüsseln<br />

oder auch nur kritische Teile. Dies schützt aber nur vor Angriffen externer<br />

Eindringlinge, da Administratoren Zugriff auf die verwendeten Schlüssel haben.<br />

Würden alle Fahrtenbuch-Daten aber mit einem privatem Fahrzeug- Schlüssel<br />

verschlüsselt in der Datenbank abgelegt, wären zudem keine Auswertungen für die<br />

gesamte Flotte mehr möglich. Dies kann aber für Anfragen zu Kundenterminen oder für<br />

statistische Auswertungen nötig sein. Daher soll sich die Datenbank um die<br />

Verschlüsselung der Daten kümmern und nur besonders kritische Daten könnten separat<br />

verschlüsselt und in <strong>einer</strong> eigenen Datenbank gespeichert werden (vgl. [BoP02]).<br />

Alternativ wäre es auch möglich, private Daten erst gar nicht an den Fahrtenbuch-<br />

Server für die Flotte zu übermitteln, sondern auf einem PDA oder <strong>einer</strong> Chipkarte<br />

abzulegen.<br />

In Ergänzung zu diesen Technologien wird in dieser Arbeit versucht, eine<br />

Sicherheitslösung zu entwerfen, die an die Besonderheiten eines Anwendungsprogramms<br />

durch Konfiguration angepasst werden kann.<br />

19


Zugriffskontrollverfahren und AOP<br />

3.1.4 Rollenbasierte Zugriffskontrollverfahren<br />

Rollenbasierte <strong>Zugriffskontrolle</strong>n (engl. „role based access controll“ [RBAC]) werden<br />

häufig für die <strong>Zugriffskontrolle</strong> in verteilten Mehrbenutzer-Systemen genutzt. Daher<br />

eignen sie sich ideal für ein verteiltes Fahrtenbuch.<br />

3.1.4.1 Das Core RBAC Referenzmodell<br />

Das „National Institute for Standards and Technology“ (NIST) hat den Aufbau eines<br />

RBAC Systems festgelegt. Im Folgenden wird nur auf das Grundmodell „Core RBAC“<br />

(vgl. [FSG01] S. 232 ff.) eingegangen, das in der folgenden Abbildung dargestellt ist.<br />

Abbildung 5: NIST Core RBAC Referenzmodell (vgl. [FSG01] S. 232)<br />

Im Referenzmodell werden <strong>einer</strong> Menge von Benutzern (USERS) eine Menge von<br />

Rollen (ROLES) zugeordnet. Diese Rollen werden wiederum <strong>einer</strong> Menge von<br />

Berechtigungen (PRMS) zugewiesen, die Zugriffsrechte von Operationen (OPS) auf<br />

Objekte (OBS) definieren.<br />

Wählt ein Benutzer eine Rolle aus der Menge der Rollen aus (man sagt auch „er<br />

aktiviert diese Rolle“), so erhält er die Berechtigungen dieser Rolle. Die Auswahl an<br />

aktiven Rollen wird durch eine Sitzung (SESSION) dargestellt.<br />

Die Pfeile in der Abbildung stellen die Art der Beziehung dar. Pfeile in beide<br />

Richtungen stehen für eine „Many-to-Many-Relation“, während einfache Pfeile eine<br />

„One-to-Many“ Beziehung darstellen. Ein Benutzer kann also mehreren Sitzungen<br />

zugeordnet sein, aber eine Sitzung kann nur einem Benutzer zugewiesen werden. Bei<br />

der Beziehung zwischen Benutzern und Rollen handelt es sich dagegen um „Many-to-<br />

Many-Relationen“. Das heißt eine Rolle kann beliebig vielen Benutzern und ein<br />

Benutzer kann beliebig vielen Rollen zugeordnet werden. Das gleiche gilt auch für<br />

20


Zugriffskontrollverfahren und AOP<br />

Rollen und Berechtigungen, Rollen und Sitzungen sowie Operationen und Objekte (vgl.<br />

[Fis02] S. 32 ff.).<br />

Die Komponenten des Referenzmodells basieren auf folgender Terminologie:<br />

Terminus<br />

Benutzer (engl.<br />

user)<br />

Rollen (engl. roles)<br />

Sitzungen (engl.<br />

sessions)<br />

Operationen (engl.<br />

operations<br />

Objekte (engl.<br />

objects<br />

Zugriffsrechte<br />

(engl. permissions)<br />

Erläuterung<br />

Ein Benutzer kann ein Mensch oder auch ein Objekt (z.B. ein<br />

“Mobile Agent”) sein.<br />

Um den Administrationsaufwand gering zu halten, werden<br />

Benutzern Rollen für gruppenspezifische Aufgabenbereiche<br />

zugeordnet. Ein Benutzer kann mehrere Rollen haben und eine<br />

Rolle kann mehreren Benutzern zugeordnet sein.<br />

Eine Sitzung ist eine Abbildung eines Benutzers auf eine oder<br />

mehrere Rollen. Dieses Konzept erlaubt somit die selektive<br />

Aktivierung und Deaktivierung von Rollen.<br />

Eine Operation ist eine ausführbare Aktion, wie z.B. Daten<br />

hinzufügen, Daten invalidieren und Daten lesen.<br />

Ein Objekt sind Instanzen <strong>einer</strong> Java-Klasse, wie z.B. eine<br />

Instanz <strong>einer</strong> Klasse, die einen Fahrtenbuch-Eintrag darstellt.<br />

Ein Zugriffsrecht ist die Genehmigung, eine Operation auf einem<br />

Objekt auszuführen. Zugriffsrechte auf Objekte sind den<br />

einzelnen Rollen zugeordnet. Ein Benutzer erhält somit ein<br />

Zugriffsrecht, indem er <strong>einer</strong> Rolle zugeordnet ist.<br />

Tabelle 7: Elemente des Core RBAC Referenzmodells<br />

3.1.4.2 Rollen und Fahrtenbücher<br />

Speziell für Flotten (n Fahrer mit m Fahrzeugen) sind rollenbasierte <strong>Zugriffskontrolle</strong>n<br />

sehr gut geeignet. Fahrer dürfen nur über eine Fahrerrolle auf eigene Fahrtdaten<br />

zugreifen. Vertriebsleiter können über eine Rolle „Gebiet X“ auf alle Fahrtdaten ihres<br />

Vertriebsgebietes zugreifen. Und das Management kann eine Rolle „Manager“ erhalten,<br />

mit der man lesenden Zugriff auf alle Daten erhält.<br />

21


Zugriffskontrollverfahren und AOP<br />

Eine Weiterentwicklung zum „Core RBAC“ Modell ist das „Hierarchical RBAC“ (vgl.<br />

[FSG01] S. 234 ff.). Es führt hierarchische Rollen ein, so dass eine Rolle die<br />

Eigenschaften <strong>einer</strong> anderen Rolle erben kann. So kann man erreichen, dass die<br />

Managerrolle alle Eigenschaften der Vertriebsleiterrolle erbt. Allerdings muss darauf<br />

geachtet werden, dass nicht die Kombination zweier Rollen dazu führt, dass man Rechte<br />

erhält, die außerhalb der Zuständigkeit der Rollen liegen. Beispielsweise darf die<br />

Kombination der Rollen „Betriebsprüfer“ und „Sachgebiet 1“ nicht dazu führen, dass<br />

man plötzlich schreibenden Zugriff auf das Sachgebiet 1 erhält. Um dies zu verhindern,<br />

wurde das Modell zum „Constrained RBAC” Modell erweitert. Dieses erlaubt die<br />

Modellierung von Zuständigkeiten, die nicht verletzt werden dürfen.<br />

Ein solches rollenbasiertes Zugriffsmodell kann in Form eines Frameworks entworfen<br />

werden, das ein „Application Programming Interface“ (API) anbietet. Mittels dieses<br />

API kann man die Zugriffsfunktionalität im Anwendungsprogramm nutzen, indem man<br />

die Funktionen zur Verwaltung der Rollen und für die Zugriffsprüfungen in das<br />

Anwendungsprogramm programmiert (vgl. [Fis02] S. 139). Für eine anwendungsunabhängige<br />

Sicherheitslösung ist die Nutzung eines solchen Frameworks aber nicht<br />

geeignet, da Änderungen (oder der Austausch) an der Sicherheitslösung auch<br />

Änderungen am Anwendungscode verursachen.<br />

3.1.5 Policy-basierte Zugriffskontrollverfahren<br />

3.1.5.1 Autorisierungs-Policies<br />

Ein sehr flexibler Ansatz ist der Einsatz von Policies. Autorisierungs-Policies werden<br />

verwendet, um zu festzulegen, auf welche Dienste oder Ressourcen ein Benutzer<br />

zugreifen kann (vgl. [DBS02] S. 3). Sie entsprechen Zugriffsregeln, d.h. sie definieren<br />

Aktivitäten die ein Subjekt mit einem Software Objekt durchführen darf oder auch<br />

nicht. Solche Policies eignen sich sehr gut für den Zugriffsschutz in verteilten<br />

Systemen, in denen die <strong>Zugriffskontrolle</strong> in <strong>einer</strong> Vielzahl von heterogenen<br />

Komponenten implementiert ist (vgl. [DBS02] S. 1 ff.).<br />

Anstelle des Benutzers kann auch eine Benutzerrolle definiert werden, so dass man<br />

diesen Ansatz mit einem rollenbasiertem System kombinieren könnte.<br />

22


Zugriffskontrollverfahren und AOP<br />

Zusätzlich müssen aber noch Policies für den Fall <strong>einer</strong> Zugriffsverletzung (z.B.<br />

mehrere fehlgeschlagene Login-Versuche) definiert werden. Diese beschreiben dann die<br />

Aktionen, die in einem solchen Fall auszuführen sind.<br />

3.1.5.2 Policy-basierte Ansätze<br />

Man kann Policy-basierte Ansätze unterscheiden, je nachdem, ob sie dem Benutzer<br />

einen „discretionary access control“ (DAC) oder einen „mandatory access control“<br />

(MAC) Zugriff erlauben. DAC Policies beschränken den Zugriff auf Objekte auf<br />

bestimmte Benutzer oder Benutzergruppen. Ferner gestatten sie einem Besitzer, Rechte<br />

weiterzugeben. Realisiert werden kann eine solche Policy z.B. <strong>mittels</strong> <strong>einer</strong><br />

Zugriffskontrollmatrix bestehend aus Benutzer, Objekt und Aktion. Bei MAC Policies<br />

darf hingegen nur eine zentrale Autorität die Regeln festlegen. Dies wird erreicht,<br />

indem jedem Subjekt und jedem Objekt eine Sicherheitsklassifikation zugewiesen wird.<br />

Für die Spezifikation von Policies gibt es zahlreiche Ansätze. Bei Logik-basierten<br />

Sprachen, werden Policies <strong>mittels</strong> logischer Konstrukte wie Rekursion und Verneinung<br />

konstruiert. Ereignis gesteuerte Sprachen wie z.B. die „security policy language“,<br />

spezifizieren dagegen Ereignisse, die von einem „event monitor“ verarbeitet werden.<br />

Manche Ansätze verwenden XML zur Definition der Zugriffsregeln (vgl. [LMY01] S.<br />

4). Beispielsweise kann man XACML (siehe [OAS03]) einsetzen, um den Zugriff auf<br />

XML Dokumente in Form von „(Subjekt, Ziel, Aktion)“ Regeln im XML Format zu<br />

reglementieren. Ferner kann man in XACML konditionale Zugriffsregeln für XML<br />

Dokumente definieren und externe Nachbedingungen zur Spezifikation von Aktionen,<br />

die vor der Freigabe eines Zugriffes ausgeführt werden müssen, festlegen. Siehe dazu<br />

das folgende Beispiel:<br />

23


Zugriffskontrollverfahren und AOP<br />

Abbildung 6: Beispiel für eine XACML Policy (vgl. [DBS02] S. 11)<br />

XML hat den Vorteil, dass es ein weit verbreiteter Standard ist. Für den Benutzer ist<br />

aber eine graphische Eingabemaske notwendig, da für ihn eine XML Policy kaum<br />

lesbar ist. Da XACML nur XML Dokumentinhalte schützt und es keine Gruppierung<br />

von Policies unterstützt, ist es für das Fahrzeug-Portal nur bedingt geeignet.<br />

3.1.5.3 Policies und Fahrtenbücher<br />

Große Systeme beinhalten Millionen von Benutzern und Ressourcen. Es ist unpraktisch,<br />

Policies für jedes einzelne Individuum oder gar für jede einzelne Ressource zu<br />

spezifizieren. Stattdessen muss es möglich sein, Policies auch bezüglich<br />

(verschachtelten) Gruppen festzulegen. Bei einem Fahrtenbuch genügt z.B. eine<br />

Vorgabe-Policy, die definiert, dass nur der Fahrer Änderungen vornehmen darf, nur<br />

Gruppenmitglieder lesenden Zugriff auf nicht private Daten erhalten und das Löschen<br />

von Fahrteinträgen generell nicht gestattet ist. Es muss dem Fahrer aber erlaubt sein, für<br />

eine Gruppe von Fahrteinträgen (Ressourcen) in einem festgelegten Rahmen<br />

Anpassungen vorzunehmen (z.B. weiteren Personen Lesezugriffe gewähren). Außerdem<br />

ist es nützlich, Policies, die Rechte <strong>einer</strong> Rolle (z.B. eines Finanzprüfers) festlegen, zu<br />

gruppieren (vgl. [DBS02] S. 3).<br />

24


Zugriffskontrollverfahren und AOP<br />

3.2 Probleme üblicher Zugriffskontrollverfahren<br />

3.2.1 Fahrtenbücher und <strong>Zugriffskontrolle</strong>n<br />

Die untersuchten Fahrtenbücher weisen keine der oben aufgeführten Zugriffskontrollverfahren<br />

auf. Die meisten Systeme verfügen nur über eine einfache<br />

Passwortabfrage (siehe [IbNoJ] und [SysoJ]). Fortgeschrittene <strong>Zugriffskontrolle</strong>n wie<br />

etwa rollenbasierte <strong>Zugriffskontrolle</strong>n werden hingegen nicht unterstützt.<br />

Im Folgenden soll nicht weiter auf die Sicherheitsmängel üblicher Fahrtenbuch-<br />

Software bzw. -Dienste eingegangen werden. Stattdessen wird erörtert, welche<br />

Probleme auftreten, wenn man die <strong>Zugriffskontrolle</strong> <strong>einer</strong> (Telematik-)Anwendung mit<br />

den oben beschriebenen Verfahren realisieren möchte.<br />

3.2.2 Vermischung von Quellcode und <strong>Zugriffskontrolle</strong><br />

Das Hauptproblem üblicher Verfahren ist, dass die Zugriffskontrollaufrufe im<br />

Anwendungsprogramm zu programmieren sind. Üblicherweise verfügt eine Zugriffskontrollfunktionalität<br />

über eine Schnittstelle, die vom Anwendungsprogramm genutzt<br />

wird. Die folgende Abbildung zeigt eine Beispielanwendung, die um Funktionen zur<br />

Überprüfung der Autorisierung erweitert wurde.<br />

package Logbook;<br />

import Security.SecurityFacade;<br />

public class Start<br />

{<br />

…<br />

public static void main(String[] args) throws Exception {<br />

SecurityFacade security = SecurityFacade.getInstance();<br />

…<br />

else if (action.equals(„setdate“)) {<br />

if(security.checkAuthorization(user,”Entry”,”setdate”)<br />

String date = JoptionPane.showInputDialog(…);<br />

Entry e = (Entry) entries[actualNbr];<br />

e.setdate(date);<br />

else<br />

System.out.println(“Access denied”);<br />

…<br />

}<br />

}<br />

Abbildung 7: Anwendungsprogramm inklusive Rechteprüfung<br />

Wie man anhand der fett markierten Zugriffskontrollfunktionen deutlich sehen kann,<br />

muss sich ein Großteil des Anwendungscodes mit der <strong>Zugriffskontrolle</strong> beschäftigen.<br />

25


Zugriffskontrollverfahren und AOP<br />

Bei Verwendung <strong>einer</strong> Sicherheits-Schnittstelle (hier SecurityFacade) sind folgende<br />

Anpassungen notwendig.<br />

• Benutzerzugriff entdecken und weiterleiten<br />

Das Anwendungsprogramm muss sich selbst darum kümmern, Zugriff auf eine<br />

geschützte Ressource zu entdecken (z.B. Abbildung 7 Zeile 10), um eine<br />

Zugriffsbehandlung auslösen zu können.<br />

Außerdem muss die jeweilige Anwendungsklasse den Benutzer, der auf die<br />

geschützte Ressource zugreifen will, authentifizieren bzw. ein Sitzungsobjekt<br />

mit den Benutzerdaten übergeben bekommen.<br />

• Zugriffskontrollaufruf durchführen<br />

Anschließend muss das Anwendungsprogramm die <strong>Zugriffskontrolle</strong> aufrufen<br />

(siehe Abbildung 7 Zeile 11). Hierzu müssen jedoch alle erforderlichen Daten<br />

wie die Identifikation des zugreifenden Benutzers, die gewünschte Aktion und<br />

das geschützte Objekt ermittelt und dem Zugriffskontrollaufruf übergeben<br />

werden. Jede geschützte Anwendungsklasse muss zudem die SecurityFacade<br />

importieren und eine Instanz der Facade erzeugen (Abbildung 7 Zeile 2 und 8).<br />

• Fehlerbehandlung bei Zugriffsverweigerung<br />

Außerdem muss das Programm sich selbst um die Fehlerbehandlung im Falle<br />

<strong>einer</strong> Zugriffsverweigerung kümmern (siehe Abbildung 7 Zeile 15-16).<br />

Beispielsweise kann das Anwendungsprogramm eine Fehlermeldung ausgeben<br />

oder eine Methode zur Fehlerbehandlung aufrufen. Da die Art der Ausgabe <strong>einer</strong><br />

Fehlermeldung von der graphischen Benutzeroberfläche des Anwendungsprogramms<br />

abhängt, muss es dem Programm möglich sein, sich selbst um die<br />

Fehlerbehandlung zu kümmern. Hierzu könnte es eine Ausnahme von der<br />

<strong>Zugriffskontrolle</strong> erhalten, anhand der es entscheiden kann, welche weiteren<br />

Schritte durchzuführen sind.<br />

Soll dieses Sicherheitssystem durch ein anderes abgelöst werden, dann müssen alle<br />

aufgezählten (in der Abbildung fett markierten) Code-Zeilen ausgetauscht werden.<br />

Wenn alle Funktionen der <strong>Zugriffskontrolle</strong> in eine eigene Klasse ausgelagert werden<br />

könnten, würde das Anwendungsprogramm wie folgt aussehen:<br />

26


Zugriffskontrollverfahren und AOP<br />

1. package Logbook;<br />

2.<br />

3. public class Start<br />

4. {<br />

5. …<br />

6. public static void main(String[] args) throws Exception {<br />

7. …<br />

8. else if (action.equals(„setdate“)) {<br />

9. String date = JoptionPane.showInputDialog(…);<br />

10. Entry e = (Entry) entries[actualNbr];<br />

11. e.setdate(date);<br />

12. }<br />

13.}<br />

Abbildung 8: Beispielanwendung ohne Zugriffsfunktionalität<br />

Auch bei Verwendung von standardisierten Sicherheitslösungen wie z.B. JAAS (vgl.<br />

[SUN01] und [Lad03]) muss die Anwendungsklasse durch eine import-Anweisung für<br />

den entsprechenden Sicherheits-Controller und einen Zugriffskontroll-Aufruf für jede<br />

zu schützende Aktion erweitert werden.<br />

3.2.3 Abhängigkeit der Anwendung vom verwendeten Verfahren<br />

Durch Verwendung <strong>einer</strong> speziellen Sicherheitslösung macht sich die Anwendung<br />

folglich abhängig von deren Realisierung. Mit zunehmendem Programmumfang wird<br />

ein Wechsel oder eine Anpassung immer aufwendiger, da der Code der<br />

Zugriffsfunktionalität quer über das gesamte Anwendungsprogramm verteilt ist.<br />

Class 1 Class 2 Class 3 Class 4 Class 5 Class 6 Class 7 Class 8 Class 9 Class 10 Class 11 Class 12 Class 13 Class 14 Class 15 Class 16<br />

Abbildung 9: Verteilung der Zugriffskontrollfunktionalität (in Anlehnung an<br />

[HHI02] S. 5)<br />

Die Vermischung von <strong>Zugriffskontrolle</strong> und Anwendungsprogramm führt außerdem zu<br />

folgenden Problemen:<br />

27


Zugriffskontrollverfahren und AOP<br />

• Während der Anforderungsanalyse<br />

Obwohl eine Trennung der Anforderungen von <strong>Zugriffskontrolle</strong> und<br />

Anwendung möglich ist, ist der Austausch eines Verfahrens durch ein anderes<br />

nicht ohne weiteres möglich. Ändern sich die Sicherheitsanforderungen zum<br />

Zeitpunkt der Einführung, muss die komplette Anwendung überarbeitet werden.<br />

• Während des <strong>Entwurf</strong>s<br />

Ein getrennter <strong>Entwurf</strong> von <strong>Zugriffskontrolle</strong> und Anwendung ist nicht möglich,<br />

da die Funktionen der Anwendung sehr eng mit den Sicherheitsfunktionen<br />

verzahnt sind. Wenn ein spezielles Zugriffskontrollverfahren zum Einsatz<br />

kommen soll, muss die komplette Anwendung entsprechend adaptiert oder neu<br />

entwickelt werden, da der Zugriffsschutz sich nicht in das System<br />

hineinkonfigurieren lässt.<br />

• Während der Implementierung<br />

Die Trennung der Programmierung von <strong>Zugriffskontrolle</strong> und Anwendung ist<br />

kaum möglich, da die Zugriffskontrollaufrufe überall verwendet werden. Bei<br />

Änderung der Zugriffskontrollschnittstelle müssen alle betroffenen Klassen<br />

abgeändert werden. Das Testen der Anwendung ohne die Zugriffsfunktionalität<br />

bedarf <strong>einer</strong> Auskommentierung aller Zugriffsfunktionen.<br />

• Während der Nutzung<br />

Die <strong>Zugriffskontrolle</strong> ist ein Engpass im System. Wenn sie ausfällt, dann steht<br />

das ganze System still. Es ist in der Regel nicht möglich, das System ohne<br />

Zugriffsfunktionalität bzw. mit <strong>einer</strong> alternativen Zugriffskontrollfunktionalität<br />

auszuführen.<br />

Wie diese Probleme zum Teil gelöst werden können, ist Gegenstand des nächsten<br />

Abschnittes und der folgenden Kapitel.<br />

28


Zugriffskontrollverfahren und AOP<br />

3.3 Anwendungsunabhängigkeit durch Aspektorientierte<br />

Programmierung (AOP)<br />

3.3.1 Motivation für AOP<br />

Das Problem, dass der Programmcode der <strong>Zugriffskontrolle</strong> quer über die gesamte<br />

Anwendung verteilt ist, lässt sich <strong>mittels</strong> aspektorientierter Programmierung lösen.<br />

Aspektorientierung soll helfen, eine Schwachstelle objektorientierter Programmierung<br />

zu beheben. Querschnittsaspekte, die die ganze Anwendung betreffen, können nicht<br />

durch hierarchische Modularisierung sinnvoll gelöst werden. Die Untergliederung der<br />

Anwendung in Klassen und Unterklassen sowie Schnittstellen hilft kaum weiter, wenn<br />

der Aspekt sich auf alle Teile <strong>einer</strong> Anwendung bezieht.<br />

Aspektorientierte Programmierung ist eine Methode, mit der man die benötigte<br />

Funktionalität automatisch zu einem Original-Programmcode hinzufügen kann. Das<br />

besondere an AOP ist, dass es dem Programmierer die Arbeit abnimmt, den<br />

Programmcode an mehreren Stellen im Programm abändern zu müssen. Stattdessen<br />

muss nur definiert werden, wo Änderungen vorzunehmen sind und in welchen Fällen<br />

diese Änderungen durchgeführt werden sollen. Ein Übersetzer webt anschließend die<br />

Änderungen, die in den Aspekten definiert wurden, in den Code ein, ohne dass das<br />

Originalprogramm geändert werden muss.<br />

3.3.2 Aspekte<br />

Ein Aspekt ist zum einen die Zusammenstellung aller Anforderungen eines Typs (z.B.<br />

Sicherheit) an ein System. Wie eine Anforderung kann der Aspekt alle Teile des<br />

Systems betreffen. Zum anderen ist der Aspekt ein Programmkonstrukt, wie z.B. eine<br />

Java-Klasse, die alle Codeteile, die sich auf diese Anforderung beziehen, enthält.<br />

Beispielsweise enthält der Aspekt „<strong>Zugriffskontrolle</strong>“ alle Programmteile der<br />

Zugriffskontrollfunktionalität. Der Aspekt definiert außerdem, welche Anwendungsklassen<br />

die Programmteile benötigen, so dass er die entsprechenden Teile zur<br />

Übersetzungszeit zur jeweiligen Anwendungsklasse hinzufügen kann.<br />

Durch diese Kapselung von Anforderungen in Aspekten ist es möglich, im<br />

Gesamtsystem eine stärkere Trennung der Anforderungen bei Design und<br />

29


Zugriffskontrollverfahren und AOP<br />

Implementierung durchzuhalten, Redundanz und Inkonsistenzen zu verhindern sowie<br />

die Verständlichkeit zu erhöhen.<br />

Der Aspekt <strong>Zugriffskontrolle</strong> wird somit integraler Bestandteil aller Anwendungsklassen.<br />

Dass dabei die Objektgrenzen aufgehoben werden, damit Aspekte unabhängig<br />

von der öffentlichen Schnittstelle auf Objekte zugreifen können, stellt keine Verletzung<br />

der Schnittstellen dar, da der Aspekt nun zu einem festen Bestandteil des Objektes<br />

geworden ist (vgl. [Dom01]).<br />

Aspekte können eingesetzt werden, wenn man mehrere Klassen hat, zu der eine<br />

gemeinsame Funktionalität hinzugefügt werden soll. Des Weiteren ermöglichen<br />

Aspekte das Hinzufügen und Entfernen von Features <strong>einer</strong> Klasse zur Übersetzungszeit.<br />

Auf diese Weise können Benutzer wählen, welche Features sie wollen.<br />

3.3.3 Dynamische und Statische Querverbindungen<br />

Der Programmierer kann in Aspekten dynamische Querverbindungen (engl. dynamic<br />

cross cutting) zu bestimmten Punkten im Ablauf eines Anwendungsprogramms<br />

festlegen. An einem solchen Punkt (engl. join point) kann er dann den gewünschten<br />

zusätzlichen Programmcode einfügen. Ein Join Point kann z.B. ein Punkt in einem<br />

Objekt sein, an dem eine Methode aufgerufen oder ein Feld des Objektes referenziert<br />

wird.<br />

Zusätzlich ermöglicht aspektorientierte Programmierung auch die Definition von<br />

statischen Querverbindungen. So lässt sich eine Klasse um zusätzliche Methoden und<br />

Felder erweitern. Beispielsweise kann man hiermit ein Feld für die Identifikation des<br />

Objektes einfügen, das von den dynamischen Querverbindungen genutzt werden kann.<br />

Außerdem können auch Vererbungsbeziehungen zwischen Klassen verändert werden.<br />

3.3.4 Die Software AspectJ TM<br />

Für die Erstellung von AOP Software gibt es diverse Werkzeuge, wie AspectJ TM (vgl.<br />

[Asp02]). AspectJ TM erweitert Java um einige neue Schlüsselwörter und um einen<br />

Übersetzer „ajc“, der anhand der neuen Schlüsselwörter die Aspekte in die<br />

Objektklassen einfügt. Hiermit lassen sich Aspekte in Form von Java-Klassen<br />

realisieren (vgl. [Asp02] Anhang A).<br />

Die wichtigsten Bestandteile von AspectJ TM (vgl. [KHH01] und [Asp02]) sind:<br />

30


Zugriffskontrollverfahren und AOP<br />

• Join Point<br />

Ein Join Point ist ein von AspectJ vordefinierter Punkt während der Ausführung<br />

eines Java Programms, an dem alternative Aktionen ausgeführt werden können.<br />

AspectJ definiert folgende Join Points, die man verwenden kann:<br />

- Methoden- und Konstruktorenaufrufe<br />

- Methoden- und Konstruktorenausführungen<br />

- lesende und schreibende Feldzugriffe<br />

- Aufruf <strong>einer</strong> Ausnahmebehandlung<br />

- Statische und dynamische Initialisierungen <strong>einer</strong> Klasse<br />

Ein Methodenaufruf löst z.B. einen zugehörigen Join Point aus, wenn im<br />

Anwendungsprogramm die entsprechende Methode aufgerufen wird.<br />

• Pointcut<br />

Ein neues Schlüsselwort in AspectJ TM ist Pointcut. Ein Pointcut definiert eine<br />

Zusammenstellung von Join Points in einem Programm bei denen eine<br />

bestimmte Aktion ausgeführt werden soll. Zusätzlich zu den festgelegten Join<br />

Points können auch Werte dieser Join Points abgefragt und bei der Definition<br />

des Pointcut mitverwendet werden. Eine Definition eines Pointcut in einem<br />

Aspekt sieht beispielsweise wie folgt aus:<br />

pointcut authorize(): call(void setField(int));<br />

Auf der linken Seite des Doppelpunktes steht der Name des Pointcut. Auf der<br />

rechten Seite stehen ein oder mehrere Join Points, auf die sich der Pointcut<br />

bezieht.<br />

• Advice<br />

Zu einem Pointcut können ein oder mehrere Advices definiert werden, die<br />

festlegen, was im Falle eines Pointcuts geschehen soll. Mit Hilfe eines<br />

vorangestellten Schlüsselworts legt der Advice fest, wann die zusätzliche Aktion<br />

ausgeführt werden soll. Mögliche Schlüsselwörter sind:<br />

31


Zugriffskontrollverfahren und AOP<br />

- before (zusätzliche Aktion wird vor dem Join Point ausgeführt)<br />

- after (zusätzliche Aktion wird direkt nach dem Join Point<br />

ausgeführt)<br />

- around (zusätzliche Aktion wird anstelle des Join Points<br />

ausgeführt)<br />

So kann man erreichen, dass vor jedem Aufruf <strong>einer</strong> bestimmten Methode zum<br />

Beispiel eine Logging Operation ausgeführt wird. Ebenso ist es möglich, den<br />

Advice alternativ oder nach der Ausführung der eigentlichen Aktion<br />

auszuführen.<br />

Da AspectJ TM die zusätzlichen Methodenaufrufe in den eigentlichen Code einarbeitet,<br />

verschlechtert sich pro Pointcut das Laufzeitverhalten des Anwendungsprogramms ein<br />

wenig, da der zusätzliche Code nun mit ausgeführt werden muss. Dafür ist die<br />

Verwendung von Aspekten aber flexibler als ein direkt eingebetteter Code.<br />

32


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

4 <strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

4.1 Grundlagen<br />

4.1.1 Die <strong>Entwurf</strong>ziele<br />

Im vorherigen Kapitel wurden die Hauptanforderungen an die Sicherheit verteilter und<br />

personalisierbarer Dienste im Fahrzeug diskutiert. Die folgende Auflistung definiert,<br />

welche dieser Anforderungen durch die vorliegende Arbeit erfüllt werden bzw. in<br />

weiteren Schritten durchgeführt werden sollen.<br />

<strong>Entwurf</strong>sziele<br />

<strong>Zugriffskontrolle</strong><br />

Die in dieser Arbeit realisierte <strong>Zugriffskontrolle</strong> regelt den Zugriff<br />

auf fahrzeugspezifische Dienste und Daten, wie Fahrtenbücher oder<br />

Benutzerprofile. Sie verwendet dazu Sicherheitspolicies, in denen<br />

der Eigentümer des Objektes festlegen kann, wer wie auf sein<br />

Objekt zugreifen darf.<br />

Der Aufbau <strong>einer</strong> Zugriffsregel ist fest vorgegeben. In <strong>einer</strong><br />

erweiterten Version wäre es denkbar, die Struktur flexibler zu<br />

gestalten, so dass auch anwendungsspezifische Konstrukte in die<br />

Regeln mitaufgenommen werden könnten.<br />

Authentizität Die <strong>Zugriffskontrolle</strong> hängt von <strong>einer</strong> zuvor erfolgten<br />

Authentifikation ab. Da sowohl das Anwendungsprogramm als<br />

auch die <strong>Zugriffskontrolle</strong> Sitzungsinformationen wie aktueller<br />

Benutzer, Gruppenzugehörigkeit und Authentifikationsstatus,<br />

benötigt, muss die Authentifikation so realisiert werden, dass beide<br />

Programme sie nutzen können.<br />

Im Fall von Telematik-Anwendungen kommen zudem oft<br />

verschiedene Authentifikationsmethoden zum Einsatz, z.B. eine für<br />

die Anmeldung <strong>mittels</strong> PDA und eine für die Anmeldung <strong>mittels</strong><br />

Personal Computer.<br />

33


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

<strong>Entwurf</strong>sziele<br />

Vertraulichkeit<br />

Integrität<br />

Verfügbarkeit<br />

Die Einhaltung der Vertraulichkeit von Daten wird durch die<br />

Implementierung des Zugriffskontrollmechanismus gewährleistet.<br />

Die Kommunikationssicherheit, die durch Einsatz von Verschlüsselungstechniken<br />

(z.B. SSL) gesichert werden kann, liegt außerhalb<br />

des Schwerpunktes dieser Arbeit.<br />

Die Integrität der Fahrtenbuch-Daten beim Einsatz verteilter<br />

Fahrzeugdienste kann <strong>mittels</strong> digitaler Signaturen realisiert werden.<br />

Die Verfügbarkeit des Fahrtenbuches ist abhängig von der<br />

Verfügbarkeit der einzelnen Dienste zu denen auch die<br />

<strong>Zugriffskontrolle</strong> gehört. Wenn der Dienst „<strong>Zugriffskontrolle</strong>“<br />

ausfällt, kann kein Benutzer mehr die Fahrtenbuch-Anwendung<br />

nutzen. Um die Verfügbarkeit zu gewährleisten, sind andererseits<br />

aber auch skalierbare Hardware und Software notwendig.<br />

Die im Rahmen dieser Arbeit realisierte anwendungsunabhängige<br />

<strong>Zugriffskontrolle</strong> ermöglicht aber auch beim Ausfall eines<br />

Sicherheitsdienstes die Nutzung der Anwendungssoftware,<br />

allerdings ohne Prüfung der Zugriffsberechtigung. Um eine solche<br />

Situation zu vermeiden, wurde die Sicherheitslösung möglichst<br />

modular aufgebaut, so dass man relativ einfach diese<br />

Sicherheitslösung durch ein anderes Sicherheitssystem austauschen<br />

kann.<br />

Verbindlichkeit<br />

Für die Verbindlichkeit wichtiger Aktionen (wie z.B. das Erstellen<br />

von Fahrtbuch-Einträgen) ist es notwendig, alle Aktionen zu<br />

protokollieren. Eine solche Funktionalität müsste daher noch<br />

implementiert werden.<br />

Tabelle 8: <strong>Entwurf</strong>sziele dieser Arbeit<br />

34


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

4.1.2 Die Einteilung der Sicherheitsfunktionen in Pakete<br />

Pakete sind ein Mechanismus, um Modellelemente (z.B. Java Klassen) zu Gruppen<br />

zusammenzufassen (vgl. [Bal99] S. 267). In der Implementierungsphase werden die<br />

Java-Klassen eines Paketes in Form von Unterverzeichnissen des Projektverzeichnisses<br />

abgelegt. Folgende Pakete wurden definiert:<br />

Pakete für eine Sicherheitsarchitektur für einen Fahrtenbuch-Dienst<br />

Zugriffskontroll-<br />

Dienste<br />

Konfigurations-<br />

Dienste<br />

Das Paket „Zugriffskontroll-Dienste“ stellt Dienste für die<br />

Autorisierung von Benutzerzugriffen bereit. Oft wird<br />

Autorisierung auch durch eine „Authentifizierung“ und ein<br />

„Auditing“ ergänzt.<br />

Das Paket „Konfigurations-Dienste“ wird benötigt, um<br />

Einstellungen für die Sicherheitslösung zu verwalten. Dies<br />

umfasst zum einen die Zusammenstellung der Sicherheitslösung<br />

wie auch die anwendungsspezifische Anpassung der<br />

Sicherheitsdienste an ein Anwendungsprogramm.<br />

Tabelle 9: Pakete für eine Sicherheitsarchitektur für einen Fahrtenbuch-Dienst<br />

Ein weiteres vorgesehenes Paket „Kryptographie und Digitale Signaturen“ (siehe<br />

Abbildung 10) für das Schlüsselmanagement (vgl. [Eck01] S. 265 ff.),<br />

Verschlüsselungsmethoden (vgl. [Sch96]) und Funktionen für die Erstellung und<br />

Verifizierung von digitalen Signaturen (vgl. [Eck01] S. 235 ff.), wurde aufgrund des<br />

Umfangs und des beschränkten zeitlichen Rahmens nicht realisiert.<br />

Abbildung 10: Sicherheitspakete (eigene Darstellung)<br />

Die parallel zu dieser Arbeit entwickelte Fahrtenbuch-Anwendung enthält wichtige<br />

Funktionen für den Betrieb von verteilten Fahrtenbüchern. Sie nutzt das Autorisierungs-<br />

35


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Paket zur Realisierung <strong>einer</strong> <strong>Zugriffskontrolle</strong>. Die folgende Abbildung gibt einen<br />

groben Überblick über die Architektur der <strong>Zugriffskontrolle</strong> und der als<br />

Beispielanwendung genutzten Fahrtenbuchanwendung.<br />

Abbildung 11: Architektur der <strong>Zugriffskontrolle</strong> (eigene Darstellung)<br />

Zum Einsatz kommen eine XML-Datenbank (vgl. [Mei02]) zur Speicherung der Daten<br />

und Java Klassen zur Realisierung der Zugriffskontrollfunktionalität. Ergänzt werden<br />

diese durch eine Benutzerschnittstelle für die Verwaltung der Zugriffskontrollregeln.<br />

4.1.3 Das MIX-Datenmodell<br />

Die Pakete „Zugriffskontroll-Dienst“ und „Konfigurations-Dienste“ verwenden<br />

Datenelemente, wie z.B. eine Zugriffsregel oder ein Konfigurationseintrag. Diese<br />

Datenelemente werden mit Hilfe des MIX-Datenmodells definiert und implementiert.<br />

MIX (Metadata based Integration model for data X-change) ist ein sich selbst<br />

beschreibendes Datenmodell (vgl. [Bor98] und [Bor99]). Jedes Element der<br />

<strong>Zugriffskontrolle</strong>, das einen besonderen Bestandteil der <strong>Zugriffskontrolle</strong> repräsentiert,<br />

wird durch MIX-Klassen (im Folgenden auch Ontologie genannt) realisiert. In den<br />

Zugriffskontroll-Diensten werden anstelle einfacher oder komplexer Datentypen diese<br />

Ontologien eingesetzt, wodurch eine bessere Nachvollziehbarkeit des Quellcodes<br />

möglich wird.<br />

An einem Beispiel soll dies kurz erläutert werden. Eine Zugriffsregel setzt sich<br />

zusammen aus Benutzern mit <strong>einer</strong> Benutzeridentifikation, geschützten Objekten und<br />

Zugriffsrechten. Modelliert man diese als Klassen und die Benutzeridentifikation als<br />

Datentyp „String“, so kann es geschehen, dass die Benutzeridentifikation an <strong>einer</strong> Stelle<br />

mit „String userId“ und an <strong>einer</strong> anderen Stelle mit „String id“ deklariert wird. Leichter<br />

nachvollziehbar wird der Code wenn die Ontologie „UserIdentifikation“ verwendet<br />

wird. Die Deklaration „UserIdentifikation userId“ wird somit eindeutig. Aus der<br />

36


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Ontologie „UserIdentifikation“ kann man außerdem erfahren, was der Zweck <strong>einer</strong><br />

Benutzeridentifikation ist und aus welchen Elementen eine Benutzeridentifikation<br />

besteht.<br />

Zur Modellierung einfacher Datenelemente bietet MIX „Simple Semantic Objects“ an.<br />

Diese repräsentieren atomare Datenelemente in Form von Tripeln wobei C<br />

einem Konzept aus der verwendeten Ontologie entspricht und v den aktuellen Wert<br />

dieses Konzepts wiedergibt. Außerdem werden in $ Zusatzinformationen zur Verfügung<br />

gestellt, so dass ein Mensch oder eine Maschine die Bedeutung des Datenelements<br />

nachvollziehen kann. Ein „Simple Semantic Object“ wäre z.B.:<br />

<br />

Um komplexe Ontologien darzustellen, verwendet MIX „Complex Semantic Objects“<br />

(vgl. [Bor98] S. 28 ff.). Hiermit können komplexe Datenelemente, wie eine<br />

Zusammenstellung von Zugriffsregeln, beschrieben werden. Ein „Compex Semantic<br />

Object“ wird repräsentiert in Form eines Paares . C stellt wiederum ein Konzept<br />

dar. A entspricht <strong>einer</strong> Menge von „Simple Semantic Objects“. Ein Beispiel für ein<br />

„Complex Semantic Object“ ist z.B. ein Benutzer, der eine Benutzeridentifikation und<br />

einen Namen hat.<br />

<br />

Die unterstrichenen Elemente sind Pflicht-Elemente, d.h. sie müssen in dieser Ontologie<br />

definiert werden.<br />

4.2 Die Architektur des Zugriffskontrollsystems<br />

4.2.1 Der Sicherheitsproxy<br />

Um sich Fahrtenbuch-Einträge anzeigen zu lassen und um sie zu ändern, muss überprüft<br />

werden, ob der Benutzer das Recht hat, die Daten zu lesen bzw. zu ändern. Zwar<br />

verfügen heutige Server (und in Zukunft wohl auch Fahrzeugcomputer) über einen<br />

umfangreichen Schutz durch das Betriebssystem, dieser reicht aber nicht aus, um<br />

anwendungsspezifische Besonderheiten durch spezielle Schutzmaßnahmen zu sichern.<br />

37


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Abbildung 12: Autorisierung von Fahrtenbuch-Zugriffen (vgl. [BHH01] S. 323)<br />

Der Zugriff auf den Fahrtenbuch-Dienst auf einem Server wird durch eine Art Mittler<br />

zwischen mobilen Geräten bzw. Personal Computer geschützt. Dieser wird im<br />

Folgenden auch „Proxy“ genannt, da er ähnlich einem Proxy Zugriffe auf die<br />

Anwendung abfängt, überprüft und im Erfolgsfall weiterleitet. Wie diese Funktionalität<br />

mit Hilfe aspektorientierter Programmierung realisiert wird, wird im Kapitel<br />

„Implementierung“ erläutert.<br />

In Anlehnung an einen Proxy verläuft ein Zugriff in folgenden Einzelschritten<br />

1. Ein Benutzer ruft in der Fahrtenbuch-Anwendung eine Funktion auf oder greift auf<br />

ein Anwendungsobjekt zu. Diese Benutzeraktionen werden vom Sicherheitsproxy<br />

abgefangen und überprüft.<br />

2. Mit Hilfe der Benutzerverwaltung des Anwendungsdienstes wird dazu ermittelt, ob<br />

es eine existierende Benutzersitzung gibt. Der Sicherheitsproxy benötigt von der<br />

Benutzersitzung zudem die aktuelle Benutzerkennung und weitere Daten, wie z.B.<br />

Gruppenzugehörigkeiten.<br />

3. Falls keine Sitzung vorhanden ist, da z.B. der Zeitrahmen der aktuellen Sitzung<br />

überschritten ist, veranlasst der Proxy (oder das Anwendungsprogamm) eine<br />

Benutzerauthentifizierung.<br />

4. Der Anwendungsdienst prüft nun, ob der Benutzer authentifiziert ist. Um zu<br />

verhindern, dass Benutzer jeden ihrer Zugriffe authentifizieren müssen, wird das<br />

Konzept der Sitzung (engl. session) verwendet.<br />

38


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

5. Nach erfolgreicher Anmeldung erzeugt der Anwendungsdienst eine neue Sitzung.<br />

6. Nun könnte vom Sicherheitsproxy nochmals überprüft werden, ob der Benutzer sich<br />

authentifiziert hat. Da sich das Anwendungsprogramm aber um die<br />

Authentifizierung kümmert, wird dieser Schritt weggelassen.<br />

7. Stattdessen wird nochmals der Status der Sitzung überprüft und die<br />

Benutzerkennung ausgelesen. Diese wird im Folgenden für die Überprüfung der<br />

Zugriffsrechte dieses Benutzers verwendet.<br />

8. Nachdem der Proxy alle benötigten Daten (Benutzer, Informationen über die<br />

ausgewählte Aktion und über die angefragten Anwendungsobjekte) für die<br />

Zugriffskontrollprüfung gesammelt hat, ruft er den Zugriffskontrolldienst auf, der<br />

sich um die Prüfung der Zugriffskontrollregeln und die Zugriffe auf die Datenbank<br />

kümmert.<br />

9. War die Zugriffskontrollprüfung erfolgreich, so wird die eigentliche<br />

Anwendungsfunktion mit den benötigten Parametern aufgerufen. Andernfalls wird<br />

eine Fehlermeldung ausgegeben oder eine bestimmte Ausnahmebehandlung<br />

ausgelöst (die Fehlerbehandlung <strong>mittels</strong> Ausnahmebehandlung ist bisher aber nicht<br />

realisiert worden).<br />

10. Nachdem das Anwendungsprogramm die Aktion ausgeführt hat, gibt es die Daten<br />

an den Aufrufer über die anwendungsspezifische Benutzerschnittstelle zurück, ohne<br />

dass der Sicherheitsproxy als Mittler eingesetzt wird.<br />

11. Tritt jedoch eine Zugriffsverweigerung ein, dann gibt der Sicherheitsproxy eine<br />

entsprechende Fehlermeldung an den Aufrufer zurück.<br />

4.2.2 Die Verwaltung der Zugriffsregeln<br />

Die Zugriffsregeln dieser Sicherheitslösung werden in Form von „Policies“ (vgl.<br />

[DBS02] S. 4 ff.) realisiert. Eine Policy repräsentiert in dieser Arbeit eine einzelne<br />

Zugriffsregel, die ähnlich wie eine Event-Condition-Action Regel (vgl. [CiB02] S. 2 f.)<br />

aus drei Teilen besteht:<br />

1. einem Benutzer, der den Zugriff veranlasst hat,<br />

2. <strong>einer</strong> Bedingung, die erfüllt sein muss, damit die aufgerufene Methode ausgeführt<br />

werden kann<br />

3. und <strong>einer</strong> Liste von Elementen, auf die der Aktion Zugriff gewährt wird.<br />

39


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Policies können zu so genannten „PolicySets“ kombiniert werden und als ein<br />

„PolicySet“ einem zu schützenden Anwendungsobjekt zugewiesen werden. Greift nun<br />

ein Benutzer auf dieses Objekt zu, so erhält er nur Zugriff, wenn die Kombination aus<br />

dem Benutzer, dem angefragten Feld (bzw. dem ganzen Objekt) und dem benötigten<br />

Zugriffsrecht in <strong>einer</strong> der Policies des „PolicySets“ definiert ist. Die Policy-Verwaltung<br />

stellt somit den zentralen Dienst für die Steuerung der <strong>Zugriffskontrolle</strong> dar.<br />

Unterstützt wird die Policy-Verwaltung durch drei weitere Dienste, die sich um die<br />

Verwaltung der Benutzer und Benutzergruppen, um die Verwaltung der zu schützenden<br />

Aktionen und um die Verwaltung der zu schützenden Klassen kümmern.<br />

Der zentrale Policy-Dienst wird in Anlehnung an das „Butterfly Modell“ (vgl. [Nor01]<br />

S. 6 f.) von drei weiteren Zusatzdiensten unterstützt. Das Butterfly-Modell ähnelt<br />

rollenbasierten Systemen (vgl. [FBK99], [FSG01] und [Fis02]). Die grundlegenden<br />

Objektarten im Butterfly Modell sind jedoch Benutzer, Ressourcen und Aktionen.<br />

Beziehungen zwischen diesen Objekten werden <strong>mittels</strong> Rechten geregelt. Zudem<br />

können Benutzer und Ressourcen zu Gruppen zusammengefasst werden. Der Name<br />

„Butterfly-Modell“ kommt daher, dass das Modell aussieht wie ein Schmetterling mit<br />

zwei großen Flügeln (die Benutzer und Ressourcen-Verwaltung, die beide Gruppen<br />

unterstützen) sowie einem kürzeren Schwanz, der die Aktionsverwaltung darstellt.<br />

Abbildung 13 : Das Butterfly-Modell (vgl. [Nor01] S. 6 f.)<br />

40


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Der Benutzerdienst verwaltet beispielsweise einen Baum aus Benutzern und<br />

Benutzergruppen, die Ressourcenverwaltung einen Baum aus geschützten<br />

Anwendungsklassen (und deren Felder und Objekte) und die Aktions-Verwaltung eine<br />

Liste von Aktionen pro geschützter Anwendungsklasse. Da auch das<br />

Benutzerprogramm eine Benutzer- und Benutzergruppenverwaltung benötigt, wird<br />

diese verwendet. Idealerweise gibt es aber eine zentrale Benutzeradministration, die von<br />

mehreren Anwendungsprogrammen genutzt werden kann und mit der ein Single-Sign-<br />

On möglich ist. Auf diese Weise müsste sich der Anwender nur einmal bei der zentralen<br />

Benutzerverwaltung anmelden, anstatt sich bei jedem Anwendungsprogramm einzeln<br />

anmelden zu müssen.<br />

Aus Zeitgründen wird in dieser Arbeit jedoch darauf verzichtet, hierarchische Benutzerund<br />

Ressourcengruppen zu realisieren. Stattdessen können Benutzer und Ressourcen<br />

nur in eine Benutzer- bzw. Objekttypklasse eingeteilt werden. Würde eine hierarchische<br />

Gruppenbildung unterstützt, so müssten <strong>einer</strong>seits zyklenfreie Graphen verwaltet<br />

werden, andererseits würde die Rechteprüfung einen Suchalgorithmus zum Auffinden<br />

von Rechtekombinationen in den Graphen benötigen (vgl. [Nor01] S. 14).<br />

4.2.3 Die Benutzerschnittstelle für die Policy-Verwaltung<br />

Der Benutzer kann über eine Benutzerschnittstelle auf die Daten der <strong>Zugriffskontrolle</strong><br />

zugreifen. In einem ersten Fenster sieht er eine Liste von „PolicySets“, die eine<br />

Zusammenstellung von Zugriffsregeln zu einem Anwendungsobjekt darstellen. Damit<br />

mehrere Anwendungsobjekte durch ein PolicySet geschützt werden können, kann der<br />

Benutzer diese <strong>mittels</strong> <strong>einer</strong> selbstdefinierbaren Kategorie, wie z.B. „alle meine<br />

Privatfahrten“ gruppieren. Wie „PolicySets“ erzeugt werden, wird im nächsten Kapitel<br />

erläutert.<br />

Abbildung 14: „PolicySet“ Fenster (eigene Darstellung)<br />

41


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Selektiert der Benutzer in der Tabelle einen „PolicySet“ und drückt die Schaltfläche<br />

„Change“, so gelangt er zu einem weiteren Fenster, in dem alle Zugriffsregeln, die im<br />

ausgewählten „PolicySet“ definiert sind, aufgelistet werden.<br />

Eine Zugriffsregel (hier auch „Policy“ genannt) besteht aus <strong>einer</strong> Liste von Benutzern,<br />

<strong>einer</strong> Liste von Feldern und Objekten des geschützten Anwendungsobjektes und <strong>einer</strong><br />

Liste von Zugriffsrechten. Wenn alle Elemente (z.B. Objekte) zugelassen werden<br />

sollen, kann stattdessen auch das Schlüsselwort „all“ verwendet werden.<br />

Abbildung 15: „Policy“ Fenster (eigene Darstellung)<br />

Wählt man nun eine „Policy“ aus der Tabelle, kann man diese in einem weiteren<br />

Fenster editieren. Wie diese festgelegt werden können, wird im übernächsten Kapitel<br />

unter Konfiguration erläutert.<br />

4.3 Die Zugriffsverwaltung<br />

Das Paket “Security” besteht aus den drei Teilpaketen „Security.Authorization“,<br />

„Security.Configuration“ und „Security.UserInterface“.<br />

Das Teilpaket “Security.Authorization” enthält die Klassen, die für die Realisierung des<br />

Sicherheitsproxies benötigt werden (v.a. den Aspekt „AbstractAuthentifikationAspect“,<br />

der im Kapitel Implementierung erläutert wird). Zusatzdienste für die Verwaltung der<br />

Aktionen, Objekte und Zugriffsregeln, sind in den Teilpaketen<br />

„Security.Authorization.ActionService“, „Security.Authorization.ObjectService” und<br />

“Security.Authorization.PolicyService” definiert.<br />

Alle Klassen für die Verwaltung der Konfiguration sind im Teilpaket<br />

„Security.Configuration” gespeichert, alle Klassen der Benutzerschnittstelle der<br />

<strong>Zugriffskontrolle</strong> sind im Paket „Security.UserInterface“ abgelegt.<br />

42


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

4.3.1 Die Verwaltung der Policy-Dateien<br />

Die Zugriffsverwaltung (hier auch PolicySet-Dienst genannt) kümmert sich um die<br />

Verwaltung der Zugriffsrechte. Hierzu ordnet sie „Policies“ einem Objekt oder <strong>einer</strong><br />

Objektgruppe zu. Sie ist gemäß des <strong>Entwurf</strong>smusters „Singelton“ konzipiert worden<br />

(vgl. [Bal99] S. 287 ff.). Das bedeutet, dass es immer nur eine einzige Instanz<br />

„PolicySetService“ gibt, die von allen Klassen im Paket „Security“ angesprochen<br />

werden kann.<br />

Die wichtigste Funktion der Zugriffsverwaltung ist die Überprüfung der Zugriffe auf<br />

geschützte Objekte bzw. Methoden. Der Ablauf dieser Zugriffsprüfung ist im folgenden<br />

Sequenzdiagramm in Abbildung 16 dargestellt.<br />

Abbildung 16: Sequenzdiagramm „Zugriffskontrollprüfung“ (eigene Darstellung)<br />

Folgende Schritte werden im Wesentlichen durchgeführt:<br />

1. Ein Funktionsaufruf wird vom Sicherheitsproxy (die Klasse<br />

„AbstractAuthorizationAspect“) abgefangen.<br />

2. Der Sicherheitsproxy nutzt die Aktionsverwaltung, um zu überprüfen, ob die<br />

Aktion zu den geschützten Aktionen gehört.<br />

3. Der Proxy (bzw. der Aspekt) ruft eine Funktion der Klasse Policy-Verwaltung<br />

(hier „PolicySetService“) auf, die die Zugriffsrechteprüfung bearbeitet.<br />

4. Um an das zugehörige „PolicySet“ zu gelangen („getPid“), verwendet die<br />

Policy-Verwaltung eine Klasse „oidPidMap“, die eine Tabelle für die<br />

Zuordnung von PolicySet-Identifikationen zu Objekten verwaltet.<br />

43


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

5. Anschließend durchsucht die Policy-Verwaltung alle vorhandenen<br />

Zugriffsregeln des ausgewählten „PolicySets“ nach <strong>einer</strong> Übereinstimmung mit<br />

den aktuellen Parametern für den Benutzer, das angefragte Objekt und die<br />

verwendete Methode (<strong>mittels</strong> „queryAccessRights“).<br />

6. Dazu verwendet sie die Funktion „queryAsResourceSet“, die die XML-<br />

Datenbank mit den angegebenen Daten <strong>mittels</strong> <strong>einer</strong> XPath-Anfrage durchsucht.<br />

7. Wenn die Bearbeitung erfolgreich war, dann kann die eigentliche Funktion<br />

ausgeführt werden, andernfalls wird die Funktion „treatAccessDenied“<br />

aufgerufen, die je nach Einstellung eine Fehlermeldung oder einen besonderen<br />

Rückgabewert zurückgibt.<br />

4.3.2 Die Benutzerverwaltung<br />

Die Benutzerverwaltung kümmert sich um die Verwaltung der Benutzer, der<br />

Benutzergruppen und um die Authentifizierung von Benutzern. Da das<br />

Anwendungsprogramm in der Regel diese Daten selbst verwaltet, wird eine<br />

Schnittstelle hierfür zum Anwendungsprogramm benötigt. Idealerweise wird die<br />

Benutzerverwaltung aber als eigener Dienst realisiert, so dass mehrere<br />

Anwendungsprogramme diesen nutzen können.<br />

Zu jeder Benutzersitzung wird ein Sicherheitsstatus erstellt, mit dessen Hilfe die<br />

<strong>Zugriffskontrolle</strong> abfragen kann, ob sich der Benutzer authentisiert hat, wie der<br />

Benutzername ist und, wenn Rollen verwendet werden, welche aktiven Rollen er hat.<br />

Des Weiteren könnten Angaben über die Art der Authentifikation hier festgehalten<br />

werden, wie die Authentifikationsmethode (Passwort, Smartcard, etc.).<br />

Der Sicherheitsstatus ist Teil der Sitzungsinformationen, d.h. es muss eine<br />

standardisierte Schnittstelle geben, mit der die Sicherheitslösung den Status abfragen<br />

bzw. setzen kann.<br />

Um diese Werte zu setzen und abzufragen, sind die in Abbildung 17 dargestellten<br />

Funktionen notwendig.<br />

44


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Sicherheitsstatus<br />

-BenutzerID : int<br />

-AuthStatus : int<br />

+getUserID()<br />

+getStatus()<br />

+setStatus()<br />

<br />

Sicherheitslösung<br />

Abbildung 17: Sicherheitsstatus<br />

Für ein Fahrtenbuch bietet sich die Authentifikation <strong>mittels</strong> Passwort an. Falls<br />

Änderungen signiert werden sollen, ist es aber sinnvoll ein Smartcard orientiertes<br />

Verfahren zu unterstützten.<br />

In <strong>einer</strong> weiteren Ausbaustufe kann die Sicherheitsverwaltung um einen Rollen-Dienst<br />

erweitert werden. Dieser müsste in die Benutzer- und Gruppenverwaltung integriert<br />

werden.<br />

4.3.3 Die Objektverwaltung<br />

Die Objektverwaltung ist ebenfalls eine Singelton Klasse. Für jede zu schützende<br />

Klasse speichert sie die spezifischen Schutzeinstellungen. Andere Dienste, wie der<br />

Sicherheitsproxy und die Zugriffsverwaltung, benutzen die Objektverwaltung, um die<br />

Schutzeinstellungen <strong>einer</strong> bestimmten Klasse abzufragen. Das folgende<br />

Sequenzdiagramm zeigt beispielhaft den Einsatz der Objektverwaltung bei der<br />

Zuweisung <strong>einer</strong> PolicySet-Identifikation zu einem neu erzeugtem Anwendungsobjekt.<br />

Abbildung 18: „Erzeugung eines neuen Objektes“ (eigene Darstellung)<br />

45


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Wenn ein neues Anwendungsobjekt erzeugt wird, werden die folgenden Schritte<br />

ausgeführt:<br />

1. Wenn ein neues Anwendungsobjekt erzeugt wird, erkennt dies der<br />

Sicherheitsproxy (die Klasse „AbstractAuthorizationAspect“).<br />

2. Dieser prüft mit Hilfe der Objekt-Verwaltung, ob es sich bei dem Objekt um<br />

eine zu schützende Anwendungsklasse handelt.<br />

3. Wenn ja, dann muss die Policy-Verwaltung diesem Objekt eine Policy<br />

zuweisen.<br />

4. Wenn der Benutzer bereits ein „PolicySet“ für diese Klasse und die von ihm<br />

gewählte Objekt-Klassifizierung (z.B. alle Fahrtenbucheinträge mit der<br />

Klassifikation Privat) hat, dann wird dem Objekt dieses „PolicySet“ zugeordnet.<br />

5. Andernfalls wird ein neues PolicySet erzeugt und dem Objekt zugewiesen.<br />

Es wird hier jedoch auf verschachtelte Objektgruppen verzichtet. Das Konzept kann<br />

aber entsprechend abgeändert werden. Dabei ist darauf zu achten, dass kein Zyklus im<br />

Objektgruppengraph entsteht, da eine Gruppe nicht in sich selbst enthalten sein kann.<br />

4.3.4 Die Aktionsverwaltung<br />

Genauso wie die Policy-Verwaltung ist auch die Aktionsverwaltung eine Singelton<br />

Klasse. Sie verwaltet die Einstellungen für alle zu schützenden Methoden. Die<br />

Aktionsverwaltung wird beispielsweise in dem Sequenzdiagramm in Abbildung 16<br />

verwendet.<br />

Für jede zu schützende Methode erzeugt die Aktionsverwaltung eine Ontologie<br />

„SecureAction“. Außerdem bietet sie Funktionen zum Erzeugen, Ändern, Einsehen und<br />

Löschen von den Ontologien „ObjectType“ und „Permission“ an (siehe Abbildung 19).<br />

Zugriffsrechte (engl. permissions) könnten z.B. wie folgt definiert sein:<br />

• Für get-Methoden Leserechte,<br />

• für set-Methoden Schreibrechte und<br />

• für delete-Methoden Löschrechte.<br />

46


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Die nachträgliche Identifikation geeigneter Methoden ist relativ aufwendig und es kann<br />

auch vorkommen, dass die Anwendungsklassen angepasst werden müssen, um einen<br />

ausreichenden Schutz zu erzielen.<br />

Die folgende Abbildung zeigt die Klasse „ActionService“ mit einigen ihrer Attribute<br />

und Methoden. Auf diese soll hier nicht weiter eingegangen werden. Abgebildet sind<br />

auch die zugeordneten Ontologien. Aus welchen weiteren Ontologien sich diese (und<br />

die der anderen Dienste) im Einzelnen zusammensetzen, wird im nächsten Abschnitt<br />

erläutert.<br />

Abbildung 19: Klassendiagramm Aktionsverwaltung (eigene Darstellung)<br />

4.4 Das semantische Datenmodell zur Zugriffsverwaltung<br />

MIX-Ontologien wurden bereits im Kapitel 4.1.3 erläutert. Zum Paket „Ontology“ des<br />

Fachgebietes „Datenbanken und verteilte Systeme“ wurden in dieser Arbeit folgende<br />

Pakete hinzugefügt:<br />

1. Ontology.Security.Authorization.ActionService<br />

2. Ontology.Security.Authorization.ObjectService<br />

3. Ontology.Security.Authorization.PolicyService<br />

4. Ontology.Security.Configuration<br />

Im Paket „Ontology.Security.Authorization“ sind Ontologien abgelegt, die für die<br />

Realisierung der <strong>Zugriffskontrolle</strong> benötigt werden. Gemäß den verwendeten<br />

Dienstklassen gibt es drei Teilpakete, deren Ontologien im Folgenden erläutert werden.<br />

Zusätzlich gibt es noch das Paket “Ontology.Security.Configuration”, das Ontologien,<br />

die für die Konfiguration benötigt werden, enthält.<br />

47


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

4.4.1 Ontologien für die Zugriffsverwaltung<br />

Ein „PolicySet“ ist eine Zusammenstellung von Policies. Da ein „PolicySet“ ein<br />

komplexes Datenelement repräsentiert, beerbt sie die Ontologie<br />

„ComplexSemanticObject“. Jedes „PolicySet“ verfügt über eine Identifikationsnummer<br />

und über eine oder mehrere Eigentümer.<br />

Abbildung 20: „PolicySet“ dargestellt als Klassendiagramm (eigene Darstellung)<br />

„PolicySets“ können Anwendungsobjekten <strong>einer</strong> festgelegten Klasse zugeordnet<br />

werden, wodurch alle Felder der Klasse geschützt werden. Die Felder der Klasse kann<br />

man anschließend in den einzelnen Zugriffsregeln auswählen und eine<br />

Zugriffsbedingung für einen oder mehrere Benutzer festlegen.<br />

Dargestellt als MIX-Ontologie (vgl. [Bor99] S. 37) sehen „PolicySets“ wie folgt aus.<br />

1.


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Das Element „ObjectGroup“ ist optional. Wenn es definiert wird, dann bezieht sich das<br />

„PolicySet“ nicht auf alle Instanzen <strong>einer</strong> Klasse, sondern nur auf die Instanzen dieser<br />

Objektgruppe. Hiermit ist es beispielsweise möglich, alle privaten Fahrtenbucheinträge<br />

eines Fahrers mit diesem „PolicySet“ zu erfassen.<br />

In dieser Arbeit definieren „Policies“ Zugriffsrechte in Form von Tripeln aus<br />

Benutzern, Feldern und Zugriffsbedingungen. Das erste Tripel-Element legt die<br />

beteiligten Benutzer oder Benutzergruppen fest. Das zweite Element definiert die<br />

Felder, so dass nicht für jedes Feld im geschützten Anwendungsobjekt ein eigenes<br />

„PolicySet“ angelegt werden muss. Und das dritte Element bestimmt die<br />

Zugriffsbedingungen, die erfüllt sein müssen, damit auf das Objekt mit der festgelegten<br />

Aktion zugegriffen werden darf.<br />

Zugriffsbedingung könnten z.B. eine bestimmte Benutzerrolle sein oder die<br />

Zugehörigkeit zu <strong>einer</strong> Personengruppe. Diese Arbeit beschränkt sich aber auf die<br />

Zuordnung zu einfachen Zugriffsrechten wie Lese-Recht, Schreib-Recht oder Lösch-<br />

Recht.<br />

Eine Policy eines PolicySets für ein Fahrtenbuch könnte dann wie folgt aussehen:<br />

1.


<strong>Entwurf</strong>: Policy-basierte <strong>Zugriffskontrolle</strong><br />

Abbildung 23: Klassendiagramm: „geschützte Klasse“ (eigene Darstellung)<br />

Außerdem enthält die Objektverwaltung Ontologien für die Abbildung von Feldern<br />

<strong>einer</strong> Klasse. Hierzu werden für jedes geschützte Objekt eine Liste von Feldern und eine<br />

eindeutige Feldidentifikation benötigt.<br />

4.4.3 Ontologien für die Aktionsverwaltung<br />

Nachdem die Rechteprüfung erfolgreich durchgeführt wurde, kann die gewünschte<br />

Aktion ausgeführt werden. Wird der Zugriff jedoch verweigert, dann muss eventuell<br />

eine alternative Aktion aufgerufen werden. Dabei kann es sich um eine Fehlermeldung<br />

handeln oder auch um eine speziell dafür vorgesehene Funktion.<br />

Mit Hilfe der Ontologie „SecureAction“ wird festgelegt, welche Aktion bzw.<br />

Fehlermeldung ausgeführt werden soll (siehe Abbildung). Die alternative Methode kann<br />

dann <strong>mittels</strong> des „Java Reflection“ Mechanismus durch „invoke“ aufgerufen werden.<br />

1. <br />

Abbildung 24: Die Ontologie „geschützte Aktionen“ (eigene Abbildung)<br />

Zusätzlich werden Ontologien für die Definition von Methodenargumenten<br />

(insbesondere zur Festlegung, ob und wie eine Benutzersitzung übergeben wird) und für<br />

die Definition des benötigten Zugriffsrechtes (engl. permission) verwendet.<br />

50


Implementierung der <strong>Zugriffskontrolle</strong><br />

5 Implementierung der <strong>Zugriffskontrolle</strong><br />

Das folgende Kapitel beschreibt die Implementierung der Zugriffskontrolllösung. Zuerst<br />

wird erläutert, wie die aspektorientierte <strong>Zugriffskontrolle</strong> im Allgemeinen realisiert<br />

wurde. Anschließend werden die verwendeten Technologien für die Speicherung, den<br />

Zugriff und die Verarbeitung der Zugriffsregeln der policy-basierten <strong>Zugriffskontrolle</strong><br />

beschrieben.<br />

5.1 Aspektorientierte <strong>Zugriffskontrolle</strong><br />

Ziel dieser Arbeit ist es, eine möglichst anwendungsunabhängige <strong>Zugriffskontrolle</strong> zu<br />

realisieren. Dies soll mit Hilfe eines Aspektes „Autorisierung“ erreicht werden. Alle in<br />

diesem definierten Zugriffskontrollaufrufe werden, ohne dass ein Anwendungsprogrammierer<br />

dies programmieren muss, zur Übersetzungszeit automatisch in die<br />

Anwendungsklassen hineinübersetzt.<br />

5.1.1 Der anwendungsspezifische Autorisierungsaspekt<br />

Die Beispielanwendung “Fahrtenbuch”, die in <strong>einer</strong> zweiten Diplomarbeit entwickelt<br />

wurde, soll nun mit Hilfe dieser <strong>Zugriffskontrolle</strong> geschützt werden.<br />

Um dies zu erreichen, ist ein Bindeglied in Form eines „Autorisierungs“-Aspektes<br />

zwischen der Fahrtenbuch-Anwendung und der Sicherheitslösung notwendig. Die<br />

folgende Abbildung stellt einen Ausschnitt aus diesem Aspekt dar.<br />

1. public aspect AuthorizationAspect extends<br />

AbstractAuthorizationAspect{<br />

2. public pointcut Initialization()<br />

3. : call(* *.main(..));<br />

4.<br />

5. declare parents: Logbook..* implements SecuredClasses;<br />

6.<br />

7. public pointcut SecuredObjectsConstructors()<br />

8. : execution(Ontology.BasicObject.DataSet.new(..));<br />

9.<br />

10.public UserIdentification getUserId(Object object)…<br />

11.public ObjectIdentification getObjectId(Object object)…<br />

12.public ObjectGroupIdentification getObjectGroup(Object<br />

object) …<br />

Abbildung 25: Der Fahrtenbuch spezifische Autorisierungsaspekt<br />

Soll anstelle der Fahrtenbuch-Anwendung eine andere Anwendung geschützt werden,<br />

dann ist in der Datei in der Zeile 5 das Paket dieser Anwendung anzugeben. Die<br />

Zeichen „..*“ hinter „Logbook“ bedeuten, dass auch alle Unterpakete des Paketes<br />

51


Implementierung der <strong>Zugriffskontrolle</strong><br />

„Logbook“ berücksichtigt werden sollen. Alle eingebundenen Pakete bzw. Klassen<br />

implementieren damit die Schnittstelle „SecuredClasses“, die als Stellvertreterobjekt für<br />

diese Klassen fungiert.<br />

Ideal wäre, wenn Anwendungsprogrammierer überhaupt keinen Code ändern müssten<br />

und auf die Definition von neuen Paketen im Autorisierungsaspekt verzichten könnten.<br />

Um dies zu erreichen, könnte man anstelle von Zeile 5 auch folgendes definieren:<br />

declare parents: *..* implements SecuredClasses;<br />

Hierdurch werden alle Pakete, die der Compiler findet, eingebunden. Aus<br />

Leistungsgründen und aufgrund möglicher zirkulärer Beziehungen wird hierauf<br />

verzichtet. Trotzdem ist <strong>mittels</strong> dieses Vorgehens eine schnellere Einbindung <strong>einer</strong><br />

Sicherheitslösung möglich, als wenn ein Sicherheits-Framework verwendet wird, da die<br />

Einbindung der <strong>Zugriffskontrolle</strong> fast ohne Programmieren erfolgen kann. Anpassungen<br />

können stattdessen durch einfaches Konfigurieren eingearbeitet werden.<br />

Falls doch programmiersprachliche Anpassungen notwendig werden, so sollten sie in<br />

dieser anwendungsspezifischen Aspektklasse erfolgen. Beim Fahrtenbuch waren<br />

folgende Änderungen notwendig.<br />

Das Fahrtenbuch kümmert sich selbst, um die Verwaltung s<strong>einer</strong> Benutzer und um die<br />

Authentifizierung. Um an die aktuelle Benutzeridentifikation zu gelangen, bietet der<br />

anwendungsspezifische Autorisierungsaspekt eine abstrakte Methode „getUserId“ an,<br />

die zu implementieren ist. In der Fahrtenbuch-Anwendung wird beispielsweise eine<br />

Sitzung bei jedem Methodenaufruf übergeben. Aus diesem Sitzungsobjekt wird <strong>mittels</strong><br />

der Methode „getUserId“ die aktuelle Benutzeridentifikation extrahiert.<br />

1. public UserIdentification getUserId(Object object){<br />

2. Session session = ((Session)object);<br />

3. String id = session.getUserID();<br />

4. return new UserIdentification(id);<br />

5. }<br />

Abbildung 26: Die Methode “getUserId” (eigene Abbildung)<br />

Weitere Anpassungen waren notwendig für die Ermittlung der Objektidentifikation, da<br />

die Objektidentifikation der Fahrtenbuch-Elemente verwendet werden sollte. Alternativ<br />

könnten auch die Objektreferenz als Objektidentifikator oder die Identifikationen der<br />

Ontologie „Complex Semantic Object“ verwendet werden. Des Weiteren wurde auch<br />

52


Implementierung der <strong>Zugriffskontrolle</strong><br />

noch die Objektgruppe, zu der das Objekt gehört, mit der Funktion “getObjectGroup”<br />

ermittelt.<br />

5.1.2 Der anwendungsunabhängige Autorisierungsaspekt<br />

Der anwendungsspezifische Autorisierungsaspekt erbt die eigentliche Funktionalität<br />

von einem anwendungsunabhängigen Autorisierungsaspekt. Dieser definiert Pointcuts<br />

(siehe Abschnitt 3.3.4) für Zugriffskontrollaufrufe und für die Zuweisung von Policy-<br />

Dateien.<br />

Der Pointcut „AuthorizationOperations“ webt in alle eingebundenen Methodenaufrufe<br />

ein Zugriffskontrollaufruf ein (siehe Abbildung 27 Zeile 5). Es werden aber nicht alle<br />

Methodenaufrufe überprüft, sondern nur solche, die durch die Konfiguration als<br />

sicherheitsrelevant eingestuft sind.<br />

1 public aspect AbstractAuthorizationAspect{<br />

2 public interface SecuredClasses{String ID=““;};<br />

3 …<br />

4 protected pointcut AuthorizationOperations()<br />

5 : call(* SecuredClasses+.*(..)) &&<br />

6 if(isAction(thisJoinPointStaticPart.<br />

getSignature().getName(),<br />

thisJoinPointStaticPart.getSignature()<br />

.getDeclaringType().getName()<br />

7 ));<br />

8 …<br />

9 Object around() : AuthorizationOperations() {<br />

10 …<br />

11 }<br />

Abbildung 27: Pointcut: „AuthorizationOperations“ (eigene Darstellung)<br />

Damit die Funktion „isAction“ in der Konfiguration nachschauen kann, werden ihr alle<br />

notwendigen Daten über die Methode <strong>mittels</strong> “thisJoinPointStaticpart.getSignature”<br />

übergeben. Wenn die Prüfung erfolgreich war, dann werden alle zugehörigen Advices<br />

ausgeführt. Auf diese Weise wird der Advice in Zeile 9 aufgerufen, der die Zugriffskontrollprüfung<br />

durchführt, und der festlegt, was geschieht, wenn der Aufruf nicht<br />

zugelassen wird.<br />

Als weiteren Pointcut definiert der anwendungsunabhängige Autorisierungsaspekt den<br />

Pointcut „Initialization“, der dafür zuständig ist, beim Start des Anwendungsprogramms<br />

die Sicherheitsdienste, wie die Policy-Verwaltung (Abbildung 28 Zeile 7), die Objekt-<br />

Verwaltung (Zeile 8) und die Aktions-Verwaltung (Zeile 9) zu starten.<br />

53


Implementierung der <strong>Zugriffskontrolle</strong><br />

1. public abstract aspect AbstractAuthorizationAspect{<br />

2. …<br />

3. public abstract pointcut Initialization();<br />

4. after(): Initialization() { // Read configuration<br />

5. configuration = Configuration.getInstance();<br />

6.<br />

7. configuration.startService(„PolicyService“);<br />

8. configuration.startService(„ObjectService“);<br />

9. configuration.startService(„ActionService“);<br />

10. }<br />

11. …<br />

12.}<br />

13.<br />

Abbildung 28: Pointcut „Initialization“ (eigene Darstellung)<br />

Ein weiterer wichtiger Pointcut ist “SecuredObjectConstructors”. Dieser wird ausgelöst,<br />

wenn ein Objekt <strong>einer</strong> Klasse, die „SecuredClasses“ implementiert, erzeugt wird.<br />

Nachdem das Objekt erzeugt wurde, wird der Advice „after():<br />

SecuredObjectsConstructor“ ausgeführt, der diesem ein PolicySet entsprechend der<br />

Vorgaben der Konfigurationsdatei „ObjectConfiguration.xml“ zuweist.<br />

1. public abstract aspect AbstractAuthorizationAspect{<br />

2. …<br />

3. public abstract pointcut SecuredObjectsConstructors()<br />

4. …<br />

5. after() returning: SecuredObjectsConstructors(){<br />

6. if(isSecuredClass(thisJoinPointStaticPart.<br />

getSignature().getDeclaringType().getName() ));<br />

7. {<br />

8. …<br />

9. inialize.invoke(authService, new Object[]{userId,<br />

thisObject});<br />

10. …<br />

11. } …<br />

12.}<br />

Abbildung 29: Pointcut „SecuredObjectConstructors“ (eigene Darstellung)<br />

5.2 Implementierung der Policy-basierten <strong>Zugriffskontrolle</strong><br />

5.2.1 Speicherung von Policy Dateien in der XML Datenbank eXist<br />

Zur Speicherung der Zugriffsrechte und der Konfigurationsdateien wird die Open-<br />

Source-XML Datenbank eXist (vgl. [Mei03]) verwendet. Aus Effizienzgründen<br />

speichert eXist XML Dateien nicht in einem relationalen Datenspeicher, sondern in<br />

einem eigenen XML Datenspeicher (siehe Abbildung). Eine Schnittstelle zu<br />

relationalen Datenbanken ist aber auch vorhanden. Ähnlich wie die Speicherung von<br />

Dateien in Ordnerstrukturen, werden XML Dokumente in hierarchischen Kollektionen<br />

54


Implementierung der <strong>Zugriffskontrolle</strong><br />

gespeichert. Ist ein XML Dokument mit einem Schema Dokument oder <strong>einer</strong> DTD<br />

verknüpft, so wird beim Einfügen des Dokumentes dieses <strong>einer</strong> Validitäts-Prüfung<br />

unterzogen.<br />

Abbildung 30: Architektur von eXist (vgl. [Mei03] Abschnitt „Features“)<br />

Die Datenbank, die in Java implementiert ist, kann auf drei verschiedene Arten<br />

betrieben werden. Erstens als eigener Server Prozess, zweitens eingebettet in eine Java<br />

Anwendung oder drittens in Verbindung mit einem Servlet Container wie z.B. Tomcat<br />

(vgl. [ApaoJ]).<br />

Die folgende Abbildung zeigt eine XML-Datei für die Festlegung von Zugriffsrechten,<br />

die in der XML-Datenbank eXist im Verzeichnis „/db/policies“ gespeichert werden<br />

kann. Eine XML-Datei hat ein Wurzelelement (hier „PolicySet“ in Zeile 2 mit dem<br />

Attribut „id“ für die eindeutige Identifikation des PolicySets). Das Wurzelelement kann<br />

mehrere Kind-Elemente haben. In diesem Fall gibt es eine Liste von Eigentümern (Zeile<br />

3-5), eine Liste von Objekttypen (Zeile 7-9) und eine Liste von Policy-Einträgen (Zeile<br />

11 ff.). Die Policy-Einträge werden in eigenen Dateien gespeichert und mit Hilfe von<br />

XInclude (vgl. [Mei03] Abschnitt „XInclude“) in die zugehörigen PolicySets<br />

eingebunden (siehe Abbildung 31 Zeile 12). Der Hauptgrund hierfür ist, dass eXist eine<br />

statische Datenbank ist, d.h. um Änderungen an gespeicherten XML-Ressourcen<br />

vorzunehmen, muss die komplette Datei ausgelagert, geändert und wieder gespeichert<br />

werden. Daher ist es einfacher kl<strong>einer</strong>e Dateien zu bearbeiten. Zum anderen kann<br />

hierdurch eine Policy mehreren PolicySets zugeordnet werden.<br />

55


Implementierung der <strong>Zugriffskontrolle</strong><br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6<br />

7 <br />

8 <br />

9 <br />

10<br />

11 <br />

12 <br />

13 <br />

14 <br />

Abbildung 31: Beispiel für ein PolicySet<br />

In der neuesten Version unterstützt eXist eine UNIX ähnliche <strong>Zugriffskontrolle</strong> auf<br />

gespeicherte XML-Dateien (vgl. [Mei03] Abschnitt „Security“). Es gibt drei Arten von<br />

Zugriffsrechten:<br />

Read<br />

Write<br />

Zugriffsrecht, um eine Datei zu lesen oder zu suchen oder um die Inhalte <strong>einer</strong><br />

Kollektion aufzulisten.<br />

Zugriffsrecht, um eine Datei zu löschen oder zu verändern oder um eine neue<br />

Datei oder eine neue Subkollektion zu <strong>einer</strong> Kollektion hinzuzufügen.<br />

Update Zugriffsrecht, um eine existierende Datei zu verändern, Das Entfernen der<br />

Datei ist nicht erlaubt, solange nicht das Write Recht gewährt wurde.<br />

Es ist aber nicht möglich, den Zugriff auf einzelne Elemente in der XML-Datei zu<br />

regeln, und auch die Definition von eigenen anwendungsspezifischen Zugriffsregeln ist<br />

unmöglich. Z.B. kann man keine neuen Zugriffsrechte definieren und eine differenzierte<br />

Zuordnung von Benutzern und Benutzergruppen zu einem Zugriffsrecht kann nicht<br />

stattfinden. Außerdem bedarf die Nutzung der Datenbank-Zugriffsrechte <strong>einer</strong><br />

nachträglichen Anpassung der Anwendungsprogramme, da bei einem zurückgewiesenen<br />

Zugriffsversuch auf die Datenbank eine Ausnahmebehandlung in der<br />

Anwendung zu erfolgen hat. Insgesamt gesehen ist somit diese Lösung nicht geeignet<br />

für eine anwendungsunabhängige <strong>Zugriffskontrolle</strong>.<br />

56


Implementierung der <strong>Zugriffskontrolle</strong><br />

5.2.2 Zugriff auf die Policies <strong>mittels</strong> XPath<br />

Auf die Datenbank kann über mehrere Schnittstellen zugegriffen werden (vgl. [Mei03]<br />

Abschnitt „Server Deployment“). Unterstützt werden zum einen XPath Anfragen via<br />

http und XML-RPC sowie direkte Zugriffe von Java aus über die XML:DB API. Um<br />

effiziente XPath-Anfragen zu ermöglichen, nutzt eXist Index-Strukturen. Der<br />

bevorzugte Weg, um eXist von Java Anwendung aus anzusprechen, ist jedoch die<br />

Nutzung der XML:DB API. Diese stellt eine vereinheitlichte Schnittstelle für den<br />

Zugriff auf XML Datenbanken dar. Die Basiskonzepte der XML:DB API sind Treiber<br />

(engl. driver), Kollektionen (engl. collections), Ressourcen (engl. resources) und<br />

Dienste (engl. services). Der Treiber für eXist umfasst die für ihn spezifische<br />

Datenbankzugriffslogik. Eine Kollektion ist ein Container, der Ressourcen oder weitere<br />

Subkollektionen enthält. Als Ressourcen werden im Augenblick nur XML-Ressourcen<br />

unterstützt. Dienste schließlich können angefragt werden, um spezielle Aufgaben wie<br />

XPath-Anfragen oder Benutzermanagement zu erfüllen.<br />

XPath (vgl. [GaW02]) ist eine Sprache für die Adressierung von XML Strukturen, die<br />

von mehreren anderen XML Standards wie XSLT, XPointer oder XQuery vewendet<br />

wird. Mit ihr lassen sich Such-Ausdrücke definieren, die in <strong>einer</strong> Art Pfad-Beschreibung<br />

festlegen, welche Elemente eines XML Dokumentes benötigt werden. Zum Beispiel<br />

repräsentiert der vorwärtsgerichtete Slash (/) eine einfachen XPath Ausdruck, mit dem<br />

man den Wurzelknoten eines XML Dokumentes erhält.<br />

In eXist ist eine XPath Dienst eingebaut, der zwar noch nicht den vollen Sprachumfang<br />

von XPath unterstützt, mit dem sich aber die wichtigsten Ausdrücke darstellen lassen<br />

(vgl. [Mei03] Abschnitt „XPath HowTo“). Um die XML-Datenbank zu durchsuchen,<br />

kann man diesen Dienst nutzen, indem man „service.query()“ aufruft<br />

und eine XPath-Query definiert. Die Methode gibt ein ResourceSet zurück, was <strong>einer</strong><br />

Menge an gefundenen XML-Ressourcen entspricht.<br />

Der Zugriff auf die XML-Datenbank ist in der Klasse „SecurityPortal“ gekapselt. Diese<br />

enthält beispielsweise folgende Funktion zum Zugriff auf alle Elemente beliebiger<br />

XML-Dokumente, die der angegebenen Suchanfrage entsprechen.<br />

57


Implementierung der <strong>Zugriffskontrolle</strong><br />

1 public class SecurityPortal extends de.tud.ito.hp.portal.Portal<br />

{<br />

2 …<br />

3 public ResourceSet queryAsResourceSet(String query) {<br />

4 try {<br />

5 XpathQueryService service = (XpathQueryService)<br />

col.getService(„XpathQueryService“,<br />

„1.0“);<br />

6 service.setProperty(„pretty“, „true“);<br />

7 service.setProperty(„encoding“, „ISO-8859-1“);<br />

8<br />

9 ResourceSet result = service.query(query);<br />

10 return result;<br />

11 } catch (Exception ex) {<br />

12 System.err.println(„Not in database: „);<br />

13 return null;<br />

14 } …<br />

15 }<br />

Abbildung 32: Funktion „queryAsResourceSet“<br />

Normalerweise werden nur die Dokumente der aktuellen Kollektion durchsucht. Mit<br />

Hilfe der Funktionen „document“ und „collection“ ist es aber möglich, auch spezielle<br />

Dokumente und Kollektionen auszuwählen (vgl. [Mei03] Abschnitt „Developer’s<br />

Guide“). Mittels der Funktion „document()“ legt man beispielsweise fest, welche<br />

Dokumente in welchem Dokumentenpfad zu berücksichtigen sind.<br />

Die folgende Abbildung zeigt einige Beispiele für Suchanfragen.<br />

1 query = „document(‚/db/config/PolicyConfiguration.xml’)“;<br />

2 query = „document(‚/db/config/“+ moduleName +“’)/*“;<br />

3 query = „document(‚/db/policies/“ + pid + „.xml’)/PolicySet<br />

[Users/User/@id=’“ + userId + „’]“;<br />

Abbildung 33: Beispiele für Suchanfragen<br />

Die erste Suchanfrage in Abbildung 33 ermittelt, ob es ein Dokument<br />

„PolicyConfiguration.xml“ im Verzeichnis „/db/config“ gibt. Die zweite Suchanfrage<br />

liefert den Wurzelknoten <strong>einer</strong> Datei mit dem in „moduleName“ spezifizierten Namen<br />

im Vezeichnis „/db/config“ zurück. Die dritte Suchanfrage ähnelt den ersten beiden. Sie<br />

hat jedoch die zusätzlich Bedingung, dass der Benutzer die Identifikation hat, die in<br />

„userId“ steht (siehe [Mei03] Abschnitt „XPath HowTo“).<br />

58


Implementierung der <strong>Zugriffskontrolle</strong><br />

5.2.3 Darstellung der Zugriffsregeln als MIX-Ontologien<br />

Zur Darstellung des Datenmodells der <strong>Zugriffskontrolle</strong> werden MIX-Ontologien<br />

verwendet. Im Folgenden wird auf einige wichtige Ontologien aus den Paketen Policy-,<br />

Objekt- und Aktionsverwaltung kurz eingegangen.<br />

5.2.3.1 PolicySet und Policy<br />

Die zentrale Ontologie im Paket Policy-Verwaltung ist das PolicySet. Dieses stellt eine<br />

Menge von Policies dar, die in <strong>einer</strong> Datei zusammengefasst werden. Das gesamte<br />

PolicySet kann Anwendungsobjekten zugewiesen werden.<br />

1 public class PolicySet extends ComplexSemanticObject {<br />

2 public static final String CONCEPTNAME =<br />

PolicySet.class.getName();<br />

3<br />

4 public PolicySetIdentification identification;<br />

5 public ClassName className;<br />

6 public OwnerList ownerList;<br />

7 public UsedByObjectGroupList usedByList;<br />

8 public PolicyList policyList;<br />

9 …<br />

10 }<br />

Abbildung 34: Ontologie „PolicySet“<br />

Ein PolicySet verfügt über eine eindeutige Identifikation (Zeile 4), über eine<br />

zugeordenete Klasse (Zeile 5) und über drei Listen. In der ersten Liste (Zeile 6) steht,<br />

wer oder welche Personen Eigentümer des PolicySets sind. Dies ist notwendig, damit in<br />

Zukunft nur Eigentümer das PolicySet verändern dürfen. Die zweite Liste (Zeile 7) legt<br />

fest, welchem Objekttypen (z.B. „Privatfahrt“ bei Fahrteinträgen) das PolicySet<br />

zugeordnet ist. Dieser Eintrag kann aber auch weggelassen werden. Die dritte Liste<br />

(Zeile 8) enthält die Zugriffsregeln in Form von Policies. Auf diese wird bei der<br />

Ontologie „Policy“ genauer eingegangen.<br />

Die folgende Abbildung zeigt eine Fabrik-Methode, mit deren Hilfe man ein PolicySet<br />

anlegen kann. Ein synchronisierter Zähler (Zeile 4) erzeugt eindeutige Ids, die für die<br />

Erstellung der PolicySet-Identifikationen (Zeile 5) benötigt werden. In den Zeilen 8 bis<br />

10 werden die drei angesprochenen Listen angelegt und in Zeile 12 wird ein PolicySet<br />

aus den zuvor erzeugten Teilelementen erstellt.<br />

59


Implementierung der <strong>Zugriffskontrolle</strong><br />

1 public class PolicySetService{<br />

2 …<br />

3 protected synchronized PolicySet createPolicySet() {<br />

4 pidCounter++;<br />

5 PolicySetIdentification identification =<br />

6 new PolicySetIdentification(„PS“+Integer.toString(<br />

pidCounter));<br />

7 ClassName name = new ClassName(className);<br />

8 OwnerList owners = new OwnerList(null, null);<br />

9 UsedByObjectGroupList usedBy =<br />

new UsedByObjectGroupList(null, null);<br />

10 PolicyList list = new PolicyList(null, null);<br />

11<br />

12 PolicySet policySet = new PolicySet(identification,<br />

name,<br />

owners,<br />

usedBy,<br />

list, null, null);<br />

13 return policySet; }<br />

14 …<br />

15 }<br />

Abbildung 35: Fabrik-Methode „createPolicySet()“<br />

Zugriffskontroll-Policies (siehe Abbildung 36) spezifizieren Zugriffskontroll-<br />

Einstellungen und werden im PolicySet in der PolicyList gespeichert. Eine Policy<br />

enthält eine Policy-Identifikation, eine Beschreibung und drei Listen. Benötigt werden<br />

je eine Liste für die zu berücksichtigenden Benutzer, für die zu schützenden Felder und<br />

Objekte der Klassen sowie für die Zugriffsbedingungen.<br />

1 public class Policy extends ComplexSemanticObject {<br />

2 public static final String CONCEPTNAME =<br />

Policy.class.getName();<br />

3<br />

4 public PolicyIdentification identification;<br />

5 public Description description;<br />

6 public UserList userList;<br />

7 public ElementList elementList;<br />

8 public AccessConditionList accessConditionList; …<br />

9 }<br />

Abbildung 36: Ontologie Policy<br />

Eine einzelne Policy im XML-Format ist in Abbildung 37 dargestellt. Wie beim<br />

PolicySet wird auch hier Xinclude verwendet, um XML-Ressourcen wie Benutzer,<br />

Elemente und Zugriffsbedingungen <strong>einer</strong> Policy zuzuordnen. D.h. alle XML-<br />

Ressourcen, die im Attribut „assignedPolicies“ unter anderem die Identifikation dieser<br />

Policy speichern, werden automatisch in die XML-Ressource Policy eingebunden.<br />

60


Implementierung der <strong>Zugriffskontrolle</strong><br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

9 <br />

10 <br />

11 <br />

12 <br />

13 <br />

14 <br />

Abbildung 37: Beispiel-Policy aus einem XML PolicySet.<br />

Aus Zeitgründen war es aber nicht möglich, komplexere Zugriffsbedingungen zu<br />

realisieren. Hiermit könnte man z.B. prüfen, ob ein Element des Objektes einen<br />

vorgegeben Wert hat oder ob der Benutzer der Eigentümer des Anwendungsobjektes ist.<br />

5.2.3.2 SecuredClass und SecuredObjectGroup<br />

Im Fahrtenbuch-Aspekt wurde das zu schützendende Fahrtenbuch-Paket festgelegt.<br />

Welche Klassen aber geschützt werden, wird <strong>mittels</strong> der Ontologie für geschützte<br />

Klassen definiert (vgl. dazu auch 6.2.2.2). Jede geschützte Klasse verfügt über eine<br />

eindeutige Identifikation, über einen Klassenpfad sowie eine Liste geschützter<br />

Objektgruppen. Der Klassenname bzw. Klassenpfad (z.B. „Logbook.Dataset.Entry“)<br />

wird bei der Ermittlung der gesicherten Aktionen zur Laufzeit benötigt. Die Klasse<br />

ActionService greift z.B. in der Funktion „getSecureAction“ auf das ontologische<br />

Konzept „classPath“ zu.<br />

Die Liste “SecuredObjectGroupList” enthält semantische Konzepte mit dem Namen<br />

“SecuredObjectGroup”. Dies ermöglicht die Gruppierung von Instanzen <strong>einer</strong> Klasse in<br />

beliebige Kategorien, beispielsweise die Klasse Fahrteintrag in die Kategorien<br />

„Privatfahrt“, „Geschäftsfahrt“ und „Fahrt zur Arbeit“. Eine solche Objektgruppe hat<br />

eine eindeutige Identifikation, einen Eigentümer und eine initiale Policy Identifikation.<br />

Wenn eine neue Objektgruppe erzeugt wird, dann wird dieser eine passende initiale<br />

Policy-Id zugewiesen oder es wird zusätzlich eine neue initiale Policy erzeugt. Am<br />

61


Implementierung der <strong>Zugriffskontrolle</strong><br />

Beispiel eines Fahrtenbucheintrages soll dies erläutert werden. Wenn man eine<br />

Objektgruppe „Patientenfahrt“ einrichtet, dann erstellt man zusätzlich eine initiale<br />

Policy, die vorgibt, dass nur der Eigentümer und befreundete Ärzte diesen Eintrag lesen<br />

dürfen, das Finanzamt hingegen darf nur unkritische Daten wie Datum und<br />

Kilometerzahl lesen.<br />

5.2.3.3 SecuredObjectType und SecureAction<br />

Die zwei wichtigsten Ontologien der Aktionsverwaltung sind „SecuredObjectType“ und<br />

„SecureAction“. Das erstere repräsentiert eine Zusammenfassung von Anwendungsklassen<br />

mit gleichen oder gleichartigen Methoden unter einem Typbegriff. Die folgende<br />

Abbildung zeigt den Aufbau eines „SecuredObjectType“ bestehend aus <strong>einer</strong><br />

eindeutigen Identifikation, <strong>einer</strong> Liste von zugeordneten Klassen und <strong>einer</strong> Liste von<br />

Aktionen, die bei der <strong>Zugriffskontrolle</strong> verwendet werden sollen.<br />

1 public class SecuredObjectType extends ComplexSemanticObject<br />

2 {<br />

3 public ObjectTypeIdentification identification;<br />

4 public SecuredClassesList classesList;<br />

5 public ActionList actionList;<br />

6 …<br />

7 }<br />

Abbildung 38: Ontologie SecuredObjectType<br />

Eine „SecureAction“ ist ein Eintrag in der Aktionsliste eines „SecuredObjectType“. Er<br />

enthält Informationen, die die Aktionsverwaltung über Methoden der Anwendungsklasse<br />

wissen muss, um diese zu schützen. Jede geschützte Aktion hat einen eindeutigen<br />

Bezeichner, ein Zielobjekt und ein Zugriffsrecht. Optional sind dagegen die<br />

Spezifikation, welche Argumente der Methode für die Rechteprüfung berücksichtigt<br />

werden sollen, ob eines der Argumente auf die aktuelle Sitzung verweist und welche<br />

Fehlermeldung bei <strong>einer</strong> Zugriffsverweigerung auszugeben ist.<br />

1 public class SecureAction extends ComplexSemanticObject {<br />

2 public static final String CONCEPTNAME =<br />

SecureAction.class.getName();<br />

3 public ActionIdentification identification;<br />

4 public Target target;<br />

5 public Permission permission;<br />

6 public ArgumentIdentification argumentID;<br />

7 public SessionArgument sessionargument;<br />

8 public ErrorMessage errormessage;<br />

9 …}<br />

Abbildung 39: Ontologie SecureAction<br />

62


Schnittstellen und Konfigurationen<br />

6 Schnittstellen und Konfigurationen<br />

Um die Sicherheitslösung an die jeweilige Anwendung anzupassen, kann man entweder<br />

ein Application Programming Interface oder Konfigurationsdateien verwenden. Die<br />

realisierte Lösung kann sowohl über eine Schnittstellenklasse, die die wichtigsten<br />

Funktionen anbietet, als auch über mehrere Konfigurationsdateien angepasst werden.<br />

Dieses Kapitel erläutert und vergleicht die beiden Herangehensweisen anhand des<br />

Fahrtenbuch-Beispiels.<br />

6.1 Das Application Programming Interface<br />

Eine API (Application Programming Interface) ist eine Zusammenfassung von<br />

Methoden, die Anwendungsprogrammen zur Verfügung gestellt werden. Folgende<br />

Klassen stehen seitens der in dieser Arbeit entwickelten Lösung zur Verfügung:<br />

1. die Klasse „SecurityFacade“<br />

2. die Klasse „SecurityPortal“<br />

Die Klasse „SecurityFacade“<br />

Das Sicherheitssystem besteht aus mehreren Diensten, die sich um die Verwaltung der<br />

Policies, der geschützten Objekte und der geschützten Aktionen kümmern. Damit einem<br />

Client diese Komplexität verborgen bleibt, wird ein Facade-Muster (vgl. [Bal99] S. 293<br />

ff.) verwendet, das alle Funktionen, die der Client benötigt, in eine einfach zu<br />

handhabende Schnittstelle kapselt. Bei dem Client kann es sich um das zu beschützende<br />

Anwendungsprogramm oder um eine eigene Benutzerschnittstelle für die Konfiguration<br />

der <strong>Zugriffskontrolle</strong> handeln.<br />

SecurityFacade<br />

-instance : SecurityFacade<br />

<br />

PolicySetService<br />

Client<br />

<br />

+getInstance() : SecurityFacade<br />

+createObjectGroup(String,String,String)<br />

+deleteObjectGroup()<br />

+defineSecuredAction(String,String)<br />

+deleteSecuredAct ion()<br />

+viewPolicySet(Object)<br />

+changePolicy()<br />

+storeConfiguration()<br />

<br />

<br />

SecuredObjectsService<br />

ActionService<br />

Abbildung 40: Klassendiagramm „Security Facade“<br />

63


Schnittstellen und Konfigurationen<br />

Über die Funktion „getInstance()“ kann sich der Client eine Instanz der „Security<br />

Facade“ holen. Hiermit erhält er Zugriff auf für ihn relevante Funktionen der Policy-<br />

Verwaltung (wie „viewPolicySet“ oder „changePolicy“), der Objekt-Veraltung (wie<br />

„createObjectGroup“, oder „deleteObjectGroup“) und der Aktions-Verwaltung (wie<br />

„defineSecuredAction“ oder „deleteSecuredAction“).<br />

1 public class SecurityFacade {<br />

2 …<br />

3 public void viewPolicySet(Object obj) {<br />

4 PolicySetService pss = PolicySetService.getInstance();<br />

5 pss.viewPolicySet(obj);<br />

6 }<br />

7 …<br />

8 }<br />

Abbildung 41: Methode „viewPolicySet“ der Klasse „Security Facade“<br />

Als Beispiel der Methode „viewPolicySet“ sieht man, wie die Methoden der Klasse<br />

„Security Facade“ Aufrufe an die entsprechenden Dienste (hier die Policy Verwaltung)<br />

weiterleiten. Die Methode holt sich dazu die entsprechende Dienst-Instanz über die<br />

Funktion „getInstance()“ und ruft anschließend die gewünschte Methode mit den<br />

entsprechenden Eingabeparametern auf.<br />

Da diese Sicherheitslösung kein Framework sein soll, soll hier nicht auf die einzelnen<br />

Schnittstellenfunktionen eingegangen werden.<br />

Die Klasse SecurityPortal<br />

Zur Speicherung der Policies und der Daten für die Konfiguration der <strong>Zugriffskontrolle</strong><br />

wird XML verwendet. Die XML Dateien werden in der XML-Datenbank „eXist“<br />

gespeichert. Die Klasse „SecurityPortal“ umfasst alle Funktionen für die Speicherung,<br />

die Änderung und den Zugriff auf XML-Daten.<br />

64


Schnittstellen und Konfigurationen<br />

SecurityPortal<br />

+Konstruktor()<br />

+Konstruktor(String)<br />

+Konstruktor(String,String)<br />

+getAsSAX(String,SAXHandler)<br />

+queryAsSAX(String,SAXHandler)<br />

+queryAsResourceSet(String) : ResourceSet<br />

+store(String,String)<br />

+update(String,String,ComplexSemanticObject,String,int,...<br />

+search(Element,Element) : Element<br />

<br />

<br />

PolicySetService<br />

Configuration<br />

Abbildung 42: Klassendiagramm „Security Portal“<br />

Mit Hilfe der Konstruktoren aus der Portal-Klasse kann man festlegen, welche<br />

Kollektion (z.B. „/db/policies“ oder „/db/config“) verwendet werden soll.<br />

Die Klasse „SecurityPortal“ erweitert die Klasse „de.tud.ito.hp.porta.Portal“ um<br />

mehrere Such- und Änderungsfunktionen. Die Funktion „queryAsResourceSet“ (siehe<br />

Abbildung 32) ermöglicht beispielsweise die Suche nach bestimmten Elementen und<br />

Attribut-Werten <strong>mittels</strong> <strong>einer</strong> als Parameter übergebenen Suchanfrage. Die Anfrage, die<br />

als XPath-Ausdruck definiert wird, liefert als Ergebnis eine Menge an XML-<br />

Teilabschnitten, die der Anfrage entsprechen.<br />

Die Klasse „SecurityPortal“ bietet außerdem folgende Methoden an:<br />

getAsSAX(id, handler)<br />

Zweck: greift auf ein bestimmtes Element <strong>mittels</strong> eines<br />

SAX-Handlers zu.<br />

Parameter: id<br />

Identifikation des gesuchten Elementes<br />

handler SAX-Handler<br />

Ergebnis: -<br />

Beispiel: SAXHandler handler = new SAXHandler();<br />

SecurityPortal.getAsSAX(, handler);<br />

queryAsResourceSet(query)<br />

Zweck: sucht Ressourcen in der XML-Datenbank <strong>mittels</strong> <strong>einer</strong><br />

Xpath-Query.<br />

Parameter: query Xpath-Query<br />

Ergebnis: ResourceSet alle gefundenen Resourcen<br />

Beispiel: SecurityPortal.getAsSAX();<br />

queryAsSAX(query)<br />

Zweck:<br />

sucht Ressourcen in der XML-Datenbank <strong>mittels</strong> <strong>einer</strong><br />

Xpath-Query Anfrage.<br />

Parameter: query Xpath-Query<br />

hanlder<br />

SAX-Handler<br />

65


Schnittstellen und Konfigurationen<br />

Ergebnis: -<br />

Beispiel: SAXHandler handler = new SAXHandler();<br />

SecurityPortal.getAsSAX();<br />

store(id, value)<br />

Zweck: speichert eine neue Ressourcen in der XML-Datenbank.<br />

Parameter: id<br />

Bezeichner der neuen Ressource<br />

value Wert der Ressource<br />

Ergebnis: -<br />

Beispiel: SecurityPortal.store(, );<br />

restore(id)<br />

Zweck: holt ein Element wieder aus der der XML-Datenbank.<br />

Parameter: id<br />

Bezeichner der neuen Ressource<br />

value Wert der Ressource<br />

Ergebnis: -<br />

Beispiel: SecurityPortal.store(, );<br />

6.2 Konfiguration<br />

Die Konfiguration der <strong>Zugriffskontrolle</strong> besteht aus zwei Teilen:<br />

1. Die Konfiguration der Zusammenstellung der Sicherheitslösung wird in der<br />

Datei „Security.xml“ im Verzeichnis „/Security/Configuration“ festgelegt.<br />

2. Die Policy-Verwaltung (in „PolicyConfiguration.xml“) sowie die dafür<br />

notwendige Objekt-Verwaltung (in „ObjectConfiguration.xml“) und die<br />

Aktions-Verwaltung (in „ActionConfiguration.xml“) werden in den<br />

angegebenen Konfigurationsdateien definiert.<br />

Im Folgenden wird die Struktur der einzelnen Konfigurationsdateien erläutert:<br />

6.2.1 Die Zusammenstellung der Sicherheitslösung<br />

Die Konfigurationsdatei „Security.xml“ des Sicherheitssystems wird in XML<br />

geschrieben, da man so die Konfiguration in einem einfachen Editor verändern kann<br />

und da sich XML als Konfigurationssprache Bereich des Internet durchgesetzt hat.<br />

Im Wurzel-Element „Security“ ist das Attribut „Port“ vorhanden, das die URI für die<br />

XML-Datenbank eXist festlegt. In diesem Beispiel läuft die Datenbank in dem Servlet<br />

Container „Tomcat“ (vgl. [ApaoJ]) auf dem lokalen Rechner und kann über die Adresse<br />

„xmldb:exist://localhost:8080/exist/xmlrpc“ angesprochen werden. Wenn die<br />

Datenbank als eigener Server Prozess betrieben wird, dann würde die Adresse<br />

„xmldb:exist://localhost:8081“ lauten (vgl. [Mei03] Abschnitt „Deployment“).<br />

66


Schnittstellen und Konfigurationen<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6


Schnittstellen und Konfigurationen<br />

aus <strong>einer</strong> Benutzerliste, <strong>einer</strong> Elementliste und <strong>einer</strong> Zugriffskontrollliste. Für den Fall,<br />

dass alle Elemente oder Zugriffsrechte gewährt werden sollen, wurde das Schlüsselwort<br />

„all“ definiert. Dieses legt fest, dass z.B. alle Elemente des Objektes, dem diese Policy<br />

zugeordnet wird, die Zugriffsbedingung erfüllen.<br />

Das folgende Beispiel zeigt eine Beispielkonfiguration mit <strong>einer</strong> initialen Policy mit der<br />

Id 1. Diese legt fest, dass der Besitzer des Objektes und damit der Erzeuger der Policy<br />

alle Elemente bzw. Teil-Objekte lesen darf.<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

6 <br />

7 <br />

8 <br />

9 <br />

10 <br />

11 <br />

12 <br />

13 <br />

14 <br />

15 <br />

16 …<br />

17 <br />

18 <br />

Abbildung 44: Konfigurationsdatei „PolicyConfiguration.xml“<br />

6.2.2.2 Die Konfigurationsdatei ObjectConfiguration<br />

Die Konfigurationsdatei “ObjectConfguration.xml” ist notwendig, um dem<br />

ObjectService mitzuteilen, welche Klassen des Anwendungsprogramms wie geschützt<br />

werden sollen. Unterhalb des Wurzelelements „SecuredClassesList“ können mehrere zu<br />

schützende Klassen aufgeführt werden.<br />

68


Schnittstellen und Konfigurationen<br />

1 <br />

2 <br />

3 <br />

4 <br />

5 <br />

8 <br />

9 <br />

12 <br />

13 <br />

16 <br />

17 <br />

18 <br />

19 <br />

20 …<br />

21 <br />

22 <br />

Abbildung 45: Konfigurationsdatei „ObjectConfiguration.xml“<br />

Jede zu schützende Klasse kann mehrere Objektgruppen umfassen. Objektgruppen<br />

werden verwendet, um Instanzen eines Typs zu gruppieren und um ihnen einen Policy-<br />

Typ zuzuweisen. Eine Objektgruppe hat einen Identifikator, einen Besitzer und eine<br />

initiale Policy Identifikation. Wenn ein neues Objekt erzeugt wird, dann wird eine neue<br />

Policy erzeugt, gemäß den Angaben der zugehörigen initialen Policy. Die Bestimmung<br />

der initialen Policy erfolgt entweder durch explizite Zuweisung durch den Benutzer<br />

oder das System weist eine Standard-Policy zu. Bei der Zuordnung kann die Wahl der<br />

Objektgruppe zur Bestimmung der initialen Policy herangezogen werden.<br />

Im angegebenen Beispiel werden als Gruppeneinteilung für Fahrtenbuch-Einträge<br />

Fahrtentyp-Kategorien verwendet.<br />

Die Konfigurationen können manuell verändert werden. Um sicherzustellen, dass die<br />

entstehenden XML Dokumente der vorgesehenen Struktur entsprechen, kann eine DTD<br />

(Document Type Definition) oder eine Schema Definition verwendet werden. Die<br />

folgende Abbildung zeigt eine DTD zur Überprüfung der Validität der obigen XML<br />

Konfigurationsdatei.<br />

69


Schnittstellen und Konfigurationen<br />

1 <br />

4 <br />

5 <br />

6 <br />

8 <br />

11 ]><br />

Abbildung 46: Beispiel für eine DTD zur Überprüfung der Validität der<br />

Konfiguration<br />

6.2.2.3 Die Konfigurationsdatei ActionConfiguration<br />

Die Konfigurationsdatei „ActionConfiguration.xml“ definiert, welche Aktionen durch<br />

Zugriffskontrollprüfungen geschützt werden sollen. Aktionen werden Objekttypen<br />

zugeordnet. Ein Objekttyp kann eine Java Klasse repräsentieren oder auch eine Menge<br />

von Java Klassen. Er besteht aus <strong>einer</strong> Identifikation „id“, <strong>einer</strong> Klassenliste „classes“<br />

und aus <strong>einer</strong> Aktionsliste „Actions“.<br />

1 <br />

2 < ObjectTypesList ><br />

3 <br />

4 <br />

5 <br />

<br />

6 <br />

7 <br />

8 <br />

14 <br />

15 …<br />

16 <br />

17 <br />

18 <br />

Abbildung 47: Konfigurationsdatei „ActionConfiguration.xml“<br />

Eine Aktion hat einen Namen („name“), ein Ziel-Objekt („target“), ein Zugriffsrecht<br />

(„permission“) und eventuell ein Argument („argumentID“), eine Sitzung<br />

(„sessionargument“) und eine Fehlermeldung („errormessage“). Zugriffsrechte können<br />

70


Schnittstellen und Konfigurationen<br />

beliebige Bezeichner sein wie Lesen, Schreiben, Ändern oder Löschen. Wenn in einem<br />

Policy-Eintrag einem Benutzer ein entsprechendes Zugriffsrecht auf das hier als<br />

„target“ deklarierte Element (oder auf alle Elemente) zugewiesen wurde, dann darf er<br />

die Aktion ausführen, andernfalls nicht.<br />

Anhand des Aktions- und des Klassennamens kann zur Laufzeit überprüft werden, ob<br />

die Aktion <strong>einer</strong> Zugriffskontrollprüfung unterzogen werden soll. Dazu werden im<br />

Aspekt „AbstractAuthorizationAspect“ (siehe Abbildung 27) alle Methodenaufrufe von<br />

Methoden, die in den Klassen der geschützten Pakete definiert sind, mit der Aktion<br />

„isAction(..)“ überprüft (Abbildung 48). Diese Aktion ermittelt mit Hilfe des Aktions-<br />

Dienstes, ob eine entsprechende Aktion als geschützt definiert wurde. Falls dies der Fall<br />

ist, wird die Zugriffsprüfung durchgeführt.<br />

1 public aspect AbstractAuthorizationAspect{<br />

2 …<br />

3 protected static boolean isAction(String name,String typeName)<br />

{<br />

4 ActionService actionservice = ActionService.getInstance();<br />

5 if(actionservice.isAction(name, typeName)) return true;<br />

6 else return false;<br />

7 } …<br />

Abbildung 48: Funktion „isAction“<br />

6.3 Vergleich und Beurteilung<br />

Die Verwendung der Konfiguration ist relativ einfach im Gegensatz zu einem<br />

Application Programming Interface. Die Zielrichtung ist aber eine andere. Während die<br />

Konfiguration primär für die Zusammenstellung und die Definition von Elementen der<br />

Zugriffsverwaltung gedacht ist, hat das Application Programming Interface den Vorteil,<br />

dass man damit die Funktionen der <strong>Zugriffskontrolle</strong> in der Anwendung aufrufen kann.<br />

Notwendig ist dies z.B., wenn die Benutzerschnittstelle der <strong>Zugriffskontrolle</strong> in die<br />

Benutzerschnittstelle der Anwendung integriert werden soll. Man kann also sagen, dass<br />

Konfiguration und API nicht als konkurrierende Alternativen, sondern als Ergänzungen<br />

zueinander betrachtet werden müssen.<br />

71


Schlussbetrachtungen<br />

7 Schlussbetrachtungen<br />

7.1 Fazit<br />

In dieser Arbeit wird eine Zugriffskontrolllösung realisiert, die von verschiedenen<br />

Anwendungen genutzt werden kann. Gleichzeitig ist es möglich, die <strong>Zugriffskontrolle</strong><br />

in <strong>einer</strong> Anwendung zu verwenden, ohne dass Änderungen im Programmcode der<br />

Anwendung vorgenommen werden müssen. Die folgende Auflistung fasst die<br />

wichtigsten Schlussfolgerungen zusammen:<br />

1. Mit Hilfe von aspektorientierter Programmierung kann man eine<br />

anwendungsneutrale Zugriffskontrollfunktionalität konzipieren, die von<br />

verschiedenen Anwendungen genutzt werden kann.<br />

2. Anwendungsspezifische Besonderheiten wie die eines Fahrtenbuches können<br />

weitgehend mit Hilfe von Konfigurierung in der <strong>Zugriffskontrolle</strong> berücksichtigt<br />

werden. Für die Konfiguration eignen sich insbesondere XML-Dokumente.<br />

3. Für die Zugriffskontrollfunktionalität müssen Parameter wie der Benutzer, das<br />

Objekt und die Methode übergeben werden. Diese Parameter können <strong>mittels</strong><br />

AOP und dynamischer Querverbindungen abgefragt werden.<br />

4. Die Verwendung des semantischen Datenmodells MIX erleichtert die Übergabe<br />

der für die <strong>Zugriffskontrolle</strong> benötigten Parameter. Da alle semantischen<br />

Objekte eine Beschreibung, und eine Identifikation besitzen, kann man auf die<br />

Objektidentifikation zugreifen, ohne umfangreiche Anpassungen vornehmen zu<br />

müssen.<br />

5. Dennoch kann es nicht ausgeschlossen werden, dass Anpassungen an der<br />

<strong>Zugriffskontrolle</strong> vorgenommen werden müssen, da nicht alle Anwendungen<br />

MIX und dieselbe Benutzerverwaltung verwenden. Durch Definition<br />

vorgegebener Methodenrümpfe in der Aspektklasse kann auf die benötigten<br />

Parameter (Benutzer, Methode, Objekte) zugegriffen werden.<br />

6. Da die Prüfung aller Anwendungsklassen zu erheblichen Leistungseinbusen<br />

führen kann, sollten die zu prüfenden Klassen explizit im Aspekt aufgeführt<br />

werden.<br />

72


Schlussbetrachtungen<br />

7.2 Zusammenfassung der Beiträge<br />

Im Rahmen dieser Arbeit wurde eine <strong>Zugriffskontrolle</strong> realisiert, die die erörterten Ziele<br />

und die aufgeführten Schlussfolgerungen verdeutlichen soll. Im Einzelnen wurden<br />

folgende Ergebnisse erzielt:<br />

1. Es wurde eine Sicherheitsanalyse für Fahrtenbücher erstellt, die zeigt, welche<br />

speziellen Sicherheitsanforderungen ein Fahrtenbuch aus Sicht der Benutzer, aus<br />

Sicht der Hersteller und aus Sicht des Finanzamts erfüllen muss. Diese Analyse<br />

dient zur Überprüfung, ob alle Anforderungen an eine <strong>Zugriffskontrolle</strong> mit<br />

dieser Sicherheitslösung realisierbar sind.<br />

2. Außerdem wurde ein Aspekt entwickelt, der die Anforderungen <strong>einer</strong><br />

<strong>Zugriffskontrolle</strong> zusammenfasst und der mit Hilfe <strong>einer</strong> Konfigurationsdatei<br />

verschiedene Sicherheitslösungen einbinden kann.<br />

3. Als Beispiel für eine <strong>Zugriffskontrolle</strong> wurde ein policy-basiertes<br />

Zugriffskontrollsystem entwickelt, das Zugriffsregeln in <strong>einer</strong> XML-Datenbank<br />

in Form von Policy-Dateien speichert und das das MIX Datenmodell verwendet.<br />

7.3 Ausblick<br />

Obwohl gezeigt wird, dass eine anwendungsunabhängige <strong>Zugriffskontrolle</strong> möglich ist,<br />

bleiben dennoch einige Fragestellungen offen, die noch zu klären sind:<br />

1. Zum einen ist zu erörtern, ob man den Autorisierungsaspekt so allgemein halten<br />

kann, dass keine programmiersprachlichen Anpassungen mehr notwendig sind<br />

und dennoch keine Leistungseinbusen entstehen. Hierzu wäre es in AspectJ<br />

notwendig, „Type Patterns“, die in Aspekten zur Deklaration von Klassen und<br />

Methoden verwendet werden, auch dynamisch anlegen zu können. Dies ist in<br />

der aktuellen Version aber nur zur Übersetzungszeit möglich.<br />

2. Eine weitere offene Problemstellung ist die Frage, wie man in einem<br />

unbekannten Programmcode geeignete Methoden und Klassen für die<br />

<strong>Zugriffskontrolle</strong> identifizieren kann. Ferner ist zu klären, ob es einem<br />

Anwender, der diese Sicherheitslösung nutzen möchte, möglich ist, hiermit ein<br />

Programm zu schützen.<br />

3. Um eine praxistaugliche Sicherheitslösung für ein Fahrtenbuch zu erhalten,<br />

müsste dieser Prototyp noch um Funktionen zur Verschlüsselung von Daten und<br />

73


Schlussbetrachtungen<br />

zum Signieren von Fahrtenbucheinträgen erweitert werden, was jedoch<br />

außerhalb der Zielsetzung dieser Arbeit lag.<br />

4. Außerdem müssten im Falle <strong>einer</strong> Zugriffsverweigerung Ausnahmen an das<br />

Anwendungsprogramm zurückgegeben werden, so dass dieses selbst festlegen<br />

kann, was im Falle <strong>einer</strong> Zugriffsverweigerung geschehen soll. Nur so ist es<br />

möglich, eine Ausgabe der Fehlermeldung in <strong>einer</strong> für das Anwendungsprogramm<br />

geeigneten Weise (z.B. in einfacher Shell oder im GUI der<br />

Anwendung) zu erreichen.<br />

5. Ferner wäre es möglich, diese Sicherheitslösung um zusätzliche Aspekte (im<br />

Sinne der besprochenen Aspektorientierung) zu erweitern. Im Folgenden werden<br />

die wichtigsten Sicherheitsfunktionen angesprochen, die man <strong>mittels</strong> Aspekten<br />

realisieren könnte:<br />

• Unter Auditing versteht man die Protokollierung aller Zugriffe. Da diese<br />

über den gesamten Code verstreut sind und da man in der Regel vor allem<br />

die geschützten Zugriffe protokolliert, würde sich eine kombinierte Lösung<br />

zusammen mit dem Autorisierungsaspekt anbieten.<br />

• Auch die Authentifizierung und das Sitzungsmanagement könnten in Form<br />

eines Aspektes realisiert werden. Sitzungen werden in den meisten<br />

Anwendungsmethoden verwendet, obwohl die Sitzungsverwaltung nicht die<br />

Hauptaufgabe dieser Methoden ist.<br />

74


Literaturverzeichnis<br />

Literaturverzeichnis<br />

[ApaoJ]<br />

[Asp02]<br />

[Bal99]<br />

[BfF95]<br />

The Apache Software Foundation (o.J.): Apache Tomcat.<br />

Siehe http://jakarta.apache.org/tomcat/, letzter Zugriff 10.07.2003.<br />

AspectJ TM (2002): AspectJ TM Documentation and Examples: Version<br />

1.0.6 released on July 24, 2002. Siehe http://aspectj.org, letzter<br />

Zugriff 07.07.2003.<br />

Balzert, H. (1999): Lehrbuch der Objektmodellierung: Analyse und<br />

<strong>Entwurf</strong>. Spektrum Akademischer Verlag, Heidelberg.<br />

Bundesministerium für Finanzen (1995): Grundsätze<br />

ordnungsmäßiger DV-gestützter Buchführungssysteme (GoBS). TOP<br />

7 der Sitzung Bp II/95; mein Schreiben vom 28. Juli 1995 –IV A 8 –<br />

S-0316 – 43/95 -.<br />

[BHH01] Burkhardt, J., Henn, H., Hepper, S., Rindtorff, K. und Schäck, T.<br />

(2001): Pervasive Computing: Technologien und Architektur mobiler<br />

Internet-Anwendungen. Addison-Wesley Verlag, München.<br />

[BoP02]<br />

[Bor98]<br />

[Bor99]<br />

[CHB02]<br />

[CiB02]<br />

[CiH02]<br />

Bouganim, L. und Pucheral, P. (2002): Chip Secured Data Access:<br />

Confidential Data on Untrusted Servers. Proceedings of the 28 th<br />

VLDB Conference, Hong Kong, China.<br />

Bornhövd, C. (1998): MIX – A Representation Model for the<br />

Integration of Web-based Data. Tech. Rep. DVS98-1, DVS1, Dep.<br />

CS, Darmstadt University of Technology, Germany, Nov. 1998.<br />

Bornhövd, C. (1999): Semantic Metadata for the Integration of Webbased<br />

Data for Electronic Commerce. Proc. Of the International<br />

Workshop on Advance Issues of Ecommerce and Web-based<br />

Information System, Santa Clara, USA, 1999.<br />

Cilia, M., Hasselmeyer, P. und Buchmann A. P. (2002): Profiling<br />

and Internet Connectivity in Automotive Environments. In<br />

Proceedings of the International Conference on Very Large Data<br />

Bases (VLDB’02) (Hong-Kong, China, Aug. 2002), S. 1071–1074.<br />

Morgan-Kaufmann.<br />

Cilia, M. und Buchmann A. P. (2002): An Active Functionality<br />

Service for E-Business Applictions. ACM SIGMOD Record 31, 1<br />

(March), 24–30. Special Section on Data Management Issues in<br />

Electronic Commerce.<br />

Cilia, M. und Hasselmeyer, P. (2002): An Architecture for the<br />

Delivery of Services in an Automotive Environment.<br />

I


Literaturverzeichnis<br />

[CSI01]<br />

Computer Security Institut (CSI) (2001): CSI/FBI Survey.<br />

www.gocsi.com/forms/fbi/pdf.html, letzter Zugriff 05.04.2003.<br />

[DaB99] Datenschutz Berlin (1999): Jahresbericht 1999<br />

des Berliner Beauftragten für Datenschutz und Akteneinsicht. Siehe<br />

http://www.datenschutz-berlin.de/jahresbe/99/jb99-4_3.htm, letzter<br />

Zugriff 24.05.2003.<br />

[DBS02] Damianou, N., Bandara, A. K., Sloman, M. und Lupu, E. C. (2002):<br />

A Survey of Policy Specification Approaches. Siehe<br />

http://citeseer.nj.nec.com/damianou02survey.html, letzter Zugriff<br />

10.07.2003.<br />

[Dom01]<br />

Dominick, L. (2001): Was bringen AOP und GP für die Industrie.<br />

Siehe<br />

http://net.objectdays.org/pdf/01/papers/ind_invited/dominick.pdf,<br />

letzter Zugriff 10.07.2003.<br />

[EbF00] Eberhardt, A. und Fischer, S. (2000): Java-Bausteine für E-<br />

Commerce-Anwendungen: Verteilte Anwendungen mit Servlets,<br />

CORBA und XML. Carl Hanser Verlag, München.<br />

[Eck01]<br />

[FBK99]<br />

[Fin02]<br />

[Fis02]<br />

[FSG01]<br />

[GaW02]<br />

[Gol99]<br />

[GoM02]<br />

Eckert, C. (2001): IT-Sicherheit, Konzepte, Verfahren, Protokolle.<br />

Oldenbourg Verlag, München.<br />

Ferraiolo, D., Barkley, J. und Kuhn, R. (1999): A Role Based Access<br />

Control Model and Reference Implementation within a Corporate<br />

Intranet. ACM Trans. Inf. Syst. Sec. 2, 1.<br />

Finanzgericht Baden-Württemberg (2002): Anerkennung eines<br />

elektronischen Fahrtenbuchs. Siehe<br />

http://www.profpopp.de/content/beratungsbrief/volltext/0601.htm#37<br />

-02, letzter Zugriff 29.04.03.<br />

Fischer, M. (2002): Konzeption und Implementierung eines<br />

rollenbasierten Zugriffskontrollmodells für das Webrocat-System.<br />

Diplomarbeit im Fachbereich Wirschaftswissenschaften der<br />

Universität Gesamthochschule Essen.<br />

Ferraiolo, Sandhu, Gavrila, Kuhn, Chandramouli (2001): Proposed<br />

NIST Standard for Role-Based Access Control. ACM Transactions<br />

on Information and System Security, Vol. 4, No. 3, August 2001, S.<br />

224–274.<br />

Gabrick, K. A. und Weiss, D. B. (2002): J2EE and XML<br />

Development. Manning Publications Co., Greenwich (USA).<br />

Gollmann, D. (1999): Computer Security. John Wiley & Sons, New<br />

York.<br />

Gollan, L. und Meinel C. (2002): Digitale Signaturen für<br />

II


Literaturverzeichnis<br />

Kraftfahrzeuge. Siehe http://www.ti.fhg.de/publikationen/technische<br />

berichte/2002/prep0204.pdf, letzter Zugriff 24.04.2003.<br />

[HHI02] Hilsdale, E., Hugunin, J., Isberg, W., Kiczales, G. und Kersten, M.<br />

(2002): Aspect-Oriented Programming with AspectJ TM .” Siehe<br />

http://aspectj.org, letzter Zugriff 07.07.2003.<br />

[Hob98]<br />

[IbNoJ]<br />

[IfT02a]<br />

[IfT02b]<br />

[ITOoJ]<br />

[Jae98]<br />

[KHH01]<br />

[Koc98]<br />

[Kor03]<br />

[Lad03]<br />

Hobert, G. (1998): Datenschutz und Datensicherheit im Internet:<br />

Interdependenzen und Korrelation von rechtlichen Grundlagen und<br />

technischen Möglichkeiten. Dissertation, Frankfurt am Main: Lang.<br />

Ingenieurbüro Nürnberg (o.J.): TravelControl: das automatisierte<br />

elektronische Fahrtenbuch mit GPS-Ortung. Siehe http://www.ibnuernberg.de/,<br />

letzter Zugriff 10.05.2003.<br />

Institut für Telematik Trier (2002): GPS-unterstütztes Fahrtenbuch<br />

für PalmOS–Handhelds. Siehe http://www.ti.fhg.de/<br />

profil_und_kontakt/info-material/Fahrtenbuch.pdf, letzter Zugriff<br />

10.05.2003.<br />

Institut für Telematik Trier (2002): CeBIT: Lästige<br />

Fahrtenbuchführung erledigt Handheld-Computer mit<br />

Satellitendaten automatisch. Siehe “www.ti.fhg.de/<br />

presse_und_medien/pressemitteilungen/2002/pm04_Cebit2002.html,<br />

letzter Zugriff 10.05.2003.<br />

IT Transfer Office (o.J.): Siehe http://www.ito.tu-darmstadt.de,<br />

letzter Zugriff 07.07.2003.<br />

Jaeger, S.(1998): Computerkriminalität. Augsburg: Interest Verlag,<br />

1998, ISBN 3-8245-0700-5.<br />

Kiczales, G., Hilsdale, E., Hugunin, J., Kersten, M., Palm, J. und<br />

Griswold, W. G. (2001): An Overview of AspectJ. Lecture Notes in<br />

Computer Science, Vol. 2072, S. 327-355. Siehe<br />

http://citeseer.nj.nec.com/kiczales01overview.html, letzter Zugriff<br />

10.07.2003.<br />

Koch, F. A. (1998): Internet-Recht: Praxishandbuch; mit den neuen<br />

Medien- und Teledienstrecht, Checklisten und Mustervertäge.<br />

Oldenburg Verlag, München.<br />

Korn, C. (2003): <strong>Entwurf</strong> und Implementierung eines anpassbaren<br />

Fahrtenbuch-Dienstes für Gruppen. Diplomarbeit am IT Transfer<br />

Office.<br />

Laddad, R. (2003): AspectJ in Action: Practical Aspect-Oriented<br />

Programming. Siehe<br />

http://www.theserverside.com/resources/AspectJreview.jsp, letzter<br />

Zugriff 15.06.2003.<br />

III


Literaturverzeichnis<br />

[LMY01]<br />

[Mag01]<br />

[Mei02]<br />

[Mei03]<br />

[Myn00]<br />

[NEV01]<br />

[Non00]<br />

[Nor01]<br />

[OAS01]<br />

[OAS03]<br />

[Oat00]<br />

[OatoJ]<br />

López, J., Maña, A. und Yagüe, M. I. (2001): XML-based Distributed<br />

Access Control System. Siehe http://citeseer.nj.nec.com/530344.html,<br />

letzter Zugriff 15.06.2003.<br />

Magnatec (2001): Elektronisches Fahrtenbuch<br />

Car Organizer 1, 1+ und Car Organizer 2. Siehe<br />

http://www.magnatec.de/MDT_1%2B2d.html, letzter Zugriff<br />

10.05.2003.<br />

Meier, W. (2002): eXist: An Open Source Native XML Database.<br />

Siehe http://citeseer.nj.nec.com/551828.html, letzter Zugriff<br />

07.07.2003.<br />

Meier, Wolfgang M. (2003): eXist: Open Source XML Database.<br />

Siehe http://exist-db.org/index.xml, letzter Zugriff 07.07.2003.<br />

Mynttinen, J. (2000): End-to-end security of mobile data in GSM.<br />

Siehe www.citeseer.nj.nec.com/mynttinen00endtoend.html, letzter<br />

Zugriff 29.04.2003.<br />

NEVE Technologies (2001): “GPSi Dead Reckoning White Paper:<br />

Product Overview” www.neve.com.au/downloads/GPSi-WhitePaper-<br />

1-0.pdf, letzter Zugriff 04.02.03.<br />

Nano online (2000): Freudiges Fahren per Fingerabdruck:<br />

Fraunhofer-Institut entwickelt Sicherheitsstarten. Siehe<br />

http://www.3sat.de/3sat.php?http://www.3sat.de/nano/tipps/13195/,<br />

letzter Zugriff 10.05.2003.<br />

NorCom (2001): Internet Resource Access Control: The Butterfly<br />

Model. Siehe http://www.norcom.de/downloads/whitepaper/<br />

WP_Butterfly_Model_010315.pdf, letzter Zugriff 15.06.2003.<br />

OASIS (2001): Oasis Security Services Use Cases And<br />

Requirements. Siehe http://unique.outlook.net/~evan/a2mluc/<br />

usecases-strawman-2.html, letzter Zugriff 15.06.2003.<br />

OASIS (2003): OASIS eXtensible Access Control Markup Language<br />

TC. Siehe http://www.oasis-open.org/committees/<br />

tc_home.php?wg_abbrev=xacml, letzter Zugriff 07.07.2003.<br />

Ohne Autor (2000): Fahrtenbuch von Berufsgeheimnisträgern. Siehe<br />

http://www.stb-web.de/fachartikel/steuerrecht/article.php/id/153,<br />

letzter Zugriff 05.04.2003.<br />

Ohne Autor (Ohne Jahr): Fragen rund um das Fahrtenbuch. Siehe<br />

http://www.drivelog.com/faq.htm, letzter Zugriff 07.07.2003.<br />

[OhmoJ] Autohaus Ohms (o.J.): Kurz und knapp, was ist OnStar C@rWeb ?<br />

Siehe http://www.ohms.de/CarWeb/kurz_und_knapp.htm, letzter<br />

Zugriff 07.07.2003.<br />

IV


Literaturverzeichnis<br />

[OnSoJ] OnStar (o.J.): http://www.onstar.de, letzter Zugriff 07.07.2003.<br />

[Sch96]<br />

[SUN01]<br />

[SysoJ]<br />

[Tan95]<br />

[W3C99]<br />

Schneier, B. (1996): Applied Crytography: Protocols, Algorithms,<br />

and Source Code in C. John Wiley & Sons, Inc.<br />

Sun (2001): JavaTM Authentication and Authorization Service<br />

(JAAS) 1.0: Developer’s Guide. Siehe<br />

http://java.sun.com/security/jaas/doc/api.html, letzter Zugriff<br />

07.07.2003.<br />

Systramatic (o.J.): MILLIONEN FAHRZEUGNUTZER ZAHLEN ZU<br />

VIEL STEUERN. Siehe<br />

http://www.oscar200.de/anwendungen/fahrtenbuch/index.html,<br />

letzter Zugriff 07.07.2003.<br />

Tanenbaum, A. S. (1995): Moderne Betriebssysteme. Carl Hanser<br />

Verlag, München.<br />

Worldwide Web Consortium (1999): XML Path Language (Xpath)<br />

Version 1.0: W3C Recommendation 16. November 1999. Siehe<br />

http://www.w3c.org/TR/xpath, letzter Zugriff 07.07.2003.<br />

V

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!