05.11.2013 Aufrufe

Paper - Lehre und Forschung Thorsten Strufe

Paper - Lehre und Forschung Thorsten Strufe

Paper - Lehre und Forschung Thorsten Strufe

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 ILMENAU<br />

Fakultät für Informatik <strong>und</strong> Automatisierung<br />

Institut für Praktische Informatik <strong>und</strong> Medieninformatik<br />

Fachgebiet Telematik<br />

Diplomarbeit<br />

Konzeption einer dynamischen, verteilten Anwendung<br />

zur sicheren Integration von Backendsystemen.<br />

verantw. Hochschullehrer:<br />

Hochschulbetreuer:<br />

betrieblicher Betreuer:<br />

Univ. Prof. Dr.-Ing. habil. Dietrich Reschke<br />

Dipl.-Inf. <strong>Thorsten</strong> <strong>Strufe</strong><br />

Dr.-Ing. Gunter Hegewald<br />

Autor:<br />

Christian Stötzer<br />

Datum: Schwarzhausen, 01.07.2003<br />

Inventarisierungsnummer: 2003-07-02/047/IN96/2253


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Vorwort<br />

Mit dieser Diplomarbeit möchte ich mein Studium der Informatik an der Technischen<br />

Universität Ilmenau abschließen. Sie entstand in enger Zusammenarbeit mit<br />

der Firma Häcker-Automation Schwarzhausen.<br />

Danksagung<br />

An dieser Stelle möchte ich es nicht versäumen, den Personen zu danken, die mich<br />

während meiner Studienzeit <strong>und</strong> der Erstellung dieser Diplomarbeit unterstützt<br />

haben.<br />

Insbesondere möchte ich mich bei meinen beiden Betreuern, Herrn Dipl.-Inf.<br />

<strong>Thorsten</strong> <strong>Strufe</strong> <strong>und</strong> Herrn Dr.-Ing. Gunter Hegewald bedanken, die mir mit Rat<br />

<strong>und</strong> Tat zur Seite standen.<br />

Ich möchte zudem der Firma Häcker-Automation Schwarzhausen <strong>und</strong> ihren<br />

Mitarbeitern danken, die mir die Möglichkeit gegeben haben, in einem großartigen<br />

Umfeld zu arbeiten.<br />

Weiterhin geht mein Dank an meine Eltern für die finanzielle <strong>und</strong> moralische<br />

Unterstützung während des gesamten Studiums sowie an meine Frau Jacqueline<br />

für ihr Verständnis <strong>und</strong> die unzähligen Male Korrekturlesen.<br />

Warenzeichen<br />

In dieser Arbeit werden eingetragene Warenzeichen, Handelsnamen <strong>und</strong> Gebrauchsnamen<br />

verwendet. Auch wenn nicht ausdrücklich gekennzeichnet, gelten<br />

die entsprechenden Schutzbestimmungen.<br />

I


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Selbstständigkeitserklärung<br />

Hiermit erkläre ich, Christian Stötzer, dass ich diese Arbeit selbstständig verfasst<br />

<strong>und</strong> keine anderen als die angegebenen Quellen benutzt habe. Alle Stellen, die wörtlich<br />

oder sinngemäß aus Quellen entnommen wurden, habe ich als solche gekennzeichnet.<br />

Schwarzhausen, 01.07.2003<br />

Christian Stötzer<br />

II


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Inhaltsverzeichnis<br />

1 Einleitung 1<br />

2 Gr<strong>und</strong>lagen <strong>und</strong> Begriffsabgrenzungen 2<br />

2.1 Ziele der Informationssicherheit . . . . . . . . . . . . . . . . . . . 3<br />

2.2 Sicherheits-Gr<strong>und</strong>funktionen . . . . . . . . . . . . . . . . . . . . . 4<br />

2.2.1 Organisatorische Maßnahmen . . . . . . . . . . . . . . . . 4<br />

2.2.2 Zugangskontrollen . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.2.3 Zugriffskontrollen . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.2.4 Übertragungssicherung . . . . . . . . . . . . . . . . . . . . 10<br />

2.2.5 Nachweisführung . . . . . . . . . . . . . . . . . . . . . . . 11<br />

2.2.6 Wiederaufbereitung . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.3 Bedrohung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

2.3.1 Täterkreis (Wer) . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.3.2 Information (Was) . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.3.3 Motivation des Angreifers (Warum) . . . . . . . . . . . . . 14<br />

2.3.4 Methoden des Angriffs (Wie) . . . . . . . . . . . . . . . . 15<br />

2.4 Kryptologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.4.1 Alice, Bob <strong>und</strong> Mallory !?! . . . . . . . . . . . . . . . . . . 18<br />

2.4.2 Symmetrische <strong>und</strong> asymmetrische Kryptosysteme . . . . . 18<br />

2.4.3 Kryptographische Hashfunktionen . . . . . . . . . . . . . . 22<br />

2.4.4 Digitale Signaturen . . . . . . . . . . . . . . . . . . . . . . 23<br />

2.4.5 Schlüsselzertifikate . . . . . . . . . . . . . . . . . . . . . . 24<br />

2.5 Kommunikationssicherheit . . . . . . . . . . . . . . . . . . . . . . 24<br />

2.5.1 Verschlüsselungsalgorithmen . . . . . . . . . . . . . . . . . 25<br />

2.5.2 Sichere Übertragungsprotokolle . . . . . . . . . . . . . . . 31<br />

2.6 Das DPAC Informationssystem . . . . . . . . . . . . . . . . . . . . 38<br />

3 Mobiler Code 39<br />

3.1 Sicherheitsbedrohungen . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

3.1.1 Bedrohungen für den mobilen Code . . . . . . . . . . . . . 40<br />

3.1.2 Bedrohungen für den Gastrechner . . . . . . . . . . . . . . 41<br />

3.2 Sicherheitsmaßnahmen . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

3.2.1 Schutz des mobilen Codes . . . . . . . . . . . . . . . . . . 41<br />

3.2.2 Schutz des Gastrechners . . . . . . . . . . . . . . . . . . . 42<br />

3.3 Die Programmiersprache Java . . . . . . . . . . . . . . . . . . . . 43<br />

3.3.1 Sicherheitsarchitektur <strong>und</strong> -modelle in Java . . . . . . . . . 45<br />

3.3.2 Bewertung des Java-Sicherheitskonzepts . . . . . . . . . . 52<br />

3.4 Java-Web-Start, eine Alternative zu Applets . . . . . . . . . . . . . 53<br />

3.4.1 Warum Java-Web-Start? . . . . . . . . . . . . . . . . . . . 54<br />

3.4.2 Das Java Network Launching Protokoll . . . . . . . . . . . 56<br />

3.4.3 Sicherheitsmechanismen <strong>und</strong> -werkzeuge . . . . . . . . . . 63<br />

3.4.4 Bewertung von Java-Web-Start <strong>und</strong> Verbesserungsvorschläge 68<br />

III


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

4 Sichere Kommunikation zwischen Front- <strong>und</strong> Backend 71<br />

4.1 Java RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

4.1.1 Einführenden Erläuterungen . . . . . . . . . . . . . . . . . 72<br />

4.1.2 Sicherheit in RMI . . . . . . . . . . . . . . . . . . . . . . . 73<br />

4.1.3 Sicherung der RMI-Kommunikation . . . . . . . . . . . . . 74<br />

4.1.4 Probleme beim Einsatz von RMI . . . . . . . . . . . . . . . 80<br />

4.2 Virtual Private Networks (VPNs) . . . . . . . . . . . . . . . . . . . 81<br />

4.2.1 Layer-2 VPNs . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

4.2.2 Layer-3 VPNs . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

4.2.3 VPNs <strong>und</strong> das DPAC-Informationssystem . . . . . . . . . . 85<br />

5 Das DPAC-Informationssystem 86<br />

5.1 Entwicklungs- <strong>und</strong> Testumgebung . . . . . . . . . . . . . . . . . . 87<br />

5.2 Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />

5.3 Das DPAC-Frontend . . . . . . . . . . . . . . . . . . . . . . . . . 89<br />

5.3.1 WebStart . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

5.3.2 Webserver . . . . . . . . . . . . . . . . . . . . . . . . . . . 96<br />

5.4 Der DPAC-Anwendungsserver . . . . . . . . . . . . . . . . . . . . 97<br />

5.4.1 Arbeitsweise des Servers . . . . . . . . . . . . . . . . . . . 97<br />

5.5 Absicherung der Kommunikation . . . . . . . . . . . . . . . . . . . 100<br />

5.5.1 RMI-Socket-Factory . . . . . . . . . . . . . . . . . . . . . 101<br />

5.6 Nutzerauthentifikation . . . . . . . . . . . . . . . . . . . . . . . . 102<br />

6 Zusammenfassung <strong>und</strong> Ausblick 106<br />

A Anhang I<br />

A.1 Thesen dieser Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . I<br />

A.2 Erstellen von Secure Sockets mit Hilfe der JSSE . . . . . . . . . . . II<br />

A.2.1 Clientseitig . . . . . . . . . . . . . . . . . . . . . . . . . . II<br />

A.2.2 Serverseitig . . . . . . . . . . . . . . . . . . . . . . . . . . IV<br />

IV


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

1 Einleitung<br />

Die Vielzahl der heute existierenden Informationstechnologien sind aus unserem<br />

wirtschaftlichen <strong>und</strong> gesellschaftlichen Leben nicht mehr wegzudenken. Wir befinden<br />

uns mit rasantem Tempo auf dem Weg zur globalen Informationsgesellschaft.<br />

Immer komplexere <strong>und</strong> schnellere informationstechnische Systeme übernehmen<br />

immer weitreichendere Aufgaben.<br />

Wir sehen uns beim Surfen im Internet einer Unmasse von Informationen gegenüber,<br />

die wir, wenn wir es wollen, auch noch via Mobilfunk von fast jedem<br />

Punkt der Erde aus nutzen können. Briefe <strong>und</strong> Daten jagen per E-Mail oder<br />

Download in sek<strong>und</strong>enschnelle durch die verschiedensten Kommunikationsnetze.<br />

Unternehmen machen sich durch ihren Auftritt im Internet einer weltweiten<br />

Öffentlichkeit bekannt, vergrößern den Kreis der potentiellen K<strong>und</strong>en <strong>und</strong> bieten<br />

ihre Produkte an. Durch die Einrichtung moderner, schneller Daten- <strong>und</strong> Kommunikationsnetze<br />

können auch Firmen, die territorial weit voneinander entfernt liegen,<br />

Kooperationen aufbauen <strong>und</strong> Daten sowie Wissen austauschen.<br />

Dies sind nur einige wenige Beispiele aus der Informationstechnik, die wir heute<br />

schon nutzen können <strong>und</strong> als mehr oder weniger selbstverständlich ansehen. Aber<br />

mit dem Nutzen sind auch die Risiken gewachsen. Es wird immer häufiger notwendig,<br />

der Informationstechnik auch sensible Daten anzuvertrauen, wobei der Schutz<br />

dieser Daten vor unberechtigten Zugriffen mehr <strong>und</strong> mehr in den Vordergr<strong>und</strong> rückt.<br />

Die Information stellt gerade für Unternehmen ein besonders kostbares <strong>und</strong><br />

schutzwürdiges Gut dar. Ein Verlust kann sich für eine Firma existenzbedrohend<br />

auswirken.[20] Es ist also von immenser Bedeutung, unternehmensbezogene<br />

Konzepte zu entwickeln, die den Schutz der Information gewährleisten. Dies<br />

betrifft vor allem die Bereiche der Verarbeitung, Speicherung <strong>und</strong> Übertragung der<br />

Information.<br />

Immer mehr Unternehmen entschließen sich aus den verschiedensten Gründen,<br />

ihre infomationstechnologische Infrastruktur an öffentlich zugängliche Netze wie<br />

das Internet anzubinden. Neben den Vorteilen, wie beispielsweise die Verbesserung<br />

des Produkt- <strong>und</strong> K<strong>und</strong>enmanagements, birgt eine solche Internetanbindung<br />

eine Menge Sicherheitsrisiken. Fragen wie ”Ist es für Mitbewerber möglich, an<br />

firmeninterne Daten zu gelangen?”, ”Gibt es ausnutzbare Schwachstellen?” <strong>und</strong><br />

”Welcher Aufwand ist notwendig, um diese zu beseitigen?” sollten unbedingt vor<br />

einer Anbindung gestellt <strong>und</strong> beantwortet werden.[20]<br />

Ziel dieser Diplomarbeit soll es sein, ein Sicherheitskonzept zu entwickeln,<br />

das eine sichere Integration des DPAC 1 -Informationssystems der Firma Häcker-<br />

Automation in das Intra- bzw. Internet ermöglicht. Dazu werden im weiteren<br />

Verlauf verschiedene Integrationstechniken vorgestellt, auf ihre Sicherheitsaspekte<br />

hin untersucht <strong>und</strong> ihre Einsetzbarkeit im DPAC-System bewertet. Ein ganz<br />

wichtiger Punkt in Bezug auf die Einsetzbarkeit ist dabei die Benutzerakzeptanz,<br />

ohne die sich eine auch noch so sichere Integrationstechnik nicht duchsetzen<br />

würde.<br />

1 DPAC: Database for Process Administration and Controlling<br />

1


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

2 Gr<strong>und</strong>lagen <strong>und</strong> Begriffsabgrenzungen<br />

Dieser Abschnitt soll dazu genutzt werden, Begriffe, die im weiteren Verlauf der<br />

Arbeit verwendet werden, näher zu beschreiben <strong>und</strong> abzugrenzen sowie eine gr<strong>und</strong>legende<br />

Einführung in das Thema Informationssicherheit zu geben.<br />

Sicherheit Im allgemeinen versteht man unter Sicherheit, dass in einem System<br />

keine unerwünschten Vorfälle auftreten, sodass es zu jeder Zeit in der gewünschten<br />

Art <strong>und</strong> Weise funktioniert <strong>und</strong> reagiert. Der englische Sprachgebrauch kennt<br />

im Gegensatz zum deutschen zwei Begriffe für das Wort Sicherheit, die aber<br />

nicht gleichbedeutend sind: safety <strong>und</strong> security. Während man unter safety den<br />

Schutz vor unbeabsichtigten Schäden wie beispielsweise durch Blitzschlag,<br />

Überschwemmungen, Festplatten-Crashes oder Ähnliches versteht, bezeichnet<br />

security die Sicherheit vor beabsichtigten Störungen, wie zum Beispiel Sabotage,<br />

Systemeinbrüche oder das Erschnüffeln von geheimen Daten. [24] Da es aber im<br />

Rahmen dieser Arbeit keine Betrachtungen zum Thema safety geben soll, wird im<br />

weiteren Verlauf security mit Sicherheit gleichgesetzt.<br />

Gleich zu Anfang sei gesagt, eine h<strong>und</strong>ertprozentige Sicherheit kann es weder<br />

im Leben noch in der Technik geben. [20] Deshalb können die im Anschluss<br />

einführend erläuterten Schutzmaßnahmen keine absolute Sicherheit gewährleisten.<br />

Zumal auch die ökonomischen Faktoren <strong>und</strong> damit die Kosten, die entstehen<br />

können, um ein System zu schützen, nicht außer Acht gelassen werden dürfen.<br />

Ausgehend von einem für die Sicherheitsvorkehrungen zur Verfügung stehenden<br />

finanziellen Rahmen sollte man versuchen, ein ausgewogenes Verhältnis zwischen<br />

Aufwand <strong>und</strong> Nutzen zu finden. Abbildung 1 aus [20] zeigt, wie sich bei exponentiellem<br />

Anstieg der Kosten für Sicherheitsmaßnahmen die Sicherheitsrisiken<br />

minimieren lassen.<br />

Abbildung 1: Kosten / Nutzen Verhältnis für Sicherheitsvorkehrungen<br />

2


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Die parabelähnliche Kurve für die Gesamtaufwendungen berechnet sich aus der<br />

Summe der beiden Kostenkurven. In ihrem Tiefpunkt ist demnach das beste Verhältnis<br />

zwischen Investitionen für Maßnahmen zur Schadensabwehr <strong>und</strong> noch verbleibendem<br />

Restrisiko. Von den Sicherheitsanforderungen einer Organisation hängt es<br />

nun ab, wo sie sich auf der Parabel wiederfindet. Während sich Unternehmen mit<br />

”normalen” Sicherheitsansprüchen in der Nähe das Minimums bewegen, sollten<br />

sich Kreditinstitute in der rechten Häfte der Kurve einordnen.<br />

Der Gesamtwert der zu schützenden Güter geht als feste Größe in die Betrachtung<br />

ein. Überschreiten die Kosten für Schutzmaßnahmen diesen Wert, wäre das Sicherheitskonzept<br />

unter ökonomischen Gesichtspunkten nicht akzeptabel.[20]<br />

2.1 Ziele der Informationssicherheit<br />

Unter dem Begriff der Informationssicherheit versteht man das Verhindern von unberechtigter<br />

Nutzung von Ressourcen. Unbefugte Nutzung liegt dann vor, wenn ein<br />

Benutzer Informationen zur Kenntniss nimmt, ändert oder generell das System nicht<br />

entsprechend den Vorstellungen des Betreibers verwendet.[19] Gr<strong>und</strong>sätzlich kann<br />

man die Informationssicherheit in zwei wichtige Aspekte aufteilen:<br />

• Rechnersicherheit Bei der Rechnersicherheit steht der Schutz der Information<br />

im Rechnersystem im Vordergr<strong>und</strong>.<br />

• Kommunikationssicherheit Spricht man hingegen von Kommunikationssicherheit,<br />

so ist der Schutz der Information während der Datenübertragung<br />

zwischen zwei Rechnersystemen in einem Netzwerk gemeint.<br />

In dieser Arbeit soll hauptsächlich die Kommunikationssicherheit betrachtet<br />

werden.<br />

Durchgehend beschreibt die zahlreiche Literatur, die sich mit dem Thema Informationssicherheit<br />

beschäftigt (vergl. [19][20][4][7]), die folgenden klassischen<br />

Ziele:<br />

Vertraulichkeit (Geheimhaltung) Schutz vor unberechtigter Kenntnisnahme<br />

von Informationen. Dies schließt auch den Schutz von Informationen ein, die für<br />

sich ”harmlos” erscheinen, aber dazu benutzt werden können, um Zugriff auf vertrauliche<br />

Informationen zu erhalten.<br />

Integrität (Vollständigkeit) Die Sicherstellung der Korrektheit (Unversehrtheit)<br />

von Daten (Datenintegrität) bzw. der korrekten Funktionsweise von Systemen (Systemintegrität).<br />

Daten dürfen ohne Berechtigung weder modifiziert noch gelöscht<br />

werden können. Nur dann ist sichergestellt, dass mit ihnen verlässlich gearbeitet<br />

werden kann.<br />

Verfügbarkeit Schutz vor unbefugter Beeinträchtigung der Funktionalität des<br />

Systems. Alle verarbeiteten Daten sowie die zur Verarbeitung notwendigen Systeme<br />

<strong>und</strong> Betriebsmittel müssen jederzeit verfügbar <strong>und</strong> funktionsbereit sein, wenn<br />

3


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

ein autorisierter Benutzer darauf zugreifen will.<br />

Besonders für die Kommunikationssicherheit sind folgende Ziele wichtig:<br />

Authentizität (Echtheit) Sicherstellung der äußerlich korrekten <strong>und</strong> gültigen<br />

Darstellung von Informationen. Authentizität ist dann gegeben, wenn die Informationen<br />

wahr, wirklich oder ursprünglich sind, weil sie mit der Realität übereinstimmen<br />

[7]. Mit Hilfe der Authentizität kann keine Aussage über die inhaltliche Richtigkeit<br />

der Daten getroffen werden.<br />

Verbindlichkeit Der Urheber einer Nachricht kann die Urheberschaft nicht leugnen.<br />

Beispielsweise bei Vertragsabschlüssen mit einer digitalen Unterschrift.<br />

Anonymität Die beteiligten Instanzen an einem Nachrichtenaustausch bleiben<br />

geheim. Wünschenswert bei elektronischen Zahlungssystemen <strong>und</strong> in Verfahren<br />

elektronischer Wahlen.<br />

Um Sicherheitsmaßnahmen zum Schutz eines Systems entwickeln zu können, sollte<br />

man eine ganzheitliche Betrachtung der oben formulierten Ziele vornehmen. Nur<br />

so kann gewährleistet werden, dass man Sicherheitslecks nicht hinterherläuft <strong>und</strong><br />

nachträglich ”abdichtet”, sondern schon bei der Systementwicklung auf mögliche<br />

Probleme, die während der Laufzeit auftreten können angemessen reagiert.<br />

2.2 Sicherheits-Gr<strong>und</strong>funktionen<br />

Um die oben skizzierten Ziele der Informationssicherheit erreichen zu können,<br />

sollen in diesem Abschnitt einige gr<strong>und</strong>legende Sicherheitsfunktionen besprochen<br />

werden. Diese beinhalten Maßnahmen zum Schutz eines Systems vor möglichen<br />

Bedrohungen 2 . Abbildung 2 gibt einen Überblick über die in der Literatur [7][19]<br />

zu findenden <strong>und</strong> im weiteren Verlauf beschriebenen Sicherheits-Gr<strong>und</strong>funktionen.<br />

2.2.1 Organisatorische Maßnahmen<br />

Im Umfeld der Informationsverarbeitung sollten gewisse organisatorische Maßnahmen<br />

durchgeführt werden, um Systeme vor Angriffen zu schützen. Zu ihnen zählen<br />

zum Beispiel:[7]<br />

• die physischen Schutzmaßnahmen, die den Schutz vor Bedrohungen von<br />

außen mittels baulicher Maßnahmen, Überwachungssystemen sowie peripheren<br />

Systemen sichern sollen<br />

• die Erzeugung von Backups, durch das möglichst dezentrale Anlegen von<br />

red<strong>und</strong>anten Kopien das Datenbestandes<br />

2 Im Abschnitt 2.3 werden Bedrohungen genauer untersucht.<br />

4


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 2: Sicherheits-Gr<strong>und</strong>funktionen<br />

• das Erstellen von Sicherheitskonzepten auf der Gr<strong>und</strong>lage einer Risikoanlalyse<br />

3<br />

• das Herausbilden eines Sicherheitsbewusstseins durch Training <strong>und</strong> Weiterbildung,<br />

um das menschliche Handeln <strong>und</strong> Verhalten gezielt beeinflussen zu<br />

können<br />

2.2.2 Zugangskontrollen<br />

Zugangskontrollen sollen ein System schützen <strong>und</strong> gewährleisten, dass es nicht berechtigten<br />

Personen unmöglich ist, irgendwelche Operationen mit diesem System<br />

durchzuführen.[19] Die zwei wesentlichsten Aspekte der Zugangakontrolle sind die<br />

Identifizierung <strong>und</strong> die Authentifizierung 4 gegenüber einem System.<br />

Identifizierung Die Identifizierung stellt sicher, dass ein Benutzer dem System<br />

bekannt ist [7]. Überall dort wo Sicherheit eine Rolle spielt, darf es keine unbekannten<br />

Benutzer geben. Abgesehen von wenigen Ausnahmen, bei denen die Anonymität<br />

durchaus erwünscht ist (vergl. Abschnitt 2.1 - Anonymität).<br />

Ein wesentlicher Aspekt der Systemsicherheit ist die Vergabe von individuellen,<br />

nutzerbezogenen Rechten auf Daten <strong>und</strong> Systemresourcen. Mittels Identifizierung<br />

<strong>und</strong> damit Bekanntmachung eines Nutzers am System wird eine solche spezifische<br />

Rechtevergabe möglich.<br />

Authentifizierung Damit sich ein Benutzer gegenüber einem System identifizieren<br />

kann, benötigt er seine eigene Benutzer-Identifikation. Diese muss ein eindeutiger<br />

Name sein, der die Identität des Nutzers im System repräsentiert.[19]<br />

3 Die Risikoanalyse umfasst alle Maßnahmen zur Informationssicherheit in Unternehmen.<br />

4 vom englischen Wort authentication = (Bestätigen, Beglaubigen); in der deutschsprachigen Literatur<br />

werden dafür die Begriffe Authentisierung, Authentifikation oder Authentifizierung gleichbedeutenden<br />

verwendet<br />

5


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Da man nun davon ausgehen kann, dass Benutzer-Identifikationen nicht geheim<br />

sind <strong>und</strong> dass auch durch gezieltes Probieren eine legale Identifikation gef<strong>und</strong>en<br />

werden kann, ist es notwendig, die Identifikation durch ein weiters Verfahren zu<br />

ergänzen, welches eine Überprüfung der angegebenen Identifikation auf deren Korrektheit<br />

ermöglicht. Man bezeichnet dieses Verfahren als Authentifizierung oder<br />

auch Authentifikation.[19] Authentifizierung ist also die Sicherstellung der Identität,<br />

ein Benutzer muss die Richtigkeit der von ihm behaupteten Identität nachweisen.<br />

Im folgenden sollen die wichtigsten Authentifizierung-Verfahren vorgestellt werden.<br />

Sie konzentrieren sich jeweils auf das Vorhandensein bestimmter menschlicher<br />

Aspekte: Wissen, Besitz <strong>und</strong> Körpermerkmale.<br />

• Authentifizierung durch Wissen<br />

Das wohl gebräuchlichste Authentifizierungs-Verfahren ist die Authentifizierung<br />

durch Wissen. Hier wird der Benutzer aufgefordert, neben seiner Identifikation<br />

ein geheimes <strong>und</strong> nur ihm <strong>und</strong> dem System bekanntes Passwort<br />

anzugeben. Ein Rechner überprüft nun das eingegebene mit dem im System<br />

gespeicherten Passwort <strong>und</strong> gibt bei Übereinstimmung den Zugang zum System<br />

frei. Der Nutzer hat somit seine Identität nachweisen können, da ja nur<br />

er das geheime Passwort, welches zu seiner Benutzer-Identifikation gehört,<br />

kennt. Dieses einfach zu realisierende <strong>und</strong> auch einfach zu bedienende Verfahren<br />

bietet einen ausreichenden Schutz, wenn bestimmte Regeln bei der<br />

Implementierung eingehalten werden [19]:<br />

– Passwörter dürfen unter keinen Umständen auf dem Bildschirm des<br />

Benutzers im Klartext erscheinen. Der Diebstahl eines Passworts wäre<br />

sonst durch einfaches ”über die Schulter schauen” möglich.<br />

– Passwörter sollten eine gewisse Zeichenlänge nicht unterschreiten. Andernfalls<br />

sind die Passwörter leicht durch Probieren zu bestimmen.<br />

– Passwörter sollten vom Benutzer änderbar sein. Damit soll verhindert<br />

werden, dass ein Systemverwalter alle Passwörter kennt <strong>und</strong> möglicherweise<br />

selbst ein Sicherheitsrisiko darstellt.<br />

– Umgekehrt sollten Passwörter einzelner Benutzer aber auch unveränderlich<br />

sein, um eine Überwachung dieser Nutzer durch einen ”Sicherheits-<br />

Beauftragten” zu gestatten.<br />

– Passwörter sollten so gewählt werden, dass sie nicht einfach zu erraten<br />

sind, sie sollten aber auch nicht zu kompliziert gestaltet werden, um das<br />

Notieren <strong>und</strong> sei es nur als Gedächtnisstütze zu verhindern.<br />

– Es darf nicht möglich sein, Benutzer-Identifikation einzurichten, die<br />

kein Passwort haben<br />

Ein weiteres Authentifizierungs-Verfahren, bei dem das Wissen des jeweiligen<br />

Benutzers von Bedeutung ist, ist der Authentifizierungs-Dialog. Dem<br />

Nutzer wird von einem Rechner eine Reihe von Fragen gestellt, die er zur<br />

Authentisierung seiner Identifikation richtig beantworten muss. So gesehen,<br />

ist der Authentifizierungs-Dialog eine Variante des Passwort-Verfahrens mit<br />

6


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

mehreren Passwörtern. Es ist naheliegend, dass es sich hierbei um Fragen<br />

handeln muss, die die Person betreffen <strong>und</strong> deren Antworten nicht aus allgemeinen<br />

oder einfach zugänglichen Quellen beschafft werden können.[19]<br />

• Authentifizierung durch Besitz<br />

Ein Benutzer, der Zugang zu einem System sucht, weist sich bei diesem Verfahren<br />

durch den Besitz eines bestimmten Gegenstandes aus, der ihm als berechtigten<br />

Benutzer zur Verfügung gestellt wurde. Ein solcher Gegenstand<br />

kann ein Schlüssel, eine Chip- oder Magnetkarte oder ein Ausweis sein.<br />

Nachteile diese Verfahrens sind die Diebstahls- <strong>und</strong> Fälschungsgefahr sowie<br />

die unberechtigte, bewusste Weitergabe des Gegenstandes an Dritte. [7] Es<br />

sei jedoch erwähnt, dass der Diebstahl eines Gegenstandes viel besser festgestellt<br />

werden kann als beispielsweise der Diebstahl eines Passworts, was das<br />

Einleiten effizienter Gegenmaßnahmen deutlich erleichtert. [19]<br />

• Authentifizierung durch Körpermerkmale<br />

Authentifizierungs-Verfahren, die die Analyse von Körpermerkmalen einer<br />

bestimmten Person zur Verifizierung ihrer Identität nutzen, bezeichnet man<br />

als Biometrische-Verfahren. Dabei werden bestimmte menschliche Charakteristika,<br />

wie angeborene physische Eigenschaften oder ein erlerntes stabiles<br />

Verhalten gemessen bzw. erfasst, in eine digitale Form umgewandelt <strong>und</strong> mit<br />

den abgespeicherten Charakteristika (Referenzdaten) verglichen. Zu den angeborenen<br />

physischen Eigenschaften eines Menschen zählen zum Beispiel:<br />

die Anatomie der Hand, die Gesichtszüge, der Fingerabdruck oder die Verzweigung<br />

der Blutgefäße der Retina. Ein erlerntes stabiles Verhalten ist beispielsweise<br />

die Form <strong>und</strong> die Dynamik einer Unterschrift. [7] [19] [20]<br />

Durch die Kombination der oben besprochenen Verfahren zur Authentifizierung<br />

ist eine Steigerung der Sicherheit möglich. Ein klassisches Beispiel für<br />

eine solche Kombination ist die Kredit- oder Bankkarte. Bei ihr kommen die<br />

Authentifizierungs-Verfahren durch den Besitz (die Karte selbst), das Wissen (Geheimnummer)<br />

<strong>und</strong> die Körpermerkmale (Unterschrift <strong>und</strong> möglicherweise Foto) zur<br />

Anwendung.<br />

Was alle drei Verfahren gemeinsam haben, ist, dass im System Referenzdaten gepeichert<br />

sein müssen, die beim Authentifizierungsvorgang für Vergleichsoperationen<br />

benötigt werden. Dem Schutz dieser Referenzdaten, seien sie in einer einfachen Datei<br />

oder einer Datenbank gespeichert, gilt ein besonderes Augenmerk. Eine Manipulation<br />

könnte es einem unberechtigten Nutzer ermöglichen, Zugang zum System<br />

zu erlangen.<br />

2.2.3 Zugriffskontrollen<br />

Zugriffskontrollen sind im allgemeinen in Betriebssystemen oder Datenbanken verankert.<br />

Mit ihrer Hilfe wird überprüft, ob ein Benutzer die Berechtigung hat, in der<br />

gewünschten Art <strong>und</strong> Weise auf Systemresourcen oder Daten zuzugreifen. [33] Im<br />

engen Zusammenhang stehen dabei auch die Begriffe Autorisierung 5 <strong>und</strong> Rechteverwaltung.<br />

5 von lateinisch ”auctorizare”= Vollmacht geben<br />

7


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Autorisierung Hat sich ein Benutzer nach erfolgter Identifizierung <strong>und</strong> Authentifizierung<br />

(vergl. Abschnitt 2.2.2) an einem System angemeldet, so ist es nur in<br />

den seltensten Fällen wünschenswert, dass er von nun an das System ohne Einschränkungen<br />

nutzen kann. Deshalb wird der Authentifizierung die Autorisierung<br />

nachgeschaltet, um dem Benutzer spezifische Rechte zuzuweisen, die ihn in Bezug<br />

auf die Verwendung von Systemressourcen oder Daten einschränken können. Diese<br />

Rechte werden von speziell hierfür verantwortlichen Personen (zum Beispiel: Systemadministratoren)<br />

aufgr<strong>und</strong> extern festgesetzer Richtlinien vergeben.[19] Dieser<br />

Vorgang ist von entscheidender Bedeutung für die Sicherheit des Gesamtsystems<br />

[7].<br />

Rechteverwaltung Die Vergabe, der Entzug <strong>und</strong> die Veränderung von Rechten<br />

ist die primäre Aufgabe der Rechteverwaltung. Darüber hinaus werden auch die<br />

Folgen der Weitergabe von Daten <strong>und</strong> Rechten geregelt, um zu verhindern, dass<br />

durch die Übertragung von Rechten ein verdeckter Kanal entsteht oder geschaffen<br />

werden kann.[33]<br />

Die Rechtevergabe erfolgt im allgemeinen nach einem der folgenden Gr<strong>und</strong>prinzipien<br />

[33]:<br />

• Prinzip der Vergabe minimaler Privilegien<br />

Dem einzelnen Nutzer werden nur die Zugriffsrechte eingeräumt, mit denen<br />

es ihm möglich ist, eine Aufgabe (gerade noch) zu erfüllen. - geschlossenes<br />

System<br />

• Prinzip der Vergabe maximaler Privilegien<br />

Die Daten <strong>und</strong> Ressourcen eines Systems können mit Ausnahmen von wenigen<br />

Einschränkungen von allen Nutzer genutzt werden. - offenes System<br />

Zwei Modelle der Rechteverwaltung, in denen diese Prinzipien in mehr oder<br />

weniger reiner Form [33] umgesetzt werden, sind das DACM (engl: discretionary<br />

access control model) oder das MACM (engl: mandatory access control model).<br />

Discretionary Access Control Model<br />

Dieses Modell verfolgt den Ansatz der diskreten Kontrolle von Zugriffsrechten. Dabei<br />

wird davon ausgegangen, dass es prinzipiell möglich ist, für jedes Datenobjekt<br />

separat die Schutzanforderungen dieses Datenobjektes anzugeben. Im wesentlichen<br />

wird für die einzelnen Benutzer festgelegt, welche Operationen sie auf dieses<br />

Datenobjekt anwenden dürfen. Generell ist es dabei zunächst unerheblich, ob die<br />

Schutzrechte direkt an das Datenobjekt geb<strong>und</strong>en <strong>und</strong> für die einzelnen Benutzer<br />

spezifiziert werden, oder ob jedem Benutzer eine Liste von Rechten gegeben ist, die<br />

beschreibt, welche Operationen er auf einzelne Datenobjekte anwenden darf.[19]<br />

In der Praxis erfolgt im allgemeinen die Vergabe von Zugriffsrechten entweder<br />

explizit durch den Eigentümer eines Datenobjektes (Eigentümermodell) oder<br />

implizit bei der Erstellung der Benutzerkennung durch Zuteilung einer bestimmten<br />

Rolle oder Zuordnung zu einer Benutzergruppe.<br />

Der Hauptvorteil der diskreten Zugriffskontrolle ist ihre hohe Flexibilität <strong>und</strong><br />

8


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Anpaßbarkeit an die individuellen Schutzbedürfnisse einzelner Datenobjekte sowie<br />

an individuelle Zugriffserfordernisse einzelner Benutzer [19]. Was jedoch auf der<br />

einen Seite ein großer Vorteil ist, ist auf der anderen nicht ganz unproblematisch,<br />

denn gerade beim Eigentümermodell unterliegt der Schutz der Datenobjekte<br />

letztendlich der Willkür des Einzelnen. So kann es bei Vergesslichkeit oder<br />

ungenügendem Sicherheitsbewusstsein vorkommen, dass wichtige Datenobjekte<br />

nicht ausreichend geschützt werden.<br />

Ein klassisches Beispiel für die diskrete Kontrolle von Zugriffsrechten ist das<br />

Modell der Zugriffsmatrix, welches konzeptionell erstmals 1971 von Lampson<br />

formuliert wurde. Abbildung 3 zeigt eine solche Matrix (Tabelle), in der sich<br />

eine Menge von Subjekten <strong>und</strong> Objekten gewissermaßen gegenüberstehen. Die<br />

Tabelleneinträge bestehen aus Rechten (beispielsweise Schreiben, Lesen oder<br />

Ausführen), die es dem Subjekt ermöglichen, bestimmte Operationen auf das Objekt<br />

anzuwenden. Wird davon ausgegangen, dass Subjekte <strong>und</strong> Objekte systemweit<br />

eindeutige Namen besitzen, müssen die beiden Mengen nicht notwendigerweise<br />

disjunkt sein. Es kann durchaus vorkommen, dass ein Objekt (z.B. ein Programm)<br />

zu einem Subjekt ”mutiert”, weil es Zugriff auf ein anders Objekt (z.B. eine Datei)<br />

benötigt.[19]<br />

Abbildung 3: Beispiel einer Zugriffsmatrix [19]<br />

Die Nachteile einer solchen Zugriffsmatrix liegen zum einen darin, dass die<br />

Matrix in der Regel nur dünn besetzt ist, weshalb sich eine vollständige Speicherung<br />

nicht lohnt, zum anderen in der hohen Dynamik, der sie unterworfen ist, wenn sich<br />

Subjekte <strong>und</strong> vor allem Objekte häufig ändern. Diese Nachteile brachten die beiden<br />

folgenden Alternativen hervor:<br />

• Zugriffskontrolllisten Eine Liste, welche die zugriffsberechtigten Subjekte<br />

enthält, wird zusammen mit den Zugriffsrechten beim Objekt gespeichert -<br />

also nur die (nicht leeren) Matrixspalten.<br />

• Befugnislisten Eine Liste, welche Objekte enthält, wird zusammen mit den<br />

Zugriffsrechten beim Subjekt gespeichert - also nur die (nicht leeren) Matrixzeilen.<br />

9


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Mandatory Access Control Model<br />

Die gr<strong>und</strong>legende Idee des Mandatory Access Control Model (im Deutschen auch<br />

oft als regelbasierte Modelle bezeichnet) ist es, dass ein systemweites Regelwerk<br />

existiert, welches den Zugriff von Subjekten auf Objekte kontrolliert. [33]<br />

Dabei wird jeder Zugriffsversuch gegen den Inhalt des Regelwerks geprüft<br />

<strong>und</strong> genehmigt, falls . . .<br />

1. eine Regel existiert, die den Zugriff explizit erlaubt (geschlossenes System).<br />

2. keine Regel existiert, die den Zugriff explizit verbietet (offenes System).<br />

Bei diesem Modellansatz werden die Befugnisse an bestimmten Objekten gewissermaßen<br />

zwingend vorgeschrieben. Dadurch wird eine mehr oder weniger<br />

willkürliche Rechtevergabe, wie es bei den diskreten Zugriffskontrollen der Fall<br />

ist, vermieden.<br />

Schutzklassensysteme (auch Schutzklassenmodelle genannt) sind typische<br />

Vertreter der regelbasierten Zugriffskontrolle. Schutzklassenmodelle definieren<br />

neben den Subjekten <strong>und</strong> Objekten eine vollständig hierarchisch geordnete Menge<br />

von Schutzstufen (auch Schutzklassen genannt). Eine solche Menge stellt sich<br />

beispielsweise so dar:<br />

unklassifiziert (offen)


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

beispielsweise Zugangs- oder Zugriffskontrollen nicht mehr <strong>und</strong> es müssen kryptographische<br />

Verfahren eingesetzt werden. Gegen den Verlust der Vertraulichkeit<br />

werden die Informationen verschlüsselt, gegen Manipulation finden kryptogarphische<br />

Prüfsummen ihre Verwendung.[7][19]<br />

Der Abschnitt 2.5 Kommunikationssicherheit beschäftigt sich später noch genauer<br />

mit dem Thema Übertragungssicherung. Dort wird dann auch auf die oben angesprochenen<br />

kryptographischen Verfahren näher eingegangen.<br />

2.2.5 Nachweisführung<br />

Da nicht davon ausgegangen werden kann, das es eine absolute Sicherheit gibt,<br />

ist es erforderlich, sicherheitsrelevante Vorgänge im System zu überwachen <strong>und</strong><br />

zu protokollieren. Die dazu verwendete Sicherheitsgr<strong>und</strong>funktion wird als Nachweisführung<br />

bezeichnet. Sie hat die Aufgabe der Beweissicherung <strong>und</strong> muss an<br />

zentraler Stelle im System verankert sein, damit sie nicht ohne weiteres ausgeschaltet<br />

oder umgangen werden kann.[19]<br />

Unter Verwendung von Audit-Logs 6 <strong>und</strong> Monitoring 7 als Mittel der Nachweisführung<br />

können Sicherheitsverstöße auch im Nachhinein entdeckt <strong>und</strong> untersucht<br />

werden, um somit eventuelle Sicherheitslöcher zu stopfen <strong>und</strong> Angreifer zu<br />

identifizieren.<br />

Audit-Logs Audit-Logs zeichnen für die Sicherheit relevante Vorgänge wie zum<br />

Beispiel Systemstart <strong>und</strong> -beendigung, Benutzer-Autorisierung, abgewiesene Anmeldungen<br />

oder Versuche zum Erraten von Passwörtern auf, um später genau nachvollziehen<br />

zu können, wer zu welchem Zeitpunkt welche Operationen auf welche<br />

Daten angewendet hat. Bei der Auswertung von Audit-Logs sind geeignete Selektierungsmechanismen<br />

von immenser Wichtigkeit. Nur durch sie kann gewährleistet<br />

werden, dass die aus der aktuellen Situation heraus gesuchten sicherheitsrelevanten<br />

Vorgänge nicht in der Flut der zur Zeit als belanglos eingestuften Vorgänge untergehen.<br />

Die in Audit-Logs enthaltenen Informationen sind unbedingt vor Manipulation zu<br />

schützen, da sie gegebenenfalls Beweiskraft haben.[19] [7]<br />

Monitoring Die Zielstellung des Monitoring ist eine etwas andere als die<br />

der Audit-Logs. Während sich Audit-Logs im wesentlichen auf einen längeren<br />

Zeitraum beziehen, bietet das Monitoring die Möglichkeit, aktuelle Vorgänge <strong>und</strong><br />

Abläufe im System quasi gleichzeitig zu beobachten.[19]<br />

Die Mechanismen zur Nachweisführung müssen so gestaltet werden, dass<br />

keine Konflikte mit dem Datenschutz entstehen. Es dürfen keine Nutzerprofile auf<br />

Gr<strong>und</strong>lage der Daten zur Beweissicherung erstellbar sein.[7]<br />

6 audit von engl. auditing = überwachen <strong>und</strong> log von engl. logging = protokollieren<br />

7 engl. monitoring = beobachten<br />

11


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

2.2.6 Wiederaufbereitung<br />

Die mehr im Gebiet der Betriebssysteme beheimatete Sicherheitsgr<strong>und</strong>funktion<br />

Wiederaufbereitung soll hier nur der Vollständigkeit halber kurz angerissen werden.<br />

Da die in Rechnersystemen verfügbaren Betriebsmittel 8 nur im endlichen Umfang<br />

vorhanden sind, kommt es insbesondere bei Speicherbereichen auf Datenträgern<br />

<strong>und</strong> Hauptspeicher zu häufigen Wiederverwendungen. Die Wiederaufbereitung<br />

soll unerwünschte <strong>und</strong> unzulässige Informationsflüsse über solche Speicherbereiche<br />

verhindern <strong>und</strong> dafür Sorge tragen, dass diese Bereiche bei erneuter Verwendung<br />

keine zugreifbaren Informationen alter Verwendungen mehr enthalten.[19]<br />

2.3 Bedrohung<br />

Bevor man damit beginnt, geeignete Strategien zur Absicherung eines Systems vor<br />

drohenden Risiken zu entwickeln, um daraus entsprechende Schutzmechanismen<br />

abzuleiten, sollte man sich zuerst Gedanken über mögliche Bedrohungen machen.<br />

Bedrohungen sind Umstände, die direkt oder indirekt zu Schäden oder einem Verlust<br />

der Sicherheit führen können.[7] Prinzipiell lassen sie sich in drei Hauptkategorien<br />

unterteilen: Natürliche Bedrohungen, unbeabsichtigte Bedrohungen <strong>und</strong><br />

beabsichtigte Bedrohungen.<br />

Natürliche Bedrohungen Unter dieser Art von Bedrohungen versteht man die<br />

natürlichen Gefahren für Rechnersysteme, wie beispielsweise Feuer, Hochwasser,<br />

Stromausfall, Erdbeben, Blitzschlag aber auch Einflüsse aus der Umwelt wie Staub<br />

<strong>und</strong> hohe Luftfeuchte.<br />

Unbeabsichtigte Bedrohungen Unbeabsichtigte Bedrohungen werden meist<br />

durch menschliche Nachlässigkeit <strong>und</strong> unzureichendes Sicherheitsbewustsein hervorgerufen.<br />

Als Beispiele sind hier der ungenügend aus- oder fortgebildete Systemadministrator<br />

oder der Benutzer zu nennen, der sich einen Merkzettel mit seinen<br />

Zugangsdaten am Monitor befestigt.<br />

Beabsichtigte Bedrohungen Die dritte Hauptkategorie beinhaltet die beabsichtigten<br />

Bedrohungen. Diese wohl ”interessantesten” Berdohungen können<br />

sowohl von innen (ein berechtigter Systembenutzer versucht Zugriffsrechte<br />

zu erlangen, die seinem Nutzerprofil nicht entsprechen) als auch von außen (ein<br />

Angreifer versucht sich unberechtigt Zugang zum System zu verschaffen) kommen.<br />

Um der Vielzahl natürlicher Bedrohungen nicht hilflos gegenüberzustehen,<br />

kommen meist Verfahren aus baulichen <strong>und</strong> technischen Bereichen wie Blitzschutzanlagen,<br />

Notstromversorgungen oder Brandmeldesysteme zum Einsatz.<br />

Hierdurch können die Risiken zwar nicht negiert, jedoch auf ein erträgliches Maß<br />

reduziert werden. Den unbeabsichtigten Bedrohungen begegnet man am besten<br />

mit Training <strong>und</strong> Fortbildung von Systemnutzern <strong>und</strong> -administratoren, um deren<br />

8 Betriebsmittel sind elementare Komponenten eines Rechnersystems: Hardware, Software <strong>und</strong><br />

Daten.[7]<br />

12


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Wissen über mögliche Risiken auf einem weitestgehend aktuellen Stand zu halten<br />

<strong>und</strong>, um das Sicherheitsbewusstsein eines jeden Einzelnen weiter auszuprägen.<br />

Weitaus schwieriger gestaltet sich die Ergreifung von Schutzmaßnahmen gegen<br />

beabsichtigte Bedrohungen. Hierbei bedarf es dem Einsatz einer ganzen Reihe<br />

verschiedenster Sicherheitsmechanismen. Um diese Sicherheitsmechanismen<br />

adäquat einsetzen zu können, sollte man sich folgende wichtige Frage vor Augen<br />

führen. [23]<br />

Welche Informationen oder Daten könnten aus welchen Gründen für wen von<br />

Interesse sein <strong>und</strong> wie kann er an sie gelangen?<br />

Diese Frage beinhaltet wesentliche Merkmale der beabsichtigten Bedrohungen: die<br />

interessanten Informationen oder Daten (Was), die Motivation für einen Angriff<br />

(Warum), den Angreifer selbst (Wer) <strong>und</strong> die Methode des Angriffs (Wie).<br />

2.3.1 Täterkreis (Wer)<br />

Es stellt sich als überaus schwierig dar, einen Angreifer (Täter) einem bestimmten<br />

Personenkreis zuzuordnen. Gr<strong>und</strong>sätzlich könnte sich hinter jedem, der sich im<br />

Gebiet der elektronischen Datenverarbeitung auskennt, ein potentieller Täter verbergen.<br />

Betrachtet man beispielsweise das Intranet 9 eines Unternehmens, welches räumlich<br />

getrennt als eine Art Insel existiert, so beschränkt sich die Anzahl möglicher<br />

Täter weitestgehend auf Mitarbeiter, Besucher, Wartungs- <strong>und</strong> Reinigungspersonal<br />

<strong>und</strong> auf solche Personen, die sich unerlaubt Zutritt zu den Unternehmensräumen<br />

verschaffen (Einbrecher). Sobald aber damit begonnen wird, ein solches Intranet<br />

an ein für jedermann zugängliches Netzwerk wie das Internet anzuschließen, vergrößert<br />

sich unweigerlich der Kreis potentieller Angreifer um ein Vielfaches <strong>und</strong><br />

die Wahrscheinlichkeit steigt, gelegentlich ungebetene Gäste zu Besuch zu haben.<br />

Gerade im Internet ist vom Teenager, der aus sportlichem Ehrgeiz die Homepage<br />

unbemerkt nach seinen Vorstellungen verschönert, bis zum professionellen Industriespion,<br />

der im Auftrag der Konkurenz vertrauliche Dokumente entwendet, alles<br />

vertreten. [20]<br />

Allgemein lässt sich festhalten, dass eine Person dann zum Angreifer werden kann,<br />

wenn die folgenden Faktoren auf sie zutreffen:<br />

• sie benötigt aus bestimmen Gründen Informationen, Daten oder Ressourcen<br />

• sie hat die Gelegenheit, sich diese zu beschaffen<br />

• sie hat keine moralischen Skrupel, die ihr Tun verhindern könnten<br />

Bei der Entwicklung von Sicherheitskonzepten sollte man versuchen, dass diese<br />

drei Faktoren bei einer Person nie zusammenkommen. Es ist aber leicht einzusehen,<br />

dass auf Bedarf <strong>und</strong> Moral nur im äußerst begrenzten Maß Einfluss genommen<br />

werden kann. Das Hauptaugenmerk liegt darauf, der Person erst gar keine Gelegenheit<br />

zum Angriff zu bieten.<br />

9 Ein Intranet ist ein Netzwerk, das Personal-Computer innerhalb eines Unternehmens miteinander<br />

verbindet.<br />

13


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

2.3.2 Information (Was)<br />

Wie schon erwähnt, ist der Bedarf einer Person an bestimmten Informationen ein<br />

wichtiger Aspekt, der zu einem Angriff führen kann. Informationen gelten heute als<br />

wirtschaftliches Gut <strong>und</strong> stellen oftmals einen großen Wert für den Besitzer dar.[20]<br />

Es gilt also zu untersuchen, welche Informationen für Außenstehende von besonderem<br />

Interesse sein könnten <strong>und</strong> welchen Schaden der Verlust der Vertraulichkeit<br />

dieser Informationen nach sich zieht. Auf Basis dieser Untersuchungen kann<br />

dann entschieden werden, ob bestimmte Informationen besonders geschützt werden<br />

müssen oder nicht.<br />

Als Beispiel wären hier auf der einen Seite Unternehmensdaten wie <strong>Forschung</strong>sergebnisse<br />

zu nennen, bei denen der Verlust der Vertraulichkeit gegenüber der Konkurenz<br />

einen immensen Schaden bedeuten würde, <strong>und</strong> die deshalb eines besonderen<br />

Schutzes bedürfen. Auf der anderen Seite das sich wöchentlich ändernde Menüangebot<br />

der unternehmenseigenen Kantine, welches im Intranet zu finden ist <strong>und</strong> dessen<br />

Schutzwürdigkeit gegen Null geht.<br />

2.3.3 Motivation des Angreifers (Warum)<br />

Die Motive, die ein Angreifer haben kann, sind vielfältig. Die Palette reicht von<br />

niedrigen Beweggründen bis hin zur Verfolgung vermeintlich ehrwürdiger Ziele.<br />

Stellvertretend sollen im Folgenden ohne Anspruch auf Vollständigkeit einige Motive<br />

kurz skizziert werden.<br />

Ruhm: Nicht immer steht der gezielte ”Datenklau” im Vordergr<strong>und</strong>. Manche Angreifer<br />

brüsten sich gerne in der Öffentlichkeit, erfolgreich in bekannte Unternehmen<br />

wie Microsoft oder Institutionen wie das FBI eingebrochen zu sein.<br />

Spaß an der Sache: Die Freude darüber, ein vermeintlich sicheres System geknackt<br />

zu haben, spielt bei dieser Art von Motivation eine wichtige Rolle. Die wenigen<br />

”echten” Hacker arbeiten unter einer Art ”Ehrenkodex” <strong>und</strong> verfolgen vorrangig<br />

das Ziel, Schwachstellen in der Sicherung von Systemen <strong>und</strong> dem Schutz<br />

von Daten aufzudecken ohne größeren Schaden zu hinterlassen.<br />

Emotionen: Wut, Hass oder Rache sind Emotionen, die möglicherweise (Ex-)<br />

Mitarbeiter dazu veranlassen, gegen den (früheren) Arbeitgeber einen Angriff zu<br />

starten. Denkbar ist, dass ein solcher Mitarbeiter Insiderwissen über Sicherheitsmechanismen<br />

besitzt, was ihn besonders gefährlich macht.<br />

Wirtschaftliche Interessen: Last but not least stehen die wirtschaftlichen <strong>und</strong> finanziellen<br />

Interessen. Man stelle sich einen Mitarbeiter vor, der firmeninterne <strong>Forschung</strong>sergebnisse<br />

sammelt <strong>und</strong> diese dann an den meistbietenden Konkurrenten<br />

verkauft.<br />

14


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 4: Angriffszyklus [20]<br />

2.3.4 Methoden des Angriffs (Wie)<br />

Ein potentieller Angreifer kann sich heutzutage aus einem reichhaltigen Pool von<br />

Angriffsmethoden die aussuchen, die nach eigenem Ermessen am effektivsten zu<br />

seinem äußerst fragwürdigen Ziel führen. Da wären unter anderem Spoofing, DoS-<br />

Attacken, Lauschangriffe, Trojanische Pferde, Social Engineering <strong>und</strong> Replay zu<br />

nennen. Die meisten dieser Angriffsmethoden setzten ein f<strong>und</strong>iertes technisches<br />

Verständnis <strong>und</strong> Fachwissen voraus. Wer jedoch annimmt, dass das den potentiellen<br />

Täterkreis auf Technik-Freaks <strong>und</strong> professionelle Industriespione einschränkt,<br />

liegt angesichts des reichhaltigen F<strong>und</strong>uses an Angriffswerkzeugen, die sich im Internet<br />

finden lassen, leider falsch. Solche Tools wie beispielsweise CRACK 10 oder<br />

Juggernaut 11 befähigen inzwischen auch Gelegenheitshacker, einige komplizierte<br />

Attacken per Knopfdruck durchzuführen. [20]<br />

Wie bereits angedeutet, bestehen die meisten Angriffe aus vielschichtigen <strong>und</strong> komplizierten<br />

Prozessen, die einer systematischen Vorgehensweise <strong>und</strong> einem guten<br />

Verständnis von Netzwerken <strong>und</strong> Betriebssystemen bedürfen. Besonders die Identifizierung<br />

möglicher Schwachstellen im System ist ein wichtiger Schritt zum Erfolg.<br />

Das Vorgehen des Angreifers beim Attackieren eines Systems wird in [20] als einen<br />

Zyklus dargestellt, der solange durchlaufen wird bis das gesetzte Ziel erreicht ist.<br />

Abbildung 4 zeigt einen solchen Angriffszyklus. Typischerweise beginnt ein Angriff<br />

damit, dass der Eindringling versucht, möglichst viele Informationen über das<br />

Zielsystem zu sammeln. (1) Auf Gr<strong>und</strong>lage dieser Informationen lassen sich möglicherweise<br />

Rückschlüsse auf das verwendete Betriebssystem <strong>und</strong> dessen Release-<br />

Stand ziehen, die ihrerseits wiederum zur Identifizierung von Schwachstellen dienen<br />

können. (2) Hat der Angreifer solche Schwachstellen entdeckt, wird er diese<br />

ausnutzen, um direkte Schutzmechanismen zu umgehen. (3) Hat er auch die-<br />

10 vergl.: [20] Seite 110<br />

11 vergl.: [20] Seite 113<br />

15


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

se Hürde überw<strong>und</strong>en, werden durch die im ersten Angriffszyklus unrechtmäßig<br />

erworbenen Berechtigungen (4) weitere Informationen gesammelt, die zur Überwindung<br />

des nächsten Hindernisses hilfreich sein könnten, <strong>und</strong> so weiter. Je mehr<br />

Schutzmechanismen dem Angreifer im Weg stehen, um so öfter muss er den Zyklus<br />

durchlaufen <strong>und</strong> um so schwieriger wird sein Unterfangen. [20]<br />

Nach der bis jetzt weitestgehend allgemeinen Betrachtung soll die nun folgende<br />

Übersicht die oben bereits erwähnten Angriffsmethoden etwas näher beleuchten.<br />

Spoofing Unter Spoofing (dt. Schwindeln, Vortäuschen) versteht man das Vorgaukeln<br />

einer falschen Identität. Der Angreifer versucht, sich dadurch Zugang zu<br />

geschützten Systemen oder Diensten zu verschaffen. Spoofing richtet sich also gegen<br />

die Zugangskontrolle 12 eines Systems.<br />

Denial-of-Service-Attacken (DoS) Denial-of-Service-Attacken (dt. Serviceverweigerungsangriffe)<br />

richten sich immer gegen die Verfügbarkeit 13 eines Systems.<br />

Der Angreifer versucht durch bewusst herbeigeführte Überlastung die Funktionalität<br />

des attackierten Systems entscheident zu stören. Das Gefährliche an diesen<br />

Angriffen ist, dass sie in der Regel ohne großen Aufwand durchführbar sind <strong>und</strong><br />

man sich nur schwer gegen sie wehren kann. Der Schaden, den sie verursachen,<br />

hält sich dagegen gewöhnlich in Grenzen, da der Angreifer keine Berechtigungen<br />

auf dem attackierten System erhält. Denial-of-Service-Attacken sind oft Bestandteil<br />

eines mehrstufigen Angriffsplans, um beispielsweise störende Reaktionen dritter<br />

Systeme zu unterbinden. [20] [4]<br />

Lauschangriffe Netzwerke dienen nicht nur als Transportmittel einer Attacke,<br />

sondern können auch selber Ziel eines Angriffs werden. Bei einem Lauschangriff<br />

versucht der Täter Datenströme abzuhören, um unberechtigt an die darin enthaltenen<br />

Informationen zu gelangen. Dabei kommt ihm die Tatsache entgegen, dass<br />

immer noch viele Anwendungsprotokolle, wie zum Beispiel FTP 14 ihre Nutzdaten<br />

überwiegend unverschlüsselt, also im Klartext, übertragen.<br />

Das Abhören geschieht für die betroffenen Anwender völlig transparent <strong>und</strong> ist nur<br />

mit hohem messtechnischen Aufwand feststellbar. [20] [3]<br />

Trojanische Pferde Das aus der griechischen Mythologie bekannte Trojanische<br />

Pferd stand bei der Namensgebung von Programmen oder Skripten Pate, die neben<br />

ihrer bekannten <strong>und</strong> erwarteten Arbeitsweise hinter dem Rücken des Anwenders<br />

unberechtigt, vorzugsweise vertrauliche Daten im System sammeln <strong>und</strong> an den Angreifer<br />

zurücksenden. Diese Vorgehensweise kann wie bei den Lauschangriffen für<br />

den Anwender transparent sein <strong>und</strong> auch nach der Entdeckung eines Trojaners kann<br />

man oft nur schwer sagen, wie tief er in das System eingedrungen ist <strong>und</strong> welche<br />

Daten er bereits ausgespäht <strong>und</strong> versendet hat. [3] [20]<br />

12 vergl.: Abschnitt 2.2.2 Zugangskontrollen<br />

13 vergl.: Abschnitt 2.1 Verfügbarkeit<br />

14 File Transfer Protokoll<br />

16


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Social Engineering Beim Social Engineering nutzt der Angreifer die Naivität der<br />

Mitarbeiter eines Unternehmens <strong>und</strong> deren Bedürfnis, hilfreich zu sein aus, um an<br />

die gewünschten Informationen zu gelangen, die er an anderer Stelle verwerten<br />

kann. Der Telefonanruf eines unter Zeitdruck stehenden Mitarbeiters beim Administrator,<br />

der angeblich sein Passwort vergessen hat oder einen Gastzugang benötigt,<br />

reicht unter Umständen aus, jeden noch so aufwendigen Sicherheitsmechanismus<br />

durch menschliches Fehlverhalten außer Kraft zu setzen. 15 [3] [20]<br />

Replay Speichert ein Angreifer abgefangene Nachrichten, um sie später wieder<br />

unverändert abzusenden, so nennt man das eine Replay- (dt. Wiedereinspielungs-)<br />

Attacke. In Bezug auf Authentisierungsdaten, wie Benutzerkennung <strong>und</strong> Passwort<br />

kann er sich so, unter Vortäuschung einer falschen Identität, unberechtigt Zugang<br />

zu einem System verschaffen. Dabei ist es vollkommen belanglos, ob die Daten in<br />

verschlüsselter Form oder im Klartext übertragen wurden, da ihr Inhalt eigentlich<br />

nicht von Interesse ist. [3] [4]<br />

2.4 Kryptologie<br />

Die Kryptologie 16 ist ein Bereich der Mathematik, der sich mit dem Verbergen von<br />

Informationen beschäftigt. Im Oberbegriff Kryptologie werden die beiden Teilgebiete<br />

Kryptograhie <strong>und</strong> Kryptoanalyse zusammengefasst. [5] [24] [21]<br />

Kryptographie Kryptographie ist die <strong>Lehre</strong> von den Methoden zur Ver- <strong>und</strong> Entschlüsselung<br />

(Chiffrierung / Dechiffrierung) von Daten, um eine Geheimhaltung<br />

der beinhalteten Informationen gegenüber Unbefugten (Angreifern) sicherzustellen.<br />

Die beiden wichtigsten Hilfsmittel der Krytographie sind zum einen die Mathematik.<br />

Denn nur durch mathematische Denkweise <strong>und</strong> Kenntnisse lassen sich<br />

Verfahren zur sicheren Ver- <strong>und</strong> Entschlüsselung von Daten entwickeln. Zum anderen<br />

der Computer, der die Verschlüsselungsverfahren durchführt <strong>und</strong> sie auf mögliche<br />

Schwachstellen hin untersuchen kann.<br />

Krytographische Methoden werden in den unterschiedlichsten Bereichen der Informationssicherung<br />

eingesetzt. Besonders bei der Gewährleistung der sicheren Übertragung<br />

von Daten über unsichere Kanäle, wie Telefon, Internet oder Funkstrecken,<br />

spielen sie eine wichtige Rolle.[5] [24]<br />

Kryptoanalyse Die Kryptanalyse ist das Teilgebiet der Kryptologie, das sich<br />

damit beschäftigt, Sicherheitslücken kryptografischer Verfahren aufzudecken.<br />

Eine Hauptanwendung liegt in der Entschlüsselung bereits chiffrierter Daten ohne<br />

Kenntnis über den verwendeten Schlüssel.<br />

In der Praxis sind Kryptoanalyse <strong>und</strong> Kryptographie eng miteinander verb<strong>und</strong>en,<br />

da zur Entwicklung sicherer kryptographischer Verfahren stets eine kritische<br />

15 Ein Beispiel vom geglücktem Social Engineering findet man unter: Vorsicht vor Pseudo-eBay<br />

(Update) - http://www.heise.de/newsticker/data/cgl-18.01.02-001<br />

16 griechisch: kryptó = verstecken, verbergen<br />

17


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Beurteilung gehört. [5] So ist beispielsweise der Zeitaufwand, den die Kryptoanalyse<br />

zur vollständigen <strong>und</strong> korrekten Dechiffrierung einer Information<br />

im Bezug auf die zur Verfügung stehenden Ressourcen benötigt ein wichtiges<br />

Maß für die Qualität eines kryptographischen Verfahrens. Je größer Zeitaufwand<br />

<strong>und</strong> Ressourcenverbrauch zur Entschlüsselung sind, um so sicherer ist das<br />

Verschlüsselungsverfahren.<br />

2.4.1 Alice, Bob <strong>und</strong> Mallory !?!<br />

Wie die Literatur zeigt, hat es sich bewährt kryptographische Verfahren mit Hilfe<br />

der Personen Alice, Bob <strong>und</strong> Mallory zu erläutern. Personennamen sind anschaulicher<br />

als beispielsweise Einzelbuchstaben <strong>und</strong> tragen somit zum besseren Verständnis<br />

bei der Darstellung von Kryptosystemen <strong>und</strong> Sicherheitsprotokollen bei.<br />

Auch in dieser Arbeit soll von folgendem allgemeinen Modell ausgegangen werden:<br />

Alice <strong>und</strong> Bob tauschen über einen unsicheren Kanal Daten aus. Dieser Kanal<br />

ist in der Regel ein Rechnernetzwerk wie das Internet, könnte aber auch die Telefonleitung,<br />

eine Funkverbindung oder die Transportstrecke einer Diskette sein.<br />

Mallory ist der Angreifer im Modell. Er versucht mit allen ihm zur Verfügung stehenden<br />

Mitteln, den unsicheren Übertragungskanal abzuhören <strong>und</strong> die Übertragung<br />

zu beeinflussen. Mallory kann also alle Daten, die Alice <strong>und</strong> Bob austauschen in<br />

beliebiger Weise abfangen, manipulieren <strong>und</strong> anschließend weiterleiten.<br />

Um sich nun vor Mallory zu schützen, verwenden Alice <strong>und</strong> Bob kryptographische<br />

Verfahren zur Verschlüsselung ihrer gemeinsamen Kommunikation.<br />

2.4.2 Symmetrische <strong>und</strong> asymmetrische Kryptosysteme<br />

Ein kryptographisches System (kurz Kryptosystem) legt fest, wie Klartexte in Kryptotexte<br />

transformiert (verschlüsselt) <strong>und</strong> Kryptotexte wieder in Klartexte zurück<br />

transformiert (entschlüsselt) werden könnnen. Jedes Kryptosystem besteht aus folgenden<br />

6 Komponenten: [5]<br />

1. Einer nicht leeren endlichen Menge von Klartexten M.<br />

2. Einer nicht leeren endlichen Menge von Krypto- bzw. Chiffretexten C.<br />

3. Einer nicht leeren Menge von Verschlüsselungsschlüsseln EK.<br />

4. Einer nicht leeren Menge von Entschlüsselungsschlüsseln DK.<br />

5. Einem Verschlüsselungsverfahren E: M×EK→C.<br />

6. Einem Entschlüsselungsverfahren D: C×DK→M,<br />

mit der Eigenschaft das für zwei Schlüssel k E ∈ EK <strong>und</strong> k D ∈ DK<br />

mit f (k E ) = k D gilt:<br />

∀m ∈ M: D(E(m, k E ), k D ) = m.<br />

18


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Das Zusammenwirken dieser Komponenten veranschaulicht Abbildung 5. Jedes in<br />

des Praxis eingesetzte Verschlüsselungssystem kann dadurch beschrieben werden.<br />

[5]<br />

Abbildung 5: Komponenten eines Kryptosystems [5]<br />

Der Sender (Alice) chiffriert die Klartextnachricht m mit Hilfe des Verschlüsselungsverfahrens<br />

E <strong>und</strong> des Schlüssels k E . Der daraus entstandene Chiffretext c<br />

wird über einen Kommunikationskanal an den Empfänger (Bob) versandt. Dort<br />

angekommen, erfolgt die Rücktransformation unter Verwendung des Entschlüsselungsverfahrens<br />

D <strong>und</strong> des Schlüssels k D in die ursprüngliche Klartextnachricht m.<br />

Man kann davon ausgehen, dass ein Angreifer (Mallory) auf den übertragenen<br />

Chiffretext zugreifen kann, da das Abhören offener Kommunikationsnetze unter<br />

Verwendung geeigneter Hilfsmittel denkbar ist. Mit dem abgefangenen Chiffretext<br />

<strong>und</strong> den ihm zur Verfügung stehenden Zusatzinformationen I versucht Mallory<br />

nun, die zugehörige Klartextnachricht zu ermitteln. Eine Zusatzinformation könnte<br />

beispielsweise der Hinweis sein, dass die Nachricht in deutscher Sprache verfasst<br />

wurde.<br />

Kryptographische Systeme können in drei Klassen eingeteilt werden. ”Klassische”<br />

symmetrische- <strong>und</strong> ”moderne” asymmetrische Kryptosysteme bilden die<br />

ersten beiden. In der dritten Klasse finden sich Kombinationen aus symmetrischen<br />

<strong>und</strong> asymmetrischen, die sogenannten hybriden Kryptosysteme wieder.<br />

Symmetrische Kryptosysteme Das Charakteristikum der symmetrischen Kryptosysteme,<br />

auch Secret-Key-Verfahren genannt, ist, dass Alice <strong>und</strong> Bob im Besitz<br />

des gleichen, für alle anderen geheimen Schlüssels (engl. secret key) sein müssen,<br />

um vertraulich miteinander kommunizieren zu können. Über diesen Schlüssel<br />

müssen sich beide vor Beginn der Übertragung verständigen <strong>und</strong> ihn gegebenenfalls<br />

über einen sicheren Kanal austauschen. Die Sicherheit einer Kommunikation mittels<br />

symmetrischer Verfahren hängt also nicht nur von der kryptographischen Stärke<br />

der verwendeten Verschüsselungsverfahren ab, sondern auch maßgeblich von der<br />

sicheren Aufbewahrung, Verwaltung <strong>und</strong> dem initialen Austausch, des geheimen<br />

19


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Schlüssels. [5] [24] [20]<br />

Eine vertrauliche Kommunikation unter Nutzung eines symmetrischen Kryptosystems<br />

durchläuft grob die folgenden Protokollschritte: [5]<br />

1. Alice <strong>und</strong> Bob vereinbaren einen gemeinsamen, geheimen Schlüssel<br />

k E = k D = k A,B .<br />

2. Um eine Nachricht m an Bob zu versenden, verschlüsselt Alice den Text m<br />

mittels k A,B , also c = E(m, k A,B ), <strong>und</strong> sendet c an Bob.<br />

3. Bob entschlüsselt c mittels k A,B <strong>und</strong> erhält daraus die ursprüngliche Nachricht<br />

m von Alice, also m = D(c, k A,B ) = D(E(m, k A,B ), k A,B )<br />

Unter Verwendung eines guten Verschlüsselungsverfahrens ist es für Alice <strong>und</strong><br />

Bob bei Kenntnis des geheimen Schlüssels einfach, die chiffrierte Nachricht zu<br />

entschlüsseln. Für Mallory, der nur Zugriff auf das Chiffrat hat, ist es ohne Kenntnis<br />

des Schlüssels dagegen schwer bis unmöglich, selbst wenn er das Verschlüsselungsverfahren<br />

genau kennt. [24]<br />

Symmetrische Verschlüsselungsverfahren lassen sich in Block- <strong>und</strong> Stromchiffren<br />

klassifizieren. Blockchiffren teilen die Originalnachricht in Eingabeblöcke<br />

fester Länge, wobei jeder Block mit der gleichen Funktion verschlüsselt wird. Eine<br />

typische Blockgröße beträgt 64 Bit. Stromchiffren hingegen sind sequentielle Chiffren,<br />

die eine Folge von kleinen Klartexteinheiten (Zeichen) mit einer variierenden<br />

Funktion verschlüsseln. Gängige Zeichengrößen eingesetzter Stromchiffren sind<br />

1 Bit oder 1 Byte.[5] [20]<br />

Ein entscheidender Vorteil der symmetrischen Kryptosysteme ist der hohe Datendurchsatz.<br />

Software-Lösungen erreichen auf leistungsfähigen Intel-Maschinen<br />

akzeptable Verschlüsselungsraten von bis zu 1 MBit/s. [20] Sie eignen sich<br />

daher besonders gut zur Verschlüsselung großer Datenmengen. Nachteilig wirkt<br />

sich jedoch der Umstand aus, dass beide Kommunikationspartner im Besitz des<br />

gemeinsamen Schlüssels sein müssen bevor sie Nachrichten ver- <strong>und</strong> entschlüsseln<br />

können. Steht von vornherein kein vertrauenswürdiges Medium zum Schlüsselaustausch<br />

zur Verfügung ist eine spontane, gesicherte Kommunikation nicht möglich.<br />

Abschnitt 2.5.1 stellt zwei bekannte symmetrische Verschlüsselungsverfahren<br />

vor, die in der heutigen Praxis häufig Verwendung finden. Die dreifache Anwendung<br />

des Data Encryption Standard (kurz 3DES) <strong>und</strong> den IDEA-Algorithmus.<br />

Asymmetrische Kryptosysteme Um das Schlüsselaustauschproblem der symmetrischen<br />

Kryptosysteme zu lösen, wurden Mitte der 70er Jahre asymmetrische<br />

Kryptosysteme (engl. public key) als eine neue Klasse kryptographischer Verfahren<br />

vorgestellt. Gr<strong>und</strong>idee des Public-Key-Verfahrens ist es, dass stets zwei<br />

Schlüssel pro verschlüsselter Nachricht verwendet werden. Den einen kennt nur<br />

der Empfänger, es ist sein geheimer, persönlicher Schlüssel. Der andere ist nicht<br />

geheim <strong>und</strong> kann öffentlich bekannt gegeben werden. Beide Schlüssel sind mathematisch<br />

voneinander abhängig <strong>und</strong> werden in der Regel einer Person zugeordnet,<br />

20


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

weshalb man auch von Bob’s öffentlichem <strong>und</strong> Bob’s privatem Schlüssel spricht.<br />

Will nun Alice an Bob eine verschlüsselte Nachricht senden, dann durchläuft das<br />

Kommunikationsprotokoll grob die folgenden Schritte: [5]<br />

1. Alice <strong>und</strong> Bob erzeugen ihre eigenen Schlüsselpaare (k A E,k A D) bzw. (k B E,k B D),<br />

wobei die Schlüssel k A D <strong>und</strong> k B D die jeweiligen geheimen privaten Schlüssel<br />

sind.<br />

2. Die Schlüssel k A E <strong>und</strong> k B E werden öffentlich bekannt gegeben. Sie könnten<br />

beispielsweise in einer öffentlichen Datenbank oder einem öffentlich zugänglichen<br />

Schlüssel-Server verwaltet werden.<br />

3. Alice verschlüsselt ihre Nachricht m mit Bob’s öffentlichem Schlüssel, also:<br />

E(m,k B E) = c, <strong>und</strong> sendet c an Bob.<br />

4. Bob wiederum entschlüsselt c mit seinem privaten Schlüssel, also:<br />

D(c,k B D) = m.<br />

5. Will Bob eine Nachricht an Alice zurückschreiben, so benötigt er den öffentlichen<br />

Schlüssel von Alice k A E, um den Text zu verschlüsseln.<br />

Auch das Public-Key-Verfahren arbeitet also mit geheimen Schlüsseln, die sicher<br />

zu verwalten sind. Sie müssen jedoch im Gegensatz zu den symmetrischen Systemen<br />

nicht vor Kommunikationsbeginn über ein sicheres Medium ausgetauscht<br />

werden.<br />

Um eine sichere Kommunikation mit Hilfe asymmetrischer Kryptosysteme<br />

gewährleisten zu können, müssen sie die nachstehenden Gr<strong>und</strong>anforderungen<br />

erfüllen:<br />

• Das Ver- <strong>und</strong> Entschlüsseln von Nachrichten muss mittels öffentlichem bzw.<br />

privatem Schüssel <strong>und</strong> einem geeigneten Verfahren leicht durchführbar sein.<br />

• Der private Schlüssel darf nur dem rechtmäßigen Besitzer bekannt sein.<br />

• Der öffentliche Schlüssel des Kommunikationspartners muss verfügbar sein.<br />

• Mallory kann gar nicht, oder nur sehr schwer aus einem öffentlichen<br />

Schlüssel Rückschlüsse auf den zugehörigen privaten Schlüssel ziehen.<br />

• Der öffentliche Schüssel muss so beschaffen sein, dass ihn Mallory nicht dazu<br />

benutzen kann, das abgefangene Chiffrat zu entschlüsseln.<br />

Durch die Entwicklung der Public-Key-Verfahren ist es möglich geworden,<br />

spontane Kommunikationsbeziehungen über unsichere Netzwerke vertraulich<br />

abzuwickeln. Die öffentlichen Schlüssel lassen sich bedenkenlos verteilen, da<br />

sie nur zur Ver- <strong>und</strong> nicht zur Entschlüsselung verwendet werden können. Die<br />

Vertraulichkeit des privaten Schlüssels gegenüber anderen ist jedoch von enormer<br />

Wichtigkeit. Sollte er in die Hände eines Angreifers geraten so ist es diesem<br />

möglich, die Kommunikation zu belauschen oder Nachrichten zu verändern.[20]<br />

21


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Nachteilig wirkt sich vor allem die Geschwindigkeit der asymmetrischen Kryptosysteme<br />

aus. Die Verschlüsselung einer Datei erfolgt mit DES vergleichsweise<br />

100mal schneller.[20]<br />

Zu den bekanntesten Vertretern der Klasse der asymmetrischen Systeme gehört das<br />

RSA-Verfahren [5], welches im Abschnitt 2.5.1 vorgestellt wird.<br />

Hybride Kryptosysteme Hybride Kryptosysteme kombinieren die Vorteile der<br />

symmetrischen <strong>und</strong> asymmetrischen Systeme <strong>und</strong> versuchen, die Nachteile außen<br />

vor zu lassen. Die Funktionsweise ist denkbar einfach: Zuerst generiert Alice einen<br />

zufälligen Sitzungsschlüssel (engl. session key), dieser besitzt meist nur Gültigkeit<br />

für einen gewissen Zeitraum oder die aktuelle Kommunikationsbeziehung (Sitzung).<br />

Mit ihm verschlüsselt Alice ihre Nachricht für Bob nach dem symmetrischen<br />

Verfahren. Den Sitzungsschlüssel selbst chiffriert sie mit Bob’s öffentlichem<br />

Schlüssel aus dem Public-Key-Verfahren. Beide Chiffren werden nun zu Bob übermittelt,<br />

der seinerseits mittels privatem Schüssel zuerst den Sizungsschlüssel dechiffriert<br />

<strong>und</strong> diesen wiederum benutzt um, die eigentliche Nachricht von Alice zu<br />

entschlüsseln.<br />

Bei den hybriden Kryptosytemen wird also die hohe Leistungsfähigkeit eines<br />

symmetrischen Algorithmus mit der sicheren Schlüsselverteilung des Public-Key-<br />

Verfahrens vereint.<br />

2.4.3 Kryptographische Hashfunktionen<br />

Hashfunktionen haben zunächst erstmal nichts mit Kryptographie im engeren Sinne<br />

zu tun. Sie kommen in vielen Teilbereichen der Informatik zum Einsatz, unter<br />

anderem, um den Zugriff auf Objekte effizient zu gestalten. Mathematisch gesehen,<br />

ist eine Hashfunktion f eine nicht injektive 17 Abbildung eines Eingabewerts m auf<br />

einen Hashwert h, es gilt die Beziehung: h = f (m). Der Hashwert h kann dabei<br />

nur eine begrenzte Menge von Werten annehmen, während m aus einer deutlich<br />

größeren oder gar beliebig großen Menge auswählbar sein muss.<br />

Dieser Umstand <strong>und</strong> der Umstand, dass Hashfunktionen nicht injektiv sind, führt<br />

möglicherweise zum Auftreten von Kollisionen. Als Kollision bezeichnet man das<br />

Verhalten einer Hashfunktion, wenn sie zwei unterschiedliche Eingabewerte m 1 ,<br />

m 2 auf den gleichen Hashwert abbildet, f (m 1 ) = f (m 2 ), m 1 ≠ m 2 . Bei einer guten<br />

Hashfunktion sollten Kollisionen möglichst selten vorkommen.<br />

Im Bereich Kryptograpie dienen spezielle Hashfunktionen zum Schutz vor<br />

Integritätsverletzungen. Auch sie akzeptieren als Eingabe einen Wert (Nachricht)<br />

m beliebiger Größe <strong>und</strong> liefern einen Wert h fester Länge zurück. Dieser Hashwert<br />

h repräsentiert dann den Inhalt der Nachricht, weshalb man ihn auch als ”digitalen<br />

Fingerabdruck” oder Message Digest (MD) bezeichnet.<br />

Die Kryptographie stellt im Vergleich zu anderen Anwendungsgebieten zusätzliche<br />

Anforderungen an eine Hashfunktion:[24]<br />

17 f : A → B heißt injektiv, genau dann, wenn ∀ x,y ∈ A gilt: x ≠ y ⇒ f (x) ≠ f (y).<br />

22


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

• Innerhalb wie außerhalb der Kryprographie gilt gleichermaßen, dass ein<br />

Hashwert etwa gleich oft vorkommen soll.<br />

• Jede noch so kleine Änderung des Eingabewerts muss eine Änderung des<br />

resultierenden Hashwert nach sich ziehen.<br />

• Außerhalb der Kryptographie eher unbekannt ist die Forderung, dass es<br />

möglichst schwierig sein muss, Kollisionen herbeizuführen. Zu einem gegebenen<br />

Eingabewert darf es mit realistisch vertretbarem Aufwand nicht<br />

möglich sein, einen zweiten mit gleichem Hashwert zu finden. Das impliziert<br />

natürlich, dass keine Umkehrvorschrift f −1 existiert, die aus einem gegebenen<br />

Hashwert wieder die Originalnachricht reproduzieren könnte.<br />

Erfüllt eine Hashfunktion die drei genannten Anforderungen, so bezeichnet man<br />

sie als kryptographische Hashfunktion oder sichere Einwegfunktion. Der aus einer<br />

kryptographischen Hashfunktion generierte Hashwert heißt dann entsprechend<br />

kryptographischer Hashwert.<br />

Zu den bekanntesten Verfahren zur Erzeugung von kryptographischen Haschwerten<br />

gehören die von Ron Rivest entwickelten Algorithmen MD4 18 <strong>und</strong> MD5 19 .<br />

Beide Algorithmen generieren aus der jeweiligen Eingabe einen 128 Bit langen,<br />

digitalen Fingerabdruck. Einen 160 Bit langen Hashwert liefert der von der US-<br />

Standardisierungsbehörde NIST 20 in Zusammenarbeit mit der NSA 21 entwickelte<br />

Secure Hash Algorithm kurz SHA. Ein vorläufiger Design-Fehler wurde im heutzutage<br />

gebräuchlichen SHA-1 korrigiert. Der SHA bietet im Vergleich zu MD5 aufgr<strong>und</strong><br />

des längeren Hashwerts eine höhere Sicherheit, ist dafür aber auch deutlich<br />

langsamer.<br />

In [28] werden eine ganze Reihe von kryptographischen Hashfunktionen ausführlich<br />

beschrieben <strong>und</strong> deren Stärken <strong>und</strong> Schwächen aufgezeigt.<br />

2.4.4 Digitale Signaturen<br />

Vergleicht man die digitale Signatur mit der realen Welt, so kommt sie der Unterschrift<br />

unter einem Dokument ziemlich nahe. Sie hat die Aufgabe, Daten, die über<br />

ein unsicheres Medium transportiert werden sollen, vor unbemerkter Modifikation<br />

zu schützen <strong>und</strong> sie an den Eigentümer eines bestimmten privaten Schlüssels zu<br />

binden. Zur Erstellung einer digitalen Signatur kommt das Public-Key-Verfahren in<br />

entgegengesetzter Richtung zum Einsatz. Das heißt, die Verschlüsselung erfolgt bei<br />

der digitalen Signatur nicht mit dem öffentlichen Schlüssel, sondern mit dem privaten.<br />

Das Entschlüsseln findet demzufolge mit dem zum privaten Schlüssel gehörenden<br />

öffentlichen Schlüssel statt. Da aber das Verschlüsseln der gesamten Datenmenge<br />

aufgr<strong>und</strong> der Komplexität asymmetrischer Verfahren unter Umständen sehr lange<br />

dauern kann, kommen die bereits angesprochenen kryptographischen Hashfunktion<br />

zum Einsatz, um die zu übertragenden Daten auf wenige Bytes zu verdichten.<br />

18 vergl.: RFC 1320<br />

19 vergl.: RFC 1321<br />

20 National Institute of Standards and Technology<br />

21 National Security Agency<br />

23


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Ist der Hashwert der Daten ermittelt, wird anschließend mit dem privaten Signaturschlüssel<br />

des Absenders verschlüsselt. Danach werden die Daten zusammen mit<br />

der Signatur zum Empfänger versandt. Dieser berechnet erneut den Hashwert der<br />

erhaltenen Daten mit Hilfe der gleichen Hashfunktion wie der Absender <strong>und</strong> decodiert<br />

mit dem öffentlichen Schlüssel des Unterzeichners die digitale Signatur. Sind<br />

beide Hashwerte gleich, so kann er sicher sein, dass die empfangenen Daten nach<br />

der Signierung nicht mehr modifiziert wurden <strong>und</strong> dass sie vom entsprechenden<br />

Absender stammen. Voraussetzung hierfür ist allerdings, dass der private Schlüssel<br />

des Absenders ausschließlich ihm <strong>und</strong> keiner anderen Person zur Verfügung steht<br />

<strong>und</strong> dass nachweisbar ist, dass der zum Decodieren der digitalen Signatur verwendete<br />

öffentliche Schlüssel eindeutig zum entsprechenden Absender gehört. Einen<br />

solchen Nachweis kann beispielsweise ein Schlüsselzertifikat erbringen.<br />

Zu den bekanntesten Signaturverfahren zählt der RSA-Algorithmus <strong>und</strong> der von<br />

der amerikanischen Regierung entwickelte <strong>und</strong> bevorzugte Digital Secure Standard<br />

(kurz DSS). [20][30]<br />

2.4.5 Schlüsselzertifikate<br />

Ein Problem, das im Zusammenhang mit der Verwendung von öffentlichen<br />

Schlüsseln auftritt, ist, dass man ihnen nicht ohne weiteres ansieht, zu wem sie<br />

gehören. Es bedarf deshalb einiger Zusatzinformationen, die zusammen mit den<br />

eigentlichen Schlüsseldaten Auskunft über den Schlüsselinhaber geben. An dieser<br />

Stelle kommen Schlüsselzertifikate ins Spiel. Die Zertifizierung eines öffentlichen<br />

Schlüssels beglaubigt ähnlich wie ein Personalausweis im normalen Leben die Identität<br />

des Besitzers.<br />

Genau wie beim Personalausweis benötigt man für die Ausstellung eines Schlüsselzertifikates<br />

eine vertrauenswürdige unabhängige Institution. Diese sogenannte Zertifizierungsinstanz<br />

(engl. Certification Authority, CA), im deutschsprachigen Raum<br />

auch Trust-Center genannt, überprüft, ob ein zur Beglaubigung eingereichter öffentlicher<br />

Schlüssel <strong>und</strong> eine Person mit eindeutigem Namen wirklich zusammengehören.<br />

Ist dies der Fall, so erzeugt die CA ein elektronisches Schlüsselzertifikat.<br />

Als Standard für Zertifikate hat sich der ITU 22 -Standard X.509 durchgesetzt.<br />

Ein nach diesem Standard ausgestelltes Schlüsselzertifikat beinhaltet unter anderem<br />

eine Zertifikatsnummer zur Identifizierung, den Namen der ausstellenden Instanz<br />

(CA), den Namen des Besitzers, den Gültigkeitszeitraum, den öffentlichen<br />

Schlüssel des Besitzers <strong>und</strong> die digitale Signatur der ausstellenden Instanz, um es<br />

vor unbemerkten Modifikationen zu schützen. Der exakte Aufbau eines X.509 Zertifikates<br />

ist beispielsweise in [20] auf Seite 152 <strong>und</strong> in [30] auf Seite 22 zu finden.<br />

2.5 Kommunikationssicherheit<br />

Die Kommunikationssicherheit befasst sich mit der Frage: Wie können Daten bzw.<br />

Nachrichten, die einen Computer verlassen haben, vor Abhörern <strong>und</strong> Manipulierern<br />

geschützt werden? Ziel ist es also, die Vertraulichkeit, Authentizität <strong>und</strong> Integrität<br />

von Daten zu gewährleisten, die über ein unsicheres Medium zwischen zwei<br />

22 ITU: International Telecommunication Union<br />

24


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

oder mehreren Kommunikationspartnern ausgetauscht werden. Bei einem unsicheren<br />

Medium könnte es sich beispielsweise um das öffentlich zugängliche Internet<br />

oder im gewissen Sinne auch um ein firmeninternes Intranet handeln. In beiden<br />

passieren Nachrichten mehr oder weniger viele Netzwerkknotenpunkte, wie zum<br />

Beispiel Router, die zu einem Angriffsziel werden könnten, um Nachrichten abzuhören<br />

oder zu manipulieren. Die Mittel der Wahl zur Wahrung der Kommunikationssicherheit<br />

sind in Bezug auf die Integrität <strong>und</strong> Authentizität von Nachrichten<br />

die schon besprochenen kryptographischen Hashfunktionen sowie digitale Unterschriften.<br />

Zum Schutz der Vertraulichkeit kommen Verschlüsselungsalgorithmen<br />

zum Einsatz.<br />

2.5.1 Verschlüsselungsalgorithmen<br />

Aus der Vielzahl der existierenden Verschlüsselungsalgorithmen sollen im Folgenden<br />

die wichtigsten <strong>und</strong> heutzutage gebräuchlichsten kurz vorgestellt werden. Das<br />

sind zum einen 3DES, IDEA, AES als Vertreter der symmetrischen- <strong>und</strong> zum anderen<br />

RSA als Vertreter der asymmetrischen Verfahren. Zum Zeitpunkt der Verlegung<br />

dieser Arbeit sind diese Algorithmen als sichere Verfahren eingestuft, was aber keinesfalls<br />

heißen soll, dass ihre Sicherheit bewiesen ist. Vielmehr ist es noch keinem<br />

Kryptoanalytiker gelungen, ihre Unsicherheit nachzuweisen.<br />

DES Der Data Encryption Standard kurz DES wurde Anfang der 70er Jahre bei<br />

IBM in den USA entwickelt <strong>und</strong> bildet die Gr<strong>und</strong>lage für 3DES. 1977 wurde er<br />

von der NIST (damals noch NBS 23 ) als Standard für die Datenverschlüsselung anerkannt.<br />

Der DES ist eine Blockchiffre, die einen 64 Bit langen Eingabeblock mit einem 64<br />

Bit Schlüssel, von dem aber nur 56 Bit relevant sind, zu einem 64 Bit langen Ausgabeblock<br />

verschlüsselt. Er kann sowohl zur Ver- als auch zur Entschlüsselung von<br />

Daten verwendet werden. Die Funktionsweise des DES ist in Abbildung 6 dargestellt.<br />

Der zu verschlüsselnde 64 Bit Eingabeblock wird nach einer Anfangspermutation<br />

(IP) in zwei gleichgroße Hälften L (für Links) <strong>und</strong> R (für Rechts) aufgeteilt,<br />

die jeweils aus 32 Bit bestehen. Anschließend wird der gleiche Vorgang, in dem die<br />

Daten mit dem Schlüssel kombiniert werden 16-mal wiederholt (man spricht auch<br />

von den 16 R<strong>und</strong>en des DES):<br />

• Auf L wird die Funktion F angewendet. Deren Ausgabe wird mit R exklusivoder-verknüpft<br />

<strong>und</strong> das Ergebnis dieser Verknüpfung wird zu einem neuen L<br />

für die nächste R<strong>und</strong>e.<br />

• Die ”alte” linke Hälfte L wird zur ”neuen rechten” Hälfte R.<br />

Nach Beendigung der 16 R<strong>und</strong>en erfolgt eine Schlusspermutation (IP −1 ) der<br />

zusammengeführten Hälften L <strong>und</strong> R, welche den 64 Bit langen Ergebnisblock der<br />

Verschlüsselung liefert.<br />

Die Funktion F verarbeitet den 32 Bit langen Eingabeblock, indem sie ihn zunächst<br />

permutiert <strong>und</strong> durch doppelte Verwendung einiger Bits auf 48 Bit ausdehnt.<br />

23 National Bureau of Standards<br />

25


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 6: Funktionsweise des DES [24]<br />

Anschließend erfolgt eine exklusiv-oder-Verknüpfung mit einem 48 Bit langen<br />

Teilschlüssel (K i ), den die Schlüsselaufbereitung liefert. Das Ergebnis dieser<br />

Verknüpfung wird durch acht Substitutionsboxen (S-Boxen) gesandt, die 32 neue<br />

Bits erzeugen. Eine Abschlusspermutation erzeugt dann die Ausgabe der Funktion.<br />

Das Entschlüsseln bei DES funktioniert nach dem gleichen Prinzip wie die<br />

Verschlüsselung. Der einzige Unterschied liegt in der Schlüsselaufbereitung: Die<br />

16 Teilschlüssel werden in der umgekehrten Reihenfolge wie beim Verschlüsseln<br />

verwendet.<br />

Das größte Manko des Data Encryption Standard ist wohl der mit 56 Bit zu<br />

kurze Schlüssel. Von den eigentlichen 64 Schlüsselbits sind nur 56 frei wählbar,<br />

die restlichen acht dienen als Paritätsbits. Die vollständige Schlüsselsuche über<br />

den Schlüsselraum von 2 56 ∼ 7, 2 · 10 16 stellt heute mit der entsprechenden<br />

Rechnerleistung kein wirklich großes Problem mehr da. Das zeigen die erfolgreichen<br />

Known-Plaintext-Attacken von 1997, 1998 <strong>und</strong> 1999. (vergl.: [24] Seite<br />

76f.) Trotz dieser Tatsache findet man DES heutzutage noch in vielen Bereichen.<br />

Für Anwendungen mit kurzen Transaktions- <strong>und</strong> Übertragungszeiten ist er auch<br />

durchaus noch geeignet. Handelt es sich jedoch um extrem wertvollen Daten oder<br />

Neuimplementierungen sollte man von der Verwendung von DES absehen.<br />

3DES Der wichtigste Nachteil des DES, die relativ kurze Schlüssellänge, soll<br />

Triple-DES (kurz 3DES) aus der Welt schaffen. Dabei handelt es sich bei 3DES<br />

keinesfalls um einen neuen Verschlüsselungsalgorithmus, sondern vielmehr um,<br />

wie der Name schon sagt, die dreimalige Hintereinanderanwendung des Data<br />

Encryption Standard mit drei möglichst verschiedenen Schlüsseln (Abbildung 7).<br />

26


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 7: Triple-DES [28]<br />

Da sich das Verschlüsseln beim DES nicht wesentlich vom Entschlüsseln unterscheidet,<br />

ist es üblich, die mittlere der drei Verschlüsselungen des Triple-DES<br />

durch eine Entschlüsselung zu ersetzen [24]. Das hat in Bezug auf die Sicherheit<br />

keinen Einfluss <strong>und</strong> den Vorteil, dass das Triple-DES Verfahren zu DES kompatibel<br />

ist, wenn alle drei Schlüssel gleich sind K 1 = K 2 = K 3 . Verwendet man<br />

hingegen 3 verschiedene Schüssel K 1 ≠ K 2 ≠ K 3 , so beträgt die Schlüssellänge<br />

3 × 56 = 168 Bit 24 . In der Praxis kommt auch die 2Key3DES Variante zum Einsatz,<br />

bei der erster <strong>und</strong> letzter Schlüssel gleich sind, also K 1 = K 3 aber K 1 ≠ K 2 . Die<br />

Schlüssellänge beim 2Key3DES ist dann folglich nur noch 2 × 56 = 112 Bit.<br />

Ein naheliegender Nachteil von Triple-DES ist, dass das Verfahren verständlicherweise<br />

dreimal langsamer ist als DES. In Bezug auf die Schlüssellängen gehen<br />

die Meinungen in der Literatur weit auseinander. Während [24] die 112 Bit der<br />

2Key3DES Variante eindeutig für ausreichend hält, ist [5] der Meinung, dass man<br />

mit den 168 Bit des Triple-DES auf längere Sicht nicht auskommen wird.<br />

IDEA Die derzeit wichtigste Alternative zu DES <strong>und</strong> Triple-DES ist das von Xuejia<br />

Lai <strong>und</strong> James Massey 1990 entwickelte Verschlüsselungsverfahren IDEA (International<br />

Data Encryption Algorithm). Es verfügt über einen größeren Schlüsselraum<br />

als DES <strong>und</strong> ermöglicht auch schnellere Implementationen in Hard- <strong>und</strong> Software.<br />

Der International Data Encryption Algorithm ist eine Blockchiffre, die einen 64 Bit<br />

Eingabeblock mit einem 128 Bit langen Schlüssel verschlüsselt. Genau wie DES<br />

verwendet IDEA relativ einfache Gr<strong>und</strong>operationen: die Addition modulo 2 16 , die<br />

Multiplikation modulo 2 16 + 1 sowie die exklusiv-oder-Verknüpfung. Um einen 64<br />

Bit Klartextblock zu verschlüsseln, wird dieser zunächst in vier Blöcke zu je 16 Bit<br />

aufgeteilt, die als Eingabe für die erste R<strong>und</strong>e dienen. Insgesamt gibt es bei IDEA<br />

acht R<strong>und</strong>en. In jeder R<strong>und</strong>e werden die vier Teilblöcke untereinander <strong>und</strong> mit<br />

sechs 16 Bit langen Teilschlüsseln exklusiv-oder-verknüpft, addiert (modulo 2 16 )<br />

<strong>und</strong> multipliziert (modulo 2 16 + 1). Zwischen den jeweiligen R<strong>und</strong>en erfolgt eine<br />

Vertauschung der zweiten <strong>und</strong> dritten Teilblöcke. Zum Abschluss kombiniert eine<br />

24 Die effektive Schlüssellänge beträgt beim Triple-DES aufgr<strong>und</strong> möglicher meet-in-the-middle<br />

Angriffe nur 108 Bit (vergl.: [5]).<br />

27


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Ausgabetransformation die vier 16 Bit Blöcke mit vier Teilschlüsseln zum Chiffretext.<br />

Die Entschlüsselung eines IDEA-Chiffreblocks erfolgt mit dem gleichen<br />

Verfahren wie die Verschlüsselung. Der einzige Unterschied ist der, dass die Teilschlüssel<br />

in umgekehrter Reihenfolge <strong>und</strong> leicht verändert (invertiert) verwendet<br />

werden.<br />

IDEA zählt zweifellos zu den besten symmetrischen Verschlüsselungsverfahren, die<br />

derzeit zur Verfügung stehen. Mit einer Schüssellänge von 128 Bit <strong>und</strong> einem daraus<br />

resultierenden Schlüsselraum von 2 128 ∼ 10 38 ist ein Angriff auf das Verfahren<br />

über eine vollständige Schlüsselsuche effektiv unmöglich. Eine Softwareimplementation<br />

von IDEA arbeitet durch die geringere R<strong>und</strong>enzahl <strong>und</strong> den Verzicht auf Permutationen<br />

<strong>und</strong> Substitutionen doppelt so schnell wie eine von DES. Der einzige<br />

Nachteil des Verfahrens ist die Tatsache, dass IDEA patentiert ist <strong>und</strong> für die kommerzielle<br />

Nutzung Lizenzgebühren erhoben werden. Ein Softwarepaket, das IDEA<br />

einsetzt, ist das weit verbreitet PGP 25 .<br />

AES Im Jahre 1998 lief die letzte Zertifizierungsperiode des Data Encryption<br />

Standard aus <strong>und</strong> eine neue Zetifizierung fand nicht mehr statt. Schon ein Jahr zuvor<br />

erfolgte eine Ausschreibung mit dem Ziel, einen Nachfolger für DES zu finden,<br />

der Advanced Encryption Standard, kurz AES heißen sollte. Bis Mitte 1998 konnten<br />

Vorschläge für die Funktionsweise des AES bei der NIST eingereicht werden.<br />

Gewünscht wurde eine 128 Bit Blockchiffre, die sich für Hard- <strong>und</strong> Softwareimplementationen<br />

gleichermaßen eignet <strong>und</strong> frei von Patentrechten ist. Das Verfahren<br />

sollte unterschiedliche Schlüssellängen von 128, 192 <strong>und</strong> 256 Bit erlauben. Am 20.<br />

August 1998 veröffentlichte die NIST eine Liste mit 15 AES-Kandidaten, von denen<br />

es die folgenden 5 bis in die Endauswahl schafften:[24]<br />

• Twofish ist ein Verfahren, das unter Leitung von Bruce Schneier entwickelt<br />

wurde <strong>und</strong> hervorragend dokumentiert ist. Es zeichnet sich durch seine Flexibilität<br />

aus, da es die Einstellung der verschiedensten Parameter erlaubt <strong>und</strong><br />

somit auf die Bedürfnisse des Anwenders eingeht.<br />

• MARS ist der Name des offiziellen AES-Kandidaten von IBM.<br />

• Serpent wurde von Ross Anderson, Eli Biham <strong>und</strong> Lars Knudsen entwickelt<br />

<strong>und</strong> ist mit seinen 32 R<strong>und</strong>en ein vergleichsweise langsames Verfahren.<br />

• RC6 besticht durch seine Schnelligkeit sowie Einfachheit <strong>und</strong> ist eine Entwicklung<br />

von Ron Rivest <strong>und</strong> seinen Mitarbeitern.<br />

• Rijndael (Aussprache: ”Reindahl”) ist ein Algorithmus, der von den Belgiern<br />

Joan Daelmen <strong>und</strong> Vincent Rijmen entwickelt wurde. Er ist schnell, einfach<br />

<strong>und</strong> benötigt nur wenig Speicherplatz.<br />

Am 20. Oktober 2000 gab die NIST schließlich Rijndael als Gewinner bekannt.<br />

Dieser setzte sich gegenüber den anderen Kandidaten aufgr<strong>und</strong> der etwas besseren<br />

Performance durch.<br />

25 Pretty Good Privacy ist ein frei erhältliches Programm zur Sicherung elekronischer Post. http:<br />

//www.pgpi.org<br />

28


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Rijndael ist eine vergleichsweise einfache Blockchiffre [24], die Klartexte<br />

auf Basis mehrerer identischer R<strong>und</strong>en verschlüsselt, wobei in jede R<strong>und</strong>e ein<br />

anderer Teilschlüssel eingeht. Die Anzahl der R<strong>und</strong>en ist von der Block- <strong>und</strong><br />

Schlüssellänge abhängig, sie liegt zwischen 10 <strong>und</strong> 14.<br />

Das von der NIST durchgeführte AES-Auswahlverfahren wurde von der Fachwelt<br />

gelobt, insbesondere die Nachvollziehbarkeit <strong>und</strong> Offenheit.[24]<br />

RSA RSA ist ein Public-Key-Krypto-Verfahren, welches 1978 entwickelt wurde<br />

<strong>und</strong> nach seinen Erfindern Ron Rivest, Adi Shamir <strong>und</strong> Leonard Adleman benannt<br />

ist. Die Einsatzgebiete von RSA sind neben der eigentlichen Ver- <strong>und</strong> Entschlüsselung<br />

von Daten, der sichere Austausch von Kommunikationsschlüsseln für symmetrische<br />

Kryptosysteme, wie beispielsweise IDEA <strong>und</strong> die Erstellung <strong>und</strong> Überprüfung<br />

von digitalen Signaturen.<br />

RSA arbeitet wie alle asymmetrischen Kryptosysteme auf Gr<strong>und</strong>lage einer<br />

Falltürfunktion 26 <strong>und</strong> eines Schlüsselpaars. Die Funktionsweise soll anhand des folgenden,<br />

einfach gehaltenen Beispiels kurz erläutert werden: [24][16]<br />

• Zuerst werden der öffentliche <strong>und</strong> geheime Schlüssel generiert. Dazu wählt<br />

man sich zufällig zwei große 27 <strong>und</strong> ungefähr gleich lange Primzahlen p <strong>und</strong><br />

q aus. Typische Werte für die Länge sind 1024 oder 2048 Bit. Aus p <strong>und</strong> q<br />

wird mit Hilfe der Multiplikation der Modulus n berechnet.<br />

p = 3<br />

q = 5<br />

n = p ∗ q = 15<br />

• Als Nächstes wird die Eulersche Totientenfunktion ϕ(n) = (p-1)(q-1) berechnet.<br />

ϕ(n) = (3-1)(5-1) = 8<br />

• Nun erfolgt mit: ed ≡ 1 (mod ϕ(n)) die Berechnung der Werte e <strong>und</strong> d,<br />

welche Bestandteile des öffentlichen bzw. geheimen Schlüssels sind. Dazu<br />

wird zunächst ein e zufällig gewählt, das zu ϕ(n) Teilerfremd ist <strong>und</strong> danach<br />

d mittels erweiterten euklidischen Algorithmus berechnet: d = e −1 (mod ϕ(n))<br />

e = 3<br />

d = 3 −1 (mod 8) = 11<br />

26 Einwegfunktionen sind Funktionen, die sich leicht berechnen lassen, deren Umkehrung sich jedoch<br />

nur mit sehr großem Aufwand oder gar nicht berechnen lässt. Existiert für eine solche Einwegfunktion<br />

eine ”versteckte Abkürzung”, also eine Zusatzinformation, mit der die ansonsten schwierige<br />

Umkehrung einfach durchzuführen ist, spricht man von einer Falltürfunktion. [24]<br />

27 Im hier aufgeführten Beispiel werden nur kleine Primzahlen verwendet, um zu einem besseren<br />

Verständnis beizutragen.<br />

29


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

• Das Zahlenpaar e, n (3, 15) bildet den öffentlichen Schlüssel <strong>und</strong> das Zahlenpaar<br />

d, n (11, 15) den privaten Schlüssel. Die Primzahlen p <strong>und</strong> q sowie die<br />

Hilfsgröße ϕ(n) werden für die weitere Verfahrensweise nicht mehr benötigt<br />

<strong>und</strong> können gelöscht werden.<br />

• Will man nun den Klartext m = 12130508 in einen Chiffretext c verschlüsseln,<br />

so muss der Klartext zunächst in Blöcke aufgeteilt werden, die jeweils kleiner<br />

sind als n (12, 13, 05, 08). Auf diese Teilblöcke wird dann die Rechenvorschrift<br />

c = m e mod n angewandt, sodass sich der Chiffretext c = 03 07 05 02<br />

ergibt.<br />

12 3 = 1728; 1728/15 = 115 Rest 03<br />

13 3 = 2197; 2197/15 = 146 Rest 07<br />

05 3 = 125; 125/15 = 8 Rest 05<br />

08 3 = 512; 512/15 = 34 Rest 02<br />

• Die Entschlüsselung arbeitet nach dem gleichen Prinzip mit dem einzigen<br />

Unterschied, dass jetzt der private Schlüssel d zum Einsatz kommt.<br />

m = c d mod n = 12 13 05 08.<br />

03 11 = 177147; 177147/15= 11809 Rest 12<br />

07 11 = 1977326743; 1977326743/15= 131821782 Rest 13<br />

05 11 = 48828125; 48828125/15= 3255208 Rest 05<br />

02 11 = 2048; 2048/15= 136 Rest 08<br />

Aus der Beschreibung des Algorithmus ist ersichtlich, dass beim RSA-Verfahren<br />

zur Ver- <strong>und</strong> Entschlüsselung Potenzberechnungen auf natürlichen Zahlen angewandt<br />

werden. Es ist also notwendig, den zu verschlüsselnden Klartext zunächst<br />

in eine numerische Repräsentation zu transformieren. Eine Implementierung<br />

des RSA-Verfahrens erfordert effiziente Algorithmen zur Berechnung großer<br />

Primzahlen, zur Berechnung der multiplikativen Inversen sowie zur Berechnung<br />

von Potenzen großer Zahlen. Durch diese zeitlich sehr aufwendigen Berechnungen<br />

sind die Softwareimplementationen von RSA etwa 100 mal langsamer als die von<br />

DES.<br />

Man geht heute davon aus, dass die Sicherheit von RSA im westlichen vom<br />

mathematischen Problem der Faktorisierung von großen Zahlen abhängt. Dies ist<br />

jedoch nur eine Vermutung, die bis zum jetzigen Zeitpunkt noch nicht widerlegt<br />

werden konnte [5]. Gelänge es mit Hilfe eines schnellen Algorithmus zur Faktorisierung<br />

<strong>und</strong> dem Modulus n, die beiden Primzahlen p <strong>und</strong> q in einer vertretbaren<br />

Zeit zu ermitteln, würde die Sicherheit des RSA-Verfahrens nicht mehr gegeben<br />

sein, da mit p, q <strong>und</strong> e der geheime Schlüssel d berechnet werden kann.<br />

Wie für die meisten Krypto-Verfahren gilt auch für RSA: Je länger der Schlüssel,<br />

desto sicherer das Verfahren. [24] Viele Anwendungen, die RSA einsetzen,<br />

arbeiten derzeit noch mit einem 512 Bit langen Modulus, was einer Dezimalzahl<br />

mit 155 Stellen entspricht. Im Jahre 1999 gelang es einer <strong>Forschung</strong>sgruppe eine<br />

solche Dezimalzahl zwar mit erheblichem Aufwand aber dennoch erfolgreich<br />

30


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

zu faktorisieren. Der Angriff hat gezeigt, dass heutzutage für den Modulus eine<br />

Mindestlänge von 1024 Bit, für sicherheitskritische Anwendungen mindestens<br />

2048 Bit erforderlich ist.<br />

2.5.2 Sichere Übertragungsprotokolle<br />

Protokolle zur Errichtung sicherer Verbindungen zwischen Kommunikationspartnern<br />

lassen sich grob in zwei Klassen von Ansätzen unterteilen. Zum einen<br />

in die Klasse von Protokollen, die eine Ende-zu-Ende Verschlüsselung realisieren<br />

<strong>und</strong> zum anderen in die Klasse, in der sich Protokolle wiederfinden,<br />

die eine Verbindungsverschlüsselung ermöglichen. Betrachtet man das ISO/OSI-<br />

Schichtenmodell 28 so sind die Ende-zu-Ende Sicherheitsprotokolle auf den höheren<br />

Schichten drei bis sieben angesiedelt, die Sicherheitsprotokolle zur Verbindungsverschlüsselung<br />

hingegen auf den Schichten eins <strong>und</strong> zwei.<br />

Zwei der bekanntesten Protokolle, die eine gesicherte Ende-zu-Ende Übertragung<br />

ermöglichen, sollen im Folgenden etwas eingehender erörtert werden.<br />

SSL SSL steht für das Secure Socket Layer Protokoll, welches 1995 von der<br />

Firma Netscape entwickelt <strong>und</strong> mit gleichnamigem Bowser vertrieben wurde.<br />

Hauptziel für die Entwicklung von SSL war es, den Aufbau von sicheren HTTP 29 -<br />

Verbindungen zu ermöglichen. SSL wurde nach seiner initialen Einführung in<br />

vielerlei Hinsicht verbessert <strong>und</strong> weiterentwickelt <strong>und</strong> die 1996 fertig gestellte<br />

Version 3.0 wurde zu einem de facto Internet-Standard, nicht zuletzt wegen der<br />

frei verfügbaren Spezifikationen. [16] Ebenfalls 1996 gründete die IETF 30 eine<br />

Arbeitsgruppe mit der Zielstellung, SSL zu einem offiziellen Internet-Standard zu<br />

machen <strong>und</strong> weiter zu entwickeln. Als Ergebnis entstand das TLS-Protokoll 1.0,<br />

(Transport Layer Security) (vergl.: RFC 2246) eine geringfügige Überarbeitung<br />

von SSL 3.0, weswegen es auch als SSL 3.1 bekannt ist.<br />

SSL ist ein verbindungsorientiertes Protokoll, das auf der Transportschicht<br />

des ISO/OSI-Modells angesiedelt ist <strong>und</strong> auf jedes zuverlässige Transportprotokoll<br />

aufgesetzt werden kann. Typischerweise findet TCP 31 als zuverlässiges Transportprotokoll<br />

Verwendung. Praktisch wird daher eine vollständige Unabhängigkeit von<br />

Applikationen ermöglicht, dass heißt mit SSL kann im Gr<strong>und</strong>e jedes Anwendungsprotokoll,<br />

welches TCP benutzt, sicher gemacht werden. Die Hauptaufgaben von<br />

SSL sind die Authentifikation der Kommunikationspartner unter Verwendung von<br />

asymmetrischen Verschlüsselungsverfahren <strong>und</strong> digitalen Zertifikaten 32 , die vertrauliche<br />

Datenübertragung unter Nutzung eines gemeinsamen Sitzungs-Schlüssels<br />

<strong>und</strong> schließlich auch die Sicherstellung der Integrität der transportierten Daten<br />

28 Das ISO/OSI-Schichtenmodel ist ein von der internationalen Standardsierungsorganisation ISO<br />

genormtes Modell für das Zusammenspiel von Protokollen. Eine ausführlich Beschreibung findet<br />

man in [42], ab Seite 45.<br />

29 HTTP: Hyper Text Transfer Protocol<br />

30 IETF: Internet Engineering Task Force<br />

31 TCP: Transmission Control Protocol<br />

32 Digitale Zertifikate sind digitale Dokumente, die eine bestimmte Identität einer Person oder<br />

eines Servers/Clients bezeugen.<br />

31


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 8: Die Teilschichten des SSL-Protokolls im TCP/IP Modell [42][24]<br />

unter Nutzung von Message Authentication Codes [5].<br />

Das SSL-Protokoll legt sich nicht auf die Anwendung eines bestimmten kryptographischen<br />

Verfahrens oder einer bestimmten Hashfunktion fest, vielmehr wird<br />

ermöglicht, dass sich Client <strong>und</strong> Server pro Verbindung auf geeignete Verfahren<br />

<strong>und</strong> Funktionen verständigen. Die Spezifikation von TLS erlaubt beispielsweise<br />

den Einsatz von RC2, RC4, DES, 3DES <strong>und</strong> IDEA als symmetrische Verschlüsselungsverfahren.<br />

Für den Schlüsselaustausch können RSA sowie Diffie-Hellman 33<br />

verwendet werden <strong>und</strong> als kryptographische Hashfunktionen SHA oder MD5. Das<br />

SSL-Protokoll gliedert sich intern, wie Abbildung 8 zeigt, in fünf Teilprotokolle,<br />

die zwei übereinander liegende Schichten bilden. Besondere Aufmerksamkeit ist<br />

dem Handshake-Protokoll zu widmen, dessen Aufgabe es ist, die zu verwendenden<br />

kryptographischen Verfahren <strong>und</strong> Parameter festzulegen. Es besteht aus einer Folge<br />

von Nachrichten, die sich Client <strong>und</strong> Server einander zusenden. Dabei geht man<br />

davon aus, dass der Client der Initiator der Kommunikation ist. Der genaue Ablauf<br />

des Handshake-Protokolls hängt von verschiedenen Optionen ab. Vereinfacht<br />

dargestellt, läuft das Handshake-Protokoll typischerweise folgendermaßen ab: [24]<br />

1. Der Client beginnt den Handshake mit dem Senden einer Client-Hello-<br />

Nachricht, in der er anzeigt, dass er SSL einsetzen möchte. Die Nachricht<br />

enthält eine Liste der unterstützten Krypto-Verfahren (kryptographische Hashfunktionen,<br />

symmetrische- <strong>und</strong> asymmetrische Verschlüsselungsverfahren)<br />

sowie eine Zufallszahl, die später zu Berechnung des Sitzungsschlüssels<br />

benötigt wird.<br />

2. Der Server antwortet auf die Client-Hello-Nachricht seinerseits mit einer<br />

33 Das 1976 von von W. Diffie <strong>und</strong> M.E. Hellman vorgestellte Verfahren ermöglicht es zwei Kommunikationspartnern,<br />

ein gemeinsames Geheimnis (i.d.R. einen Schlüssel für ein nachfolgendes<br />

symmetrisches Verschlüsselungsverfahren) über ein unsicheres Medium zu vereinbaren, ohne dass<br />

ein mithörender Angreifer an das Geheimnis gelangen könnte.<br />

32


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Server-Hello-Nachricht, in der er angibt, welche Verfahren er sich aus der<br />

Liste von Vorschlägen (sogenannte Cipher-Suites) des Clients ausgesucht hat<br />

<strong>und</strong> nun verwenden möchte. Desweiteren enthält auch diese Nachricht eine<br />

Zufallszahl <strong>und</strong> darüber hinaus ein digitales Zertifikat des Servers.<br />

3. Der Client generiert nun das sogenannte Pre-Master-Secret, welches zusammen<br />

mit den Zufallszahlen die Gr<strong>und</strong>lage für die Berechnung des<br />

Master-Secret bildet. Wird beispielsweise das RSA-Verfahren für den<br />

Schlüsselaustausch angewandt, so verschlüsselt der Client das Pre-Master-<br />

Secret mit dem aus dem Server-Zertifikat stammenden öffentlichen Schlüssel<br />

des Servers <strong>und</strong> sendet es ihm anschließend zu.<br />

Nun sind beide Kommunikationspartner in der Lage, das geheime Master-<br />

Secret zu berechnen (vergl.: [44] Seite 88f), welches in der SSL-Record-<br />

Protokoll-Schicht zur Verschlüsselung <strong>und</strong> zur Integritätskontrolle mit<br />

schlüsselabhängiger Hashfunktion eingesetzt wird.<br />

4. Zum Abschluss des Handshakes wird eine Finish Nachricht ausgetauscht, die<br />

bereits durch die ausgehandelten kryptograhischen Verfahren <strong>und</strong> Parameter<br />

geschützt ist. Sie enthält eine Prüfsumme über alle gesendeten Handshake-<br />

Daten <strong>und</strong> soll sicherstellen, dass Client <strong>und</strong> Server dieselben Handshake-<br />

Daten ”gesehen” haben <strong>und</strong> keine Man-In-The-Middle-Attacke 34 irgendwelche<br />

Daten verändert hat.<br />

Nach dem Abarbeiten des Handshake-Protokolls teilt das ChangeCipherSpec-<br />

Protokoll der darunter liegenden Record-Schicht mit, welche kryptograhischen Verfahren<br />

<strong>und</strong> Parameter vereinbart wurden <strong>und</strong> ab jetzt verwendet werden sollen. Das<br />

Teilprotokoll kommt aber auch dann zum Einsatz, wenn sich Verfahren <strong>und</strong> Parameter<br />

ändern.<br />

Die Aufgabe des Alert-Protokolls ist das Versenden von Fehlermeldungen an die<br />

oberen Schichten, wenn der Datenaustausch nicht planmäßig läuft.<br />

Im Gegensatz zu den anderen Protokollen, die nur zur Initialisierung, zum Verfahrenswechsel<br />

<strong>und</strong> bei Störungen abgearbeitet werden <strong>und</strong> daher den Ausnahmefall<br />

bilden, ist das ApplicationData-Protokoll dasjenige, welches im Regelfall in der<br />

oberen Schicht im Einsatz ist. Es ist für die Durchreichung der oben ankommenden<br />

Anwendungsdaten an das Record-Protokoll zuständig.<br />

Die Abbildung 9 zeigt die Arbeitsweise des fünften <strong>und</strong> letzten Teilprotokolls.<br />

Das SSL-Record-Protokoll hat die Aufgabe, auf die von oben übergebenen Daten<br />

ein schlüsselabhängiges Hashverfahren anzuwenden <strong>und</strong> diese Daten samt Hashwert<br />

symmetrisch zu verschlüsseln. Dazu werden die Daten zunächst in Blöcke<br />

sinnvoller Größe zerlegt <strong>und</strong> diese anschließend optional komprimiert. Anschließend<br />

erfolgt die Anwendung der Hashfunktion auf den Datenblock, die ihrerseits<br />

einen Hashwert zurückliefert. Schließlich werden Datenblock <strong>und</strong> Hashwert<br />

gemeinsam verschlüsselt <strong>und</strong> dem Kommunikationspartner über die zugeordne-<br />

34 Der Angreifer schaltet sich in die Kommunikation zwischen zwei Kommunikationspartnern ein<br />

<strong>und</strong> versucht, die ausgetauschten Nachrichten zu seinen Gunsten zu verändern, um möglicherweise<br />

weiterführende Angriffe durchzuführen.<br />

33


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

te TCP-Verbindung übermittelt. Durch eine Umkehrung der Transformationen auf<br />

Empfängerseite wird der ursprüngliche Datenblock wiederhergestellt. [24][4]<br />

Abbildung 9: Das SSL-Record-Protokoll [4]<br />

Die Sicherheit des gesamten SSL-Protokolls hängt im wesentlichen von der Sicherheit<br />

des Handshake-Protokolls ab. Gelänge es einem Angreifer, dafür zu sorgen,<br />

dass die Kommunikationspartner schwache Verschlüsselungsverfahren aushandeln,<br />

so könnte er anschließend mit großer Aussicht auf Erfolg versuchen, den berechneten<br />

Kommunikationsschlüssel zu brechen. Für das Gelingen eines solchen Angriffs<br />

wäre jedoch eine Modifikation des Handshake-Nachrichten erforderlich, welche<br />

wiederum dazu führen würde, dass Client <strong>und</strong> Server unterschiedliche Hashwerte<br />

für ihre jeweiligen Finish-Nachrichten berechnen würden. Diese Tatsache hätte<br />

dann ein wechselseitiges Ablehnen der Finish-Nachrichten <strong>und</strong> das erfolglose Terminieren<br />

des Verbindungsaufbaus zur Folge. [5]<br />

Die gute Integrationsfähigkeit von SSL ist unter anderem ein Gr<strong>und</strong> dafür, dass es<br />

wohl gegenwärtig das meistverwendetste Verschlüsselungsprotokoll im Internet ist.<br />

Für den Einsatz von SSL sind keine (oder nur geringe) Änderungen auf Anwendungsebene<br />

nötig. Von Nachteil ist jedoch, dass es nur über TCP, nicht aber über<br />

UDP 35 verwendbar ist. Somit lassen sich viele Dienste wie DNS 36 oder auch die<br />

Internet-Telefonie mit SSL nicht absichern. [24]<br />

IPsec Das in der Vermittlungsschicht (Schicht 3 des ISO/OSI-Modells) angesiedelte<br />

<strong>und</strong> in seiner Version 4 derzeit weit verbreitete Internetprotokoll IPv4 stellt<br />

von sich aus keinerlei Sicherheitsdienste wie Authentizität, Vertraulichkeit oder<br />

Integrität zur Verfügung. IPsec (IP Security Protocol) ist eine Sicherheitsarchitektur<br />

für IPv4 <strong>und</strong> dessen Nachfolger IPv6, die dieses Manko beseitigen soll. Innerhalb<br />

der IETF entwickelt <strong>und</strong> standardisiert, ist IPsec fester Bestandteil der Version 6 des<br />

Internetprotokolls (IPv6), die in den kommenden Jahren das jetzige IPv4 ersetzen<br />

35 UDP: User Datagram Protocol<br />

36 DNS: Domain Name Service<br />

34


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

soll. Entsprechend der Einordnung in die Vermittlungsschicht können mittels<br />

IPsec sichere Kommunikationskanäle zwischen Endsystemen, zwischen Gateways<br />

(z.B. Router) <strong>und</strong> Endsystemen sowie zwischen Gateways aufgebaut werden.<br />

Das Protokoll legt einige kryptogaphische Verfahren fest, die jedes IPsec-System<br />

anbieten muss, um eine gewisse Interoperabilität zwischen verschiedenen Implementierungen<br />

zu ermöglichen. Die eigentlichen Sicherheitsdienste werden von<br />

zwei Bestandteilen der IPsec Spezifikation erbracht, die unabhängig voneinander<br />

nutzbar sind. [5] [24]<br />

Der erste Bestandteil, der Authentication Header (AH) ist im RFC 37 2402<br />

beschrieben <strong>und</strong> hat die Aufgabe, die Authentizität <strong>und</strong> die Integrität eines verbindungslos<br />

übermittelten Paketes sowie optional einen Schutz vor Wiedereinspielung<br />

zu gewährleisten. AH definiert dazu ein zusätzliches Header-Feld, in dem unter<br />

anderem das Resultat einer schlüsselabhängigen Hashfunktion <strong>und</strong> eine Sequenznummer<br />

übermittelt wird. Die Hashfunktion wird auf die Nutzlast <strong>und</strong> auf nicht<br />

veränderliche Header-Felder des IP-Pakets angewandt <strong>und</strong> ist somit der Garant<br />

für die Authentizität <strong>und</strong> Integrität. In der RFC-Spezifikation ist vorgeschrieben,<br />

dass mindestens die beiden Hash-Verfahren HMAC 38 -MD5 <strong>und</strong> HMAC-SHA1 von<br />

jedem IPsec-System anzubieten sind. Die optionale Sequenznummer, die für jedes<br />

gesendete Paket monoton erhöht wird, soll Replay-Attacken verhindern.<br />

Das Encapsulating Security Payload (ESP), der zweite Bestandteil von IPsec,<br />

ist im RFC 2406 beschrieben. Es umfasst neben den Diensten, die bereits für den<br />

Authentication Header angegeben wurden zusätzlich noch die Fähigkeit, Daten verschlüsselt<br />

zu transportieren. ESP fügt genau wie AH den bisherigen Header-Feldern<br />

weitere hinzu, diese erlauben es, dem Kommunikationspartner das eingehende<br />

Paket einem bestimmten Kontext zuzuordnen. Eine ESP-Implementierung muss<br />

laut RFC 2406 mindestens das Verschlüsselungsverfahren DES im CBC 39 -Modus<br />

sowie die schlüsselabhängigen Hashfunktionen HMAC-MD5 <strong>und</strong> HMAC-SHA1<br />

enthalten.<br />

IPsec kann mit seinen zentralen Bestandteilen AH <strong>und</strong> ESP in den zwei Modi<br />

Transport <strong>und</strong> Tunnel betrieben werden. Am Beispiel des Encapsulating Security<br />

Payloads sollen beide Modi kurz erläutert werden:<br />

• Im Transportmodus werden ausschließlich die Nutzdaten des IP-Paketes authentifiziert<br />

<strong>und</strong> verschlüsselt. Alle anderen Teile der Nachricht (also im Prinzip<br />

der IP-Header) bleiben unverändert.<br />

• Im Tunnelmodus wird dagegen ein gesamtes IP-Paket vor der Übertragung<br />

authentifiziert sowie verschlüsselt <strong>und</strong> anschließend in den Nutzdatenanteil<br />

eines weiteren Paketes gepackt. Dadurch, dass die Header des ursprünglichen<br />

37 RFC: Request for Comment – RFCs sind Schriftstücke, mit denen die IETF Spezifikationen,<br />

Vorschläge <strong>und</strong> Informationen veröffentlicht.<br />

38 HMAC: Keyed-Hashing for Message Authentication (vergl.: RFC 2104)<br />

39 CBC: Cipher Block Chaining – Blockchiffriermodus, der den vorangehenden Chiffretextblock<br />

mit dem aktuell zu verschlüsselnden Klartextblock kombiniert.<br />

35


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

IP-Pakets nicht mehr lesbar sind, kann beispielsweise der Tunnelmodus dazu<br />

genutzt werden, um eine transparente Verbindung zwischen zu schützenden<br />

Endsystemen oder Teilnetzten über Sicherheits-Gateways aufzubauen. Der<br />

Tunnelmodus ist also insbesondere im Zusammenhang mit virtuellen privaten<br />

Netzen interessant.<br />

Die Abbildung 10 verdeutlicht noch einmal graphisch den Einsatz von AH <strong>und</strong><br />

ESP im Transport- <strong>und</strong> Tunnelmodus.<br />

Abbildung 10: Anwendung von IPsec auf IP-Pakete [14]<br />

Umfang <strong>und</strong> Eigenschaften einer aktuellen IPsec-Verbindung werden mit dem<br />

Konzept der Security Association (SA) beschrieben. Eine SA stellt im Prinzip<br />

eine Art Abkommen zwischen den Kommunikationspartnern dar <strong>und</strong> enthält<br />

Informationen, wie das zu verwendende Authentifikations- <strong>und</strong> Verschlüsselungsverfahren,<br />

die erforderlichen Schlüssel (AH <strong>und</strong> ESP), den potentiell benötigten<br />

Intitalisierungsvektor (nur für ESP) sowie die Lebensdauer der Schlüssel bzw. der<br />

ganzen SA. [5] Die SAs sind bei den jeweiligen Endsystemen in einer Security<br />

Association Database (SAD) zusammengefasst. Für jedes ankommende <strong>und</strong><br />

abgehende IP-Paket wird in der SAD eine zugehörige SA gesucht <strong>und</strong> die dort<br />

beschriebenen Verfahren, Regeln <strong>und</strong> Parameter angewandt. Die Identifikation<br />

einer SA erfolgt über den Security Parameter Index (SPI) zusammen mit der<br />

IP-Adresse des Kommunikationsendpunktes. Beide Informationen sind aus dem<br />

IPsec-Header des IP-Pakets zu entnehmen.<br />

Neben der SAD definiert die IPsec-Spezifikation noch eine weitere Datenbank.<br />

In der Security Policy Database (SPD) ist die Sicherheitspolitik eines IPsec<br />

Endsystems oder Gateways beschrieben. Beispielsweise kann der Administrator<br />

36


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

eines Systems hier festlegen, für welche Verbindungen IPsec verwendet werden<br />

muss <strong>und</strong> für welche nicht.<br />

Das IPsec-Protokoll ist für sich genommen nicht verhandlungsfähig <strong>und</strong> setzt<br />

voraus, dass die Kommunikationspartner über einen gemeinsamen geheimen<br />

Schlüssel verfügen. IPsec trifft keine Festlegungen darüber, wie eine Verbindung<br />

tatsächlich aufgebaut werden soll oder wie ein dynamischer Schlüsselaustausch zu<br />

erfolgen hat. Zur Erfüllung dieser Aufgaben wird ein weiteres Protokoll benötigt.<br />

Das von der IETF hierfür vorgesehene hat den Namen Internet Key Exchange<br />

(IKE). Das IKE-Protokoll ist im RFC 2409 beschrieben <strong>und</strong> kommt im Zusammenhang<br />

mit IPsec immer dann zum Einsatz, wenn für ein abzusendendes Datenpaket<br />

keine passende SA in der Security Association Database des Senders gef<strong>und</strong>en<br />

wird <strong>und</strong> gleichzeitig im SPD-Eintrag für die Verbindung die Anwendung von<br />

IPsec gefordert wird. Mittels IKE tauschen die Kommunikationspartner zunächst<br />

Informationen zur Berechnung eines geheimen Schlüssels aus. Die Schlüsselberechnung<br />

erfolgt dann nach dem Diffie-Hellman-Verfahren. Nach einer erfolgreich<br />

abgelaufenen wechselseitigen Authentifikation <strong>und</strong> dem verschlüsselten Austausch<br />

von Sicherheitsattributen können beide Partner die Security Association erzeugen.<br />

IPsec ist in der vorliegenden Spezifikation in vielen Varianten, Modi <strong>und</strong> Typen<br />

einsetzbar. Was aber auf der einen Seite eine durchaus gewünschte Flexibilität<br />

bringt, erfordert auf der anderen Seite größte Sorgfalt bei der Implementierung<br />

<strong>und</strong> Konfiguration von IPsec-Systemen. Besonders die vollständige, konsistente<br />

<strong>und</strong> korrekte Formulierung der Einträge in der SPD <strong>und</strong> SAD ist keine einfache<br />

Aufgabe. [5] In [8] untersuchen Niels Ferguson and Bruce Schneier die kryptographischen<br />

Eigenschaften von IPsec <strong>und</strong> lassen kaum einen Zweifel daran, dass sie<br />

nur wenig von IPsec halten. Wesentliche Kritikpunkte der beiden Autoren sind die<br />

Komplexität, die schlechte Dokumentation <strong>und</strong> der Variantenreichtum von IPsec<br />

<strong>und</strong> IKE. Auf Authentifizierungsheader <strong>und</strong> Transportmodus könne im Gr<strong>und</strong>e<br />

vollständig verzichtet werden, da diese jeweils durch ESP oder Tunnelmodus<br />

abgedeckt würden.<br />

37


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

2.6 Das DPAC Informationssystem<br />

Das DPAC Informationssystem der Firma Häcker-Automation, welches zur Zeit<br />

noch Gegenstand der Entwicklung ist, soll in naher Zukunft zu einer zentralen<br />

Anlaufstelle zur Informationsgewinnung für Mitarbeiter <strong>und</strong> K<strong>und</strong>en werden. Die<br />

Gr<strong>und</strong>lage des Informationssystems bildet die Database for Process Administration<br />

and Controlling, die alle wichtigen Daten vom einzelnen K<strong>und</strong>enkontakt bis<br />

hin zum Lagerbestand erfasst. Firmenintern fasst man Entwicklungs-, Produktions<strong>und</strong><br />

Lebenszyklus eines Produktes als eine Art Kette von Einzelprozessen auf. Jeder<br />

dieser Prozesse wird zur eindeutigen Identifizierung in ein sogenanntes Sachgebiet<br />

eingeordnet <strong>und</strong> erhält eine eigene Sachgebietsnummer. Zielstellung des DPAC Informationssystem<br />

ist es, Informationen <strong>und</strong> Daten über <strong>und</strong> aus den einzelnen Prozessen<br />

zentral zu erfassen, anhand der Sachgebietsnummer projektbezogen einzuordnen<br />

<strong>und</strong> berechtigten Personen zur Verfügung zu stellen. Durch diese zentrale<br />

Informationsgewinnung <strong>und</strong> Verteilung soll eine merkliche Entlastung der Mitarbeiter,<br />

eine bessere Prozesssteuerung, besseres Kostenmanagement, eine Erhöhung<br />

der Effizienz <strong>und</strong> letztendlich eine gesteigerte Produktqualität ermöglicht werden.<br />

Die nachfolgende Liste gibt einen auszugartigen Überblick über den Anforderungs<strong>und</strong><br />

Aufgabenkatalog des DPAC Informationssystems:<br />

• Der Systemzugriff für autorisierte Mitarbeiter ist direkt vom jeweiligen Arbeitsplatz<br />

aus möglich. Von hier aus können Daten erfasst <strong>und</strong> abgerufen werden.<br />

• Ein besonders geschützter Zugang erlaubt berechtigten Außendienstmitarbeitern<br />

den externen Zugriff auf das System, primär, um Daten abzufragen, dennoch<br />

weitestgehend ohne Funktionsverlust gegenüber der firmenintern verwendeten<br />

Zugriffslösung.<br />

• Die Integration einer speziellen Zugriffsmöglichkeit ermöglicht es K<strong>und</strong>en<br />

der Firma, auftragsbezogene <strong>und</strong> für sie relevante Daten abzufragen, den<br />

Entwicklungs- <strong>und</strong> Produktionsprozess zu verfolgen (workflow) <strong>und</strong> sich<br />

zeitnah über den aktuellen Stand des Auftrags zu informieren.<br />

• Die graphische Benutzeroberfläche (engl. GUI: graphical user interface), die<br />

den Zugang zum System realisiert <strong>und</strong> die Schnittstelle zwischen Benutzer<br />

<strong>und</strong> System bildet, ist so zu implementieren, dass sie auf möglichst vielen<br />

verschiedenen Rechnerplattformen <strong>und</strong> ohne größeren Installationsaufwand<br />

eingesetzt werden kann. Diese Client-Software (Frontend) wird den Benutzern<br />

an einer zentralen Stelle (Server) zur Verfügung gestellt.<br />

• Notwendige Updates der Client-Software sollten weitestgehend automatisch<br />

erfolgen.<br />

• Sich zyklisch wiederholende Prozesse arbeitet das System selbsttätig ab, um<br />

die Mitarbeiter zu entlasten.<br />

• Im System erfolgt eine automatisierte Einordnung von Projekten in Sachgebiete<br />

sowie eine konsistente Zuweisung <strong>und</strong> Verwaltung von Sachgebietsnummern<br />

nach festgelegten Regeln.<br />

38


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

3 Mobiler Code<br />

Die Anforderungen des DPAC-Informationssystems an die Client-Software sind<br />

vielfältig. Mobiler Code stellt insbesondere im Bezug auf die Verteilung, Plattformunabhängigkeit<br />

<strong>und</strong> Updatefähigkeit der Software eine elegante Lösung dar.<br />

In den nun folgenden Abschnitten sollen Konzepte erörtert werden, wie mobiler<br />

Code im DPAC-Informationssystem Verwendung finden kann <strong>und</strong> welche Sicherheitsprobleme<br />

in diesem Kontext entstehen können. Eine besondere Rolle soll dabei<br />

die plattformunabhängige Programmiersprache JAVA von Sun Microsystems spielen.<br />

Sie bietet eine Vielzahl von Sicherheitsmechanismen <strong>und</strong> stellt auf Basis ihrer<br />

virtuellen Maschine eine Möglichkeit dar, Programmcode auf unterschiedlicher<br />

Hardware ausführbar zu machen. Diese Tatsache der Hardwareunabhängigkeit (im<br />

übrigen wird auch eine Unabhängigkeit vom jeweilig eingesetzten Betriebssystem<br />

erreicht) ist von entscheidender Wichtigkeit für die breite Akzeptanz von mobilem<br />

Code.<br />

[5] definiert mobilen Code als einen Begriff, unter dem sich alle Programme<br />

zusammenfassen lassen, deren Programmcode auf einem entfernten, potentiell<br />

nicht vertrauenswürdigen Rechner generiert wurde <strong>und</strong> die auf Gastrechnern (engl.<br />

hosts) ausgeführt werden. [22] fügt noch ergänzend hinzu, dass mobiler Code keine<br />

variablen Daten beinhaltet <strong>und</strong> nach jeder Übertragung auf ein anderes System<br />

im selben Zustand startet. Bei mobilem Code handelt es sich also ganz allgemein<br />

gesagt um Programmcode, der auf einem Server zur Verfügung gestellt, über ein<br />

Transportmedium übertragen <strong>und</strong> bei einem Client zur Anwendung kommt. Damit<br />

unterscheidet sich das zugr<strong>und</strong>eliegende Ausführungsmodell vom herkömmlichen<br />

Client-Server Modell zur Durchführung von verteilten Berechnungen, bei dem<br />

Nachrichten, also Daten, über ein Medium übertragen werden. Der ausführbare Code<br />

selber bleibt jedoch permanent auf dem Rechner, auf dem er installiert wurde. [5]<br />

Bekannteste Beispiele für mobilen Code sind Java-Applets, ActiveX-Controls<br />

von Microsoft oder auch mobile Agenten 40 , die mit speziellen Agentensprachen<br />

wie Telescript programmiert werden.<br />

3.1 Sicherheitsbedrohungen<br />

Lässt man einmal Viren, Würmer <strong>und</strong> Trojanische Pferde, die genau genommen<br />

auch eine Art von mobilem Code sind, außen vor <strong>und</strong> betrachtet nur solchen Programmcode,<br />

der nicht vordringlich zum Zwecke eines Angriffs auf einen entfernten<br />

Rechner entwickelt wurde, so bleibt dennoch eine nicht unerhebliche Menge von<br />

Bedrohungen für die Sicherheit übrig, die an dieser Stelle besprochen werden sollen.<br />

40 Ein mobiler Agent ist eine spezielle Ausprägung von mobilen Code, der auch zustandsbehaftet<br />

sein kann. Er wandert von Rechnerknoten zu Rechnerknoten <strong>und</strong> bietet Dienste an.<br />

39


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Zur Verdeutlichung der Sichereitsproblematik im Zusammenhang mit dem Einsatz<br />

von mobilem Code sollte man sich die folgenden Fragen vor Augen führen:<br />

• Welche Bedrohungen existierenden für mobilen Code?<br />

• Kann mobiler Code selbst zu einer Bedrohung für seinen Gastrechner <strong>und</strong><br />

damit auch für den Benutzer werden?<br />

• Welche Möglichkeiten gibt es, um mobilen Code vor Angriffen zu schützen?<br />

• Wie kann der Gastrechner geschützt werden, auf dem mobiler Code ausgeführt<br />

wird?<br />

Aus den ersten beiden Fragen lassen sich im wesentlichen drei Klassen von Sicherheitsbedrohungen<br />

ableiten. [5] Sie betreffen sowohl den mobilen Code selbst<br />

als auch die Ausführungsumgebung des Gastrechners. In die erste Klasse fallen die<br />

vielfältigen Bedrohungen, denen der mobile Code ausgesetzt ist, wenn er über ein<br />

unsicheres Transportmedium wie beispielsweise das Internet übertragen wird. Wird<br />

er auf einem Gastrechner zur Ausführung gebracht, so ist der mobile Code Bedrohungen<br />

seitens dieses Rechners ausgesetzt. In die dritte Klasse lassen sich Bedrohungen<br />

einordnen, die der mobile Code möglicherweise selbst birgt <strong>und</strong> denen sich<br />

der Gastrechner bei der Ausführung des Codes aussetzt. Hier sind beispielsweise<br />

unautorisierte Zugriffe auf rechnereigene Ressourcen zu nennen. Abbildung 11<br />

gibt noch einmal einen visuellen Überblick über die drei Bedrohungsbereiche, die<br />

im Folgenden noch etwas genauer untersucht werden sollen.<br />

Abbildung 11: Bedrohungsszenarien für mobilen Code [5]<br />

3.1.1 Bedrohungen für den mobilen Code<br />

Potentiellen passiven Angriffen setzt sich der mobile Code während seiner<br />

Ausführung aber auch während des Transports über ein unsicheres Medium aus.<br />

Denkbar ist ein Angriff, der darauf abzielt, sensible lokale Daten des Codes auszuspähen,<br />

aber auch das Erstellen von Bewegungsprofilen von migrierendem Code<br />

könnte Ziel eines Angreifers sein. Gerade in Bezug auf Mobile Agenten, die sich<br />

selbständig von Rechner zu Rechner bewegen, könnte es möglicherweise für einen<br />

40


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Angreifer von Interesse sein, welche Rechner in einem Netzwerk die Dienste der<br />

Agenten in Anspruch nehmen.<br />

Aktive Angriffe, deren Ziel durch die Modifikation des mobilen Codes erreicht werden<br />

soll, betreffen ebenfalls sowohl den Bereich des Transfers als auch den Bereich<br />

der Ausführung auf einem Gastrechner. Ein Angreifer könnte beispielsweise versuchen,<br />

durch gezielte Veränderung des mobilen Codes einen Virus oder ein Trojanisches<br />

Pferd zu integrieren. Bei einem mobilen Agenten könnte er den vorgesehenen<br />

Ausführungspfad so verändern, dass der Agent auf einen anderen Rechner umgelenkt<br />

wird. [5]<br />

3.1.2 Bedrohungen für den Gastrechner<br />

Neben den beschriebenen Attacken auf den mobilen Code stellt dieser selbst auch<br />

eine erhebliche Bedrohung für seinen Gastrechner dar. Auf Seiten des Gastrechners<br />

lassen sich Angriffe ebenso in passive <strong>und</strong> aktive aufteilen. Durch passive Angriffe,<br />

wie das Lesen von Dateien können Informationen über das Gastsystem gewonnen<br />

<strong>und</strong> über eine Netzwerkverbinung an einen entfernten Rechner geschickt werden.<br />

Klassisches Beispiel hierfür ist das Auslesen einer Passwortdatei, um einen gezielten<br />

Passwort-Crackangriff vorzubereiten.<br />

Mittels aktiver Angriffe kann der mobile Code versuchen, unautorisiert Zugriff auf<br />

Dateien oder Ressourcen des Gastsystems zu erlangen, um dort Modifikationen durzuführen.<br />

Mobiler Code könnte auch dazu eingesetzt werden, um die Verfügbarkeit<br />

des Gastrechners zu beeinträchtigen. Bei solchen Denial-of-Service-Attacken monopolisiert<br />

der Code dann bei der Ausführung die CPU, sodass andere Anwendungen<br />

blockiert werden.<br />

Als einen Maskierungsangriff bezeichnet man eine Attacke gegen einen Gastrechner,<br />

bei der der mobile Code eine falsche Identität oder Funktionalität vortäuscht.<br />

Auch Maßnahmen wie das Signieren des Codes, um seinen Ursprung nachzuweisen<br />

geben keine Auskunft über die Funktionsweise, dass heißt auch signierter Code<br />

kann bedrohliche Funktionen beinhalten. [5]<br />

3.2 Sicherheitsmaßnahmen<br />

3.2.1 Schutz des mobilen Codes<br />

Der Schutz des mobilen Codes kann auf der Transportstrecke relativ einfach durch<br />

den Einsatz von Verschlüsselungstechniken realisiert werden. Die jedoch meist<br />

interpretative Ausführung des Codes macht es notwendig, dass die Daten der<br />

Ausfühungsumgebung in einer unverschlüsselten Form vorliegen. Der Schutz des<br />

Programmcodes ist somit durch kryptographische Mittel, wenn überhaupt nur beim<br />

Transfer zu gewährleisten. Eine Lösungsmöglichkeit, den mobilen Code vor dem<br />

Gastrechner zu schützen, besteht darin, ihn nur an Systeme zu versenden, die als<br />

vertrauenswürdig eingestuft sind <strong>und</strong> ihre Identität korrekt nachgewiesen haben.<br />

Von Nachteil ist jedoch, dass dieser Lösungsansatzes eine starke Einschränkung der<br />

Flexibilität zur Folge hat, da die vertrauenswürdigen Partner von vornherein festgelegt<br />

werden müssen. Für das Problem des Schutzes von mobilen Code bei der<br />

41


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Ausführung auf einem vertrauensunwürdigen Gastrechner gibt es bis heute noch<br />

keine befriedigende Lösung, es ist immer noch Gegenstand der <strong>Forschung</strong>. [5]<br />

3.2.2 Schutz des Gastrechners<br />

Die beste Art, einen Gastrechner vor Bedrohungen zu schützen, die mobiler Code<br />

birgt, ist es, Download <strong>und</strong> Ausführung gänzlich zu unterbinden. Da diese doch sehr<br />

radikale Lösung nur in den seltensten Fällen wünschenswert ist, müssen Verfahren<br />

zum Einsatz kommen, die ein für das Gastsystem sicheres Ausführen von mobilem<br />

Code ermöglichen.<br />

Eine sehr restriktive Vorgehensweise ist die sogenannte Sandbox (Sandkasten), wie<br />

sie beispielsweise in Java realisiert ist. Ihr Prinzip beruht ganz allgemein gesagt<br />

auf der Beschränkung von Zugriffsrechten. Sie definiert die Ausführungsumgebung<br />

des Codes als einen isolierten Speicherbereich, innerhalb dessen der Code freien<br />

Zugriff besitzt. Auf Systemressourcen außerhalb dieses Bereichs ist der Zugriff dagegen<br />

kaum oder nur unter strengen Kontrollen möglich.<br />

Die von Microsoft empfohlene <strong>und</strong> eingesetzte Authenticode-Technik dient zur eindeutigen<br />

Identifizierung von mobilem Code <strong>und</strong> soll dadurch einen gewissen Schutz<br />

vor bedrohlichen ActiveX-Controls gewährleisten. Dass dieser Schutz jedoch nur<br />

sehr schwach ist, liegt an der Tatsache, dass lediglich der Ursprung der mobilen<br />

Einheit nachgewiesen <strong>und</strong> überprüft werden kann, nicht aber die Vertrauenswürdigkeit<br />

des Codes <strong>und</strong> die beinhaltete Funktionalität. In [5] wird diese Vorgehensweise<br />

sogar als kontraproduktiv bezeichnet, da sie unerfahrene Benutzer in einer falschen<br />

Sicherheit wiegt.<br />

Die Technik des Proof-Carrying Codes (PCC) ist das dritte Verfahren, das an dieser<br />

Stelle kurz vorgestellt werden soll. Die Gr<strong>und</strong>idee von PCC ist, dass ein Gastrechner<br />

verifizieren kann, ob mobiler Code aus einer nicht vertrauenswürdigen Quelle<br />

einer vorher definierten Sicherheitspolitik genügt. Der Gastrechner legt dazu eine<br />

Sicherheitsstrategie fest <strong>und</strong> veröffentlicht diese. Der ausführbare, mobile Code<br />

wird vom Autor mit einem formalen Sicherheitsbeweis (safety proof) ausgestattet,<br />

der beweisen soll, dass der Code die spezifizierte Sicherheitsstrategie nicht verletzt.<br />

Anhand dieses Sicherheisbeweises kann dann der Gastrechner vor der Ausführung<br />

des Programmcodes überprüfen, ob eine Sicherheitsstrategie-Verletzung auftreten<br />

wird oder nicht. Eine PCC Implementierung besteht im Regelfall aus den folgenden<br />

vier Komponenten: [2][32]<br />

• einer formalen Spezifikationssprache, um die Sicherheitsstrategie festzulegen<br />

• einer formalen Semantik, meist in Form einer Logik, genutzt vom nicht vertrauenswürdigen<br />

Code<br />

• einer Sprache, um die formalen Beweise zu repräsentieren<br />

• einem Algorithmus, um die Beweise schnell <strong>und</strong> leicht zu validieren<br />

Ein Hauptvorteil von PCC in der Umgebung von mobilem Code besteht darin, dass<br />

die gesamte Beweislast hinsichtlich der Sicherheit des Codes beim Autor liegt. Dies<br />

ist durchaus sinnvoll, da ja der Autor seinen Code viel besser kennt als der Nutzer.<br />

42


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Dem Gastrechner kommt dann nur noch die Aufgabe einer einfachen Beweisüberprüfung<br />

zu. Aufwendige zur Laufzeit durchzuführende Kontrollen des Codes sind<br />

nicht notwendig. Das größte Hindernis für den Einsatz der PCC-Technik ist die<br />

Tatsache, dass die Erstellung von Beweisen, die die Sicherheit des mobilen Codes<br />

betreffen, keinesfalls eine triviale Aufgabe ist. Nur in den seltensten Fällen ist<br />

es möglich, einen solchen Beweis automatisch zu erzeugen. Auf eine breite Akzeptanz<br />

wird diese Technik erst dann stoßen, wenn eine einfach zu handhabende<br />

Entwicklungsumgebung für mobilen Code zur Verfügung steht, die es erlaubt, PCC<br />

zu integrieren. [5][32]<br />

3.3 Die Programmiersprache Java<br />

Java wurde 1991 im Rahmen eines <strong>Forschung</strong>sprojektes in einem kleinen Team unter<br />

der Leitung von James Gosling bei der Firma Sun entwickelt <strong>und</strong> hieß zunächst<br />

Oak (Object Application Kernel). Ursprüngliches Ziel der Entwickler war es, eine<br />

Steuerungsprogrammiersprache für elektronische Haushaltsgeräte zu schaffen. Erst<br />

vier Jahre später 1995 wurde die auf andere Systeme leicht portierbare Sprache für<br />

den Einsatz im Internet entdeckt <strong>und</strong> veröffentlicht. Nicht zuletzt wegen der engen<br />

Verwandschaft mit der Programmiersprache C <strong>und</strong> C++ vergrößerte sich die<br />

Java-Nutzergemeinde in den letzten 8 Jahren stetig. Die Sprache erlebt eine rasante<br />

Verbreitung nicht nur in <strong>Forschung</strong> <strong>und</strong> <strong>Lehre</strong> sondern auch in vielen kommerziellen<br />

Bereichen. Die Firma Sun beschreibt Java als eine einfache, objektorientierte,<br />

verteilte, interpretierte, robuste, sichere, architektur-neutrale, portable, schnelle,<br />

nebenläufige <strong>und</strong> dynamische Sprache [22].<br />

Mit Java ist es gelungen, eine Programmiersprache zu konzipieren, die sich besonders<br />

gut für den Einsatz in heterogenen, vernetzten Systemen eignet. Entscheidend<br />

dafür ist die Portabilität von Java-Programmen, die auf der Plattformunabhängigkeit<br />

des durch den Java-Übersetzer erzeugten maschinenunabhängigen Bytecodes<br />

basiert. [5] Bei diesem ”neutralen” Bytecode handelt es sich nicht um prozessorabhängige<br />

Maschinenbefehle sondern vielmehr um eine Definition plattformübergreifender<br />

Anweisungen, die nur geringe Übereinstimmungen zu herkömmlichen<br />

Assembler-Befehlen aufweisen.<br />

Ein Java-Programm, welches in Bytecode übersetzt wurde, ist, isoliert gesehen,<br />

nicht lauffähig. Da es aber keinen Sinn machen würde, Programme zu schreiben<br />

<strong>und</strong> zu übersetzen, die später nicht ausführbar sind, liegt es auf der Hand, dass<br />

Mechanismen existieren müssen, mit deren Hilfe Bytecode auf einem Rechner ausgeführt<br />

werden kann. Der Just in Time Compiler (JIT) ist ein solcher Mechanismus.<br />

Er übersetzt den Bytecode in den jeweils benötigten Maschinencode des Rechners,<br />

auf dem das Java-Programm ausgeführt werden soll. Einen anderen Weg geht die<br />

Java Virtual Machine (JVM). Ihr Bytecode-Interpreter führt den Bytecode wie der<br />

Name schon sagt interpretativ aus. Die Java Virtual Machine ist praktisch ein virtueller<br />

Rechner, der eine Schnittstelle zwischen Bytecode <strong>und</strong> realem Rechner bildet<br />

<strong>und</strong> den Java-Programmen eine einheitliche Ausführungsumgebung zur Verfügung<br />

stellt. Spätestens hier, bei der Ausführung des Java-Bytecodes, verliert das Konzept<br />

von Java allerdings seine Unabhängigkeit, da weder JIT noch JVM plattformunabhängig<br />

sind.<br />

43


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Alle benötigten Komponenten für die Ausführung <strong>und</strong> Entwicklung von Java-<br />

Programmen bietet die Firma Sun auf ihrer Java-Homepage (http://java.<br />

sun.com) zum Download an. Aus dem ursprünglich veröffentlichten Java Development<br />

Kit (JDK) in Version 1.0 ist mittlerweile das Software Development<br />

Kit (SDK) hervorgegangen, welches in der Java 2 Platform - Enterprise Edition<br />

(J2EE) <strong>und</strong> Standard Edition (J2SE) eingebettet ist. Enterprise Edition <strong>und</strong><br />

Standard Edition unterscheiden sich lediglich im Ausstattungsumfang. So enthält<br />

die J2EE zusätzliche Werkzeuge, wie sie beispielsweise für die Entwicklung von<br />

Java-Beans 41 benötigt werden. Mit dem SDK erhält der Entwickler eine komplette<br />

Systemumgebung für die Erstellung von Java-Programmen, die aus den folgenden<br />

Hauptkomponenten besteht: [20]<br />

• Entwicklungsumgebung mit einem Compiler, der den Java-Quellcode in systemunabhängigen<br />

Bytecode übersetzt (javac)<br />

• Java Core Classes (Java Kernklassen) für die Entwicklung von Applikationen<br />

<strong>und</strong> Applets (java.lang.*, java.applet.*, java.util.*, ...)<br />

• Eine Laufzeitumgebumg mit der JVM (java)zur Ausführung des Bytecodes<br />

(Java Runtime Environment)<br />

• Werkzeuge für die Konfiguration der Sicherheitsmechanismen (keytool,<br />

jarsigner, policytool)<br />

Im Gegensatz zum SDK, welches primär für die Entwicklung von Java-<br />

Programmen gedacht ist, wird die Java Runtime Environment (JRE) für das<br />

Ausführen des Bytecodes benötigt. Die JRE beinhaltet praktisch die schon angesprochene<br />

virtuelle Maschine <strong>und</strong> kann ebenfalls über die Java-Homepage bezogen<br />

werden.<br />

Zum besseren Verständnis des nachfolgenden Abschnitts Sicherheitsarchitektur<br />

<strong>und</strong> -modelle in Java sollen an dieser Stelle noch kurz die Begriffe Java-Applet,<br />

Java-Applikation <strong>und</strong> JavaScript definiert werden.<br />

• Java-Applets sind mobile Programme (mobiler Code), die meist auf einem<br />

Server gespeichert <strong>und</strong> in Webseiten eingebettet sind. Ihr Bytecode wird über<br />

das Netz geladen <strong>und</strong> kann nur in geeigneten Web-Browsern oder Applet-<br />

Viewern ausgeführt werden. Der Abschnitt 3.4 beschäftigt sich noch eingehend<br />

mit dem Thema Java-Applets.<br />

• Java-Applikationen sind eigenständige Programme, deren Bytecode in einer<br />

JVM eines beliebigen Rechners ausgeführt werden kann.<br />

• Java darf nicht mit der Scriptsprache JavaScript verwechselt werden.<br />

JavaScript-Programme dienen in erster Linie zur Bearbeitung von HTML-<br />

Seiten durch den Browser des Client-Rechners. Es ist deshalb zu beachten,<br />

dass die Sicherheitskonzepte von Java keinesfalls auf JavaScript zutreffen.<br />

41 vergl.: Enterprise JavaBeans Technology (http://java.sun.com/products/ejb/)<br />

44


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

3.3.1 Sicherheitsarchitektur <strong>und</strong> -modelle in Java<br />

Das Sicherheitskonzept von Java wird oft nur mit den Begriffen Sandbox <strong>und</strong> Signierte<br />

Applets in Zusammenhang gebracht. Zweifelsohne sind diese beiden Konzepte<br />

sehr wichtig, aber in Java kommen noch mehr Sicherheitskomponenten <strong>und</strong><br />

-mechanismen zum Einsatz.<br />

Das Sicherheitsmodell der Java-Architektur hat sich seit der Einführung von Java<br />

bereits mehrfach geändert. Dabei wurden aber die wesentlichen Architekturkomponeten,<br />

der Verifizierer (Bytecode-Verifier), der Klassenlader (Class Loader) <strong>und</strong> der<br />

Sicherheitsmanager (Security Manager) im Prinzip beibehalten. Diese drei Komponenten<br />

bilden zusammen mit dem Sprachdesign von Java das Sandkastenmodell<br />

(sandbox model). Dieser Begriff rührt daher, dass einem Applet nur eingeschränkte<br />

Rechte zugebilligt werden, also sein Wirken auf einen bestimmten Bereich (”Sandkasten”)<br />

begrenzt ist. [5][20]<br />

Sicherheitsmechanismen der Sprache Die Sprachdefinition von Java formt<br />

selbst schon eine wichtige Sicherheitskomponente. In ihr sind gewisse Spielregeln<br />

festgelegt, die unter anderem dafür sorgen sollen, dass ein sicherer <strong>und</strong> robuster<br />

Programmcode entsteht. Der restriktive Compiler überwacht zur Übersetzungszeit,<br />

ob sich der Quellcode an diese Spielregeln hält. So ist es beispielsweise notwendig,<br />

Methoden oder Deklarationen einer Zugriffsebene (öffentlich, geschützt oder<br />

privat) zuzuordnen <strong>und</strong> Variablen vor ihrer Verwendung explizit mit einem gültigen<br />

Wert zu initialisieren. Darüber hinaus hat sich der Entwickler von Java-Programmen<br />

noch an andere Richtlinien zu halten, die man in anderen Programmiersprachen<br />

nicht unbedingt wiederfindet: [20]<br />

• Der Gebrauch von Zeigern ist unzulässig. Java kennt keine Zeigerstrukturen<br />

<strong>und</strong> Arithmetik, sodass ein willkürlicher <strong>und</strong> direkter Zugriff auf Speicheradressen<br />

nicht möglich ist.<br />

• Das Umwandeln von Datentypen zur Laufzeit ist nicht erlaubt.<br />

• Der Zugriff auf die Elemente eines Datenfeldes kann nur innerhalb der gültigen<br />

Grenzen erfolgen. Damit ist das Schreiben <strong>und</strong> Lesen von unerlaubten<br />

Speicherbereichen nicht möglich.<br />

• Instruktionen, die Speicher explizit reservieren oder freigeben, sind in Java<br />

nicht vorhanden. Der Garbage Collector, eine Komponente des Laufzeitsystems,<br />

sorgt für eine intelligente Verwaltung von freien Speicherfragmenten<br />

<strong>und</strong> nicht mehr verwendeten Objekten.<br />

Sind alle geforderten Richtlinien im Quellcode eingehalten worden, so generiert der<br />

Compiler (javac) aus der .java-Datei eine sogenannte Klassendatei mit der Endung<br />

.class. Diese Klassendatei enthält dann den Bytecode des Java-Programms.<br />

Strukturierter Bytecode Die vom Compiler erzeugte Datei beinhaltet neben dem<br />

schon erwähnten Bytecode auch wichtige Informationen über das Quellprogramm.<br />

Diese ermöglichen es Kontrollkomponenten, hier der Bytecode-Verifier, zu einem<br />

45


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

späteren Zeitpunkt erneut in der Lage zu sein, syntaktische <strong>und</strong> strukturelle Überprüfungen<br />

am transformierten Code durchzuführen. Prinzipiell ist eine Klassendatei<br />

aus sechs Bereichen aufgebaut: [32]<br />

• Dateikopf (Dateikennung, Versionsinformationen),<br />

• Konstantenpool,<br />

• Klassenbeschreibung (dazu gehören der Name der Klasse, die Vaterklasse,<br />

implementierte Interfaces, Zugriffsrechte für die Klasse),<br />

• Array von Datenfeldern,<br />

• Array mit Methoden (hier ist insbesondere auch der Bytecode für jede einzelne<br />

Methode enthalten) <strong>und</strong><br />

• zusätzliche Informationen (sogenannte Attribute)<br />

In den jeweiligen Bereichen findet der Bytecode-Verifier dann unter anderem Informationen<br />

wie die Dateikennungskonstante 0xCAFEBABE , die Version des Übersetzers,<br />

der den Code erzeugt hat, Angaben über die maximal benötigte Größe des<br />

Laufzeit-Stacks <strong>und</strong> die benötigten Register.<br />

Bytecode-Verifier Aufgabe des Bytecode-Verifiers ist es, auf Basis der durch den<br />

Compiler bereits durchgeführten Analysen <strong>und</strong> generierten Kontrollinformationen<br />

sicherzustellen, dass nur syntaktisch <strong>und</strong> strukturell korrekter Bytecode in der virtuellen<br />

Maschine zur Ausführung kommt. [5] Der Gr<strong>und</strong> für den Einsatz des Verifiers<br />

liegt darin, dass nicht garantiert werden kann, dass der zur Erzeugung der Klassendateien<br />

verwendete Compiler vertrauenswürdig ist, oder dass ein Angreifer den<br />

Bytecode in mühevoller Handarbeit nicht modifiziert hat. Der Verifizierer nimmt sowohl<br />

Laufzeittests (dynamische Tests) als auch Tests beim Linken (statische Tests)<br />

vor. Der Verifikationsprozess besteht insgesamt aus vier Phasen, die im Folgenden<br />

beschrieben werden: [20][32]<br />

1. In der ersten Phase überprüft der Verifier die Einhaltung gr<strong>und</strong>legender Formate.<br />

Dazu gehört, ob die Klassendatei mit der Dateikennung 0xCAFEBABE<br />

beginnt, ob alle Attribute die richtige Länge besitzen <strong>und</strong> ob die Klassendatei<br />

vollständig ist.<br />

2. In Phase 2 wird anschließend die Integrität der Klassendaten kontrolliert. Ohne<br />

detailliert Einsicht in den Bytecode zu nehmen, untersucht der Verifier<br />

insbesondere ob:<br />

• als final definierte Klassen keine Subklassen besitzen,<br />

• als final definierte Methoden nicht überschrieben werden,<br />

• jede Klasse mit Ausnahme von Object eine Vaterklasse besitzt <strong>und</strong><br />

• alle Konstantenpooleinträge korrekt sind.<br />

46


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

3. Nachdem bis hierher noch keine Ausnahmebehandlung eingreifen musste,<br />

erfolgt in der dritten Phase die wichtige aber auch sehr komplexe Daten- <strong>und</strong><br />

Kontrollflußanalyse für jede einzelne Methode. Insbesondere soll der Verifier<br />

in dieser Phase sicherstellen, dass:<br />

• die Methoden mit den geeigneten Parametern aufgerufen werden,<br />

• Feldern nur Werte zugewiesen werden, die die korrekten Typen besitzen,<br />

• Variablen vor ihrer Verwendung initialisiert worden sind <strong>und</strong><br />

• es zu keinen Stack-unter- oder -überläufen kommt.<br />

4. Da nicht alle Tests beim Linken der Klassendatei durchgeführt werden, beispielsweise<br />

können nicht alle Typkonflikte zur Linkzeit erkannt werden, erfolgt<br />

in der vierten Phase eine Analyse des Programmverhaltens zur Laufzeit.<br />

Dazu wird nacheinander jede Instruktion im Bytecode geprüft, zum Beispiel,<br />

ob auf ein Feld oder eine Methode zugegriffen werden darf. Allerdings<br />

hat diese statische Rekonstruktion des Laufzeitverhaltens ohne tatsächliche<br />

Ausführung des Codes nur eine begrenzte Aussagekraft in Bezug auf mögliche<br />

Sicherheitslücken zur Laufzeit. [20]<br />

Nach erfolgreichem Abschluss der Prüfung des Bytecodes durch den Verifier übernehmen<br />

zwei weitere Instanzen der Java-Sicherheisarchitekur die Überwachung der<br />

korrekten Ausführung des Codes: der Class Loader <strong>und</strong> der Security Manager.<br />

Class Loader Nachdem der Verifier seine Überprüfungen ohne Beanstandungen<br />

durchgeführt hat, wird der Bytecode durch den Class Loader in die virtuelle Maschine<br />

geladen. Gr<strong>und</strong>sätzlich werden beim Laden von Klassen in die Laufzeitumgebung<br />

immer erst die lokal vorliegenden Dateien herangezogen, bevor auf Code<br />

zurückgegriffen wird, der von externen Quellen wie dem Internet geladen wurde.<br />

Mit dieser Vorgehensweise soll sichergestellt werden, dass die Systemklassen der<br />

Java-Laufzeitumgebung, wie beispielsweise die zur Ein- <strong>und</strong> Ausgabe von Dateien,<br />

nicht einfach durch gleichlautende Klassen überschrieben <strong>und</strong> später ausgeführt<br />

werden können. Man spricht hier von sogenannten Class-Spoofing-Angriffen.<br />

Eine weitere wesentliche Aufgabe des Class Loaders ist die Bereitstellung <strong>und</strong> Verwaltung<br />

von Namensräumen. Jedes nicht vertrauenswürdige Applet erhält einen eigenen<br />

isolierten Namensraum <strong>und</strong> kann nur die eigenen Methoden sowie die zur<br />

Verfügung gestellten Systemmethoden nutzen. Dadurch werden Konflikte bei gleicher<br />

Namensgebung vermieden <strong>und</strong> Applets unterschiedlicher Herkunft ist es nicht<br />

möglich, zu kooperieren, um möglicherweise einen gemeinsamen Angriff durchzuführen.<br />

[5][20]<br />

Security Manager Die zur Laufzeit durchzuführenden Kontrollen fallen in das<br />

Aufgabengebiet des Security Managers. Er spielt als zentrales Element der Sicherheitsarchitektur<br />

die wichtigste Rolle zur Laufzeit <strong>und</strong> wird von der JVM<br />

bei Zugriffsversuchen auf sicherheitskritische Systemressourcen konsultiert. Seine<br />

primäre Aufgabe besteht darin, alle als potentiell gefährlich eingestuften Operationen<br />

von nicht vertrauenswürdigen Klassen zu überwachen <strong>und</strong> gegebenenfalls<br />

47


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

einzuschreiten, wenn eine Verletzung der lokalen Sicherheitspolitik vorliegt. Dies<br />

kann zum Beispiel der Fall sein beim: [20]<br />

• Lesen oder Schreiben von lokalen Dateien<br />

• Aufbau einer Netzwerkverbindung zu anderen Rechnern im Netzwerk<br />

• Manipulieren des Zustands anderer Threads<br />

• Verwenden des Druckers<br />

Der Security Manager wird automatisch von allen gängigen Browsern für die<br />

Ausführung von Applets aktiviert. Beim Start einer lokal installierten <strong>und</strong> als<br />

vertrauenswürdig eingestuften Java-Applikation tritt er jedoch im allgemeinen<br />

nicht in Aktion. Seit Java 2 (JDK Version 1.2) besteht allerdings die Möglichkeit,<br />

den Security Manager ausdrücklich beim Start einer Applikation aufzurufen, was<br />

zur Folge hat, dass sie den gleichen Restriktionen unterliegt, die auch für den<br />

fremden Code gelten. Ein solcher expliziter Aufruf erfolgt beim Start der JVM mit<br />

dem Kommandozeilenparameter -D, gefolgt vom gewünschten Security Manager<br />

(i.d.R. java.security.manager).<br />

Ist der Security Manager erst einmal aktiviert, so ist er eng mit den Java Core<br />

Classes verb<strong>und</strong>en. Jeder als sicherheitskritisch betrachtete Methodenaufruf einer<br />

Basisklasse veranlasst die Java-API 42 , mit der sogenannten check()-Methode<br />

die Berechtigung zur Ausführung dieser Operation beim Security Manager zu<br />

erfragen. Dieser antwortet mir einer SecurityException, falls die Operation<br />

gegen die Sicherheitspolitik verstößt. Ist die Operation hingegen erlaubt, wird<br />

keine Exception (dt. Ausnahme) ausgelöst. check()-Methoden existieren für<br />

alle sensiblen Bereiche auf einem System, so zum Beispiel checkRead() oder<br />

checkWrite() für den Zugriff auf das Dateisystem oder checkExec() beim<br />

Ausführen von Systemkommandos.<br />

Abbildung 12 aus [5] fasst noch einmal die beschriebenen Komponenten<br />

(grau hinterlegt) der Sicherheitsarchitektur zusammen.<br />

Sicherheitsmodell im JDK 1.0 Wie bereits erwähnt, unterlag das Sicherheitsmodell<br />

von Java in den vergangenen Jahren einem ständigen Wandel. Das ursprüngliche<br />

Modell wurde mit dem JDK 1.0 eingeführt <strong>und</strong> ist auch unter dem<br />

Namen Sandbox-Modell bekannt. Es unterscheidet ganz einfach zwischen Bytecode,<br />

der von einem entfernten Rechner als Applet geladen wird <strong>und</strong> lokalen Java-<br />

Applikationen, die gr<strong>und</strong>sätzlich als vertrauenswürdig betrachtet werden. Während<br />

der lokale Code, sprich die Applikation, das Recht hat, alle Ressourcen des Systems<br />

uneingeschränkt zu nutzen, wird das Applet in einer nur sehr eingeschränkten<br />

Rechteumgebung, der Sandbox, ausgeführt. Im Einzelnen bedeutet das für das<br />

Applet, dass ihm kein Zugriff auf Dateien des lokalen Dateisystems gewährt wird,<br />

es keine beliebigen Netzwerkverbindungen zu anderen Rechnern aufbauen kann,<br />

außer zu dem Rechner von dem es geladen wurde <strong>und</strong>, dass es ihm nicht gestattet<br />

ist, neue Prozesse oder Kommandos zu starten. [5][20]<br />

42 API: Application Programming Interface<br />

48


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 12: Komponenten der Java-Sicherheitsarchitektur [5]<br />

Sicherheitsmodell im JDK 1.1 Die beschriebenen Restriktionen in Java 1.0<br />

machten es praktisch unmöglich, sinnvolle Applets zu entwickeln. Man stelle sich<br />

beispielsweise einen einfachen Texteditor vor, der zwar dynamisch über das Internet<br />

geladen werden kann, dem es aber nicht möglich ist, auf lokale Textdateien zuzugreifen,<br />

um deren Bearbeitung durch den Anwender zu ermöglichen.<br />

Mit der im Frühling 1997 vorgestellten Nachfolgeversion 1.1 wurde die Rechtevergabe<br />

etwas flexibler. Die Welt der Applets wurde jetzt in zwei Lager aufgeteilt:<br />

vertrauenswürdige <strong>und</strong> nicht vertrauenswürdige Applets. Letztere unterliegen nach<br />

wie vor den starken Einschränkungen der Sandbox. Die als vertrauenswürdig eingestuften<br />

Applets erhalten hingegen die gleichen Rechte wie sie auch lokalen Applikationen<br />

eingeräumt werden. Ein Applet gilt dann als vertrauenswürdig, wenn<br />

es mit einer digitalen Unterschrift des Autors versehen ist <strong>und</strong> der Anwender des<br />

Applets manuell bestätigt, dass er dem Autor sein Vertrauen schenkt. Die digitale<br />

Unterschrift (Signatur) ist dabei ein Hilfsmittel, die eine zweifelsfreie Identifikation<br />

des Urhebers <strong>und</strong> die Integrität des Codes gewährleisten soll.<br />

Ebenfalls eine Neuerung im JDK 1.1 war die Einführung des jar-Kommandos. Das<br />

jar-Kommando erlaubt eine Zusammenfassung aller Klassen <strong>und</strong> Ressourcen (z.B.<br />

Bilder) eines Applets zu sogenannten Archiven mit der Dateiendung .jar. Diese an<br />

das ZIP-Format angelehnten Archivdateien können von ihrem Autor signiert <strong>und</strong><br />

mit geeigneten Web-Browsern in einer einzigen HTTP-Transaktion geladen <strong>und</strong><br />

anschließend automatisch entpackt werden.<br />

Im Gegensatz zum fremden Code, dem in Java 1.1 mehr Freiraum gewährt wird,<br />

hat sich das Sicherheitskonzept für lokal installierte Applikationen verschärft. Einen<br />

uneingeschränkten Zugriff auf die Systemressourcen erhalten die Applikationen nur<br />

noch dann, wenn sie aus einem Verzeichnis stammen, das in der Umgebungsvariable<br />

mit dem Namen CLASSPATH eingetragen ist. Die CLASSPATH-Variable enthält<br />

standardmäßig das Verzeichnis der Runtime-Klassen der JVM <strong>und</strong> kann um Ver-<br />

49


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 13: Sicherheitsmodelle in JDK1.0 <strong>und</strong> JDK1.1 [5][20]<br />

zeichnisse neu installierter Applikationen erweitert werden. Eine solche Erweiterung<br />

bedeutet allerdings einen elementaren Eingriff in die lokale Sicherheitspolitik.<br />

[5][20]<br />

Sicherheitsmodell in Java 2 Trotz der Verbesserungen im JDK 1.1 zur ersten<br />

Version bestand nach wie vor das Problem der wenig flexiblen Rechtevergabe.<br />

Besonders die Tatsache, dass signierten Applets der uneingeschränkte Zugriff<br />

auf die Systemressourcen gestattet wurde, widerspricht der Forderung nach einer<br />

Rechtevergabe nach dem Prinzip der minimalen Rechte (vergl.: Abschnitt 2.2.3).<br />

Zur Beseitigung dieser Inflexibilität wurde im Dezember 1998 die neue Version 1.2<br />

des JDK, die auch unter dem Namen Java 2 SDK, Standard Edition v1.2 bekannt<br />

ist, mit einem neuen Sicherheitsmodell eingeführt. Der wesentlichste Fortschritt<br />

des neuen Modells besteht darin, dass nunmehr eine feingranulare Berechtigungsvergabe<br />

<strong>und</strong> Kontrolle möglich ist. [5]<br />

Mit der Einführung von Java 2 wurde auch die Java Cryptographic Extension<br />

(JCE) erweitert. Die JCE ist eine Java-Bibliothek, die unter anderem Algorithmen<br />

zur Verschlüsselung, zur Generierung von Schlüsseln <strong>und</strong> Message Authentication<br />

Codes (MAC) bietet sowie eine Schlüssel- <strong>und</strong> Zertifikatsmanagemet umfasst.<br />

Das Sicherheitsmodell von Java 2 beruht auf dem Prinzip, dass jedes Subjekt, sei<br />

es lokaler oder entfernter Code, signiert oder unsigniert, einer geltenden Sicherheitspolitik<br />

unterworfen ist. Diese Politik ist nicht mehr in der Programmlogik des<br />

Security Managers verankert, sondern lässt sich vom Sicherheitsbeauftragten in<br />

der Rolle des Systemadministrators für das System oder vom Benutzer in dessen<br />

Heimatverzeichnis über ein Politik-Objekt (i.d.R. die Textdatei java.policy)<br />

festlegen, auf das der sogenannte Access Controler zugreift. Die Sicherheitspolitik<br />

(security policy) beschreibt, welche Berechtigungen (permissions) an den<br />

Bytecode vergeben werden, wobei bestimmte Informationen, wie die Quelle des<br />

Codes <strong>und</strong>/oder Signaturen, die dem Code assoziiert sind, berücksichtigt werden<br />

können. Die Quelle des Codes ist bei Applets durch die URL festgelegt, von der der<br />

50


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Code geladen wurde, <strong>und</strong> der zu einem Signaturschlüssel eines signierten Applets<br />

passende öffentliche Verifikationsschlüssel identifiziert den Signierer (i.d.R. den<br />

Autor des Applets).<br />

Die in Java 2 neu festgelegte, abstrakte Klasse java.security.Permissions dient<br />

der Vergabe von Berechtigungen. Um spezifische Rechte an Systemressourcen<br />

zu vergeben, werden von ihr Subklassen gebildet. Beispielsweise beinhaltet die<br />

Klasse java.io.FilePermission die Rechte zur Nutzung von Dateien <strong>und</strong><br />

java.net.SocketPermission die Rechte für den Zugriff auf Netzwerkdienste.<br />

Listing 1 zeigt beispielhaft den Inhalt der java.policy-Datei, in der zwei<br />

Subklassen von java.security.Permissions wiederzufinden sind.<br />

✞<br />

Listing 1: java.policy<br />

grant CodeBase "https://www.haecker-automation.com/dpac",SignedBy "Haecker"{<br />

permission java.io.FilePermission "read,write", "/temp/*";<br />

permission java.net.SocketPermission "connect","db.haecker-automation.com";<br />

};<br />

☎<br />

grant {permission java.net.SocketPermission "localhost:1024-","listen";}<br />

✝<br />

Der erste Eintrag der java.policy-Datei besagt, dass eine Klasse, deren Quelle<br />

(CodeBase) die URL https://www.haecker-automation.com/dpac ist <strong>und</strong> von<br />

”Haecker” signiert wurde, auf alle Dateien im Verzeichnis /temp/ lesend <strong>und</strong><br />

schreibend zugreifen darf. Desweiteren ist sie berechtigt, eine Socket-Verbindung<br />

zum Rechner db.haecker-automation.com aufzubauen. Der zweite <strong>und</strong> letzte<br />

Eintrag gestattet es allen Subjekten an den Portadressen des lokalen Rechners, die<br />

einen Wert größer oder gleich 1024 besitzen, (unprivilegierte Ports) zu lauschen,<br />

also ankommende Nachrichten zu empfangen. [5]<br />

Bei der Durchführung der Zugriffskontrolle wird der Security Manager in Java<br />

2 um den bereits angesprochenen Access Controller ergänzt. Aus Gründen<br />

der Abwärtskompatibilität kommt es nach wie vor zum Aufruf der check-<br />

Methoden. Diese entscheidet der Security Manager jedoch nicht mehr selber,<br />

sondern reicht sie an den Access Controller weiter. So erzeugt beispielsweise die<br />

check read(file)-Methode ein java.io.FilePermission-Objekt für diesen<br />

Aufruf:<br />

✆<br />

AccessController.checkPermission(new java.io.FilePermission(file, read))<br />

Der Access Controller konsultiert dann das Politik-Objekt <strong>und</strong> prüft, ob das<br />

auszuführende Subjekt bzw. dessen Schutzdomäne (siehe unten) die erforderlichen<br />

Berechtigungen besitzt. Sollte dies nicht der Fall sein, wird wie in den vorangegangenen<br />

Java-Versionen eine Ausnahme vom Typ SecurityException erzeugt <strong>und</strong><br />

der Programmablauf beendet.<br />

Als ein weiteres wichtiges Sicherheitskonzept führt Java 2 die Schutzdomäne<br />

(protection domain) ein. In einer Schutzdomäne ist eine Menge von Klassen<br />

zusammengefasst, wodurch alle Instanzen (Objekte) dieser Klassen die gleichen<br />

Berechtigungen erlangen. Die Laufzeitumgebung erzeugt Schutzdomänen dynamisch<br />

<strong>und</strong> fasst die Klassen, die beispielsweise die gleiche Ursprungs-URL<br />

51


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

besitzen oder mit dem gleichem Schlüssel signiert wurden, automatisch in einer<br />

Domäne zusammen. Die Berechtigungen für den Zugriff auf Systemressourcen<br />

werden dann an die Schutzdomäne vergeben. Eine domänenübergreifende Interaktion<br />

ist nur über den vertrauenswürdigen Systemcode als Vermittler oder durch<br />

eine explizite Berechtigungsvergabe der beteiligten Domänen möglich.<br />

Ein Beispiel für Schutzdomänen sind die Domänen für nicht vertrauenswürdigen<br />

Code (sie entspricht dem Prinzip der Sandbox) oder die Systemdomäne, die<br />

den gesamten JDK-Code enthält <strong>und</strong> als einzige die Berechtigung hat, auf alle<br />

Ressourcen direkt zuzugreifen. [5][20]<br />

3.3.2 Bewertung des Java-Sicherheitskonzepts<br />

Natürlich ist auch die Sicherheitsarchitektur von Java, so ausgeklügelt sie auch erscheinen<br />

mag, nicht unfehlbar. [32] stellt zum Beispiel in Kapitel 4 eine Auswahl<br />

verschiedener Java-Sicherheitslücken vor, die im Zeitraum von 1996 bis 1999 entdeckt<br />

<strong>und</strong> mittlerweile behoben wurden. Dennoch ist sich die Literatur weitestgehend<br />

darüber einig, dass die Sicheitsarchitektur in Java eine der fortschrittlichsten<br />

ist. Die Kombination aus dem Java-Sprachenkonzept <strong>und</strong> den Komponenten der<br />

Laufzeitumgebung vereint eine Vielzahl erprobter Sicherheitskonzepte. [5] nennt<br />

hier unter anderem die Trennung zwischen der Festlegung der Sicherheitsstrategie<br />

mittels Politik-Objekt <strong>und</strong> deren Realisierung über den Security Manager <strong>und</strong> Access<br />

Controller sowie die Kapselung von ausführbarem Code in Schutzdomänen.<br />

Auch das vom JCE zur Verfügung gestellte Schlüssel- <strong>und</strong> Zertifikatsmanagement<br />

gilt als wichtiges Hilfsmittel, um signierte <strong>und</strong>/oder verschlüsselte Applets zu erzeugen.<br />

Neben den Vorzügen der Java-Sicherheitsarchitektur findet man in [5] aber auch<br />

einige interessante Kritikpunkte:<br />

• Der erste Kritikpunkt beschäftigt sich mit der Vergabe von Berechtigungen<br />

auf Gr<strong>und</strong>lage der Herkunftsadresse <strong>und</strong>/oder der mit dem Urheber assoziierten<br />

Signatur. Zu beachten ist nämlich, dass Rechte nicht an einzelne Benutzer<br />

sondern an Java-Klassen vergeben werden, deren Identifizierung nur<br />

über diese beiden genannten Merkmale erfolgt. Da jedoch kein Nachweis<br />

über die Authentizität der Adresse des Quell-Rechners bzw. der zu ladenden<br />

Klasse gefordert wird, eröffnet diese die Möglichkeit für URL-Spoofing Angriffe.<br />

Ein Angreifer könnte versuchen, eine Herkunfts-URL vorzutäuschen,<br />

um so seine maskierten Klassen-Dateien in ein Zielsystem einzuschleusen,<br />

denen dann dort die Berechtigungen der maskierten Adresse eingeräumt werden.<br />

Abhilfe könnten hier stärkere Authentifizierungsverfahren oder sichere<br />

Übertragungsprotokolle (vergl.: 2.5.2) schaffen.<br />

• Jeder in den Einträgen des Politik-Objekts angegebene Alias, dessen Signatur<br />

akzeptiert wird, (im Beispiel oben ist das der Alias ”Haecker”) bezieht sich<br />

auf einen Eintrag, der in der rechnerlokalen Schlüsseldatenbank zu finden ist.<br />

In dieser Datenbank wird die Verknüpfung zwischen dem Alias des Signateurs<br />

(also des Urhebers) <strong>und</strong> dessen öffentlichen Schlüssel, der zur Verifikation<br />

benötigt wird, hergestellt. Die für die Sicherheit des lokalen Rechners<br />

52


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

verantwortlichen Benutzer müssen diese Schlüsseldatenbank selber warten<br />

<strong>und</strong> die Konsistenz, Integrität <strong>und</strong> Vertraulichkeit der Datensätze gewährleisten.<br />

• Der letzte Kritikpunkt der hier aufgegriffen werden soll, bezieht sich auf das<br />

Politik-Objekt selbst. Da es in der derzeitigen Realisierung eine Textdatei ist,<br />

unterliegt es damit den Schutzmechanismen des zugr<strong>und</strong>e liegenden Betriebssystems.<br />

Es ist leicht einzusehen, dass eine Modifikation des Politik-Objekts<br />

weitreichende Konsequenzen hat, da seine Integrität das F<strong>und</strong>ament für die<br />

Sicherheitsarchitektur bildet. Gerade offene Betriebssysteme, die nur wenig<br />

Wert auf Zugriffsschutz legen, sind hier als äußerst problematisch anzusehen.<br />

3.4 Java-Web-Start, eine Alternative zu Applets<br />

In dem nun folgenden Abschnitt soll mit Java-Web-Start (kurz JWS oder WebStart)<br />

eine konkrete Technologie vorgestellt werden, mit der die Idee des Mobilen Codes<br />

einfach <strong>und</strong> komfortabel umgesetzt werden kann.<br />

Die schon oft angesprochenen Applets bilden im Gr<strong>und</strong>e genommen das<br />

F<strong>und</strong>ament für die Java-Web-Start Technologie. Mit ihnen wurde bekanntlich<br />

das Einbinden von Java-Programmen mit graphischer Oberfläche in Webseiten<br />

ermöglicht, was maßgeblich die anfängliche Begeisterung für Java auslöste. Später<br />

erkannte man noch einen weiteren strategischen Vorteil. Diese Programme mussten<br />

nicht installiert werden, sondern wurden einfach aufgerufen <strong>und</strong> waren immer<br />

up-to-date. Das brachte die Zeit in Erinnerung, als die Anwender noch an einfachen<br />

Terminals saßen <strong>und</strong> schnell war die Idee geboren, alle benötigten Programme als<br />

Applets zu implementieren, die bei Bedarf von einem zentralen Server geladen<br />

werden. Laut [15] hatte man erkannt, dass in den Unternehmen ein Großteil der Kosten,<br />

die durch Computerarbeitsplätze entstehen, gar nicht beim eigentlichen Kauf<br />

verursacht werden, sondern erst danach. Beispielsweise durch Updates, Reparatur<br />

<strong>und</strong> Wartung, aber auch durch Probleme, die durch nicht verfügbare, fehlerhafte<br />

oder inkonsistente Programmversionen entstehen. Warum sich aber die aus dieser<br />

Idee hervorgegangenen Java Workstations nicht durchsetzen konnten, darüber<br />

lässt sich nur spekulieren. Viele Anzeichen deuten darauf hin, dass zu langsame<br />

Netzwerkverbindungen, unzulängliche Java-Implementierungen in den Bowseren<br />

aber auch eine gewisse Skepsis gegenüber der relativ neuen Programmiersprache<br />

Java zu viele Probleme verursacht hat.<br />

Ende 1999 startete Sun Microsystems noch einmal einen Versuch mit dem Produkt<br />

Sun Ray, der den sogenannten Thin Clients zum Durchbruch verhelfen sollte<br />

(vergl.: http://wwws.sun.com/hw/sunray/index.html).<br />

Mit der WebStart Technologie verfolgt Sun gewissermaßen einen ähnlichen<br />

Ansatz wie den, der oben beschrieben ist. Das Ziel von JWS ist es, die Vorteile der<br />

Applets (u.a. Installationsfreiheit), mit denen der Applikationen (u.a. Geschwindigkeit<br />

<strong>und</strong> Frexibilität) zu kombinieren. Java-Web-Start v1.0 Beta wurde erstmals<br />

im Jahr 2000 vorgestellt <strong>und</strong> ist seit Java-Version 1.4 fester Bestandteil der JRE.<br />

Die zur Zeit aktuelle WebStart-Version 1.2 wurde im Herbst 2002 freigegeben. Sie<br />

53


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

beinhaltet neben den üblichen Fehlerkorrekturen auch einige neue Funktionsmerkmale,<br />

die auch für den Sicherheitsbereich interessant sind.<br />

Die nun folgenden Ausführungen sollen einen Einblick in die Funktionsweise<br />

von WebStart geben <strong>und</strong> die eingebetteten Sicherheitsmechanismen vorstellen,<br />

mit denen man Antworten auf die oben im Zusammenhang mit mobilen Code<br />

gestellten Sicherheitsfragen finden kann.<br />

3.4.1 Warum Java-Web-Start?<br />

Warum man JWS gegenüber Applets den Vorzug geben sollte, liegt an den Nachteilen<br />

<strong>und</strong> Problemen, die Applets mit sich bringen. Hier ein paar Beispiele:[47]<br />

• Applets müssen innerhalb eines geeigneten Browsers oder Applet-Viewers<br />

gestartet werden.<br />

• Bei einem größeren Applet, dessen Download vielleicht mehrere Minuten in<br />

Anspruch nimmt, ist es sinnvoll dieses zu cachen 43 , wenn es häufiger benötigt<br />

wird. Leider ist man normalerweise der Gnade des jeweiligen Browsers ausgeliefert,<br />

wenn es um das Cachen geht.<br />

• Das ”offline” Ausführen eines Applets ist in der Regel nur über Umwege<br />

möglich, die es unter anderem erforderlich machen, dass der Anwender weiß,<br />

wo der Browser das Applet zwischengespeichert hat.<br />

• Ein weiteres Problem ist, dass man bei der Entwicklung von Applets nicht<br />

genau sagen kann, welchen Browser der Anwender benutzt <strong>und</strong> welche JVM-<br />

Version dieser unterstützen. Manche Hersteller verweigern ihrem Browser<br />

jegliche Java-Unterstützung, um beispielsweise eigene Lösungen besser vermarkten<br />

zu können, andere unterstützen Java gr<strong>und</strong>sätzlich aber nicht immer<br />

in der aktuellsten Version. Von Sun werden zwar Plug-Ins angeboten, die die<br />

jeweiligen Browser auf ein einheitliches aktuelles Niveau bringen. Eine Garantie<br />

dafür, dass der Anwender diese Plug-Ins auch installiert hat, gibt es<br />

jedoch nicht.<br />

Die anschließenden Erläuterungen sollen zeigen, dass mit JWS eine Technologie<br />

zur Verfügung steht, mit der all diese Probleme auf eine elegante Art <strong>und</strong> Weise<br />

gelöst werden können.<br />

Aus Sicht des Anwenders stellt WebStart die sehr einfache Möglichkeit dar,<br />

Java-Applikationen zu ”installieren”, zu starten <strong>und</strong> zu aktualisieren. Diese<br />

durchaus gewünschte Tatsache ergibt sich daraus, dass er zum Starten einer<br />

Applikation lediglich auf einen speziellen Link einer Webseite klicken muss.<br />

Dieser Link zeigt auf eine Deskriptordatei (JNLP-Datei), in der alle von WebStart<br />

benötigten Informationen untergebracht sind. Hat der Browser die Deskriptordatei<br />

als solche erkannt, wird von ihm Java-Web-Start aufgerufen. Daraufhin wertet<br />

WebStart die Informationen aus dem JNLP-File aus <strong>und</strong> lädt die darin beschriebene<br />

43 engl. cache: Zwischenspeicher<br />

54


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Java-Applikation via HTTP über das Netzwerk. Nachdem diese dann erfolgreich<br />

gespeichert (gecached) wurde, wird sie vom WebStart-Applikationsmanager<br />

gestartet <strong>und</strong> steht somit dem Anwender zur Verfügung. Dies alles geschieht ohne<br />

weiteres Zutun des Anwenders. Nötig ist lediglich der auslösende Klick auf den<br />

beschriebenen Link <strong>und</strong> etwas Geduld beim Download, falls die Applikation zum<br />

ersten Mal gestartet wird.<br />

Vom rein technischen Standpunkt aus betrachtet, bietet die Java-Web-Start<br />

Technogie einige Vorteile:[34]<br />

• Mit WebStart lassen sich ausschließlich Java-Applikationen verteilen, die<br />

dem Java 2 Standard entsprechen. Diese können auf einem Web Server wie<br />

beispielsweise dem Apache-Web-Server zur Verfügung gestellt werden, um<br />

sie auf verschiedene Clients zu verteilen. Dabei spielt das auf den Clients<br />

installierte Betriebssystem keine Rolle. Wichtig ist nur, dass die von der Applikation<br />

geforderte Version der JVM auf dem Client-System präsent ist.<br />

• Sind auf einem Client-System mehrere Versionen der Java 2 Plattform<br />

vorhanden, werden diese von Java-Web-Start, genauer vom WebStart-<br />

Applikationsmanager, erkannt <strong>und</strong> unterstützt. Das bedeutet, dass es möglich<br />

ist, verschiedene Applikationen auf verschiedenen virtuellen Maschinen auszuführen,<br />

wenn beispielsweise eine die Java-Version 1.4.1, die andere aber<br />

nur Version 1.3.0 verlangt. Außerdem ist WebStart in der Lage, nicht vorhandene<br />

aber benötigte Versionen der Laufzeitumgebung nachzuladen.<br />

• Schon einmal gestartete Applikationen hat WebStart automatisch zusammen<br />

mit der passenden Deskriptordatei auf dem jeweiligen lokalen Client-System<br />

gespeichert. Erfolgt nun ein erneuter Aufruf der Applikation durch den Anwender,<br />

sei es durch Klicken auf den Link der zugehörigen Webseite oder<br />

durch Aufruf im Applikationsmanager (vergl.: Abbildung 14), versucht Web-<br />

Start zuerst festzustellen, ob die Version der gespeicherten Applikation noch<br />

die aktuellste ist. Sollte dies der Fall sein, wird die Applikation gestartet. Andernfalls<br />

wird erst das verfügbare Update über das Netz geladen.<br />

Ein besonderes Feature von WebStart ist es, auch Applikationen ”offline”, also<br />

ohne bestehende Netzwerkverbindung auszuführen. Voraussetzung dafür<br />

ist allerdings, dass die Applikation den offline-Betrieb explizit erlaubt. Die<br />

Update-Funktionalität von WebStart ist im Offline-Betrieb verständlicherweise<br />

nicht verfügbar.<br />

• Neben der Möglichkeit, eine Java-Applikation über den Applikationsmanager<br />

zu starten, bietet WebStart auch die Möglichkeit, Short-Cuts auf dem Desktop<br />

<strong>und</strong>/oder im Startmenü (nur unter MS Windows) anzulegen, über die die Applikation<br />

dann ebenfalls gestartet werden kann.<br />

• Java-Web-Start nutzt das Sicherheitsmodell der Java 2 Plattform (vergl.: Abschnitt<br />

3.3.1). Anwendungen unterliegen ähnlich wie Applets den Restriktionen<br />

der Sandbox. Anwendungen, die auf alle Systemressourcen freien Zugriff<br />

wünschen, müssen signiert sein <strong>und</strong> der Anwender muss den Zugriff explizit<br />

erlauben.<br />

55


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 14: Der Java-Web-Start Applikationsmanager<br />

• Java-Web-Start ist browserunabhängig <strong>und</strong> läuft auf allen Plattformen, die<br />

von der Java 2 Standard Edition unterstützt werden.<br />

Der mit Java vertraute Leser hat vielleicht festgestellt, dass WebStart auch ein<br />

Problem löst, welches im Zusammenhang mit dem Starten von lokal installierten<br />

Applikationen auftritt. Sieht man einmal von ausführbaren jar-Archiven ab,<br />

werden Java-Applikationen in der Regel über die Kommandozeile mit dem Befehl<br />

java bzw. javaw plus Angabe der Klasse, die die main-Methode enthält, gestartet.<br />

Dies ist wohl für die Mehrzahl der Anwender, die eine graphische Benutzeroberflächen<br />

einsetzen, eine etwas befremdliche Vorgehensweise. Mit dem von<br />

WebStart gebotenen Konzept der automatischen Erzeugung von Short-Cuts können<br />

Java-Applikationen möglicherweise auch den Anwendern näher gebracht werden,<br />

die vornehmlich mit der Maus arbeiten.<br />

3.4.2 Das Java Network Launching Protokoll<br />

Das Java Network Launching Protokoll (kurz JNLP) bildet das F<strong>und</strong>ament von<br />

Java-Web-Start. Anders gesagt, JWS steht nicht auf eigenen Füßen, sondern basiert<br />

auf dem Java Network Launching Protokoll <strong>und</strong> stellt praktisch eine Referenzimplementierung<br />

für JNLP dar.<br />

In der Spezifikationsbeschreibung ([27]) definiert Sun Microsystems das Java<br />

Network Launching Protokoll, zu dem auch eine API gehört, als ein webzentriertes<br />

Protokoll zur Verteilung von Softwarekomponenten sowie als eine<br />

Anwendungsumgebung für über das Web aufgerufene Applikationen, die auf der<br />

Java 2 Technologie basieren. Ein Programm, welches die JNLP-Spezifikationen implementiert,<br />

wird als JNLP-Client bezeichnet. Die Hauptkonzepte der Spezifikation<br />

sind:[27]<br />

56


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

• Ein web-zentriertes Anwendungsmodell, in dem transparente <strong>und</strong> inkrementelle<br />

Updates genauso unterstützt werden wie das inkrementelle Nachladen<br />

von Programmteilen <strong>und</strong> das ohne Installationprozess auskommt.<br />

• Ein Protokoll, dass beschreibt, wie mit einer Applikation zu verfahren ist,<br />

die auf einem Web-Server für eine Menge von JNLP-Clients bereit gestellt<br />

werden soll. Die Schlüsselkomponente hierbei ist die Deskriptordatei.<br />

• Eine standardisierte Ausführungsumgebung für Applikationen.<br />

Das Anwendungsmodell In dem vom Java Network Launching Protokoll definierten<br />

Anwendungsmodell kann sich die Applikation, die auch als Ressource bezeichnet<br />

wird auf einem beliebigen, erreichbaren Web-Server im Netz befinden. Der<br />

Anwender kann dann selbst entscheiden, ob er das Programm laden <strong>und</strong> ausführen<br />

möchte <strong>und</strong> welche Rechte es erhalten soll. Das Anwendungsmodell lässt sich wie<br />

folgt charakterisieren:[34][27]<br />

• Kein Installationsprozess: Der JNLP-Client (z.B. WebStart) lädt auf Anforderung<br />

die Programme vom Web-Server <strong>und</strong> speichert sie im Lokalen Cache.<br />

Der Anwender wird nicht mehr nach Installationsparametern gefragt.<br />

• Inkrementeller Download: Besteht eine Applikation aus mehreren Programmteilen,<br />

so können die, die zum Start der Applikation nicht unbedingt benötigt<br />

werden erst einmal auf dem Server verbleiben. Sollten bestimmte Teile im<br />

Verlauf der Programmausführung dann doch benötigt werden, so kann sie der<br />

JNLP-Client dynamisch nachladen.<br />

• Transparente Updates: Der JNLP-Client kann die zur Zeit lokal gespeicherte<br />

Version einer Applikation periodisch mir der vergleichen, die auf dem Web-<br />

Server zum Download bereit gestellt ist. Ergibt der Vergleich, dass die Version<br />

auf dem Server aktueller ist als die lokale, so veranlasst dies den JNLP-Client,<br />

die neuere Version automatisch für den Anwender verfügbar zu machen.<br />

• Inkrementelle Updates: Genau wie einzelne Programmteile nachgeladen werden<br />

können, ist es auch möglich, diese einzeln upzudaten. Der JNLP-Client<br />

muss dann nur die Teile neu laden, die sich tatsächlich geändert haben. Das<br />

reduziert natürlich drastisch die Downloadzeiten.<br />

• Unterstützung für Offline-Ausführung: Ein JNLP-Client kann eine lokal gespeicherte<br />

Applikation auch ohne aktuell bestehende Netzwerkverbindung<br />

ausführen. Voraussetzung dafür ist aber, dass alle relevanten Teile des<br />

Programms lokal gespeichert sind <strong>und</strong> dass die Applikation die Offline-<br />

Verwendung gestattet.<br />

Die Deskriptordatei Die Deskriptordatei (JNLP-Datei) ist wohl das wichtigste<br />

Element der JNLP Technologie <strong>und</strong> steht im Mittelunkt der Protokollspezifikation.<br />

Sie ist als XML 44 -Dokument aufgebaut <strong>und</strong> enthält alle Informationen, die der<br />

44 XML: Extensible Markup Language, eine besonders für den systemunabhängigen Datenaustausch<br />

geeignete Sprache, die HTML- <strong>und</strong> SGML-Konzepte übernimmt.<br />

57


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

JNLP-Client benötigt, um eine Applikation zu laden <strong>und</strong> zu starten. Prinzipiell lässt<br />

sich die JNLP-Datei mit einer ausführbaren Anwendung vergleichen mit dem Unterschied,<br />

dass sie unabhängig von Betriebsystem <strong>und</strong> Hardware ist.[34]<br />

Abbildung 15: Allgemeiner Überblick über die Elemente einer JNLP-Datei [27]<br />

Abbildung 15 zeigt ganz allgemein, die fünf Elemente die in jeder Deskriptordatei<br />

zu finden sind. Die einzelnen Elemente stellen praktisch eine Struktur für die<br />

JNLP-Datei dar:<br />

• Das jnlp- oder Wurzel-Element beinhaltet Informationen, die die Deskriptordatei<br />

selbst spezifizieren.<br />

• Im information-Element sind meta-Informationen über die Applikation enthalten.<br />

Diese können beispielsweise während des Downloads angezeigt werden.<br />

• Das security-Element wird verwendet, um festzulegen, welche Rechte die<br />

Applikation bei der Ausführung auf dem Gastrechner benötigt.<br />

• Im resources-Element sind alle Ressourcen aufgeführt, die Teile der Applikation<br />

sind. Das können zum Beispiel Java-class-Dateien <strong>und</strong> native Bibliotheken<br />

sein.<br />

• Der letzte Teil der Deskriptordatei kann nur aus einem der vier Elemente<br />

application-desc, applet-desc, component-desc oder installer-desc bestehen.<br />

Eine JNLP-Datei mit den Elementen application-desc oder applet-desc wird<br />

als Applikations-Deskriptor bezeichnet. Enthält die Datei hingegen die Elemente<br />

component-desc oder installer-desc, so nennt man sie Erweiterungs-<br />

Deskriptor.<br />

Nach dieser allgemeinen Betrachtung der Struktur soll das Listing 2 ein konkretes<br />

Beispiel für eine JNLP-Datei geben, deren Einzelheiten anknüpfend beschrieben<br />

58


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

werden. Die beinhalteten Informationen stehen XML-typisch innerhalb bestimmter<br />

Tags 45 .<br />

✞<br />

Listing 2: JNLP-Datei [40]<br />

<br />

<br />

<br />

<br />

Demo Application<br />

My Company, Inc.<br />

<br />

Demo Application<br />

Description for myApplication.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

✝<br />

Die Attribute spec, codebase <strong>und</strong> href sind am Anfang des jnlp-Elements zu<br />

finden. spec beschreibt die der Datei zugr<strong>und</strong>eliegende Version der Spezifikation.<br />

Das + zeigt an, dass die Deskriptordatei auch für JNLP-Clients geeignet ist, die<br />

eine höhere als die angegebene Spezifikationsversion implementieren. Hinter dem<br />

Attribut codebase ist die Quelle der Applikation in Form einer URL angegeben.<br />

Diese URL dient auch gleichzeitig als Basis, wenn im weiteren Verlauf der<br />

Deskriptordatei relative URL’s angegeben werden, beispielsweise um Ressourcen<br />

zu kennzeichnen. Der Eintrag href zeigt auf die JNLP-Datei selbst, da der JNLP-<br />

Client beim Starten der Applikation die Deskriptordatei eventuell erneut liest, um<br />

sicherzustellen, dass alle Versionen noch korrekt sind.<br />

Das information-Element beinhaltet allgemeine Informationen zur Applikation.<br />

Im Tag steht der Name der Applikation <strong>und</strong> im Tag <br />

der Hersteller bzw. Anbieter. enthält die URL zur Homepage der<br />

Applikation, wo der Anwender möglicherweise weiterführende Informationen<br />

finden kann (Online-Handbuch etc.). Im Tag kann eine kurze<br />

Beschreibung der Applikation erfolgen. Das zugehörige Attribut kind legt fest, wie<br />

die Beschreibung benutzt wird:<br />

• one-line: Die Beschreibung soll in einer Zeile dargestellt werden.<br />

• short: Die Beschreibung benötigt mehr Platz als nur eine Zeile <strong>und</strong> kann<br />

über einen Absatz reichen.<br />

• tooltip: Die Beschreibung wird im Tooltip angezeigt.<br />

45 engl. Tag: Kennzeichner<br />

☎<br />

✆<br />

59


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Es kann jeweils nur ein Element der Beschreibungsart spezifiziert werden. Die<br />

Beschreibung muss mit einfachem Text erfolgen. Formatierungsfunktionen, wie sie<br />

beispielsweise HTML bietet, werden nicht unterstützt.<br />

Das Tag liefert den Speicherort einer GIF- oder JPEG-Datei, die das<br />

Icon für die Applikation enthält. Dieses Icon kann der JNLP-Client während des<br />

Starts der Applikation <strong>und</strong> im Applikationsmanager anzeigen. Darüber hinaus<br />

kann es für den Shortcut auf dem Desktop verwendet werden. Das optionale<br />

Attribut kind=’’splash’’ im Zusammenhang mit einem weiteren Icon findet<br />

dann Verwendung, wenn während des Starts der Applikation ein vom Standard<br />

abweichender Splash-Screen angezeigt werden soll.<br />

Ist das Tag vorhanden, so zeigt dies an, dass die Applikation<br />

auch ohne bestehende Netzwerkverbindung ausgeführt werden kann.<br />

Eine Besonderheit des information-Elements ist, dass es lokalisiert werden kann.<br />

Dass heißt, eine Deskriptordatei kann mehrere information-Elemente enthalten, die<br />

der JNLP-Client anhand des locale Attributs unterscheiden <strong>und</strong> verwenden kann.<br />

Innerhalb des security-Elements können die Sicherheitsanforderungen für<br />

die Applikation angegeben werden. Es kann entweder leer bleiben oder eins von<br />

zwei möglichen Tags enthalten. Ist gesetzt, so fordert die<br />

Applikation vollen Zugriff auf alle Systemressourcen des Gastrechners. Das Tag<br />

sollte eingefügt werden, wenn die<br />

Applikation die gleichen Berechtigungen wie ein J2EE-Anwendungs-Client 46<br />

benötigt. Bleibt das security-Element hingegen leer, dann führt der JNLP-Client<br />

die Applikation in der abgeschirmten Sandbox aus.<br />

Mit dem resources-Element können alle Ressourcen die zur Applikation gehören,<br />

spezifiziert werden. Dazu gehören JAR-Dateien, native Bibliotheken, erforderliche<br />

Erweiterungen, Systemeigenschaften <strong>und</strong> JDK-Versionen. Mit Hilfe der Attribute<br />

os, arch oder lokale können Ressourcen die auf bestimmte Betriebssysteme,<br />

Systemarchitekturen oder Lokalisierungen zugeschnitten sind gekennzeichnet<br />

werden. Der JNLP-Client erkennt das ihm zugr<strong>und</strong>eliegende System <strong>und</strong> ist damit<br />

in der Lage, die jeweilig passenden Ressourcen einzusetzen.<br />

Das resources-Element kann sechs verschiedene Unterelemente enthalten:<br />

• Im jar-Element wird eine JAR-Datei angegeben, die zur Applikation gehört<br />

<strong>und</strong> die Java-Klassen, aber auch Bilder oder Konfigurationsdateien enthalten<br />

kann. Das zugehörige Attribut href wird dazu benötigt, um den Speicherort<br />

der JAR-Datei zu nennen. Weitere optionale Attribute sind version,<br />

download <strong>und</strong> main. Mit version kann eine bestimmte Version der JAR-<br />

Datei spezifiziert werden, die vom JNLP-Client geladen werden soll. Diese<br />

Versionierung erfordert allerdings zusätzliche Funktionen auf Seiten des<br />

Webservers, die mit Hilfe von CGI-Scripts oder Servlets realisiert werden<br />

können. Standardmäßig werden JAR-Dateien vor dem Start der Applikation<br />

übertragen. Ist jedoch download=’’lazy’’ gesetzt, so ist dies der Hinweis<br />

46 Ein J2EE-Anwendungs-Client ist ein eigenständiges Programm, welches über die Kommandozeile<br />

oder den Desktop gestartet werden kann <strong>und</strong> typischerweise auf Enterprise JavaBean Programme<br />

eines J2EE-Anwendungs-Servers zugreift.<br />

60


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

für den JNLP-Client, dass die JAR-Datei erst dann geladen werden muss,<br />

wenn sie im Verlauf der Ausführung der Applikation tatsächlich benötigt<br />

wird. Das auf true gesetzte Attribut main zeigt dem JNLP-Client an, dass<br />

die entsprechende JAR-Datei die Hauptklasse der Applikation enthält.<br />

• Im j2se-Element kann eine bestimmte Java2-Runtime-Environment-Version<br />

angegeben werden, die zur Ausführung der Applikation benötigt wird. Sind<br />

mehrere j2se-Element mit unterschiedlichen Versionen vorhanden, so besagt<br />

dies, dass die Applikation mehrere JRE-Versionen unterstützt.<br />

• Das nativelib-Element beschreibt native Bibliotheken, die auf die gleiche<br />

Art wir JAR-Dateien geladen werden können. Nativelib Einträge sind in<br />

der Regel in resources Einträge gekapselt, da sie systemspezifisch sind.<br />

<br />

<br />

<br />

• Im property-Element können Systemeigenschaften für die Applikation<br />

definiert werden, die über die Methoden System.getProperty <strong>und</strong><br />

System.getProperties zur Verfügung stehen. Das Element besitzt die zwei<br />

Attribute name <strong>und</strong> value.<br />

<br />

• Das package-Element kann dazu verwendet werden, dem JNLP-Client mitzuteilen,<br />

welche Pakete 47 in welche JAR-Dateien eingebettet sind.<br />

• Im extension-Element kann eine Erweiterung angegeben werden, die im Zusammenhang<br />

mit der Applikation benötigt wird. Eine Erweiterung könnte<br />

beispielsweise eine Installationsroutine sein, die native Bibliotheken vor einem<br />

ersten Start der eigentlichen Applikation auf dem Gastsystem installiert.<br />

Soll die JNLP-Datei als Applikations-Deskriptor Verwendung finden, so muss sie<br />

entweder das application-desc-Element oder das applet-desc-Element enthalten.<br />

Das application-desc-Element besagt, dass über die JNLP-Datei eine Applikation<br />

gestartet wird. Es beinhaltet das Attribut main-class, um auf die Java-Klasse der<br />

Applikation zu zeigen, die die main-Methode enthält sowie das Attribut argument,<br />

mit dem Startparameter an die Applikation übergeben werden können.<br />

Ein JNLP-Client unterstützt auch das Starten von Applets. Dazu dient dann das<br />

applet-desc-Element, das alle benötigten Attribute <strong>und</strong> Parameter beinhaltet.<br />

Enthält eine JNLP-Datei das component-desc-Element oder das installer-desc-<br />

Element so wird sie als Erweiterungs-Deskriptor bezeichnet. Das componentdesc-Element<br />

wird verwendet, um allgemeine Komponenten zu repräsentieren, die<br />

von Applikationen gemeinsam genutzt werden können. Im installer-desc-Element<br />

sind solche Anwendungen näher spezifiziert, die nur einmal auf dem Gastsystem<br />

47 Pakete dienen in Java zur Organisation von Java-Klassen. Jede Klasse in Java ist Bestandteil<br />

eines Pakets.<br />

61


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

ausgeführt werden. Das geschieht genau dann, wenn die JNLP-Datei zum ersten<br />

Mal aufgerufen wird.<br />

Die JNLP-API Ein weiterer durchaus interessanter Punkt der JNLP-Spezifikation<br />

ist die JNLP-API. Sie stellt zusätzliche Dienste zur Verfügung, die es einer gestarteten<br />

Applikation ermöglichen, über den JNLP-Client mit der Systemumgebung zu<br />

interagieren. Das ist besonders dann wichtig, wenn die Applikation über gar keinen<br />

oder nur eingeschränkten Zugriff auf die Ressourcen des Gastsystems verfügt. In<br />

der JNLP-API sind die folgenden Dienste definiert:[27][34]<br />

• BasicService: Über diesen Dienst, der ähnlich dem AppletContext ist, kann<br />

die Applikation mit der Laufzeitumgebung kommunizieren <strong>und</strong> bestimmte<br />

Informationen abfragen.<br />

• DownloadService: Der DownloadService erlaubt der Applikation eine gewisse<br />

Kontrolle über die eigenen auf dem Gastrechner gespeicherten Ressourcen.<br />

Mit seiner Hilfe können beispielsweise Ressourcen nachgeladen <strong>und</strong><br />

auch lokal gelöscht werden.<br />

• FileOpenService: Der FileOpenService stellt Methoden zur Verfügung, die<br />

es erlauben, Dateien zu lesen, die sich auf einem lokalen Datenträger befinden.<br />

• FileSaveService: Das Pendant zum FileOpenService ist der FileSaveService.<br />

Mit ihm können Daten in Form von Dateien auf einem lokalen Datenträger<br />

gespeichert werden.<br />

• ClipboardService: Der ClipboardService ermöglicht einer Applikation den<br />

Zugang zur systemweiten Zwischenablage, um dort Daten zu lesen <strong>und</strong> zu<br />

schreiben.<br />

• PrintService: Über diesen Dienst können Druckaufträge an den JNLP-Client<br />

geschickt werden, der sie dann an das System weiterreicht.<br />

• PersistenceService: Der PersistenceService bietet Methoden, mit denen der<br />

jeweilige Zustand einer Applikation persistent auf dem lokalen Gastsystem<br />

gespeichert werden kann. Das dazu verwendete Verfahren ist vergleichbar mit<br />

den Cookies, die bei HTML zum Einsatz kommen. Über den PersistenceService<br />

können Applikationen vom gleichen Anbieter auch untereinander kommunizieren,<br />

dazu werden sie über ihre Herkunfts-URL identifiziert.<br />

• ExtensionInstallerService: Dieser letzte in der JNLP-API definierte Dienst<br />

steht nur solchen Applikationen zur Verfügung, die als sogenannte Extension-<br />

Installer gekennzeichnet sind. Als Extension-Installer kann man Anwendungen<br />

bezeichen, die ein Gastsystem um systemspezifische Ressourcen erweitert<br />

welche von einer anderer Applikation benötigt werden, um korrekt<br />

zu funktionieren. Über den ExtensionInstallerService kann man beispielsweise<br />

das Standard-Speicher-Verzeichnis für Erweiterungen abfragen (i.d.R.<br />

${java.home}/lib/ext) <strong>und</strong> den Anwender über den Fortschritt der Installation<br />

informieren.<br />

62


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Für den Anwendungsentwickler gestaltet sich die Einbindung dieser Dienste bei<br />

der Programmierung relativ einfach. Die Lokalisierung eines Dienstes erfolgt über<br />

die lookup-Methode der Klasse ServiceManager unter Angabe des Namens des<br />

gewünschten Dienstes. Danach können die in der JNLP-API definierten Methoden<br />

des jeweiligen Dienstes aufgerufen werden.<br />

3.4.3 Sicherheitsmechanismen <strong>und</strong> -werkzeuge<br />

Java-Web-Start unterstützt gr<strong>und</strong>sätzlich das Java 2 Sichherheitsmodell. Dass heißt<br />

alle mit WebStart gestarteten Applikationen, die als nicht vertrauenswürdig betrachtet<br />

werden, haben praktisch den selben Status wie Applets <strong>und</strong> unterliegen damit<br />

den bekannten Restriktionen der Sandbox. Da diese die Funktionalität einer Applikation<br />

jedoch deutlich beeinflussen können, bietet WebStart verschiedene Möglichkeiten,<br />

die es erlauben, einzelne Restriktionen gezielt zu umgehen oder der Applikation<br />

volle Zugriffsrechte auf alle Systemressourcen einzuräumen.<br />

Politik-Objekt Die erste Möglichkeit setzt voraus, dass der Anwender einer Applikation<br />

genau weiß, welche geschützten Systemressourcen diese benötigt <strong>und</strong> in<br />

welcher Form sie darauf zugreifen möchte. Ist ihm dies bekannt, so kann er die<br />

Rechte, die er der Applikation zubilligen möchte in das Politik-Objekt eintragen<br />

(vergl.: Abschnitt 3.3.1 - Das Java 2 Sicherheitsmodell). Wie bereits beschrieben,<br />

findet üblicherweise als Politik-Objekt die Textdatei .java.policy Verwendung<br />

die sich im Heimatverzeichnis des jeweiligen Benutzers befindet <strong>und</strong> beim Start der<br />

virtuellen Maschine gelesen wird. Die .java.policy-Datei kann vom Anwender<br />

im Gr<strong>und</strong>e mit jedem beliebigen Texteditor bearbeitet werden. Voraussetzung ist<br />

nur, dass er die von der Java-Laufzeitumgebung geforderte Syntax einhält (vergl.:<br />

Listing 1). Da man aber nicht davon ausgehen kann, dass jeder Anwender gewillt<br />

ist, sich in diese Syntax einzuarbeiten, bietet Sun mit dem Policy Tool ein Werkzeug<br />

an, welches den Anwender bei der Erstellung der eigenen Sicherheitspolitik<br />

unterstützen soll.<br />

Das Policy Tool ist ein Bestandteil der JRE. Nach dem Aufruf mit dem Kommando<br />

policytool erscheint ein graphisches Frontend, das dem Benutzer das aktuelle<br />

Regelwerk anzeigt (vergl.: Abbildung 16). Nach einem Klick auf den Button<br />

Richtlinieneintrag hinzufügen öffnet sich ein Dialogfenster, in dem die Herkunft<br />

(Code-Basis:) <strong>und</strong> der Unterzeichner (Signiert von:) der Applikation eingetragen<br />

werden können. Durch einen weiteren Klick, diesmal auf den Button Berechtigung<br />

hinzufügen <strong>und</strong> dem Eintragen der gewünschten Optionen im erscheinenden<br />

Dialog, kann das Regelwerk um eine neue Berechtigung ergänzt werden.<br />

Das Policy Tool generiert danach automatisch den syntaktisch exakten Eintrag für<br />

die .java.policy-Datei. Durch ähnliche Vorgehensweisen können Berechtigungen<br />

auch verändert oder gelöscht werden.<br />

Der Vorteil dieser expliziten Berechtigungsvergabe ist klar. Der Anwender kann<br />

einer Applikation ganz gezielt den Zugriff auf bestimmte Systemressourchen erlauben<br />

den die Restriktionen der Sandbox ohne Modifikation des Politik-Objekts sonst<br />

verhindert hätte. Die folgenden Nachteile liegen jedoch auch auf der Hand:<br />

• Der Autor einer Applikation muss den Anwendern mitteilen, welche sicher-<br />

63


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 16: Frontend des Java-Policy-Tools<br />

heitskritischen Berechtigungen diese auf dem Gastrechner benötigt <strong>und</strong> wie<br />

sich eine Zurückweisung dieser Berechtigungen auf die Funktionalität der<br />

Applikation auswirken würde.<br />

• Der Anwender muss selbst entscheiden, inwieweit er einer Applikation bzw.<br />

dessen Autor sein Vertrauen schenkt <strong>und</strong> welche Art von Zugriffen auf<br />

geschützte Systemressourcen gestattet werden. Dies setzt jedoch ein gewisses<br />

Verständnis für die Bedeutung <strong>und</strong> Wirkungsweise der unterschiedlichen<br />

Berechtigungen voraus.<br />

• Erhöht sich die Anzahl der Applikationen, die Zugriff auf geschützte Systemressourcen<br />

benötigen <strong>und</strong> über WebStart geladen <strong>und</strong> ausgeführt werden,<br />

so erhöht sich auch der Administrationsaufwand für das lokale Politik-Objekt.<br />

Der Anwender hat dafür Sorge zu tragen, dass das Politik-Objekt immer in<br />

einer aktuellen <strong>und</strong> konsistenten Form vorliegt, um keine Sicherheitslücken<br />

entstehen zu lassen.<br />

Dienste der JNLP-API Einen anderen Weg als den oben beschriebenen geht der<br />

Ansatz, bei dem der Autor einer Applikation versucht, sicherheitskritische Zugriffe<br />

auf Systemressourcen an den JNLP-Client (in diesem Fall WebStart) zu delegieren.<br />

Diese Vorgehensweise wird durch die Verwendung der in der JNLP-API definierten<br />

Dienste <strong>und</strong> durch die Tatsache möglich, dass WebStart vollen Zugriff auf alle<br />

Ressourcen des Systems besitzt. Kommt es nun durch die Applikation zu einem<br />

Zugriffsversuch auf eine geschützte Ressource, so warnt Java-Web-Start den Anwender<br />

<strong>und</strong> fragt, ob es den Zugriff gestatten soll oder nicht. WebStart öffnet dazu<br />

ein Dialogfenster, in dem die Art des Zugriffs näher beschrieben ist <strong>und</strong> der Anwender<br />

gefragt wird, ob er den Zugriff erlauben möchte. Abbildung 17 zeigt einen<br />

solchen Sicherheitshinweis.<br />

Der Vorteil dieses Ansatzes ist es, dass der Benutzer praktisch kurz vor der Verlet-<br />

64


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 17: WebStart Sicherheitshinweis<br />

zung der Sicherheitspolitik gewarnt wird <strong>und</strong> durch einen einfachen Klick auf einen<br />

Button entscheiden kann, ob er den Zugriff auf die Ressource gestatten möchte oder<br />

nicht. Nachteilig wirkt sich aus, dass noch nicht für alle Restriktionen, die die Sandbox<br />

aufgibt Dienste aus der JNPL-API zur Verfügung stehen. So ist es beispielsweise<br />

noch nicht möglich, über den JNLP-Client eine Netzwerkverbindung zu einem<br />

fremden Rechner aufzubauen. Dies ist ja bekanntlich auch eine Restriktion, die die<br />

Sandbox einer Applikation auferlegt. Ein weiterer Nachteil besteht darin, dass es<br />

zwar möglich ist, das WebStart eine einmal durch den Anwender getroffene Entscheidung<br />

bezüglich des Zugriffs auf eine lokale Ressource speichert (die Checkbox<br />

im Dialogfenster wurde aktiviert), nach der Beendigung der Applikation wird<br />

diese Entscheidung aber wieder ”vergessen”. Für den Anwender heißt dies letztendlich,<br />

dass er jedes Mal nach einem Neustart der Applikation die Zugriffserlaubnis<br />

neu erteilen oder verwehren muss, was durchaus als lästig empf<strong>und</strong>en werden kann.<br />

JNLP-Datei Die letzte hier vorgestellte Möglichkeit, einer über WebStart gestarteten<br />

Applikation mehr Freiräume auf dem Gastsystem einzuräumen, besteht<br />

darin, in der Deskriptordatei uneingeschränkten Zugriff auf alle Ressourcen des<br />

Gastrechners zu fordern. Dies kann der Entwickler einer Applikation ganz einfach<br />

durch den Tag erreichen, den er in das Security-Element der<br />

JNLP-Datei einfügen muss. Der Tag zeigt WebStart an, dass<br />

die Applikation die selben Berechtigungen wie eine lokal installierte Anwendung<br />

wünscht <strong>und</strong> damit keinen Restriktionen mehr ausgesetzt ist.<br />

Damit einem Angreifer der Versuch erschwert wird, diese Vorgehensweise auszunutzen,<br />

um ”bösartigen” Code einzuschleusen, der gänzlich ohne Restriktionen ausgeführt<br />

wird, fordert WebStart, dass alle JAR-Dateien aus denen eine Applikation<br />

besteht, vom Applikationshersteller digital signiert sind. Eine Signatur des Hashwerts<br />

einer JAR-Datei mit dem privaten Schlüssel des Applikationsherstellers versetzt<br />

WebStart in die Lage, zwei Dinge zu überprüfen:<br />

• Die Quelle der Applikation. Vor dem Start der Applikation prüft WebStart alle<br />

aus der Signatur stammenden Informationen zur Herkunft der Applikation<br />

<strong>und</strong> zeigt diese in einem Hinweisfenster an (vergl.: Abbildung 18). Zur Verifi-<br />

65


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 18: WebStart Sicherheitswarnung<br />

kation der Signatur benötigt WebStart den enthaltenen öffentlichen Schlüssel<br />

des Applikationsherstellers, der von einer vertrauenswürdigen Instanz zertifiziert<br />

sein sollte.<br />

• Die Unversehrtheit der Applikation. Durch erfolgreiche Überprüfung der digitalen<br />

Signatur ist gewährleistet, dass die JAR-Dateien der Applikation seit<br />

ihrer Signierung nicht verändert wurde. Sollte diese Überprüfung fehlschlagen,<br />

so wird die Applikation nicht gestartet.<br />

Nach erfolgreicher Überprüfung der Signatur durch WebStart kann der Anwender<br />

entscheiden, ob er dem Hersteller der Applikation vertraut oder nicht. Über den in<br />

Abbildung 18 dargestellten Hinweisdialog kann er WebStart seine Entscheidung<br />

mitteilen. Vertraut der Anwender dem Applikationshersteller so klickt er auf den<br />

”Starten”-Button <strong>und</strong> die Applikation startet mit den selben Berechtigungen wie<br />

eine lokal installierte Anwendung. Ein Klick auf den ”Beenden”-Button zeigt<br />

WebStart das Misstrauen des Anwenders an, was dazu führt, dass die Applikation<br />

nicht ausgeführt wird.<br />

Auch an dieser Stelle sei noch einmal darauf hingewiesen, dass mit einer Signatur<br />

nicht der Funktionsumfang oder die Semantik eines Programms geprüft werden<br />

kann. Es soll mit ihr vielmehr ein Ersatz für das Vertrauen geschaffen werden, das<br />

ein Händler seinen K<strong>und</strong>en dadurch bietet, dass er Software in einer geschlossenen<br />

Verpackung zum Verkauf anbietet (Unversehrtheit des Inhalts) <strong>und</strong> garantiert, dass<br />

diese Software vom Originalhersteller stammt [30].<br />

Die bis hierher gemachten Aussagen zum Thema Sicherheit in Java-Web-Start betrafen<br />

hauptsächlich den Bereich: Schutz des Gastrechners vor dem mobilen Code.<br />

In den nun folgenden Ausführungen sollen Sicherheitsmechanismen vorgestellt<br />

werden, mit denen der mobile Code selbst geschützt werden kann.<br />

Bis zur Einführung der Web-Start-Version 1.2 im Herbst 2002 war das Signieren<br />

der JAR-Dateien die einzige Möglichkeit, eine Applikation zu schützen.<br />

Da Signaturen aber nur die Integrität des Programmcodes sicherstellen können<br />

nicht aber die Vertraulichkeit, wurde der Ruf der Anwender nach Techniken<br />

laut, die es erlauben Applikationen während des Downloads zu ver-<br />

66


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

schlüsseln. Durchsucht man genau zu diesem Thema die WebStart-FAQ 48<br />

(http://java.sun.com/products/javawebstart/faq.html) so findet man<br />

eine Frage, die sich mit dem verschlüsselten Laden von JAR-Dateien beschäftigt.<br />

Die Antwort der WebStart-Entwickler darauf könnte man als etwas zweideutig<br />

auffassen. Auf der einen Seite wird darauf hingewiesen, wie wichtig ein geschützter<br />

Datenaustausch zwischen Client <strong>und</strong> Server ist. Auf der anderen betrachtet man<br />

ein verschlüsseltes Laden von JAR-Dateien nicht unbedingt als erforderlich, da<br />

diese clientseitig wieder entschlüsselt <strong>und</strong> gespeichert werden müssen, um der<br />

virtuellen Maschine den Zugriff auf die beinhalteten Klassen zu ermöglichen.<br />

Sicherlich ist diese Tatsache auch richtig, wenn man davon ausgeht, dass alle<br />

Applikationen auf frei zugänglichen Webservern zur Verfügung gestellt werden.<br />

Eine sichere Übertragung würde dann keinen Sinn machen, da sich jeder die<br />

Applikationen downloaden könnte. Ist der Zugang zum Webserver aber geschützt<br />

<strong>und</strong> nur bestimmten Personen erlaubt, so kann eine sichere Übertragung des<br />

Programmcodes eine wichtige Rolle spielen. Dies ist möglicherweise auch ein<br />

Gr<strong>und</strong>, warum die Entwickler von Java-Web-Start in Version 1.2 den Wünschen der<br />

Anwender entsprochen haben <strong>und</strong> mit der Unterstützung von HTTPS (respektive<br />

SSL) die geschützte Übertragung von JAR-Dateien erlauben.<br />

HTTP über SSL (HTTPS) Da das Hypertext Transfer Protokoll (HTTP)<br />

während der Übertragung von Daten keine Verschlüsselung unterstützt, ist es für<br />

sicherheitskritische Anwendungen ungeeignet. Diese Unsicherheit von HTTP war<br />

historisch gesehen der Gr<strong>und</strong>, warum das kryptographische Protokoll SSL (vergl.:<br />

Abschnitt 2.5.2) entwickelt wurde. SSL kann durch seine Lage zwischen TCP<br />

<strong>und</strong> einem Protokoll der Anwendungsschicht sehr gut im Zusammenspiel mit<br />

HTTP verwendet werden. Vorteilhaft ist auch, dass SSL mit dem ApplicationData-<br />

Protokoll einen Bestandteil hat, der auf das darüber liegende Protokoll (in diesem<br />

Fall HTTP) abgestimmt werden kann. Alle gängigen Web-Browser <strong>und</strong> -Server<br />

unterstützen daher nicht nur HTTP sondern liefern das darunter liegende SSL<br />

gleich mit. Wird HTTP zusammen mit SSL eingesetzt, so nennt man dieses<br />

Protokollpaar HTTPS. HTTPS verfügt über alle die Sicherheitsmerkmale, die SSL<br />

auch bietet.<br />

Will ein Anwender HTTPS einsetzen, dann muss die in den Browser eingegebene<br />

URL mit ”https” beginnen. Ist dies der Fall, dann versucht der Browser, eine<br />

SSL-Verbindung aufzubauen. Unterstützt der Webserver ebenfalls SSL, so kann<br />

die folgende Kommunikation mit SSL geschützt werden.<br />

Soll WebStart die Ressourcen einer Applikation über HTTPS laden, muss<br />

dies in der JNLP-Datei angegeben werden. Beginnt die URL hinter dem Attribut<br />

”codebase” im JNLP-Element mit ”https” so versucht WebStart eine sichere<br />

Verbindung zum Webserver aufzubauen um darüber den Download durchzuführen.<br />

Damit der Verbindungsaufbau gelingt, muss der entsprechende Webserver seinerseits<br />

ebenfalls HTTPS unterstützen.<br />

Mit der Veröffentlichung der JRE-Version 1.4.2-Beta im Frühjahr 2003 unterstützt<br />

WebStart auch das dynamische Einbinden von SSL-Webserver-Zertifikaten wie<br />

48 FAQ: Frequently Asked Questions - häufig gestellte Fragen<br />

67


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 19: WebStart HTTPS-Sicherheitswarnung<br />

man es auch von den meisten Browsern her kennt. Abbildung 19 zeigt einen Dialog<br />

in dem WebStart den Anwender fragt, ob er dem SSL-Zertifikat des Webservers<br />

vertrauen möchte. Dieser Sicherheitsdialog erscheint immer dann, wenn WebStart<br />

die zertifizierende Instanz nicht kennt bzw. als nicht vertrauenswürdig erachtet. Der<br />

Anwender kann WebStart durch einen Klick auf den Button ”Ja” bzw. ”Immer”<br />

mitteilen, dass er dem Serverzertifikat vertraut <strong>und</strong> die Ressourcen der Applikation<br />

geladen werden sollen. Ein Klick auf den ”Nein”-Button veranlasst WebStart,<br />

die Verbindung zum Webserver zu beenden. Hinter dem Button ”Mehr Details”<br />

verbirgt sich ein Fenster das mehr Informationen über das SSL-Zertifikat beinhaltet,<br />

unter anderen auch den Zertifizierungspfad.<br />

Durch den Einsatz von HTTPS bzw. SSL wird nicht nur das geschützte Laden von<br />

Ressourcen ermöglicht sondern auch die weiter oben angesprochene Forderung<br />

nach einem starken Authentifizierungsverfahren erfüllt (vergl.: Abschnitt 3.3.2).<br />

Mit den Funktionen, die SSL zur Verfügung stellt, ist es möglich, einen Nachweis<br />

über die Authentizität der Adresse des Webservers (Quell-Rechners) zu erbringen.<br />

Somit kann der Anwender sicher sein, dass er die Applikation vom ”richtigen”<br />

WebServer lädt.<br />

3.4.4 Bewertung von Java-Web-Start <strong>und</strong> Verbesserungsvorschläge<br />

Mit Java-Web-Start oder spezieller dem Java Network Launching Protokoll steht<br />

eine Technologie zur Verfügung, in der die Idee, die hinter Java-Applets steht<br />

konsequent weiterentwickelt <strong>und</strong> verbessert wurde. WebStart ermöglicht es dem<br />

Anwender, dessen Rechner an einem Netzwerk angeschlossen ist, auf einfache<br />

<strong>und</strong> bequeme Weise Java-Applikationen zu nutzen, ohne sich darum kümmern zu<br />

müssen, wie die Applikation installiert wird oder wie ein Update durchzuführen<br />

ist. In Bezug auf die Anwenderfre<strong>und</strong>lichkeit von Java-Applikationen wurde mit<br />

WebStart ein Schritt in die richtige Richtung gemacht.<br />

Für Software-Hersteller eröffnet WebStart zumindest für kleinere Anwendungen<br />

neue Wege für deren Distribution. Bei der heute jedoch weit verbreiteten<br />

68


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

DSL 49 -Technologie <strong>und</strong> Programmen, die auch in der nicht installierten Form<br />

mehrere h<strong>und</strong>ert Megabyte umfassen, ist die Download-Zeit über ein Netzwerk<br />

leider noch viel zu lang. Es wäre also vermessen, zu behaupten, dass WebStart<br />

die klassischen Distributionsmittel, wie Diskette, CD <strong>und</strong> DVD in naher Zukunft<br />

ablösen wird. Dennoch für große Netzwerke, wie beispielsweise Firmennetze, in<br />

denen möglicherweise sogar schon Gigabit-Ethernet-Technik zum Einsatz kommt,<br />

stellt WebStart mit Sicherheit eine interessante Alternative zur herkömmlichen<br />

Verteilung von Software dar. Nicht zuletzt, weil zeitaufwendige Installations<strong>und</strong><br />

Wartungsprozesse der Software auf einer Vielzahl von Einzelplatzsystemen<br />

entfallen.<br />

In Bezug auf die Benutzerakzeptanz wäre es wünschenswert, wenn Java-Web-Start<br />

oder ähnliche Ansätze ihren Weg in die Betriebssysteme finden würden, so dass<br />

diese Technologien schon nach der Installation des Betriebssystems zur Verfügung<br />

stehen. Allerdings ist das wohl in naher Zukunft nicht zu erwarten.<br />

Mit der Unterstützung von SSL in der WebStart-Version 1.2 ist zum einen<br />

ein deutlich verbesserter Schutz des mobilen Codes während der Übertragung<br />

möglich. Zum anderen kann mit Hilfe von SSL auch der Webserver authentifiziert<br />

werden. Aber auch der Schutz des Gastrechners spielt ganz allgemein in Java <strong>und</strong><br />

insbesondere bei WebStart eine wichtige Rolle.<br />

Das Java Network Launching Protokoll bietet mit der zugehörigen API praktisch<br />

ein erweitertes Sandkastenmodell. Durch die Dienste, die die API zur Verfügung<br />

stellt, können einige sicherheitskritische Zugriffe auch Ressourcen des Gastrechners<br />

durchgeführt werden, die normalerweise die Sandbox verhindern würde.<br />

Da die Zugriffe einzeln vom Anwender erlaubt werden müssen, kommt diese<br />

Vorgehensweise der Forderung nach minimalen Zugriffsrechten für Applikationen<br />

ziemlich nahe. Wünschenswert wäre nur, dass sich WebStart die Entscheidungen<br />

des Anwenders auch über einen Neustart der Applikationen hinaus merken könnte<br />

<strong>und</strong> dass die WebStart-Entwickler noch weitere Dienste zu der jetzt schon bestehenden<br />

Menge hinzufügen.<br />

Der Autor dieser Arbeit könnte sich auch vorstellen, dass die Berechtigungen, die<br />

eine Applikation auf einem Gastsystem benötigt, im security-Element der Deskriptordatei<br />

festgehalten werden. Dort kann der Entwickler, der die Anforderung seiner<br />

Applikation genau kennt, die gewünschten Berechtigungen eintragen. Listing 3<br />

zeigt beispielhaft wie die Einträge des security-Elements der Deskriptordatei<br />

aussehen könnten.<br />

49 DSL: Digital Subscriber Line<br />

69


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

✞<br />

Listing 3: Fiktives security-Element<br />

☎<br />

...<br />

<br />

<br />

<br />

<br />

<br />

...<br />

✝<br />

✆<br />

WebStart bzw. der JNLP-Client könnte das security-Element auslesen <strong>und</strong> die geforderten<br />

Berechtigungen in einem Dialogfenster, wie es in Abbildung 20 zu sehen<br />

ist, dem Anwender darstellen. Dieser kann dann vor dem Start der Applikati-<br />

Abbildung 20: Möglicher WebStart Sicherheitshinweis<br />

on entscheiden, welche Zugriffe er auf lokale Systemressourcen gestatten möchte.<br />

Durch Java-Web-Start ist danach sicherzustellen, dass die Applikation auch nur genau<br />

die als sicherheitskritisch betrachteten Berechtigungen zugebilligt bekommt,<br />

die im security-Element gefordert <strong>und</strong> vom Anwender genehmigt wurden. Sollte<br />

sich der Anwender dazu entschließen, eine oder mehrere Berechtigungen nicht zu<br />

erteilen, so müsste WebStart ihn darüber informieren, welche Konsequenzen dies<br />

für die Funktionalität der Applikation hat (vergl.: Listing 3 - deny-hint).<br />

70


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

4 Sichere Kommunikation zwischen Front- <strong>und</strong><br />

Backend<br />

Im vorangegangenen Abschnitt wurde mit Java-Web-Start eine Technologie vorgestellt,<br />

die es erlaubt, das Frontend des DPAC-Informationssystems sicher in einem<br />

Netzwerk zu verteilen. Der nun folgende Abschnitt betrifft den Bereich der Kommunikationssicherheit<br />

(vergl.: Abschnitt 2.5) <strong>und</strong> beschäftigt sich mit der Frage:<br />

Wie kann eine sichere Kommunikation zwischen Front- <strong>und</strong> Backend realisiert werden?<br />

Bevor diese Frage jedoch konkret beantwortet wird, soll zunächst die Client-<br />

/Server-Architektur des DPAC-Informationssystems kurz vorgestellt werden. Eine<br />

ausführlichere Betrachtung wird dann später im Abschnitt 5.1 vorgenommen.<br />

Wie Abbildung 21 verdeutlicht, kommuniziert das DPAC-Frontend nicht direkt mit<br />

dem Backendsystem. Vielmehr ist ein sogenannter Anwendungsserver als eine Art<br />

Vermittler zwischengeschaltet, in dem die Geschäftslogik des Systems verankert ist.<br />

Da die Kommunikation zwischen Anwendungsserver <strong>und</strong> Backendsystem in der<br />

Regel über ein privates nach ”außen” abgeschirmtes Netzwerk (Intranet) erfolgt,<br />

soll das Hauptaugenmerk dieses Abschnitts in der Sicherung der Verbindung zwischen<br />

Client (Frontend) <strong>und</strong> Anwendungsserver liegen. Gr<strong>und</strong> hierfür ist, dass zum<br />

Herstellen dieser Verbindung auch öffentliche Netzwerke genutzt werden könnten<br />

(Stichwort Außendienstmitarbeiter).<br />

Abbildung 21: Eine 3-tier-Architektur<br />

Für die Kommunikation zwischen den Clients <strong>und</strong> dem Anwendungsserver<br />

soll im DPAC-Informationssystem Java’s Remote Method Invocation (kurz RMI)<br />

zum Einsatz kommen. Diese speziell für Java-Programme konzipierte Middleware-<br />

Technologie eignet sich besonders für das DPAC-Informationssystem, da sie relativ<br />

einfach zu integrieren ist <strong>und</strong> es sich sowohl beim Anwendungsserver als auch<br />

beim Client um eine Java-Applikation handelt. Nach einer kurzen Einführung in die<br />

RMI-Technologie sollen im weiteren Verlauf dieses Abschnittes Sicherheitsmechanismen<br />

vorgestellt werden, mit denen eine RMI-Kommunikation geschützt werden<br />

kann.<br />

71


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

4.1 Java RMI<br />

4.1.1 Einführenden Erläuterungen<br />

Da eine detaillierte Beschreibung von RMI im Rahmen dieser Arbeit zu weit<br />

führen würde, soll an dieser Stelle nur eine kurze Einführung in das Thema<br />

gegeben werden.<br />

Durch Remote Method Invocation können Java-Objekte in verschiedenen virtuellen<br />

Maschinen über ganz normale Methoden-Aufrufe so miteinander kommunizieren,<br />

als wären sie in der selben virtuellen Maschine allokiert.<br />

Im Gr<strong>und</strong>e genommen, sind es immer drei Parteien, die an einer RMI-Konferenz<br />

beteiligt sind: Ein Server, ein Client <strong>und</strong> ein Verzeichnisdienst, die sogenannte<br />

Registry. Der Server bietet Dienstleistungen an, die von einem Client, der auf einer<br />

anderen virtuellen Maschine - remote - ausgeführt wird, in Anspruch genommen<br />

werden können. Eine Dienstleistung besteht aus einem Remote-Objekt, dass auf<br />

dem Server zu Hause ist <strong>und</strong> spezielle Methoden enthält, die vom Client aufgerufen<br />

werden können. Die Registry hilft dem Client bei der Suche nach einem Server<br />

<strong>und</strong> seinem Remote-Objekt. Voraussetzung hierfür ist, dass der Server vorher<br />

sein Remote-Objekt bei der Registry unter Verwendung eines Aliases angemeldet<br />

hat. Ganz allgemein dargestellt, sieht der Ablauf für den Aufruf einer entfernten<br />

Methode via RMI wie folgt aus:[48]<br />

• Der Client-Stub 50 stellt eine Verbindung mit der virtuellen Maschine her, die<br />

das entfernte Objekt enthält. Die Objektreferenz erhält der Client vom Verzeichnisdienst<br />

(Registry) unter Angabe des assozierten Namens (Alias).<br />

• Die zu übertragenden Methoden-Argumente werden verpackt (Marshalling)<br />

<strong>und</strong> per Serialisierung 51 an die entfernte VM versandt.<br />

• Der Client wartet, bis der Server die aufgerufene Methode des Remote-<br />

Objekts abgearbeitet hat <strong>und</strong> die Resultate zum Client überträgt.<br />

• Auf der Serverseite:<br />

– Die Argumente, die der Client übertragen hat, werden vom Server ausgepackt<br />

(Unmarshalling).<br />

– Der Server führt die gewünschte Methode mit den vom Client erhaltenen<br />

Argumenten aus.<br />

– Das Resultat oder eine Ausnahme wird verpackt (Marshalling) <strong>und</strong> an<br />

den aufrufenden Client per Serialisierung übertragen.<br />

50 Der Stub ist ein clientseitiger Stellvertreter für das auf dem Server befindliche Remote-Objekt.<br />

51 Unter Serialisierung wird die Fähigkeit verstanden, ein Objekt, das im Hauptspeicher der Anwendung<br />

existiert, in ein Format zu konvertieren, das es erlaubt, das Objekt in eine Datei zu schreiben<br />

oder über eine Netzwerkverbindung zu transportieren. Dabei wird natürlich auch den umgekehrten<br />

Weg eingeschlossen, also das Rekonstruieren eines in serialisierter Form vorliegenden Objekts<br />

in das interne Format der laufenden Java-Maschine.<br />

72


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

• Der Client-Stub packt den Rückgabewert - oder die auf Serverseite ausgelöste<br />

Ausnahme - aus (Unmarshalling).<br />

• Der ermittelte Wert wird an die Aufrufstelle des Clients weitergereicht.<br />

Die gesamte RMI-Netzwerk-Kommunikation zwischen Client, Server <strong>und</strong> Registry<br />

wird über Java-Sockets 52 abgewickelt. Das verwendete Protokoll ist in der Anwendungsschicht<br />

angesiedelt <strong>und</strong> trägt den Namen Java Remote Method Protocol 53<br />

(kurz JRMP).<br />

4.1.2 Sicherheit in RMI<br />

Java RMI stellt einen relativ einfachen Weg dar, um eine verteilte Java-Anwendung<br />

zu entwickeln. Aus sicherheitstechnischer Sicht weist RMI jedoch einige Probleme<br />

auf:[18]<br />

• RMI ist ein einfacher Ansatz, um eine Kommunikation zwischen Client <strong>und</strong><br />

Server zu ermöglichen. Objekte werden serialisiert <strong>und</strong> über ein Netzwerk<br />

übertragen. Dabei findet keine Verschlüsselung der Objekte statt, so dass jeder<br />

im Netzwerk die übertragenen Daten mitlesen könnte.<br />

• Es existieren im RMI weder für den Client noch für den Server entsprechende<br />

Authentifizierungsmechanismen.<br />

• Es gibt keine Zugriffskontrollmöglichkeiten für serverseitige Remote-<br />

Objekte. Somit ist es praktisch jedem (RMI-) Client erlaubt, die Remote-<br />

Objekte des Servers zu nutzen.<br />

• Durch fehlende Sicherheitskontrollen im Verzeichnisdienst Registry ist es im<br />

Gr<strong>und</strong>e jedem Aufrufer möglich, Anfragen über Remote-Objekte zu stellen.<br />

• Netzwerk- <strong>und</strong> Serverfehler lösen Ausnahmen aus. Die Anwendung, die RMI<br />

nutzt, muss darauf vorbereitet sein, diese zu verarbeiten.<br />

Mal abgesehen vom Security-Manager, der gestartet werden muss, bevor eine entfernte<br />

Klasse geladen werden kann, bietet RMI wie die obigen Ausführungen zeigen<br />

keine nennenswerten Sicherheitsmechanismen. Insbesondere ist es mit dem ”reinen”<br />

RMI nicht möglich, die Vertraulichkeit, Integrität <strong>und</strong> Authentizität der übertragenen<br />

Daten zu gewährleisten. Die Verwendung des Ausdrucks ”reines” RMI<br />

ergibt sich aus der Tatsache, dass 1999 ein Entwurf für eine Erweiterung (Java RMI<br />

Security Extension) vorgestellt wurde, welche RMI um einige Sicherheitsmechanismen<br />

ergänzt. Leider hat diese Erweiterung, mit der unter anderem das gegenseitige<br />

Autenifizieren von Client <strong>und</strong> Server sowie eine Verschlüsselung der Kommunikation<br />

unterstützt werden sollte, ihren Weg in das Java-Software-Developer-Kit noch<br />

nicht gef<strong>und</strong>en. Wie dennoch eine RMI-Kommunikation abgesichert werden kann,<br />

wird im Folgenden beschrieben.<br />

52 Ein Socket (Kommunikationsendpunkt) ist eine Schnittstelle zum Netzwerk. Er ist durch die<br />

IP-Adresse eines Rechners zusammen mit einer Portnummer eindeutig identifizierbar.<br />

53 JRMP ist ein proprietäres Protokoll für den Aufruf entfernter Methoden in einem System verteilter<br />

Java-Objekte.<br />

73


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

4.1.3 Sicherung der RMI-Kommunikation<br />

Im wesentlichen gibt es, in Bezug auf die Verwendung von Mechanismen die Java<br />

zur Verfügung stellt, zwei gr<strong>und</strong>legende Ansätze, um die Kommunikation zwischen<br />

den beteiligten RMI-Partnern zu schützen. Der erste Ansatz verfolgt die Sicherung<br />

der Kommunikation auf Anwendungsebene. Dass heißt, innerhalb der RMInutzenden<br />

Anwendungen (Client- <strong>und</strong> Serverprogramm) werden geeignete Verfahren<br />

angewandt, um die Vertraulichkeit, Integrität <strong>und</strong> Authentizität der übertragenen<br />

Daten zu gewährleisten. Die Java Cryptography Extension (kurz JCE) beispielsweise<br />

stellt solche geeigneten Verfahren zur Verfügung.<br />

JCE Mit Erscheinen des JDK 1.2 wurde eine Erweiterung für die Java Cryptography<br />

Architecture (JCA), die JCE vorgestellt. Historisch gesehen, war die Entwicklung<br />

der JCE deshalb notwendig geworden, weil restriktive Exportbestimmungen<br />

der USA die Ausfuhr gewisser kryptographischer Software untersagten. Sun entschied<br />

sich deshalb dafür, jene Klassen, die nicht von dieser Regelung betroffen<br />

sind, in der JCA <strong>und</strong> die restlichen in der JCE zusammenzufassen. [16] Mittlerweile<br />

sind diese Exportbestimmungen aber gelockert worden <strong>und</strong> die JCE ist fester<br />

Bestandteil des SDKs (ab Version 1.4). Die JCE erweitert die bereits vorhandenen<br />

Sicherheits-APIs der JCA mit den folgenden Funktionen:[38]<br />

• Symmetrische Verschlüsselung für Blockchiffren (DES, 3DES, AES 54 )<br />

• Symmetrische Verschlüsselung für Stromchiffren (RC4)<br />

• Asymmetrische Verschlüsselung (RSA)<br />

• Password Based Encryption (PBE)<br />

• Schlüsselgenerierung symmetrischer Schlüssel<br />

• Schlüsselvereinbarung (-austausch)<br />

• Message Authentication Code (MAC)<br />

• Verschlüsselung von serialisierbaren Objekten<br />

Mit Hilfe der JCE ist es also möglich, die Anwendungsdaten, die zwischen RMI-<br />

Client <strong>und</strong> -Server ausgetauscht werden zu schützen. Der Anwendungsentwickler<br />

kann dazu die oben angeführten Funktionen einsetzten. Zu bedenken ist, dass<br />

bei diesem Ansatz nur die Anwendungsdaten geschützt werden, nicht aber die<br />

Informationen die vom JRMP hinzugefügt <strong>und</strong> ausgetauscht werden.<br />

Der zweite Ansatz, eine RMI-Kommunikation zu schützen, der hier beschrieben<br />

werden soll, setzt auf die Verwendung von sicheren Übertragungsprotokollen.<br />

Aufgr<strong>und</strong> der Tatsache, dass RMI mit Sockets arbeitet <strong>und</strong> dass JRMP auf der<br />

Anwendungsebene angesiedelt ist, erscheint der Einsatz eines Protokolls wie SSL<br />

oder TLS (vergl.: Abschnitt 2.5.2) durchaus als sinnvoll <strong>und</strong> praktikabel. Um SSL<br />

in Java nutzen zu können, bietet Sun mit der Java Secure Socket Extension (kurz<br />

JSSE) eine eigens dafür konzipierte API an.<br />

54 Ab Java 2 SDK 1.4.2<br />

74


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

JSSE Die Java Secure Socket Extension wurde von Sun als Standard-API für<br />

die Verwendung von SSL bzw. TLS in Java definiert. Sie geht von der Klasse<br />

java.net.Socket aus <strong>und</strong> leitet diese ab, wodurch SSL-Sockets überall da eingesetzt<br />

werden können, wo ”normale” Sockets Verwendung finden, also auch bei<br />

RMI. Die JSSE ist aber nicht nur Standard-API sondern auch gleichzeitig eine<br />

dazu passende Referenzimplementierung von Sun, die wie die JCE in das Java<br />

2 SDK ab Version 1.4 integriert ist. Die Eigenschaften <strong>und</strong> Funktionen die<br />

die JSSE-Referenzimplementierung bietet, lassen sich mit folgenden Stichpunkten<br />

beschreiben:[39]<br />

• H<strong>und</strong>ertprozentige Java-Implementierung<br />

• Unterstützung von SSL v3<br />

• Unterstützung von TLS v1.0<br />

• Bereitstellung von Werkzeugen für das Schlüssel- <strong>und</strong> Zertifikatsmanagement<br />

• Bereitstellung der Klassen SSLSocket <strong>und</strong> SSLServerSocket mit denen der<br />

Aufbau sicherer Kanäle realisiert werden kann<br />

• Unterstützung von HTTPS<br />

• Verwaltung von SSL-Sitzungen<br />

• Unterstützung der Client-/Server-Authentifizierung, als Teil des SSL-<br />

Handshakes<br />

• Unterstützung verschiedenster kryptographischer Verfahren<br />

(vergl.: Tabelle 1)<br />

Kryptographisches Verfahren<br />

max. Schlüssellänge (Bits) a<br />

RSA (Authentifizierung) 2048<br />

RSA (Schlüsselaustausch) 2048<br />

AES b (Blockverschlüsselung) 256<br />

RC4 (Blockverschlüsselung) 128<br />

DES (Blockverschlüsselung)<br />

64 (56 effektiv)<br />

Triple DES (Blockverschlüsselung) 192 (108 effektiv)<br />

Diffie-Hellman (Schlüsselvereinbarung) 1024<br />

DSA (Authentifizierung) 1024<br />

a Die aufgeführten maximalen Schüssellängen sind die, die von der JSSE unterstützt werden.<br />

Durch die in machen Ländern geltenden Ex- <strong>und</strong> Importbeschränkungen für kryptographische Produkte<br />

kann es hier zu Veränderungen kommen.<br />

b Ab Java 2 SDK v1.4.2<br />

Tabelle 1: Unterstützte kryptographische Verfahren der JSSE<br />

75


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Alle Klassen der JSSE-Implementierung sind im Paket javax.net.ssl enthalten.<br />

Dabei zählen die Klassen SSLContext, SSLSocket, SSLSession, TrustManager<br />

<strong>und</strong> KeyManager wohl zu den wichtigsten, die benötigt werden, um eine SSL-<br />

Verbindung aufzubauen.<br />

Die Klasse SSLContext ist die Kernklasse für die JSSE-Implementierung.<br />

Sie repräsentiert eine Implementation eines Protokolls, beispielsweise SSL<br />

oder TLS <strong>und</strong> ist in der Lage, SSL-Socket-Factories 55 zu erzeugen, welche<br />

ihrerseits wiederum zur Erzeugung von SSLSockets benötigt werden. SSL-<br />

Context unterstützt das Provider-Interface, dass es Fremdanbietern (Provider)<br />

ermöglicht, ihre eigenen Implementierungen in das JSSE-System zu integrieren.<br />

Durch den Aufruf SSLContext.getInstance <strong>und</strong> der Angabe des gewünschten<br />

Protokolls sowie wahlweise des Providernamens wird ein Objekt erzeugt,<br />

welches das angegebene Protokoll implementiert. Ein anschließender Aufruf<br />

der Methode getSocketFactory bzw. getServerSocketFactory liefert ein<br />

SSLSocketFactory- bzw. SSLServerSocketFactory-Objekt, mit dem SSLSockets<br />

bzw. SSLServerSockets erzeugt werden können, über die dann ein sicherer Datenaustausch<br />

stattfinden kann. [16]<br />

Auf der Seite des Clients kommen Objekte der Klasse SSLSocket zum Einsatz, die<br />

wie bereits beschrieben von einer SSLSocketFactory erzeugt werden. Neben den<br />

typischen Funktionen, über die jedes Socket-Objekt verfügt, bietet es zusätzlich<br />

noch Möglichkeiten, um das Verhalten der SSL-Implementation zu steuern. Den<br />

SSLSocket für den Server liefert die accept()-Methode des SSLServerSocket-<br />

Objekts.<br />

Ein Objekt der Klasse SSLSession enthält die Informationen über den Sicherheits-<br />

Zustand einer Verbindung zwischen einem SSL-Client <strong>und</strong> -Server. Diese<br />

Informationen können über mehrere Verbindungen hinweg verwendet werden, um<br />

beispielsweise das SSL-Handshake-Verfahren zu verkürzen, da im SSLSession-<br />

Objekt unter anderem kryptographische Verfahren <strong>und</strong> verwendete Schlüssel von<br />

den vorangegangenen SSL-Sitzungen (Sessions) gespeichet sind <strong>und</strong> somit nicht<br />

neu ausgehandelt werden müssen. Ein SSLSession-Objekt erhält man über die<br />

Methode getSession() des entsprechenden SSLSockets.<br />

Mit Hilfe der Klasse TrustManager können die vom Kommunikationspartner<br />

gelieferten Authentifizierungsinformationen überprüft werden. Bei diesen Informationen<br />

handelt es sich zumeist um X.509 Zertifikate (vergl.: Abschnitt 2.4.5).<br />

Es können aber auch andere Verfahren eingesetzt werden. Ein Objekt der Klasse<br />

TrustManager kann mittels der TrustManagerFactory-Klasse erzeugt werden.<br />

Um sich dem Kommunikationspartner gegenüber zu authentifizieren, benötigt ein<br />

SSL-Context einen geeigneten KeyManager. Die Klasse KeyManagerFactory kann<br />

ein solches benötigtes KeyManger-Objekt erzeugen. Für jede Authentifizierungsmethode,<br />

die man verwenden möchte, bedarf es jeweils eines KeyManagers. [16]<br />

55 Eine Factory ist ein Hilfsmittel zum Erzeugen von Objekten. Sie wird verwendet, wenn das Instanzieren<br />

eines Objekts mit dem new-Operator allein nicht möglich oder sinnvoll ist - etwa weil das<br />

Objekt schwierig zu konstruieren ist oder aufwendig konfiguriert werden muss, bevor es verwendet<br />

werden kann [15].<br />

76


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Das nachfolgende Listing 4 zeigt beispielhaft wie ein SSLSocket-Objekt für<br />

eine Client-Anwendung erzeugt werden kann <strong>und</strong> verdeutlicht das Zusammenspiel<br />

der oben genannten Klassen.<br />

✞<br />

Listing 4: SSL-Client<br />

import javax.net.ssl.*;<br />

import java.security.SecureRandom;<br />

import java.security.KeyStore;<br />

import java.io.FileInputStream;<br />

☎<br />

public class SSLClient {<br />

public SSLClient(){<br />

SecureRandom secureRandom;<br />

KeyStore clientKeyStore;<br />

KeyStore serverKeyStore;<br />

TrustManagerFactory tmf;<br />

KeyManagerFactory kmf;<br />

SSLContext sslContext;<br />

SSLSocketFactory sf;<br />

SSLSocket sec_socket;<br />

char[] passphrase;<br />

/*KeyStore-Kennwort*/<br />

passphrase = "Passwort".toCharArray();<br />

/*Erzeugen ein kryptographischen Zufallszahl*/<br />

secureRandom = new SecureRandom();<br />

secureRandom.nextInt();<br />

try {<br />

/*Privaten Schluessel des SSL-Clients laden, dieser wird<br />

*spaeter zur Authentifizierung, vom SSLContext benoetigt*/<br />

clientKeyStore = KeyStore.getInstance("JKS");<br />

clientKeyStore.load(new FileInputStream("/client.private"),passphrase);<br />

/*Oeffentlichen Schluessel der SSL-Server laden um empfangene<br />

* Authentifizierungsinformationen ueberpruefen zu koennen*/<br />

serverKeyStore = KeyStore.getInstance("JKS");<br />

serverKeyStore.load(new FileInputStream("/server.public"),passphrase);<br />

/*Erzeugen einer KeyManagerFactory die den KeyManager liefert*/<br />

kmf = KeyManagerFactory.getInstance("SUNX509");<br />

kmf.init(clientKeyStore,passphrase);<br />

/*Erzeugen einer TrustManagerFactory die den TrustManager liefert*/<br />

tmf = TrustManagerFactory.getInstance("SUNX509");<br />

tmf.init(serverKeyStore);<br />

/*Erzeugung eines SSLContext-Objekts welches TLS implementiert <strong>und</strong><br />

*mit dem KeyManager,TrustManager der secureRandom inizialisiert wird*/<br />

sslContext = SSLContext.getInstance("TLS");<br />

sslContext.init(kmf.getKeyManagers(),tmf.getTrustManagers(),secureRandom);<br />

/*Der SSLContext liefert die SSLSocketFactory, die ihrerseits<br />

*den SSLSocket liefert*/<br />

sf = sslContext.getSocketFactory();<br />

sec_socket = (SSLSocket)sf.createSocket("db.haecker-automation.com", 9335);<br />

/*Ab hier kann der SSLSocket dann weiter verwendet werden<br />

.....<br />

*/<br />

} catch (Exception e) {<br />

e.printStackTrace();<br />

}<br />

}<br />

}<br />

✝<br />

✆<br />

77


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Auf der Seite des SSL-Servers gestaltet sich die Generierung eines SSL-<br />

Sockets ähnlich wie beim Client. Unterschiede bestehen lediglich darin, dass<br />

der KeyManagerFactory der private Schlüssel des Servers zur Verfügung stehen<br />

muss <strong>und</strong> dass, wenn eine Client-Authentifizerung durchgeführt werden soll<br />

(SSLServerSocket.setNeedClientAuth(true)), der TrustManagerFactory die<br />

öffentlichen Schlüssel der Clients bekannt sind. Beim Client ist es, wie Listing 4<br />

zeigt, verständlicherweise genau umgekehrt. Auch in Bezug auf die SSLSocketFactory<br />

gibt es einen Unterschied. Der Server benötigt im Gegensatz zum Client eine<br />

SSLServerSocketFactory, die ein SSLServerSocket-Objekt erzeugen kann. Den eigentlichen<br />

SSLSocket über den dann die Kommunikation mit dem Client stattfindet,<br />

liefert die accept()-Methode des SSLServerSocket-Objekts. In Listing 5 sind die<br />

Unterschiede zum Client bei der Erzeugung eines SSLSockets auf Serverseite noch<br />

einmal dargestellt.<br />

✞<br />

public class SSLServer {<br />

Listing 5: SSL-Server<br />

☎<br />

public SSLServer(){<br />

SSLServerSocketFactory ssf;<br />

SSLServerSocket sec_serv_socket;<br />

/*... Wie beim Client (vergl.: Listing 4) ...*/<br />

try {<br />

/*Privaten Schluessel des SSL-Servers laden, dieser wird<br />

*spaeter zur Authentifizierung, vom SSLContext benoetigt*/<br />

serverKeyStore = KeyStore.getInstance("JKS");<br />

serverKeyStore.load(new FileInputStream("/server.private"),passphrase);<br />

/*Oeffentliche Schluessel der SSL-Clients laden um empfangene<br />

* Authentifizierungsinformationen ueberpruefen zu koennen*/<br />

clientKeyStore = KeyStore.getInstance("JKS");<br />

clientKeyStore.load(new FileInputStream("/client.public"),passphrase);<br />

/*Erzeugen einer KeyManagerFactory die den KeyManager liefert*/<br />

kmf = KeyManagerFactory.getInstance("SUNX509");<br />

kmf.init(serverKeyStore,passphrase);<br />

/*Erzeugen einer TrustManagerFactory die den TrustManager liefert*/<br />

tmf = TrustManagerFactory.getInstance("SUNX509");<br />

tmf.init(clientKeyStore);<br />

/*... Wie beim Client (vergl.: Listing 4) ...*/<br />

/*Der SSLContext liefert die SSLServerSocketFactory, die ihrerseits<br />

*den SSLServerSocket liefert*/<br />

ssf = sslContext.getServerSocketFactory();<br />

sec_serv_socket = (SSLServerSocket)ssf.createServerSocket(9335);<br />

/*Client Authentifizierung einschalten*/<br />

sec_serv_socket.setNeedClientAuth(true);<br />

/*Warten auf einen Verbindungswunsch*/<br />

sev_socket = sec_serv_socket.accept();<br />

/*Ab hier kann der SSLSocket dann weiter verwendet werden<br />

.....<br />

*/<br />

} catch (Exception e) {<br />

e.printStackTrace();<br />

}<br />

}<br />

}<br />

✝<br />

✆<br />

78


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Die Listings 4 <strong>und</strong> 5 machen deutlich, dass sich die Java Secure Socket Extension<br />

relativ einfach einsetzen lässt. Mit der JSSE-Referenzimplementierung von Sun ist<br />

es praktisch möglich, nahezu jede Kommunikation, die über Sockets stattfindet,<br />

durch SSL bzw. TLS zu schützen.<br />

Neben der JSSE-Referenzimplementierung von Sun bieten auch andere Hersteller<br />

eigene SSL-Implementierungen für Java an. Nennenswert ist hier zum Beispiel die<br />

Implementierung iSaSiLk des Instituts für Angewandte Informationsverarbeitung<br />

<strong>und</strong> Kommunikationstechnologie (IAIK) der Technischen Universität Graz. iSaSiLk<br />

bietet gegenüber der JSSE eine ganze Menge mehr Cipher-Suites sowie Einstellungsmöglichkeiten<br />

<strong>und</strong> damit eine verbesserte Flexibilität. Weitere Informationen<br />

zur iSaSiLk <strong>und</strong> anderen kryptographischen Produkten (z.B. IAIK-JCE) findet man<br />

auf der Webseite des IAIK [12]. Von dort können auch kostenlose Evaluationskopien<br />

der Produkte bezogen werden.<br />

Für den speziellen Fall der RMI-Kommunikation zwischen DPAC-Client <strong>und</strong><br />

-Server bietet der Einsatz einer JSSE-Implementierung unter anderem die<br />

folgenden Vorteile:<br />

• Einfache Integrationsmöglichkeit Die JSSE lässt sich relativ einfach in Anwendungen<br />

integrieren die RMI nutzen. Das liegt nicht zuletzt daran, dass die<br />

RMI-Architektur so konzipiert ist, dass nie unmittelbar auf Sockets zugegriffen<br />

wird, sondern immer dann, wenn ein Socket oder ServerSocket benötigt<br />

wird, diesen eine sogenannte RMISocketFactory bereitstellt. [16] Durch die<br />

Entwicklung einer eigenen RMISocketFactory kann man, die jeweiligen Anforderungen<br />

(z.B. Sicherheit) die an den Socket bzw. ServerSocket gestellt<br />

werden berücksichtigen. Ein Beispiel für eine solche RMISocketFactory wird<br />

im Abschnitt 5.5.1 gegeben.<br />

• Zuverlässige Protokolle Mit SSL <strong>und</strong> TLS kommen kryptographische Protokolle<br />

zur Anwendung, die sich schon oft bewährt haben <strong>und</strong> als sicher gelten.<br />

• Client/Server Authentifizierung DPAC-Client <strong>und</strong> -Server können sich gegenseitig<br />

authentifizieren.<br />

• Aktualität Die JSSE-Implementierungen wie beispielsweise die von Sun<br />

oder die des IAIK wurden in den letzten Jahren ständig weiterentwickelt,<br />

angepasst <strong>und</strong> verbessert. Dies ist ein besonders wichtiger Punkt, denn nur<br />

so kann sichergestellt werden, dass neue Erkenntnisse aus der Kryptoanalyse<br />

zeitnah in ein kryptographisches Produkt wie es die JSSE ist, einfließen <strong>und</strong><br />

damit die Sicherheit erhöhen.<br />

Neben der JSSE <strong>und</strong> JCE existieren natürlich auch noch andere nicht Java-basierte<br />

Verfahren mit denen die Kommunikation zwischen Client <strong>und</strong> Server geschützt werden<br />

kann. Hier wäre beispielsweise das Virtual Private Network (VPN) (virtuelles<br />

privates Netzwerk) zu nennen, in dem unter anderem IPsec (vergl.: Abschnitt 2.5.2)<br />

zum Einsatz kommen kann. Auf die Technik der VPNs wird im Abschnitt 4.2 kurz<br />

eingegangen.<br />

79


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

4.1.4 Probleme beim Einsatz von RMI<br />

Probleme beim Einsatz von RMI treten häufig dann auf, wenn Client oder Server<br />

hinter einer Firewall betrieben werden, die keine RMI-Zugriffe (JRMP) zulässt. Eine<br />

Firewall erzeugt einen Schutzwall zwischen dem Intranet eines Unternehmens<br />

<strong>und</strong> dem rechtlichen Internet. Sie hat die Aufgabe, die Ressourcen aller Rechner<br />

innerhalb eines Unternehmens vor unberechtigten Zugriffen durch externe Benutzer<br />

oder Prozesse zu schützen <strong>und</strong> die Verwendung von Ressourcen außerhalb des<br />

Intranets durch Benutzer im Unternehmen zu steuern.<br />

Verbietet eine Firewall die Nutzung von RMI, beispielsweise durch eine Sperrung<br />

des Ports 1099, über den im allgemeinen die Kommunikation zwischen Client <strong>und</strong><br />

Verzeichnisdienst stattfindet, so kann der RMI-Client nicht auf die vom RMI-Server<br />

angebotenen Remote-Objekte zugreifen. Es gibt prinzipiell drei Möglichkeiten, das<br />

Problem zu umgehen: [10][13][18]<br />

• Die wohl einfachste Vorgehensweise ist es, die Firewall so zu konfigurieren,<br />

dass Netzwerkverbindungen zum RMI-Server erlaubt sind. Allerdings wird<br />

meist das Öffnen eines oder gar mehrerer Ports vom Sicherheitsbeauftragten<br />

einer Firma nicht unbedingt toleriert.<br />

• Ein anderer Lösungsweg nutzt die Tatsache aus, dass die meisten Firewalls<br />

Netzwerkverbindungen zulassen, bei denen der Datenaustausch mittels HTTP<br />

erfolgt. Ist dies der Fall, so ist es möglich, die JRMP-Daten über HTTP zu<br />

tunneln, um so Zugriff auf den RMI-Server zu erhalten. Dieser Zugriff kann<br />

entweder direkt oder indirekt stattfinden. Das Konzept des HTTP-Tunnels<br />

basiert auf der Einbettung einer JRMP-Nachricht in einen HTTP-Request.<br />

Wenn der RMI-Client erkennt, dass er keine direkte Verbindung zum Server<br />

herstellen kann, so generiert er eine HTTP-POST-Anfrage, in die er<br />

die JRMP-Daten einbettet <strong>und</strong> schickt diese direkt an den RMI-Server (z.B.<br />

http://rmi.server:1099/), der an einem bestimmten Port ”lauscht”. Der<br />

RMI-Server nimmt dann aus der POST-Anfrage die Daten heraus <strong>und</strong> interpretiert<br />

sie. Die Antwort des Servers wird als HTTP-Response zurück an<br />

den Client geschickt. Dieses direkte Senden der Anfrage an den Server ist<br />

allerdings nur dann möglich, wenn sich nur der Client hinter einer Firewall<br />

befindet <strong>und</strong> diese zusätzlich noch einen HTTP-Verbindungsaufbau zu einem<br />

anderen Port als den normalerweise üblichen (Port 80) gestattet. Ist dies nicht<br />

der Fall, dass heist auch der RMI-Server ist hinter einer Firewall oder die<br />

Client-Firewall lässt nur HTTP-Verbindungen zu Port 80 zu, so versucht der<br />

RMI-Client seine Anfrage über den Port 80 des Servers zu stellen. Auf Serverseite<br />

muss dann aber ein Webserver-Prozess installiert sein, der mit Hilfe<br />

eines CGI-Scripts oder Servlets die Anfrage an den RMI-Server weiterreicht<br />

(indirekter Zugriff). Der RMI-Server schickt seine Antwort zurück an den<br />

Webserver der den HTTP-Header hinzufügt <strong>und</strong> die Antwort an den anfragenden<br />

Client zurücksendet.<br />

• Die dritte Möglichkeit besteht in der Verwendung von Sockets, deren Eigenschaften<br />

auf bestimmte Bedürfnisse zugeschnitten sind. Beispielsweise ist es<br />

80


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

auf Seiten des RMI-Servers möglich, mit Hilfe von selbst definierten RMI-<br />

SocketFactories dem Socket des Remote-Objekts einen ganz bestimmten Port<br />

zuzuweisen 56 . Die Firewall müsste dann so konfiguriert werden, dass sie die<br />

RMI-Kommunikation über diesen einen Port gestattet.<br />

Aus den drei oben beschriebenen Lösungsansätzen kann der jeweiligen Situation<br />

entsprechend einer ausgewählt werden um das Problem ”Firewall” zu umgehen.<br />

Dabei muss die Nutzung eines HTTP-Tunnels nicht explizit eingerichtet werden,<br />

vielmehr ist RMI so konzipiert, dass der RMI-Client automatisch versucht, seine<br />

Anfragen via HTTP zu versenden, sollte ein ”normaler” Verbindungsaufbau zum<br />

RMI-Server nicht gelingen. Soll dieses Verhalten ausdrücklich verboten werden, so<br />

ist die Eigenschaft java.rmi.server.disableHttp auf true zu setzen. Die Nutzung<br />

eines HTTP-Tunnels bringt allerdings auch einige Nachteile mit sich. Zum<br />

einen ist ein HTTP-basiertes RMI-JRMP durch das zusätzliche Verpacken <strong>und</strong> dem<br />

eventuellen Aufruf des CGI-Skripts erheblich langsamer als das binäre Protokoll<br />

(direkte Socketverbindung). Zum anderen eröffnet sich durch den indirekten Zugriff<br />

ein nicht zu vernachlässigendes Sicherheitsloch auf Seiten des Servers, aufgr<strong>und</strong> der<br />

Tatsache, dass das CGI-Script praktisch jede Anfrage egal ob von einem RMI-Client<br />

oder nicht, weiterleitet. Die automatische Verwendung von HTTPS wird leider nicht<br />

unterstützt.<br />

4.2 Virtual Private Networks (VPNs)<br />

Wenn es darum geht Außendienstmitarbeiter, externe Geschäftspartner oder Firmenfilialen<br />

an das Intranet eines Unternehmens anzubinden, kommen immer häufiger<br />

Virtuelle Private Netzwerke zur Anwendung. VPNs wurden entwickelt, um getrennte<br />

lokale Netzwerke miteinander zu koppeln. Ihr Vorteil ist, dass sie viel kostengünstiger<br />

eingesetzt werden können als eine exklusiv angemietete Standleitung<br />

eines Telekommunikationsanbieters, da sie öffentliche Infrastrukturen, wie das Internet<br />

nutzen. Sender <strong>und</strong> Empfänger tragen gewöhnlich nur die Leitungskosten bis<br />

zu einem lokal agierenden Internet Service Provider (ISP), der sie mit dem Internet<br />

verbindet. VNPs stellen allerdings im Gegensatz zu Standleitungen keine garantierte<br />

Bandbreite zur Verfügung. Außerdem ist es in den meisten Fällen notwendig,<br />

die Daten vor unberechtigten Zugriffen zu schützen, da sie ja über ein öffentliches<br />

Netz transportiert werden. Man spricht deshalb auch oft von einem VPN-Tunnel,<br />

der zwischen zwei Kommunikationsendpunkten eingerichtet wird <strong>und</strong> durch den<br />

Nachrichten (Daten-Pakete) geschützt vor Zugriffen Dritter ausgetauscht werden<br />

(vergl.: Abbildung 22). Die Anbindung von lokalen Netzwerken oder mobilen Außendienstmitarbeitern<br />

erfolgt meist auf den Ebenen zwei (Layer-2 VPNs) oder drei<br />

(Layer-3 VPNs) des OSI-Referenzmodells. [20][25] Technologie sowie Vor- <strong>und</strong><br />

Nachteile beider Varianten werden im Folgenden besprochen.<br />

56 Im Normalfall, dass heißt ohne die Verwendung von selbst definierten RMISocketFactories,<br />

wird dem Socket des Remote-Objekts ein zufälliger, im System noch freier Port zugewiesen.<br />

81


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 22: Kommunikationspartner in einem VPN<br />

4.2.1 Layer-2 VPNs<br />

Auf der Datensicherungsschicht (Ebene zwei des OSI-Referenzmodells) hat sich<br />

das Layer 2 Tunneling Protocol (L2TP) <strong>und</strong> das Point-to-Point Tunneling Protokoll<br />

(PPTP) als Standardmechanismus für den Transport von beliebigen Netzwerkprotokollen<br />

in VPNs durchgesetzt. [20]<br />

L2TP Das nach RFC 2661 standardisierte Layer 2 Tunneling Protocol tunnelt<br />

das in der Datensicherungsschicht angesiedelte Point-to-Point Protocol (kurz PPP).<br />

Durch den Tunnel wird erreicht, dass die normalerweise am Einwahlknoten des<br />

Internet Service Providers terminierende PPP-Verbindung bis zum Übergang zwischen<br />

Internet <strong>und</strong> Unternehmensnetzwerk erweitert wird.<br />

Bietet der ISP von sich aus spezielle Mechanismen zum Aufbau einer L2TP-<br />

Verbindung an, so muss sich der mobile Außendienstmitarbeiter lediglich wie<br />

gewohnt über PPP mit seinem Modem oder seiner ISDN-Karte beim Provider<br />

einwählen. Dieser richtet ihm nach erfolgreicher Authentifizierung (z.B. über<br />

CHAP 57 ) eine L2TP-Verbindung ein. Dazu muss der ISP eine Datenbank führen,<br />

in der den mobilen Mitarbeitern die Endpunkte bzw. Zieladressen der L2TP-Tunnel<br />

(L2TP Network Server, LNS) zugeordnet werden. Der beim ISP betriebene L2TP<br />

Access Concentrator (kurz LAC) tunnelt dann die PPP-Pakete mit L2TP. Für den<br />

Transport der L2TP-Pakete zwischen LAC <strong>und</strong> LNS über das Internet bzw. IP<br />

kommt UDP als Transportprotokoll zum Einsatz. Die zum Versand vorbereiteten<br />

Pakete schickt der LAC als IP-Datagramm an den UDP-Port 1701 des LNS. Dort<br />

angekommen, werden die L2TP-Pakete wieder entpackt <strong>und</strong> die getunnelten PPP-<br />

Daten wie am Ende einer normalen PPP-Verbindung an den Protokollstack weitergereicht.<br />

In Bezug auf das Anbinden von mobilen Mitarbeitern hat die Verwendung von<br />

57 Das Challenge Handshake Authentication Protocol (vergl.: RFC1994) ist ein kryptographisches<br />

Protokoll zur Authenfizierung. Bei CHAP wird das geheime Passwort nicht im Klartext zur Gegenstelle<br />

gesandt.<br />

82


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

L2TP gegenüber einer normalerweise beim ISP endenden PPP-Verbindung mehrere<br />

Vorteile: [20]<br />

• PPP bietet einen von der Netzwerkschicht unabhängigen Transportmechanismus,<br />

so dass in den getunnelten Paketen nicht nur TCP/IP, sondern auch andere<br />

Protokolle wie IPX/SPX oder NetBEUI über die virtuelle Verbindung<br />

transportiert werden können.<br />

• Die Vergabe von IP-Adressen an den mobilen Mitarbeiter kann aus einem<br />

zentral verwalteten Pool im Unternehmen erfolgen.<br />

• Der Zugang zu Diensten im Internet kann über den zentralen Gateway des Unternehmens<br />

erfolgen, wodurch die im Unternehmen geltenden Beschränkungen<br />

<strong>und</strong> Sicherheitspolitiken eingehalten werden.<br />

• Es können weitere, vom ISP nicht angebotene Authentifzierungsmechanismen<br />

aus dem Unternehmensnetzwerk eingesetzt werden.<br />

Wird der L2TP-Tunnel vom LAC beim ISP initiiert, so sind keine besonderen technischen<br />

Voraussetzungen vom Client zu erfüllen, da heutzutage nahezu jedes Betriebssystem<br />

PPP-Verbindungen aufbauen kann. Steht hingegen beim Provider kein<br />

LAC zur Verfügung, so muss der Tunnel durch den mobilen Client selbst aufgebaut<br />

werden. Für diesen Fall muss auf den Rechner des mobilen Mitarbeiters der<br />

L2PT-Code installiert sein. Einige Betriebssysteme wie Microsoft Windows-2000<br />

oder -XP haben den L2TP-Standard bereits integriert.<br />

L2PT setzt selbst keine Authentifizierungs-, Integritäts- <strong>und</strong> Verschlüsselungsmechanismen<br />

zum Schutz der getunnelten Pakete voraus. Im RFC wird diesbezüglich<br />

auf den IPsec-Standard (vergl.: Abschnitt 2.5.2) hingewiesen. Da normale IP-<br />

Datagramme den L2TP-Tunnel umschließen, sind AH, ESP <strong>und</strong> IKE problemlos<br />

einsetzbar. Aus diesem Gr<strong>und</strong> finden bei VPN-Lösungen für mobile Außendienstmitarbeiter<br />

meist Kombinationen aus L2TP <strong>und</strong> IPsec Verwendung. [20]<br />

PPTP Das unter der Federführung Microsofts von mehreren Firmen entwickelte<br />

Point-to-Point Tunneling Protocol stellt eine Erweiterung von PPP zum Aufbau<br />

von VPN’s dar. Mit PPTP werden PPP-Pakete mit der im RFC 2784 beschriebenen<br />

Generic Routing Encapsulation (kurz GRE) gekapselt <strong>und</strong> anschließend in<br />

IP-Datagrammen zur Gegenstelle getunnelt. GRE kann weitestgehend mit TCP-<br />

Segmenten verglichen werden, da sich der Tunnelzusatz ebenfalls Sequenz- <strong>und</strong><br />

Bestätigungsnummern sowie Mechanismen zur Flußsteuerung bedient. Im Gegensatz<br />

zum L2TP kann der Aufbau eines Tunnels nicht an den ISP delegiert werden.<br />

Der bereits mit dem Internet verb<strong>und</strong>ene PPTP-Client muss eigenständig eine<br />

Punkt-zu-Punkt-Verbindung zum gewünschten PPTP-Server des Unternehmens<br />

aufbauen. Neben dem eigentlichen Tunnel benötigt PPTP zusätzlich eine separate<br />

TCP-Verbindung vom Client zum PPTP-Server über Port 1723 zur Steuerung des<br />

Tunnles (z.B. Verbindungsauf- <strong>und</strong> abbau). Ein weiterer Unterschied zu L2TP besteht<br />

darin, dass nicht beliebige Netzwerkprotokolle im PPP-Rahmen transportiert<br />

werden können, sondern sich PPTP auf IP, IPX <strong>und</strong> NetBEUI beschränkt. [20]<br />

83


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Die Authentifizierung eines PPTP-Clients beim PPTP-Server erfolgt über ein geheimes<br />

Passwort, welches nur dem Server <strong>und</strong> dem Client bekannt sein darf. Damit<br />

das Passwort nicht im Klartext zum Server gesendet werden muss, findet das Microsoft<br />

Challenge Handshake Authentication Protocol (kurz MSCHAP) Verwendung,<br />

welches an CHAP angelehnt ist. Hierbei sollte allerdings unbedingt darauf<br />

geachtet werden, dass die aktuelle Version MSCHAPv2 eingesetzt wird, da die<br />

Vorgängerversion zum Teil gravierende Sicherheitsmängel aufweist. [29][25][30]<br />

Die Verschlüsselung des Datentransfers übernimmt bei PPTP ein zusätzliches<br />

Kompressions-Modul names Microsoft Point-to-Point Encryption (kurz MPPE).<br />

MPPE bedient sich eines RC4-Algorithmus <strong>und</strong> arbeitet wahlweise mit 128 oder<br />

40 Bit langen Schlüsseln, die aus dem Authentifizierungs-Passwort abgeleitet werden.<br />

Für den Einsatz von 128 Bit langen Schlüsseln ist unter Umständen ein Update<br />

zu installieren, begründet durch frühere US-Exportbeschränkungen.<br />

Microsofts PPTP-Implementierung erfuhr schon öfter intensive Kritik durch<br />

Kryptographie-Experten. So kritisieren beispielsweise Schneier <strong>und</strong> Mudge in [29]<br />

vor allem die Verwendung von Passwörten zur Authentifizierung <strong>und</strong> Schlüsselerzeugung.<br />

[25] empfiehlt, dass diese Passwörter aus mindestens zwölf zufälligen Zeichen<br />

bestehen sollten, um eine einigermaßen akzeptable Sicherheit zu erreichen.<br />

PPTP spielt beim Aufbau von VPNs durch die weite Verbreitung von Windows-95,<br />

-98 <strong>und</strong> -ME immer noch eine wichtige Rolle. Dennoch lässt sich durch die Integration<br />

von L2TP <strong>und</strong> IPsec in Windows-2000 <strong>und</strong> -XP ein Strategiewechsel bei<br />

Microsoft erkennen. [20] Schneier kommt in seiner Analyse zu dem Schluss, dass<br />

die Verwendung von PPTP in dem Maße abnimmt, wie sich IPsec weiter durchsetzt.<br />

[25][29]<br />

4.2.2 Layer-3 VPNs<br />

Als Alternative bzw. Ergänzung zu PPTP <strong>und</strong> L2TP beim Aufbau eines VPN bietet<br />

sich auch IPsec (vergl.: Abschnitt 2.5.2) an. Mit AH, ESP <strong>und</strong> IKE stehen geeignete<br />

Mechanismen zur Verfügung, um abhörsichere Tunnel über das Internet einzurichten.<br />

Der sendende VPN-Gateway, der IPsec unterstützt, kapselt zum Beispiel<br />

die von internen Workstations empfangenen Datagramme in der chiffrierten ESP-<br />

Nutzlast (Tunnel Modus) <strong>und</strong> versieht den Klartext-IP-Header mit der Adresse der<br />

VPN-Gateways beim Empfänger. Am Zielort angekommen, werden die IP-Pakete<br />

entschlüsselt <strong>und</strong> der Absender identifiziert, bevor sie an den eigentlichen Adressaten<br />

weitergereicht werden. Falls ein solches Paket unterwegs abgefangen wird,<br />

kann einzig <strong>und</strong> allein die Adresse des VPN-Gateways ausgelesen werden. Interne<br />

IP-Adressen <strong>und</strong> die transportierten Daten sind verschlüsselt <strong>und</strong> bleiben dadurch<br />

verborgen.[20]<br />

Wie das Beispiel zeigt, kommt IPsec klassischerweise dann zum Einsatz, wenn<br />

entfernte Netzwerke sicher über das Internet verb<strong>und</strong>en werden sollen. Aufgr<strong>und</strong><br />

seiner Komplexität ist es für spontane Fernzugriffs-Szenarien nicht ganz einfach<br />

zu handhaben. Gerade in diesem Bereich haben die Entwickler von IPsec-<br />

Implementierungen (beispielsweise FreeS/WAN 58 ) in den letzten Jahren jedoch ei-<br />

58 FreeS/WAN ist eine frei erhältliche IPsec-Implementierung für Linux (vergl.: http://www.<br />

freeswan.org).<br />

84


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

niges verbessert. [25]<br />

4.2.3 VPNs <strong>und</strong> das DPAC-Informationssystem<br />

Virtuelle Private Netzwerke bieten eine ganze Reihe von Vorteilen, die durchaus<br />

auch für das DPAC-Informationssystem von Interesse sind. So können insbesondere<br />

Außendienstmitarbeiter, denen in der Regel ein eigener mobiler Rechner zur<br />

Verfügung steht, eine gesicherte Verbindung zum firmeneigenen Intranet <strong>und</strong> damit<br />

auch zum DPAC-System aufbauen. Nach erfolgreichem Verbindungsaufbau kann<br />

der mobile Mitarbeiter dann nicht nur das Angebot des DPAC-Informationssystems<br />

nutzen, sondern auch weitere Dienste, die nur im Intranet verfügbar sind. Außerdem<br />

kann der Authentifizierungsmechanismus, den der jeweilige VPN-Ansatz anbietet,<br />

zusätzlich zu dem angewandt werden, der im DPAC-System genutzt wird.<br />

Einziges Mako dieser VPN-basierten Zugriffslösung ist, dass eine gewisse Infrastruktur<br />

zur Verfügung stehen muss, um mit VPNs arbeiten zu können. So muss<br />

auf Seiten des firmeneigenen Intranets ein geeigneter VPN-Gateway eingerichtet<br />

werden, über den die gesicherte Kommunikation stattfindet (vergl.: Abbildung 22).<br />

Diese Aufgabe kann entweder ein eigenständiger Rechner oder eine in den meisten<br />

Firmen schon vorhandene Firewall übernehmen, die mit zusätzlicher VPN-<br />

Funktionalität ausgestattet ist. Wie man beispielsweise einen IPsec-Gateway relativ<br />

einfach <strong>und</strong> kostengünstig einrichten kann, wird in [26] sehr anschaulich erläutert.<br />

Aber nicht nur auf der Seite des Unternehmensnetzwerkes sind Maßnahmen zu<br />

treffen, um den Einsatz von VPNs zu ermöglichen. Auch auf den Clientrechnern<br />

muss eine geeignete VPN-Software installiert sein. Zwar haben die meisten<br />

heutzutage verfügbaren Betriebssysteme bereits VPN-Funktionalitäten von Hause<br />

aus integriert. Diese müssen aber in der Regel vor ihrer Verwendung konfiguriert<br />

<strong>und</strong> an spezielle Bedingungen angepasst werden. Für den Außendienstmitarbeiter<br />

mit eigenem mobilen Rechner stellt diese Tatsache sicher kein unüberwindliches<br />

Problem dar. Der Rechner wird einmal vom zuständigen Systemadministrator<br />

der Firma konfiguriert <strong>und</strong> sollte dann einsatzbereit sein. Von K<strong>und</strong>en,<br />

Lieferanten oder Geschäftspartnern der Firma Häcker-Automation, die das DPAC-<br />

Informationssystem nutzen wollen, kann man jedoch nicht verlangen, dass die notwendige<br />

Software <strong>und</strong> das Know How zur Installation <strong>und</strong> Konfiguration eines<br />

VPN-Clients vorhanden ist. Es würde auch wenig Sinn machen, ein DPAC-Frontend<br />

anzubieten, das sich praktisch ohne Installation sehr benutzerfre<strong>und</strong>lich einsetzen<br />

lässt <strong>und</strong> dann die Einrichtung einer VPN-Verbindung zum firmeneigenen Gateway<br />

zu verlangen, die möglicherweise erst aufwendig konfiguriert werden muss.<br />

Außerdem ist es sicherlich nur in den seltensten Fällen erwünscht, dass K<strong>und</strong>en,<br />

Lieferanten oder Geschäftspartner Zugriff auf das Intranet der Firma erhalten.<br />

Der Einsatz eines Virtuellen Privaten Netzwerkes im Zusammenhang mit dem<br />

DPAC-Informationssystem bietet sich also dann an, wenn es darum geht, die Rechner<br />

von Außendienstmitarbeitern in das Intranet einzubinden. Für K<strong>und</strong>en, Lieferanten<br />

oder Geschäftspartner ist der Einsatz von VPNs möglicherweise mit einem<br />

zu hohen Konfigurationsaufand verb<strong>und</strong>en.<br />

85


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

5 Das DPAC-Informationssystem<br />

In diesem letzten Abschnitt der Arbeit sollen die bis hierher getroffenen Aussagen<br />

<strong>und</strong> erarbeiteten Ergebnisse aus den Bereichen Gr<strong>und</strong>lagen, Mobiler Code<br />

<strong>und</strong> Sichere Kommunikation in einem Konzept zur sicheren Integration des<br />

DPAC-Backendsystems zusammenfließen sowie der hieraus entstandene DPAC-<br />

Prototyp vorgestellt werden. Eine Gr<strong>und</strong>lage für die Entwicklung dieses Konzeptes<br />

bilden die in Abschnitt 2.6 bereits vorgestellten Anforderungen an das DPAC-<br />

Informationssystem, die sich wie folgt für das Integartionskonzept konkretisieren<br />

lassen:<br />

1. Die DPAC-Client-Anwendung (kurz DPAC-Client oder DPAC-Frontend) soll<br />

unabhängig von der jeweils beim Anwender eingesetzten Plattform betrieben<br />

werden können.<br />

2. Die DPAC-Client-Anwendung soll an einer zentralen Stelle (Server)<br />

verfügbar gemacht werden, sodass sie berechtigte Nutzer praktisch ”on demand<br />

59 ” über das Intra- bzw. Internet auf den jeweiligen Arbeitsplatzrechner<br />

laden können.<br />

3. Nach dem Laden kann die DPAC-Client-Anwendung ohne weitere Installationsmaßnahmen<br />

betrieben werden.<br />

4. Notwendige Updates an der Client-Software sollen automatisch erfolgen.<br />

5. Die DPAC-Client-Software ist vor Manipulationen <strong>und</strong> Verlust der Vertraulichkeit<br />

gegenüber Dritten während des Transports über möglicherweise<br />

öffentliche Netze zu schützen. Ebenso ist der Schutz der Client-Software an<br />

der Quelle (Server) sicherzustellen.<br />

6. Die Kommunikation zwischen DPAC-Client <strong>und</strong> -Backendsystem ist so abzusichern,<br />

dass zu jedem Zeitpunkt die Vertraulichkeit, die Integrität <strong>und</strong> die<br />

Authentizität der übertragenen Daten gewährleistet ist.<br />

7. Berechtigte Benutzer des DPAC-Informationssystems, die sich am System<br />

eindeutig identifiziert <strong>und</strong> authentifiziert haben, erhalten auf Gr<strong>und</strong>lage ihrer<br />

Rolle (Außendienstmitarbeiter, K<strong>und</strong>e, Geschäftspartner, Lieferant, usw.)<br />

bestimmte Berechtigungen im System.<br />

Unter Einbeziehung dieser Anforderungen soll im weiteren ein Konzept entwickelt<br />

werden, das als ein F<strong>und</strong>ament verstanden werden kann, auf dem sich das DPAC-<br />

System in Zukunft weiter ausbauen lässt. Außerdem soll an dieser Stelle die Arbeitsweise<br />

des auf dem Konzept basierenden DPAC-Prototypen erläutert werden.<br />

In ihm finden die in den vorangegangenen Abschnitten ausschließlich theoretisch<br />

betrachteten Techniken <strong>und</strong> Mechanismen eine konkrete Anwendung.<br />

Ein weiteres Ziel dieses Teils der Arbeit ist es, auf das Zusammenspiel der einzelnen<br />

Teile des DPAC-Informationssystems (DPAC-Client, DPAC-Anwendungsserver<br />

<strong>und</strong> Datenbank) näher einzugehen.<br />

59 engl. on demand: auf Verlangen / auf Wunsch<br />

86


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

5.1 Entwicklungs- <strong>und</strong> Testumgebung<br />

Für die Entwicklung des DPAC-Prototypen stellte die Firma Häcker-Automation<br />

Schwarzhausen eine eigens dafür erworbene Entwicklungs- <strong>und</strong> Testumgebung zur<br />

Verfügung, die aus den folgenden Komponenten bestand:<br />

• einem Entwicklungs- <strong>und</strong> Testrechner AMD 1800 mit dem Betriebssystem<br />

MS Windows 2000<br />

• einem Industrie-PC (Pentium III 800) mit dem Betriebssystem Linux (redhat-<br />

Distribution v7.1) für den Einsatz als Web-, Anwendungs <strong>und</strong> Datenbank-<br />

Server<br />

• einem Hardlock Evaluation-Kit der Firma Aladdin<br />

• einer Umgebung für die Entwicklung leistungsfähiger Java -Anwendungen –<br />

Borland JBuilder 6 Professionell<br />

• einer relationalen Datenbank – Borland InterBase 6.1<br />

• einem Webserver (v1.3) der Apache Software Fo<strong>und</strong>ation<br />

• dem J2SE SDK von Sun Microsystems Version 1.4.0 später v1.4.1 <strong>und</strong><br />

v1.4.2-Beta<br />

5.2 Architektur<br />

Wie schon im Abschnitt 4 kurz angesprochen, ist die Client-/Server- Architektur des<br />

DPAC-Informationssystems dreistufig (3-tier architecture). Dass heißt, das DPAC-<br />

Frontend, welches auf dem Client-Rechner des Anwenders zum Einsatz kommt,<br />

kommuniziert nicht direkt mit dem Backendsystem, sondern mit einem Anwendungsserver,<br />

der als eine Art Zwischenschicht fungiert. Die drei Stufen werden in<br />

Abbildung 23 illustriert <strong>und</strong> können wie folgt beschrieben werden:<br />

• In der ersten Stufe ist der DPAC-Client (Frontend) angesiedelt. Er kommuniziert<br />

über eine Middleware mit dem Anwendungsserver.<br />

• Der Anwendungsserver in der zweiten bzw. mittleren Stufe stellt die<br />

Geschäftslogik für den DPAC-Client bereit. Die Schnittstellen zum Client bestehen<br />

aus einer Menge von Anwendungsdiensten. In Richtung des Backends<br />

kommuniziert der Anwendungsserver über ein proprietäres Protokoll, das<br />

vom Hersteller des Backendsystems spezifiziert ist.<br />

• Die Datenbestände für den Anwendungsserver werden in der dritten Stufe<br />

vom Backend des DPAC-Informationssystems gehalten. Als Backend kommt<br />

die InterBase-Datenbank von Borland zum Einsatz.<br />

Die Gründe für die Wahl einer solchen Architektur ergeben sich unter anderem<br />

aus den Punkten 2,6 <strong>und</strong> 7 des Anforderungskataloges (siehe oben). Die 3-tier-<br />

Architektur hat im Gegensatz zu einer 2-tier-Architektur, bei der der Client direkt<br />

87


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 23: 3-tier-Architektur des DPAC-Informationssystems<br />

mit dem Backend über ein proprietäres Protokoll kommuniziert, beispielsweise den<br />

Vorteil, dass die Anwendungsdienste in der mittleren Stufe bereit gestellt werden<br />

<strong>und</strong> so der Client einfach gehalten werden kann. In ihm ist praktisch nur noch<br />

die Präsentationslogik realisiert, wodurch eine einfachere Wartung <strong>und</strong> Verteilung<br />

der Software erreicht wird. Der DPAC-Client ist somit als sogenannter ”Thin<br />

Client” ausgelegt, was in Bezug auf die Verteilung in einem Netzwerk (Punkt 2 des<br />

Anforderungskataloges) besonders dann wichtig ist, wenn nur geringe Bandbreiten<br />

für den Download vom Server zur Verfügung stehen. Ein weiterer Vorteil der 3-tier-<br />

Architektur ergibt sich daraus, dass für die Kommunikation zwischen Client <strong>und</strong><br />

Anwendungsserver eine Vielzahl von Protokollen zur Verfügung stehen. Aus dieser<br />

Menge von Protokollen kann das für die Situation am besten geeignete ausgewählt<br />

werden <strong>und</strong> man ist somit an dieser Stelle nicht auf das herstellerspezifische<br />

Protokoll des Backendsystems angewiesen. Insbesondere ist es dadurch möglich,<br />

die Kommunikation, wie im Punkt 6 des Anforderungskataloges vorgegeben,<br />

verschlüsselt stattfinden zu lassen.<br />

Durch den Einsatz eines Anwendungsservers ist es desweiteren auch möglich,<br />

spezielle Mechanismen zur Nutzerauthentifikation zu integrieren, die unabhängig<br />

von denen des Backendsystems sind (Punkt 7 des Anforderungskataloges).<br />

Wie Abbildung 23 zeigt, gibt es prinzipiell zwei Verbindungsarten, die geschützt<br />

werden müssen. Auf der einen Seite die Verbindung zwischen dem jeweiligen Client<br />

<strong>und</strong> dem Anwendungsserver, auf der anderen die zwischen Anwendungsserver<br />

<strong>und</strong> Datenbankserver. Der Schutz der Kommunikationsverbindungen zwischen<br />

Anwendungs- <strong>und</strong> Datenbankserver wird im allgemeinen dadurch gewährleistet,<br />

dass beide über ein Rechnernetzwerk verb<strong>und</strong>en sind, das von ”außerhalb” nicht<br />

erreichbar ist (firmeneigenes Intranet). Desweiteren sollten sich beide Server<br />

in einem speziell abgeschirmten Raum befinden, zu dem nur bestimmte vertrauenswürdige<br />

Personen Zutritt haben (bauliche Schutzmaßnahmen). Da die<br />

88


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Kommunikation zwischen einem DPAC-Client <strong>und</strong> dem Anwendungsserver nicht<br />

nur über das firmeneigene Intranet, sondern auch über das öffentliche Internet<br />

(Stichwort: Außendienstmitarbeiter) erfolgen kann, gestaltet sich der Schutz dieser<br />

Kommunikation vor etwaigen Angriffen etwas aufwendiger. Ziel muss es sein,<br />

dass zu jedem Zeitpunkt die Vertraulichkeit, die Integrität <strong>und</strong> die Authentizität der<br />

übertragenen Daten gewährleistet ist.<br />

Ein weiterer, ebenfalls wichtiger Punkt ist die Absicherung des Anwendungsservers,<br />

da dieser mit seiner Anbindung an ein öffentliches Kommunikationsnetzwerk<br />

praktisch die Schnittstelle zur ”Außenwelt” darstellt <strong>und</strong> damit den verschiedensten<br />

Bedrohungen (vergl.: Abschnitt 2.3) ausgesetzt ist. Zum Schutz des Anwendungsservers<br />

sollten die Sicherheitsdienste des dort installierten Betriebssystems<br />

verwendet werden.<br />

5.3 Das DPAC-Frontend<br />

Die graphische Client-Anwendung, sprich das Frontend des DPAC-<br />

Informationssystems, ist eine Java-Applikation <strong>und</strong> kann somit wie unter<br />

Punkt 1 der Anforderungen beschrieben, praktisch unabhängig von der zu Gr<strong>und</strong>e<br />

liegenden Plattform (Hardware, Betriebssystem usw.) eingesetzt werden. Einzige<br />

Voraussetzung ist, dass für die Ausführung auf dem Client-Rechner eine geeignete<br />

Java-Laufzeitumgebung (JRE) zur Verfügung steht.<br />

Die primäre Aufgabe des zur Zeit existierenden Frontend-Prototypen besteht darin,<br />

die im DPAC-System gehaltenen Daten über den Anwendungsserver zu beziehen,<br />

graphisch aufzubereiten <strong>und</strong> berechtigten Benutzer darzustellen. Desweiteren bietet<br />

er benutzerfre<strong>und</strong>liche Mechanismen an, mit denen neue Daten hinzugefügt oder<br />

bestehende verändert werden können. Abbildung 24 zeigt, wie sich das Frontend<br />

für den Benutzer darstellt, wenn dieser den Bereich Kontaktverwaltung gewählt<br />

hat.<br />

Die benötigten Daten bezieht die Client-Anwendung über Dienste, die vom DPAC-<br />

Anwendungssever zur Verfügung gestellt werden, sodass clientseitig praktisch nur<br />

die sogenannte Präsentationslogik implementiert sein muss (vergl.: Abschnitt 5.2).<br />

Die Kommunikation zwischen DPAC-Client <strong>und</strong> -Server erfolgt mittels Java-RMI.<br />

Da aber die RMI-Technologie von Hause aus keine Mechanismen zur Sicherung<br />

der Kommunikation zwischen Client <strong>und</strong> Server bietet (vergl.: Abschnitt 4.1.2),<br />

dies aber im Anforderungskatalog (Punkt 6) verlangt wird, finden im Prototypen<br />

des DAPC-Frontends Secure Sockets Verwendung (vergl.: Abschnitt 4.1), über die<br />

eine geschützte Kommunikation stattfinden kann.<br />

Auf Gr<strong>und</strong> der Tatsache, dass es sich bei der Client-Anwendung um eine Java-<br />

Applikation handelt, kommen für die Verteilung der DPAC-Client-Software im<br />

Intra- bzw. Internet (Anforderungspunkt 2) prinzipiell zwei Technologien in Frage.<br />

Java-Applets oder Java-Web-Start. Generell erlauben es zwar beide Technologien,<br />

die Anforderungspunkte 2, 3, 4 <strong>und</strong> 5 zu erfüllen, dennoch wird im Prototypen des<br />

DPAC-Informationssystems Java-Web-Start der Vorzug gegeben. Anlass hierfür<br />

sind die im Abschnitt 3.4 beschriebenen Vorteile gegenüber Applets.<br />

89


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 24: Frontend zur Kontaktverwaltung im DPAC-System<br />

5.3.1 WebStart<br />

Bevor das DPAC-Frontend mit Hilfe von Java-WebStart sicher verteilt werden kann,<br />

ist es notwendig, die folgenden vorbereitenden Schritte durchzuführen:<br />

• Alle von der Client-Anwendung benötigten Klassen <strong>und</strong> Ressourcen müssen<br />

in einem oder mehreren Java-Archiven (JAR) zusammengefasst werden.<br />

• Die Java-Archive müssen nach ihrer Erstellung signiert werden. Zum einen,<br />

um unberechtigte Modifikationen an der Software zu erkennen (Anforderungspunkt<br />

5), zum anderen damit, dass der Client-Anwendung auf dem Gastrechner<br />

die benötigten Zugriffsrechte eingeräumt werden können (vergl.: Abschnitte<br />

3.3.1 <strong>und</strong> 3.4.3).<br />

• Als nächster Schritt muss eine Deskriptor-Datei (JNLP-Datei, vergl.: Abschnitt<br />

3.4.2) erzeugt werden, die alle von WebStart benötigten Informationen<br />

enthalten muss.<br />

• Mit der Erstellung einer Webseite, die einen Link auf die entsprechende<br />

Deskriptor-Datei enthält, wird es einem Benutzer ermöglicht, die DPAC-<br />

Client-Anwendung zu laden <strong>und</strong> anschließend zu starten.<br />

• Java-Archive, JNLP-Datei <strong>und</strong> Webseite müssen unter Verwendung eines geeigneten<br />

Webservers <strong>und</strong> unter Beachtung der geltenden Sicherheitsrichtlinien<br />

verfügbar gemacht werden.<br />

90


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Java-Archive Durch die Verwendung eines Java-Archivs lassen sich alle von<br />

der DPAC-Client-Anwendung benötigten Klassen-, Bibliothek- <strong>und</strong> Ressource-<br />

Dateien in einer einzigen 60 JAR-Datei zusammenfassen. Zum Erstellen einer<br />

solchen JAR-Datei gibt es die unterschiedlichsten Möglichkeiten. Bei Java-<br />

Entwicklungsumgebungen, wie beispielsweise dem JBuilder, reicht in der Regel ein<br />

einfacher Klick auf einen entsprechenden Menüpunkt aus, um die gewünschten Dateien<br />

eines Software-Projekts in einem Archiv zusammenzufassen. Die JAR-Datei<br />

wird dann nach der Angabe das Names, den sie tragen soll automatisch erzeugt.<br />

Für solche Entwickler, die keine Java-Entwicklungsumgebung einsetzen, beinhaltetet<br />

das Java 2 SDK ein kleines Programm, das sogenannte jar-Tool. Dieses lässt sich<br />

zwar nicht ganz so komfortabel bedienen, wie die graphisch unterstützten Werkzeuge<br />

einer Entwicklungsumgebung, sein Einsatz aber führt dennoch zum gleichen<br />

Ergebnis. Das jar-Tool wird über die Befehlszeile aufgerufen <strong>und</strong> gesteuert. Der<br />

Befehl zum Erzeugen (Option c) einer JAR-Datei (Option f), die die vom DPAC-<br />

Client benötigten Klassen, Ressourcen <strong>und</strong> Bibliotheken enthält, könnte zum Beispiel<br />

wie folgt lauten:<br />

jar cf DPAC Client.jar input-file(s)<br />

In diesem Beispiel werden alle Dateien, die anstelle des Platzhalters ”input-file(s)”<br />

aufgelistet sind in der Archiv-Datei ”DPAC Client.jar” zusammengefasst. Anstatt<br />

mit einer Liste von Dateien zu arbeiten, kann man auch ganze Verzeichnisse<br />

anstelle von ”input-file(s)” angegeben. Deren Inhalte werden dann rekursiv der<br />

Archiv-Datei hinzugefügt. Auch die Anwendung von Wildcard-Zeichen (z.B. *)<br />

ist möglich. [35]<br />

Code Signieren Nachdem alle benötigten Dateien der Client-Anwendung in<br />

einem Java-Archiv zusammengefasst wurden, ist es nunmehr möglich, die entstandene<br />

JAR-Datei zu signieren. Wie bereits erwähnt, gewährleistet die Signatur,<br />

dass nachträglich durchgeführte Veränderungen an den Dateien des Java-Archivs<br />

erkannt werden. Diese Tatsache ist für das DPAC-Informationssystem besonders<br />

wichtig, da es sich bei der Client-Anwendung um mobilen Code handelt, der<br />

auch über öffentlich zugängliche Netzwerke verteilt werden kann <strong>und</strong> damit<br />

potentiellen Angriffen ausgesetzt ist. Ein weiterer ebenfalls schon angesprochener<br />

Vorteil der Signatur ist, dass mit Hilfe des angewandten Publik-Key-Verfahrens<br />

der Signateur der Archiv-Datei (im speziellen Fall ist hier der Signateur die Firma<br />

Häcker-Automation als eine Institution) authentifiziert werden kann. Voraussetzung<br />

hierfür ist natürlich, dass der öffentliche Schlüssel des Signateurs von einer<br />

vertrauenswürdigen Instanz zertifiziert ist.<br />

Um eine JAR-Datei signieren zu können, benötigt man im wesentlichen drei<br />

60 Aufgr<strong>und</strong> der Tatsache, dass die Anzahl der Klassen-, Bibliothek- <strong>und</strong> Ressource-Dateien des<br />

Prototypen für die Client-Anwendung relativ überschaubar ist, wurde darauf verzichtet, die Anwendung<br />

in mehrere Bereiche zu untergliedern, um dann für jeden dieser Bereiche eine separate<br />

JAR-Datei zu erzeugen. Für den späteren Einsatz sollte allerdings die Verwendung von mehreren<br />

JAR-Dateien in Betracht gezogen werden, um u. a. eine bessere Wartbarkeit der Software zu erreichen.<br />

91


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Komponenten: Einen Schlüsselgenerator, der ein Schlüsselpaar bestehend aus<br />

einem privaten <strong>und</strong> einem öffentlichen Schlüssel erzeugt, eine vertrauenswürdige<br />

Institution, die die Authentizität des öffentlichen Schlüssels bestätigt <strong>und</strong><br />

schließlich ein Werkzeug, welches den eigentlichen Signaturvorgang durchführt.<br />

Zwei dieser Komponenten, nämlich der Schlüsselgenerator (keytool) <strong>und</strong> das<br />

Signatur-Werkzeug (jarsigner) werden von Sun Microsystems als Bestandteil des<br />

Java 2 SDK bereit gestellt.<br />

Das keytool als einen reinen Schlüsselgenerator zu bezeichnen, ist im Gr<strong>und</strong>e<br />

genommen falsch, es bietet viel mehr Funktionalitäten. Sun bezeichnet es als ein<br />

Werkzeug zur Schlüssel- <strong>und</strong> Zertifikats-Verwaltung. Dennoch kann das keytool<br />

auch dazu genutzt werden, um Schlüsselpaare zu erzeugen, die zum Signieren von<br />

JAR-Dateien geeignet sind. Die Schlüsselpaare <strong>und</strong> eventuelle Zusatzinformationen<br />

werden in einer sogenannten keystore-Datei gespeichert, die, falls noch nicht im<br />

lokalen Heimatverzeichnis des Benutzers vorhanden, automatisch erzeugt wird.<br />

Die keystore-Datei kann als eine Art kleine Datenbank aufgefasst werden, in der<br />

Informationen wie privater/öffentlicher Schlüssel <strong>und</strong> zugehörige Zertifikate als<br />

Datensatz unter einem identifizierenden Alias verschlüsselt gespeichert werden.<br />

Der Zugang zu diesen Informationen erfolgt über ein geheimes Passwort, welches<br />

nur berechtigten Benutzer bekannt sein darf.<br />

Der Aufruf <strong>und</strong> die Bedienung des keytools erfolgt, wie bei den meisten Werkzeugen,<br />

die Sun im Java 2 SDK zur Verfügung stellt, über die Kommandozeile.<br />

Der folgende Befehl erzeugt zwei zusammengehörige Schlüssel (privat/öffentlich)<br />

für das kryptographische Verfahren RSA (vergl.: Abschnitt 2.5.1), deren Länge<br />

jeweils 2048 Bit beträgt <strong>und</strong> die in der keystore-Datei unter dem Alias ”haecker”<br />

abgespeichert werden:<br />

keytool -genkey -alias haecker -keyalg RSA -keysize 2048<br />

Nach der Bestätigung des Befehls fordert keytool den Benutzer auf, das Passwort<br />

für den keystore einzugeben. Hier ist Vorsicht geboten, da die Eingabe im Klartext<br />

auf dem Bildschirm zu lesen ist. Nachdem das korrekte keystore-Passwort eingegeben<br />

wurde, werden vom Benutzer noch einige persönliche Daten abgefragt<br />

(Name, Firma, Abteilung usw.), die für die Erstellung eines Test-Zertifikats<br />

benötigt werden. Nach der abschließenden Eingabe eines neuen Passworts für<br />

den zu generierenden privaten Schlüssel wird das Schüsselpaar berechnet <strong>und</strong><br />

abgespeichert.<br />

Damit ein späterer Benutzer des DPAC-Clients auch wirklich sicher sein<br />

kann, dass er zur Verifizierung der Signatur des mobilen Codes den richtigen<br />

öffentlichen Schlüssel der Firma Häcker-Automation verwendet, sollte dieser von<br />

einer allgemein als vertrauenswürdig angesehenen Institution zertifiziert sein. Das<br />

keytool bietet dazu mit dem Befehl -certreq die Möglichkeit, einen sogenannten<br />

Certificate Signing Request (kurz CSR) zu erstellen <strong>und</strong> in eine Datei zu schreiben.<br />

Der CSR enthält unter anderem den vom keytool erzeugten öffentlichen Schlüssel.<br />

keytool -certreq -alias haecker -file haeckerCSR.csr<br />

92


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Die CSR-Datei kann dann an eine auf Zertifizierung spezialisierte Institution, wie<br />

es beispielsweise VeriSign 61 oder Thawte 62 , geschickt werden, um ein Zertifikat<br />

zu erwerben. Die Institution überprüft in der Regel offline, ob der Antragsteller<br />

rechtmäßiger Besitzer des öffentlichen Schüssels ist. War die Überprüfung erfolgreich,<br />

so wird auf Gr<strong>und</strong>lage des CSR ein entsprechendes Zertifikat erteilt <strong>und</strong> zum<br />

Antragsteller versandt. Das erworbene Zertifikat kann dann mittels keytool im keystore<br />

unter dem entsprechenden Alias gespeichert werden.<br />

keytool -import -alias haecker -file haeckerCER.cer<br />

Das Programm jarsigner ist das Signatur- <strong>und</strong> Verifikations-Werkzeug im Java 2<br />

SDK. Es dient sowohl zum Signieren von JAR-Dateien als auch zum Verifizieren<br />

von Signatur <strong>und</strong> Integrität. Der Jarsigner wird unter Angabe der zu signierenden<br />

JAR-Datei <strong>und</strong> des Aliases, der das gewünschte Schlüsselpaar im keystore repräsentiert,<br />

aufgerufen:<br />

jarsigner DPAC Clinet.jar haecker<br />

Nach der richtigen Eingabe des keystore-Passworts wird der Signaturvorgang gestartet.<br />

Dabei werden die im JAR-Archiv vorhandenen Dateien unverändert beibehalten.<br />

Es kommen mit der signature-Datei <strong>und</strong> der signature-block-Datei lediglich<br />

zwei hinzu. Die signature-Datei beinhaltet die Namen <strong>und</strong> zugehörigen<br />

Hashwerte aller Dateien des Archivs. In der signature-block-Datei sind der öffentliche<br />

Schlüssel des Singnateurs, das zugehörige Zertifikat <strong>und</strong> der Hashwert der<br />

signature-Datei gespeichert. Der Hashwert der signature-Datei ist mit dem entsprechenden<br />

privaten Schlüssel des Signateurs verschlüsselt. Durch dieses Konstrukt<br />

wird erreicht, dass eine noch so kleine Veränderung an den Dateien des<br />

Java-Archivs erkannt werden kann. Denn verändert man eine Datei, so ändert sich<br />

auch deren Hashwert. Durch einen Vergleich mit dem entsprechenden Hashwert in<br />

der signature-Datei kann die Modifikation erkannt werden. Kommt es zudem noch<br />

zu Veränderungen an der signature-Datei, beispielsweise durch Manipulation eines<br />

Hashwertes einer zuvor geänderten Datei des Archives, so führt dies ebenfalls zu einer<br />

Erkennung. Hierzu wird der Hashwert der signature-Datei mit dem verglichen,<br />

der in der signature-block-Datei gespeichert ist. Dieser kann ohne Kenntnis des privaten<br />

Schlüssels des Signateurs nicht erfolgreich manipuliert werden. [36][37]<br />

Deskriptor-Datei Funktion <strong>und</strong> Syntax der WebStart-Deskriptor-Datei (JNLP-<br />

Datei) wurde bereits im Abschnitt 3.4.2 ausführlich erläutert. Aus diesem Gr<strong>und</strong><br />

soll an dieser Stelle nur kurz auf die JNLP-Datei eingegangen werden, die im Prototypen<br />

Verwendung findet. Das Listing 6 zeigt den Inhalt der JNLP-Datei. Besondere<br />

Aufmerksamkeit ist dem Attribut codebase zu schenken. Durch den Einsatz<br />

von HTTPS wird erreicht, dass die Übertragung der DPAC-Client-Software zwischen<br />

Webserver <strong>und</strong> Client-Rechner, verschlüsselt stattfindet. Somit ist, wie im<br />

Punkt 5 des Anforderungskataloges verlangt wird, neben der Integrität der Client-<br />

Anwendung (durch die Signatur) auch die Vertraulichkeit gegenüber Dritten sichergestellt.<br />

Desweiteren kann der Benutzer der Client-Anwendung durch die Verwendung<br />

von HTTPS den Webserver zweifelsfrei identifizieren. Voraussetzung hierfür<br />

61 http://www.verisign.com<br />

62 http://www.thawte.com<br />

93


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

ist natürlich, dass ein gültiges SSL-Serverzertifikat vorliegt, das von einer vertrauenswürdigen<br />

Institution ausgestellt wurde.<br />

✞<br />

Listing 6: DPAC-JNLP-Datei<br />

<br />

<br />

<br />

<br />

Frontend fuer das DPAC-Informationssystem<br />

Haecker-Automation Schwarzhausen<br />

<br />

Prototyp des DPAC-Clients<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

✝<br />

☎<br />

✆<br />

Webseite Die Webseite des DPAC-Informationssystems bildet praktisch eine<br />

zentrale Anlaufstelle für diejenigen Benutzer, bei denen sich die DPAC-Client-<br />

Software noch nicht im lokalen WebStart-Cache befindet. Die primäre Aufgabe der<br />

Webseite ist es, einen Link zur Verfügung zu stellen, der auf die Deskriptor-Datei<br />

(DPAC.jnlp) zeigt.<br />

Bitte hier klicken um die<br />

DPAC-Client-Anwendung zu Laden/Starten.<br />

Durch einen Klick auf diesen Link wird die JNLP-Datei zum Client-Rechner<br />

übertragen, wo sie dann von WebStart ausgewertet wird (vergl.: Abschnitt 3.4.2).<br />

Mit Hilfe der Webseite können aber auch noch andere Aufgaben erfüllt werden.<br />

Beispielsweise ist es durch den Einsatz von Scriptsprachen (z.B. Java- oder<br />

VB-Script) möglich, zu testen, ob auf dem Client-Rechner eine geeignete JRE <strong>und</strong><br />

WebStart installiert sind. Sollte der Test negativ ausfallen, so kann automatisch ein<br />

Link zu einer Webseite angeboten werden, von wo die gewünschte JRE geladen<br />

werden kann (z.B. http://www.java.com). Ein Beispiel für ein solches Java- bzw.<br />

VB-Script ist unter [40] im Bereich ”Developer/Documentation” zu finden.<br />

Der Punkt 2 des Anforderungskataloges schreibt vor, dass die DPAC-Client-<br />

Anwendung nur von berechtigten Benutzern geladen werden darf. Mit dieser<br />

durchaus sinnvollen Forderung soll erreicht werden, dass die DPAC-Client-<br />

Software nicht in falsche Hände gelangt. Wie in Abschnitt 2.3.4 beschrieben, sieht<br />

ein Angriffszyklus in der Regel so aus, dass der Angreifer zuerst einmal versucht,<br />

an so viel wie möglich Informationen über das anzugreifende System zu gelangen.<br />

Eine Analyse der DPAC-Client-Software würde ihn mit Sicherheit ein ganzes<br />

Stück näher an sein fragwürdiges Ziel bringen.<br />

94


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

WebStart bietet allerdings keine dokumentierten Funktionen an, mit denen man<br />

einen berechtigten Anwender vor dem eigentlichem Download der Applikation<br />

authentifizieren kann. Abhilfe für dieses Problem schaffen zwei Lösungen, die<br />

HTTP im Zusammenhang mit der Nutzerauthentfizierung bereit hält. Die Basic<br />

Authentication für HTTP <strong>und</strong> die Digest Access Authentication für HTTP. Diese<br />

beiden Mechanismen können zwar nicht dazu eingesetzt werden, den Download<br />

der Client-Anwendung durch WebStart direkt zu beeinflussen, ihre Anwendung<br />

ermöglicht aber die Durchführung einer Zugriffskontrolle für die Webseite, die den<br />

Link zum Laden der Anwendung beinhaltet.<br />

Mit Hilfe von Basic- <strong>und</strong> Digest-Authentication lässt sich ein Zugriffsschutz<br />

mittels Benutzername/Passwort für bestimmte Dokumente <strong>und</strong> Verzeichnisse eines<br />

Webservers realisieren. Dabei ist die Methode Basic Authentication, wie der Name<br />

schon sagt nur eine Basismethode, die lediglich vor völlig unerfahrenen Angreifern<br />

schützt. Der Gr<strong>und</strong> hierfür liegt in der Tatsache, dass sowohl Passwort als auch die<br />

Daten selbst unverschlüsselt über das Netzwerk übertragen werden. [30]<br />

Die im Zusammenhang mit den Arbeiten zu HTTP v1.1 spezifizierte Digest<br />

Access Authentication versucht, die offensichtlichsten Sicherheitsmängel von<br />

Basic zu beseitigen. Dazu wurde in RFC 2617 ein einfaches Challenge-and-<br />

Response-Protokoll definiert <strong>und</strong> in den HTTP-Rahmen eingepasst. Wichtigstes<br />

Merkmal der Digest-Authentication ist, dass das Passwort niemals im Klartext<br />

übertragen wird. Vielmehr schickt der Client als Antwort (Response) auf die<br />

Challenge-Nachricht des Servers einen Hashwert (typischerweise MD5), der unter<br />

anderem aus Benutzername, Passwort, Zufallszahl aus der Challenge-Nachricht<br />

des Servers <strong>und</strong> URL des angeforderten Dokuments berechnet wird. Der Server<br />

berechnet seinerseits ebenfalls diesen Hashwert <strong>und</strong> vergleicht ihn mit dem, den<br />

er vom Client als Response erhalten hat. Sind beide gleich, wird das angeforderte<br />

Dokument zum Client gesandt, andernfalls erhält der Client eine Fehlermeldung.<br />

Die Digest Access Authentication wird von den meisten heutzutage verwendeten<br />

Webserver <strong>und</strong> -browsern unterstützt. [30][6]<br />

Genau wie beim Download der DAPC-Client-Software ist auch beim Aufruf<br />

der Webseite die Anwendung von HTTPS dringend anzuraten, insbesondere dann,<br />

wenn nur eine Basic Authentication eingesetzt werden soll. Durch den Einsatz<br />

von HTTPS wird zum einen erreicht, dass die Deskriptor-Datei geschützt vor den<br />

Zugriffen Dritter zum Client-Rechner übertragen wird. Zum anderen kann der Benutzer<br />

mit Hilfe des SSL-Serverzertifikats die Webseite zweifelsfrei identifizieren.<br />

Um den Schutz der Webseite vor unberechtigten Zugriffen noch etwas zu<br />

erhöhen, ist auch die Anwendung eines serverseitigen Scriptes denkbar, welches<br />

nach erfolgreich durchgeführter Authentifizierung <strong>und</strong> Aktivierung des<br />

”JNLP-Links” noch eine gewisse Zeit wartet <strong>und</strong> danach die entsprechende<br />

Benutzername/Passwort-Kombination auf Seiten des Servers löscht <strong>und</strong> damit<br />

ungültig macht. Somit ist es praktisch möglich, den Zugriff auf die Webseite,<br />

beispielsweise durch K<strong>und</strong>en, Lieferanten usw. nur einmal zu erlauben. Gelangen<br />

dann Benutzername <strong>und</strong> Passwort eines berechtigten Anwenders in die Hände<br />

95


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

eines unberechtigten Anwenders, sei es durch Diebstahl oder Weitergabe, so könnte<br />

dieser die Webseite <strong>und</strong> damit die Deskriptor-Datei nicht aufrufen.<br />

5.3.2 Webserver<br />

Ein zentraler Bestandteil des WebStart-Konzeptes ist der Webserver. Er stellt praktisch<br />

die Quelle für die DPAC-Webseite, -Deskriptor-Datei <strong>und</strong> -Client-Anwendung<br />

dar. Bevor der Webserver im DPAC-Informationssystem eingesetzt werden kann,<br />

sind in der Regel jedoch noch einige Einstellungen bezüglich WebStart- <strong>und</strong><br />

SSL-Unterstützung vorzunehmen.<br />

Einmalig muss der Webserver so konfiguriert werden, dass dieser Deskriptor-<br />

Dateien an ihrer Extension .jnlp erkennt <strong>und</strong> zum Client-Browser den korrekten<br />

Mime-Typ 63 application/x-java-jnlp-file überträgt. Der Browser erkennt am<br />

Mime-Typ, dass es sich bei der empfangenen Datei um eine JNLP-Datei handelt<br />

<strong>und</strong> übergibt diese automatisch an Java-Web-Start. Bei dem für den Prototypen<br />

eingesetzten Webserver der Apache Software Fo<strong>und</strong>ation erfolgt die Konfiguration<br />

des Mime-Typs durch einfaches Hinzufügen der Zeile<br />

application/x-java-jnlp-file JNLP<br />

in die Datei .mime.types. Soll ein anderer Webserver zum Einsatz kommen, ist<br />

dessen Dokumentation zu konsultieren.<br />

Ein weiterer Konfigurationspunkt betrifft die Sicherheit des Webservers. Wie<br />

bereits erwähnt, soll sowohl die Übertragung der Webseite als auch die Übertragung<br />

der Deskriptor-Datei <strong>und</strong> eigentlichen DPAC-Client-Software über HTTPS<br />

erfolgen. Dazu ist es notwendig, den Webserver so einzurichten, dass dieser SSL<br />

unterstützt. Beim Apache-Webserver erfolgt die Einbindung der SSL-Funktionen<br />

über das Modul mod ssl, welches installiert <strong>und</strong> konfiguriert werden muss. mod ssl<br />

ist genau wie der Apache-Webserver frei verfügbar. Das SSL-Modul implementiert<br />

jedoch das SSL-Protokoll nicht selbst, sondern es handelt sich hierbei um eine<br />

Schnittstelle zwischen dem Webserver <strong>und</strong> einer entsprechenden SSL-Bibliothek.<br />

Eine solche Bibliothek wird beispielsweise von OpenSSL 64 zur Verfügung gestellt.<br />

OpenSSL beinhaltet aber nicht nur eine SSL-Bibliothek, vielmehr ist es<br />

ein vollständiges Kryptographiepaket, das alle notwendigen Programme enthält,<br />

um Schlüssel <strong>und</strong> Zertifikate zu erstellen. Eine ausführliche Beschreibung <strong>und</strong><br />

Konfigurationsanleitung von mod ssl <strong>und</strong> OpenSSL ist in [6] im Kapitel 13 zu<br />

finden.<br />

Ein letzter wichtiger Punkt, der im Zusammenhang mit dem Webserver angesprochen<br />

werden soll, betrifft das SSL-Serverzertifikat. Ein gültiges, auf die<br />

Firma Häcker-Automation Schwarzhausen ausgestelltes Serverzertifikat ist aus<br />

63 Mime-Typen sind der Internet-Standard zur Klassifizierung <strong>und</strong> Typisierung von Dateien, beispielsweise,<br />

um Anlagen in E-Mails auf netzweit einheitliche Weise mit dem Typ des Inhalts beschriften<br />

zu können [45].<br />

64 http://www.openssl.org/<br />

96


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

dem Gr<strong>und</strong> so wichtig für das DPAC-Informationssystem, weil es dem Anwender<br />

erlaubt, den Webserver zweifelsfrei zu identifizieren. Somit kann er sicher sein, dass<br />

sowohl die DPAC-Webseite als auch die zu ladende DPAC-Client-Software von der<br />

Firma Häcker-Automation stammen. SSL-Serverzertifikate werden beispielsweise<br />

von den im Zusammenhang mit der Code-Signierung bereits angesprochenen<br />

Firmen VeriSign <strong>und</strong> Thawte angeboten. Sie können mit den Werkzeugen, die<br />

OpenSSL zur Verfügung stellt, eingeb<strong>und</strong>en werden.<br />

Aber nicht nur die Verwendung eines gültigen SSL-Serverzertifikats ist wichtig,<br />

auch sollte der allgemeine Schutz des als Webserver genutzten Rechners nicht<br />

außer Acht gelassen werden. Da dieser Rechner an das öffentliche Internet<br />

angeb<strong>und</strong>en sein muss, ist er auch einer Vielzahl von Bedrohungen ausgesetzt.<br />

Sinnvoll ist es, auf diesem Rechner so wenig Dienste wie möglich zur Verfügung zu<br />

stellen, die aus dem Internet erreichbar sind, um somit die Angriffsfläche so gering<br />

wie möglich zu halten. Außerdem sollte der Webserver-Dienst möglichst keine<br />

Schreibrechte auf dem System erhalten, um zu verhindern, dass es einem Angreifer<br />

möglicherweise gelingt, ”bösartige” Software in das System einzuschleusen. Neben<br />

den Schreibrechten sollten auch die Leserechte des Webserver-Prozesses auf die<br />

benötigten Verzeichnisse <strong>und</strong> Dokumente beschränkt werden. Zu den Aufgaben<br />

des für den Webserver verantwortlichen Sicherheitsbeauftragten gehört es, sich<br />

über neu entdeckte Sicherheitslücken der Webserver-Software zu informieren <strong>und</strong><br />

möglichst zeitnah geeignete Sicherheits-Updates zu installieren.<br />

5.4 Der DPAC-Anwendungsserver<br />

Der DPAC-Anwendungsserver arbeitet wie Abbildung 23 zeigt als eine Art Vermittler<br />

zwischen den Clients <strong>und</strong> dem Backendsystem. Seine primären Aufgaben<br />

bestehen darin, die Client-Anwendungen <strong>und</strong> den jeweiligen Benutzer zu authentifizieren,<br />

Anfragen der Clients entgegenzunehmen, diese an das Backendsystem<br />

aufbereitet weiterzugeben <strong>und</strong> Resultate, die das Backendsystem liefert, verpackt an<br />

den Client zurückzusenden. Der prototypische DPAC-Anwendungsserver ist genau<br />

wie das DPAC-Frontend eine Java-Applikation, die allerdings nur über die Befehlszeile<br />

aufgerufen <strong>und</strong> gesteuert wird. Aufbau <strong>und</strong> Arbeitsweise des Servers sollen an<br />

dieser Stelle beschrieben werden.<br />

5.4.1 Arbeitsweise des Servers<br />

Der DPAC-Anwendungsserver besteht im wesentlichen aus sechs Komponenten<br />

(Klassen): Setup, LogFileWriter, JDBC-Treiber (InterClient), ConnectionDistributor,<br />

ObjectAdmin <strong>und</strong> DBQuest. Jede dieser Komponenten beinhaltet ganz bestimmte<br />

Funktionen, die im DAPC-Informationssystem benötigt werden. Das Schema<br />

des DAPC-Anwendungsservers, welches in Abbildung 25 dargestellt ist, setzt<br />

die einzelnen Komponenten visuell in Beziehung zueinander.<br />

Setup Die Setup-Klasse hat, wie der Name schon vermuten lässt, die Aufgabe,<br />

den Anwendungsserver zu initialisieren <strong>und</strong> zu starten. In ihr ist die main-Methode<br />

implementiert, die von der JVM als erste aufgerufen wird. Nachdem Setup die RMI-<br />

97


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 25: Schema des DPAC-Anwendungsservers<br />

Registry gestartet hat, wird ein Objekt der Klasse ObjectAdmin erzeugt <strong>und</strong> bei der<br />

Registry unter dem Namen ”ObjectAdmin” angemeldet. Dieses Remote-Objekt ist<br />

dann später der erste Anlaufpunkt für die DPAC-Clients. Ihre Pflicht hat die Setup-<br />

Komponente dann erfüllt, wenn sie neben dem ObjectAdmin-Objekt auch noch eine<br />

Instanz der Klasse LogFileWriter erzeugt hat.<br />

LogFileWriter In der Klasse LogFileWriter sind spezielle Methoden implementiert,<br />

die es den anderen Komponenten erlauben, bestimmte Ereignisse in einer oder<br />

mehreren Dateien zu protokollieren. Solche Ereignisse können zum Beispiel das<br />

Anmelden eines Clients, ein Zugriff auf das Backendsystem oder eine ausgelöste<br />

Ausnahme sein. Der LogFileWriter ist somit die Komponente des Anwendungsservers,<br />

die für die Nachweisführung (vergl.: Abschnitt 2.2.5) zuständig ist. Es<br />

sei jedoch erwähnt, dass der LogFileWriter des hier vorgestellten Prototypen zur<br />

Zeit noch nicht alle die Funktionen beinhaltet, die unter Umständen benötigt werden.<br />

Zwar ist es bereits möglich, sicherheitsrelevante Daten <strong>und</strong> Aktionen, wie IP-<br />

Adressen der DAPC-Clients oder Zugriffe auf die Datenbank zu protokollieren, dies<br />

ist aber bei weitem nicht ausreichend. Besonders wichtig ist beispielsweise die Einbindung<br />

von Mechanismen, die missglückte Zugriffsversuche auf das System analysieren,<br />

protokollieren <strong>und</strong> gegebenenfalls zeitnah den Administrator oder Sicherheitsbeauftragten<br />

informieren.<br />

InterClient Der von Borland zusammen mit der Datenbank InterBase ausgelieferte<br />

JDBC 65 -Treiber InterClient Version 2.5 bildet die Schnittstelle zwischen Anwendungsserver<br />

<strong>und</strong> Datenbank. Der Treiber ist vollständig in Java programmiert<br />

<strong>und</strong> kommuniziert direkt mit dem Datenbankserver (Typ 4 Treiber).<br />

Während der Tests, die mit dem Treiber durchgeführt wurden, traten immer wieder<br />

Probleme beim Verbinden mit dem Datenbankserver auf. Eine Anfrage bei Borland<br />

ergab, dass der InterClient v2.5 <strong>und</strong> die auf Seiten der Datenbank eingesetzte Li-<br />

65 JDBC: Java Database Connectivity Interface<br />

98


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

nux Distribution v7.1 der Firma redhat nicht richtig zusammenarbeiten. Nach einem<br />

Downgrade des Treibers auf Version 2.01 arbeitete das System wie gewünscht.<br />

ConnectionDistributor Die Klasse ConnectionDistributor verwaltet die drei zur<br />

Verfügung stehenden Verbindungen zum Backendsystem in einem Pool. Nach dem<br />

Start des Servers werden drei Connection-Objekte erzeugt, die jeweils eine Verbindung<br />

zur Datenbank repräsentieren. Die Connection-Objekte werden in einem<br />

sogenannten Stack 66 -Objekt gespeichert. Jedes Mal, wenn eine Komponente des<br />

Anwendungsservers eine Verbindung zur Datenbank benötigt, wird ein Connection-<br />

Objekt aus dem Stack-Objekt gelöst <strong>und</strong> an die Komponente übergeben. Sind die<br />

Arbeiten an der Datenbank beendet so wird das Connection-Objekt wieder in das<br />

Stack-Objekt zurückgeschrieben <strong>und</strong> kann wiederverwendet werden. Der Vorteil<br />

dieser Vorgehensweise ist, dass ständig drei offene Verbindungen zur Datenbank<br />

bestehen <strong>und</strong> nicht erst zeitraubend für jede Anfrage auf- <strong>und</strong> abgebaut werden<br />

müssen.<br />

ObjectAdmin Die Klasse ObjektAdmin ist eine von zwei Klassen des Anwendungsservers,<br />

deren Methoden auch von Objekten aufgerufen werden können, die<br />

in entfernten virtuellen Maschinen existieren. Anders gesagt, stellt die von Setup<br />

erzeugte Instanz der Klasse ObjektAdmin ihre Methoden den DPAC-Clients<br />

zur Verfügung. Diese können die Methoden über die Remote Method Invocation<br />

(vergl.: Abschnitt 4.1) aufrufen. Die Hauptaufgaben der Komponente ObjektAdmin<br />

sind die Authentifizierung der DPAC-Client-Anwendungen <strong>und</strong> deren Benutzer, die<br />

Rechteverwaltung sowie die Erzeugung, Verwaltung <strong>und</strong> Zuteilung von DBQuest-<br />

Objekten.<br />

Ziel eines jeden DPAC-Clients ist es, eine Referenz auf ein Remote-Objekt der<br />

Klasse DBQuest zu erlangen. Der Weg dahin führt über die von Setup erzeugte<br />

Instanz der Klasse ObjektAdmin. Hier meldet sich der DPAC-Client durch den<br />

Aufruf einer bestimmten login-Methode an. Das ObjektAdmin-Objekt überprüft<br />

zunächst, ob der Benutzername des Anwenders in der Tabelle users der Datenbank<br />

zu finden ist <strong>und</strong> ob das gesendete Passwort mit dem gespeicherten übereinstimmt<br />

(vergl.: Abschnitt 5.5 Nutzerauthentifikation). War die Authentifikation des Anwenders<br />

erfolgreich, wird die Datenbank ein zweites Mal konsultiert, um aus der Tabelle<br />

user rights die Berechtigungen zu erfragen, die der entsprechende Anwender im<br />

DPAC-Informationssystem hat. Auf Gr<strong>und</strong>lage des Ergebnisses dieser Anfrage wird<br />

ein neues DBQuest-Objekt erzeugt <strong>und</strong> bei der RMI-Registry unter einem zufällig<br />

gewählten Namen angemeldet. Dieser Name wird zusammen mit den Rechten des<br />

Anwenders an den DPAC-Client als Rückgabewert der login-Methode übermittelt.<br />

Mit Hilfe der übermittelten Informationen <strong>und</strong> der auf dem Anwendungsserver laufenden<br />

RMI-Registry ist es dem Client möglich, eine Referenz auf das für ihn bestimmte<br />

DBQuest-Objekt zu erlangen. Die ebenfalls übertragenen Berechtigungen<br />

des Anwenders werden clientseitig dazu genutzt, um bestimmte Funktionalitäten<br />

ein- bzw. auszuschalten. Der Benutzer des DPAC-Clients hat nunmehr die Möglichkeit,<br />

auf die ihm zugänglichen Informationen, die das DPAC-Informationssystem<br />

66 Ein Stack ist eine Liste, bei der nur das erste (= oberste) Element gelesen werden kann. Mit den<br />

Methoden push <strong>und</strong> pop können entweder Elemente hinzugefügt oder entfernt werden.<br />

99


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

bereit hält, zuzugreifen.<br />

Hat ein Anwender seine Arbeit beendet <strong>und</strong> schließt aus diesem Gr<strong>und</strong> die DPAC-<br />

Client-Anwendung, so informiert der Client den ObjectAdmin durch den Aufruf<br />

einer bestimmten Methode, dass er sein DBQuest-Objekt nicht mehr benötigt. Der<br />

ObjectAdmin meldet daraufhin das entsprechende DBQuest-Objekt bei der RMI-<br />

Registry ab, sodass es, wenn es lokal nicht mehr referenziert ist, vom Garbage Collector<br />

gelöscht <strong>und</strong> der Speicherplatz wieder freigegeben werden kann.<br />

Die Vorteile dieser hier erläuterter Vorgehensweise lassen sich wie folgt beschreiben:<br />

• Ein DBQuest-Objekt, welches Methoden für den Zugriff auf die Datenbank<br />

bereitstellt, ist immer nur dann auf dem Server verfügbar, wenn ein berechtigter<br />

Client (Anwender) es explizit anfordert <strong>und</strong> damit arbeitet. Somit wird die<br />

Angriffsfläche bezüglich serverseitig ”lauschender” Sockets möglichst gering<br />

gehalten.<br />

• Die Funktionalität des DBQuest-Objekts kann auf Gr<strong>und</strong>lage der Berechtigungen<br />

des jeweiligen Nutzers modifiziert werden. Meldet sich beispielsweise<br />

ein Nutzer beim DPAC-System an, der in die Rolle ”K<strong>und</strong>e” einzuordnen<br />

ist <strong>und</strong> damit nur Leserechte für bestimmte Tabellen oder Views besitzt, so<br />

kann das DBQuest-Objekt so initialisiert werden, dass Funktionen, die das<br />

Ändern, Einfügen oder Löschen von Datensätzen erlauben serverseitig deaktiviert<br />

sind.<br />

• Auf Gr<strong>und</strong> der Tatsache, dass zu jedem berechtigten Client dynamisch ein<br />

zugehöriges DBQuest-Objekt erzeugt wird, kann die Anzahl der gleichzeitig<br />

auf das System zugreifenden Clients beschränkt werden. Anders gesagt, im<br />

ObjectAdmin ist ein Zähler integriert, der jedes Mal um den Wert eins erhöht<br />

bzw. verringert wird, wenn ein Client ein DBQuest-Objekt anfordert bzw.<br />

nicht mehr benötigt. Durch die Angabe eines Maximalwertes von parallel<br />

existierenden DBQuest-Objekten kann somit auch die Anzahl der gleichzeitig<br />

im DPAC-System vorhandenen Clients bestimmt werden.<br />

Der Prototyp gestattet den gleichzeitigen Systemzugriff von bis zu 10 Clients.<br />

DBQuest Objekte dieser Klasse bilden das eigentliche Verbindungsstück zwischen<br />

DPAC-Client-Anwendung <strong>und</strong> Datenbank. Einige Methoden dieser Klasse<br />

sind genau wie beim ObjectAdmin so implementiert, dass sie von entfernten Clients<br />

via RMI aufgerufen werden können. Sie erlauben unter anderem, Datensätze<br />

abzufragen, zu modifizieren oder neu anzulegen. DBQuest-Objekte können auf der<br />

Gr<strong>und</strong>lage von Nutzer-Berechtigungen so initialisiert werden, dass für den jeweiligen<br />

Client nur bestimmte Methoden aktiviert sind.<br />

5.5 Absicherung der Kommunikation<br />

Die in Punkt 6 des Anforderungskataloges beschriebenen Sicherheitsansprüche, die<br />

an die Kommunikation zwischen DPAC-Client <strong>und</strong> -Anwendungsserver gestellt<br />

100


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

werden, kann (wie in Abschnitt 4.1.2 beschrieben) RMI allein nicht gewährleisten.<br />

Deshalb bedarf es einer Art Erweiterung, die es erlaubt, Vertraulichkeit, Integrität<br />

<strong>und</strong> Authentizität der übertragenen Daten sicherzustellen. Im Prototypen<br />

des DPAC-Informationssystems kommt die Java Secure Socket Extension (vergl.:<br />

Abschnitt 4.1.3) als eine solche Erweiterung zum Einsatz. Die Gründe hierfür liegen<br />

zum einen in der RMI-Architektur (Kommunikation über Sockets), zum anderen in<br />

den Vorteilen, die die JSSE gegenüber den anderen vorgestellten Verfahren hat.<br />

Möglich wird die Verwendung der JSSE aufgr<strong>und</strong> der Tatsache, dass RMI nie unmittelbar<br />

auf Standard-Sockets zugreift, sondern Sockets immer über eine RMI-<br />

Socket-Factory bezieht.<br />

5.5.1 RMI-Socket-Factory<br />

Die Hauptaufgabe der RMI-Socket-Factory besteht darin Socket- <strong>und</strong> ServerSocket-<br />

Objekt für die Netzwerk-Kommunikation zur Verfügung zu stellen. Die Erstellung<br />

<strong>und</strong> Einbindung einer eigenen RMI-Socket-Factory ist im Prinzip einfach <strong>und</strong> kann<br />

relativ frei gestaltet werden. Die einzige Anforderung, die an die RMI-Socket-<br />

Factory gestellt wird, ist, dass sie entweder das Interface RMIServerSocketFactory<br />

mit der zugehörigen Methode createServerSocket(int port) oder das Interface<br />

RMIClientSocketFactory mit der Methode createSocket(String host,int<br />

port) implementiert. Diese Methoden stellen praktisch eine definierte Schnittstelle<br />

zum umgebenden RMI-System dar. Die Methode createSocket liefert auf Anforderung<br />

des RMI-Systems ein Socket-Objekt, welches eine Socket-Verbindung zu<br />

der übergebenen Host-Adresse <strong>und</strong> dem Port repräsentiert. Dieses Socket-Objekt<br />

wird dann in der Regel vom Client verwendet. Auf Seiten des Servers wird ein<br />

ServerSocket-Objekt benötigt, welches auf einem bestimmten Port ”lauscht”.<br />

Hierfür ist die Methode createServerSocket zuständig.<br />

Die Besonderheit der beiden im Prototypen des DPAC-Systems eingesetzten RMI-<br />

Socket-Factories ist, dass sie keine Standard (Server)Socket-Objekte zurückliefern,<br />

sondern Secure (Server)Socket-Objekte, die mit Hilfe der JSSE erzeugt wurden.<br />

Die Listings 7 <strong>und</strong> 8 zeigen zur Veranschaulichung jeweils einen Auszug aus<br />

der Klasse DPACSecureServerSocketFactory bzw. der Klasse DPACSecureClient-<br />

SocketFactory.<br />

✞<br />

Listing 7: DPACSecureServerSocketFactory<br />

public class DPACSecureServerSocketFactory<br />

implements RMIServerSocketFactory{<br />

☎<br />

}<br />

✝<br />

ServerSocket createSecureServerSocket(int port){<br />

/*... wie in Listing 5 ...*/<br />

return sec_serv_socket;<br />

}<br />

public ServerSocket createServerSocket(int port){<br />

return createSecureServerSocket(port);<br />

}<br />

✆<br />

101


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

✞<br />

Listing 8: DPACSecureClientSocketFactory<br />

public class DPACSecureClientSocketFactory<br />

implements RMIClientSocketFactory{<br />

☎<br />

}<br />

✝<br />

Socket createSecureSocket(String host, int port){<br />

/*... wie in Listing 4 ...*/<br />

return sec_socket;<br />

}<br />

public Socket createSocket(String host, int port)<br />

throws IOException{<br />

return createSecureSocket(host, port);<br />

}<br />

✆<br />

In beiden Listings wurde aus Gründen der Übersichtlichkeit auf die Darstellung<br />

des Programmteils, in dem die eigentliche Erzeugung des Secure Socket- bzw.<br />

Secure ServerSocket-Objekts erfolgt, verzichtet. Eine ausführliche Beschreibung<br />

über die Erzeugung von Secure (Server)Sockets ist im Abschnitt 4.1.3 (JSSE) <strong>und</strong><br />

im Anhang A.2 zu finden.<br />

Nachdem die beiden RMI-Socket-Factories erstellt wurden, müssen sie noch<br />

beim RMI-System registriert werden. Dies erfolgt in der Regel durch den Aufruf<br />

des Konstruktors der Vaterklasse (UnicastRemoteObject)<br />

super(port, DPACSecureClientSocketFactory,<br />

DPACSecureServerSocketFactory);<br />

innerhalb der Klassen, deren Methoden via RMI aufgerufen werden sollen.<br />

An dieser Stelle sei noch erwähnt, dass auch die Kommunikation zwischen<br />

DPAC-Client <strong>und</strong> der RMI-Registry mit Hilfe der vorgestellten Socket-Factories<br />

geschützt werden kann. Dazu startet das Setup-Objekt des Anwendungsservers die<br />

Registry unter Angabe der zu verwendenden Factories<br />

Registry registry = LocateRegistry.createRegistry (port,<br />

DPACSecureClientSocketFactory, DPACSecureServerSocketFactory);<br />

5.6 Nutzerauthentifikation<br />

Im DPAC-Informationssystem kommen vom Download der Client-Anwendung<br />

bis hin zur eigentlichen Nutzung eine ganze Reihe von Authentifikationsverfahren<br />

zur Anwendung. Einige von diesen Verfahren erfordern die Interaktion mit dem<br />

Nutzer, andere laufen im Hintergr<strong>und</strong> automatisch ab. Bereits angesprochen<br />

wurde die Nutzerauthentifikation am Webserver, mit der erreicht werden soll, dass<br />

die DPAC-Client-Anwendung nur von berechtigten Nutzern geladen wird. Eine<br />

weitere Authentifikation findet statt, wenn zwischen DPAC-Client <strong>und</strong> -Server eine<br />

Verbindung über Secure Sockets aufgebaut wird. Hier authentifizieren sich Client<br />

<strong>und</strong> Server gegenseitig ohne Zutun des Anwenders mit Hilfe der Funktionen, die<br />

das SSL-Protokoll bietet. Was noch fehlt <strong>und</strong> an dieser Stelle besprochen werden<br />

soll, ist ein Authentifikationsverfahren, mit dem ein Anwender beim Start der<br />

102


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildung 26: USB- <strong>und</strong> Parallel-Port Hardlock<br />

DPAC-Client-Anwendung seine Identität eindeutig nachweisen kann. Auf Basis<br />

dieser Identität wird dem Anwender eine bestimmte Rolle (Außendienstmitarbeiter,<br />

Lieferant, K<strong>und</strong>e etc.) zugewiesen <strong>und</strong> er bekommt die zur Rolle passende<br />

Zugriffsberechtigung eingeräumt. Sollte die Identität dem DPAC-System nicht<br />

bekannt sein (keine Referenzdaten vorhanden) oder deren Nachweis fehlschlagen<br />

(keine Übereinstimmung mit den Referenzdaten), so wird der Zugang zum System<br />

verweigert.<br />

Prinzipiell gibt es drei Verfahren zur Authentifikation, die hier zum Einsatz<br />

kommen können: Authentifikation durch Wissen, Authentifikation durch Besitz <strong>und</strong><br />

Authentifikation durch Körpermerkmale (vergl.: Abschnitt 2.2.2). Denkbar sind<br />

aber auch Mehrfachanwendungen <strong>und</strong> Kombinationen aus diesen drei Verfahren.<br />

Leider lastet solchen Kombinationen (Mehrfachanwendungen) meist an, dass sie<br />

zwar die Sicherheit erhöhen, jedoch auf Kosten der Benutzerfre<strong>und</strong>lichkeit. Für<br />

die Nutzerauthentifikation im Prototypen des DPAC-Informationssystems wurde<br />

deshalb nach einer Lösung gesucht, die praktisch einen Kompromiss in Bezug auf<br />

Sicherheit <strong>und</strong> Benutzerfre<strong>und</strong>lichkeit darstellt. Die Entscheidung fiel letztendlich<br />

auf eine Kombination der beiden Verfahren Authentifikation durch Wissen <strong>und</strong><br />

Authentifikation durch Besitz. Nicht zuletzt, weil beide Verfahren heutzutage<br />

durchaus weit verbreitet <strong>und</strong> die meisten Nutzer mit dem Umgang vertraut sind.<br />

Auf die Anwendung eines biometrischen Verfahrens (Authentifikation durch<br />

Körpermerkmale) wurde verzichtet, da die erforderliche Hardware zur Erkennung<br />

von Körpermerkmalen entweder zu kostenintensiv oder, wie in [43] gezeigt wird,<br />

noch nicht genügend ausgereift ist.<br />

Das klassische Authentifikationsverfahren durch Wissen basiert im DPAC-<br />

System wie bei vielen anderen Systemen auch auf einer Nutzer-Kennung <strong>und</strong><br />

einem zugehörigen geheimen Passwort. Kennung <strong>und</strong> Passwort werden vom<br />

System-Administrator für jeden neuen Benutzer erzeugt, in der Tabelle users der<br />

103


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Datenbank als Referenzdaten abgespeichert <strong>und</strong> dem neuen Benutzer übergeben.<br />

Dieser hat später die Möglichkeit, mit Hilfe einer Funktion der DPAC-Client-<br />

Anwendung sein vom Administrator erzeugtes Passwort zu ändern. Das System<br />

überprüft dabei, ob das Passwort bestimmten Kiriterien entspricht. Beispielsweise<br />

wird geprüft, ob das neue Passwort eine bestimmte Länge hat (≥ 8 Zeichen) <strong>und</strong><br />

mindestens drei Sonderzeichen oder Zahlen enthält. Diese Regeln zur Erzeugung<br />

von Passwörtern sollen verhindern, dass es einem Angreifer gelingt, durch eine<br />

Wörterbuchattacke oder einfaches Erraten des Passworts Zugang zum System<br />

zu erlangen. Der MD5-Hashwert (vergl.: Abschnitt 2.4.3) des regelkonformen<br />

Passworts wird dann in der Datenbank abgespeichert (Referenzwert). Somit ist<br />

sichergestellt, dass in der Tabelle users keine Passwörter im Klartext gespeichert<br />

sind.<br />

Das zweite im DPAC-Informationssystem eingesetzte Verfahren zur Nutzerauthentifikation<br />

basiert auf dem Besitz eines Hardware-Moduls. Dass heißt, ein<br />

Benutzer des DPAC-Informationssystems benötigt zur Authentifikation nicht nur<br />

das Wissen über sein ansonsten geheimes Passwort, sondern zusätzlich noch ein<br />

Hardware-Modul. Hardware-Module sind in der Regel spezielle Speicherchips,<br />

die kryptographische Informationen beinhalten <strong>und</strong> über bestimmte Schnittstellen<br />

mit dem Rechner verb<strong>und</strong>en werden. Abbildung 26 zeigt zwei Hardware-Module<br />

der Firma Aladdin (genannt Hardlock) für den USB- bzw. Parallel-Port, die im<br />

Prototypen des DPAC-Systems Verwendung finden.<br />

Prinzipiell bieten beide in Abbildung 26 dargestellten Hardlock-Module die<br />

gleiche Funktionalität. Dennoch ist aufgr<strong>und</strong> der Größe <strong>und</strong> der mittlerweile<br />

weiten Verbreitung der USB-Schnittstelle die Anwendung des USB-Hardlocks<br />

vorzuziehen. Das Hardlock-Modul wird vor der Übergabe an seinen Benutzer mit<br />

Hilfe einer speziellen Crypto-Programmer-Card oder eines USB-Master-Hardlocks<br />

vom System-Administrator mit einer Kodierung programmiert. Das Vorhandensein<br />

eines Hardlock-Moduls mit dieser Kodierung wird später von der DPAC-Client-<br />

Anwendung über die Methode Login() der Klasse Hardlock 67 abgefragt.<br />

Neben der Kodierung bietet das Hardlock-Modul zusätzlich die Möglichkeit,<br />

einen 96 Byte großen, nichtflüchtigen Speicher (EEPROM) mit nutzerspezifischen<br />

Informationen zu beschreiben. Dieser Speicher kann nur bei der Kodierung mit<br />

der Crypto-Programmer-Card bzw. dem USB-Master-Hardlocks beschrieben<br />

werden. Im DPAC-System wir er dazu verwendet, die Nutzer-Kennung seines<br />

Benutzers zu speichern. Diese kann später von der Client-Anwendung mit Hilfe der<br />

Hardlock-Methode Read() gelesen <strong>und</strong> verwendet werden. Aufgr<strong>und</strong> der Tatsache,<br />

dass es in der DPAC-Client-Anwendung für den Benutzer keine Möglichkeit gibt,<br />

seine Kennung über einen Dialog mitzuteilen (lediglich das geheime Passwort wird<br />

abgefragt), entsteht somit eine direkte Verbindung zum angesprochenen Authentifikationsverfahren<br />

durch Wissen. Desweiteren ist es durch die Speicherung der<br />

Nutzer-Kennung auf dem Hardlock-Modul möglich, das Vorhandensein des Moduls<br />

auch serverseitig zu überprüfen, da sowohl das Passwort (MD5-Hashwert) als<br />

auch die Nutzer-Kennung zum Server geschickt werden. Ist das Hardlock-Modul<br />

67 Die Klasse Hardlock wurde von der Firma Aladdin zur Einbindung ihrer Hardlock-Module in<br />

Java-Programme entwickelt.<br />

104


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

nicht verfügbar, so fehlt auch die entsprechende Nutzer-Kennung.<br />

Der Ablauf der Nutzerauthentifikation im DPAC-Informationssystem lässt<br />

sich wie folgt zusammenfassen:<br />

• Vorbereitend muss der DAPC-Nutzer sein Hardlock-Modul mit dem Rechner<br />

verbinden.<br />

• Nach dem Start der DPAC-Client-Anwendung wird zunächst überprüft, ob<br />

ein Hardlock-Modul mit der entsprechenden Kodierung vorhanden ist. Wenn<br />

dies der Fall ist, wird die Nutzer-Kennung ausgelesen. Danach wird der Nutzer<br />

aufgefordert sein geheimes Passwort einzugeben. Sollte der Nutzer die<br />

Anwendung zum ersten Mal starten, so ist an dieser Stelle das vom System-<br />

Administrator erzeugte Passwort zu verwenden.<br />

Ist das Hardlock-Modul nicht verfügbar, beendet sich die Client-Anwendung<br />

mit einer Fehlermeldung.<br />

• Vom eingegebenen Passwort wird ein MD5-Hashwert errechnet. Dieser wird<br />

anschließend zusammen mit der Nutzer-Kennung zum Server versandt.<br />

• Der Server vergleicht die erhaltenen Informationen mit den Referenzdaten<br />

aus der Datenbank. Stimmen diese überein, so teilt er dem Client den Namen<br />

mit, unter dem er sein DBQuest-Objekt (vergl.: Abbschnitt 5.4.1) bei der<br />

RMI-Registry angemeldet (geb<strong>und</strong>en) hat. Sollte es keine Übereinstimmung<br />

gegeben haben, so erhält der Client eine Fehlermeldung.<br />

• Die vom Server gesendeten Informationen verwendet der Client entweder,<br />

um eine Referenz auf sein DBQuest-Objekt zu erhalten oder beim Empfang<br />

einer Fehlermeldung, um den Nutzer aufzufordern, sein Passwort erneut einzugeben.<br />

Sollte der Nutzer dreimal hintereinander sein Passwort falsch eingegeben haben,<br />

oder die Nutzer-Kennung nicht bekannt sein, so wird dies als Angriff gewertet. Der<br />

Anwendungsserver erzeugt einen entsprechenden Eintrag mit der IP-Adresse des<br />

Clients in die Log-Datei <strong>und</strong> die DPAC-Client-Anwendung beendet sich mit einer<br />

Fehlermeldung. An dieser Stelle wäre es auch durchaus denkbar, eine Funktion zu<br />

integrieren, die beim Eintreten eines solchen Ereignisses umgehend den System-<br />

Administrator beispielsweise über E-Mail informiert <strong>und</strong> die IP-Adresse des betroffenen<br />

Clients in eine sogenannte Black-List einträgt. Eine solche Black-List ist<br />

eine Liste, in der alle die IP-Adressen von Clients zu finden sind, denen der Systemzugriff<br />

unbedingt zu verweigern ist.<br />

105


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

6 Zusammenfassung <strong>und</strong> Ausblick<br />

Moderne Unternehmensstrukturen <strong>und</strong> neue Arbeitsformen wie Telearbeit <strong>und</strong><br />

Mobile Computing benötigen immer mehr anpassungsfähige Informationstechnologien,<br />

die sich auf unterschiedlichste Kommunikationsanforderungen einstellen<br />

müssen. Diese Informationstechnologien ermöglichen es, dem klassischen Aufbau<br />

einer Firmenstruktur mehr Flexibilität zu geben, sodass auch dezentral angesiedelte<br />

Mitarbeiter an einem oder mehreren Projekten zusammen arbeiten können.<br />

Die meisten Firmen haben erkannt, dass sich mit Hilfe des Mediums Internet<br />

nicht nur Waren verkaufen lassen, sondern vielmehr hohe Kosten durch die<br />

produktivitätssteigernde Nutzung des Mediums zur Kommunikation mit K<strong>und</strong>en,<br />

Geschäftspartnern, Lieferanten <strong>und</strong> Außendienstmitarbeitern eingespart werden<br />

können. Neben den Kosten spielt aber auch die Sicherheit eine überaus wichtige<br />

Rolle. Die Ursachen sind darin zu finden, dass viele Informationen, die über<br />

öffentliche Netze transportiert werden schon lange nicht mehr nur allgemeinen<br />

Charakter haben (z.B. Webseiten), sondern auch als sensibel <strong>und</strong> vertraulich<br />

eingestuft werden müssen.<br />

Ziel dieser Arbeit war es, ein Integrationskonzept für das Backendsystem der<br />

Firma Häcker-Automation zu entwickeln <strong>und</strong> vorzustellen, das aufzeigt, wie<br />

die im Backendsystem gehaltenen Informationen berechtigten Anwendern zur<br />

Verfügung gestellt werden können. Dabei wurde den Aspekten dynamische<br />

Verteilung einer Client-Anwendung, die den Zugriff auf das Backendsystem über<br />

einen Anwendungsserver ermöglicht, Nutzerfre<strong>und</strong>lichkeit <strong>und</strong> Sicherheit eine<br />

besondere Bedeutung eingeräumt.<br />

Mit Java-Web-Start wurde eine Technologie vorgestellt, mit der sich eigenständige<br />

Java-Applikationen über Rechnernetzwerke wie das Internet verteilen lassen.<br />

WebStart stellt damit eine echte Alternative zu Java-Applets dar, in der die meisten<br />

Nachteile von Applets durch gezielte Verbesserungen aus dem Weg geräumt<br />

worden sind. Diese Verbesserungen <strong>und</strong> das Sicherheitskonzept von WebStart<br />

(Schutz der übertragenen Java-Applikation <strong>und</strong> Schutz des Gastrechners) haben<br />

unter anderem dazu beigetragen, WebStart für die Verteilung der DPAC-Client-<br />

Anwendung einzusetzen. Für eine bessere Akzeptanz beim Anwender wäre es<br />

allerdings wünschenswert, wenn Java <strong>und</strong> damit auch WebStart zusammen mit<br />

den gängigen Betriebssystemen ausgeliefert würde, sodass eine möglicherweise<br />

als lästig empf<strong>und</strong>ene Nachinstallation der Java Virtual Machine (JVM) nicht<br />

mehr notwendig ist. Leider hat einer der bedeutendsten Betriebssystem-Hersteller<br />

Microsoft angekündigt, ab dem Jahr 2004 keine eigene JVM mehr auszuliefern,<br />

was angesichts der weltweit immer größer werdenden Zahl von Java-Nutzern<br />

nicht unbedingt nachvollziehbar ist. Erfreulich hingegen ist, dass Sun zwei der<br />

wichtigsten PC-Lieferanten, hp <strong>und</strong> DELL, gewinnen konnte, ihre Rechner ab<br />

Ende 2003 mit vorinstallierter JVM auszuliefern. [41]<br />

Neben der Verteilung der Client-Anwendung lag ein weiterer Schwerpunkt der<br />

Arbeit in der Sicherung der RMI-Kommunikation zwischen der Client-Anwendung<br />

106


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

<strong>und</strong> dem Anwendungsserver. Auf der Suche nach Lösungsmöglichkeiten für dieses<br />

Problem wurden neben der Java Cryptography Extension (JCE) <strong>und</strong> Java Secure<br />

Socket Extension (JSSE) auch Virtuell Private Networks (VPNs) betrachtet. Dabei<br />

hat sich herauskristallisiert, dass sich die auf Basis des SSL-Protokolls arbeitende<br />

JSSE am besten in die RMI-Architektur integrieren lässt.<br />

Den Grad an Sicherheit, den die JSSE bietet, wird zum einen von der internen<br />

Umsetzung des SSL-Protokolls, zum anderen von den zur Verfügung stehenden<br />

kryptographischen Verfahren <strong>und</strong> der eingesetzten Schlüssellängen bestimmt. Es<br />

ist leicht einzusehen, dass beispielsweise eine Verschlüsselung mit DES (Data<br />

Encryption Standard) heutzutage keinen ausreichenden Schutz mehr gewährleisten<br />

kann. Einfach aufgr<strong>und</strong> der Tatsache, dass schon vor einigen Jahren erfolgreiche<br />

Angriffe auf DES durchgeführt wurden. Dennoch wird DES vermutlich aus<br />

Kompatibilitätsgründen immer noch von vielen kryptographischen Werkzeugen<br />

unterstützt. So auch von der JSSE <strong>und</strong> JCE. Für kryptographische Produkte <strong>und</strong><br />

Werkzeuge ist es von besonderer Wichtigkeit, immer am Puls der Zeit zu bleiben,<br />

um aktuelle Erkenntnisse aus der Kryptoanalyse <strong>und</strong> neue kryptographische<br />

Verfahren einfließen zu lassen. Dass Sun Microsystems diesen Weg geht, zeigt<br />

die Integration des Advanced Encryption Standard (AES) in die JSSE <strong>und</strong> JCE<br />

Implementationen. Der Advanced Encryption Standard unterstützt Schlüssellängen<br />

bis zu 256 Bit <strong>und</strong> ist ab der Version 1.4.2 des J2SE SDK verfügbar.<br />

Allerdings ist auch das Image des AES, der als Nachfolger von DES gilt, schon<br />

ein klein wenig angekratzt. In [46] werden einige Methoden vorgestellt, die von<br />

den konventionellen Verfahren der Kryptoanalyse abweichen <strong>und</strong> AES mittelfristig<br />

in Bedrängnis bringen könnten. Dennoch darf AES vorerst mit ruhigem Gewissen<br />

benutzt werden. Nur 20 Jahre AES-Lebenserwartung, ähnlich wie bei DES sind<br />

wohl nicht zu erwarten. [46]<br />

Wie in der Arbeit erläutert, haftet RMI der Nachteil an, dass die Kommunikation<br />

einen offenen Port erfordert, der durch den weit verbreiteten Einsatz von<br />

Firewalls nicht immer zur Verfügung steht. Genau an diesem Punkt setzt das zur<br />

Zeit im Zusammenhang mit WebServices viel diskutierte Simple Object Access<br />

Protocol (SOAP) an. SOAP bietet einen einfachen Zugriff auf Server-Ressourcen<br />

mit Hilfe der etablierten Web-Standards HTTP <strong>und</strong> XML. Dabei beschreibt SOAP<br />

selbst nur die Art <strong>und</strong> Weise, wie Inhalte (Serialisierung) <strong>und</strong> die XML-Daten<br />

übertragen werden. Mit der Übertragung selbst hat SOAP aber eigentlich nichts<br />

zu tun, denn dafür wurden andere Protokolle definiert. Idealerweise findet HTTP<br />

als Transportprotokoll Verwendung, denn in der Regel beschränken Firewalls die<br />

Nutzung von HTTP nicht. Der XML-basierende Aufruf einer entfernten Routine<br />

sieht ganz allgemein betrachtet wie folgt aus: Zunächst wird der Aufruf in eine<br />

XML-Datenstruktur verpackt <strong>und</strong> via HTTP-Request (in der Regel auf dem<br />

Standardport 80) vom Client an den Server übertragen. Nach Abarbeitung der<br />

Routine verpackt der Server die Rückgabewerte ebenfalls in eine XML-Struktur<br />

<strong>und</strong> sendet diese per HTTP-Response zurück.<br />

Der Einsatz von SOAP bringt aber nicht nur Vorteile. So wird die zu übertragende<br />

Datenmenge durch die XML-Repräsentation vergrößert <strong>und</strong> sowohl server- als<br />

auch des clientseitig ist ein möglicherweise zeitaufwendiges Parsen der Parameter<br />

107


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

bzw. Ergebnissen erforderlich. In Umgebungen, die performante Übertragung<br />

fordern, wird sich SOAP deshalb wohl nicht so schnell durchsetzen. [45]<br />

Der letzte Teil der Arbeit beschäftigte sich mit der Entwicklung <strong>und</strong> Vorstellung<br />

eines Konzeptes zur Integration des DPAC-Backendsystems. Dabei wurden<br />

sowohl die von der Firma Häcker-Automation gestellten Anforderungen, als auch<br />

die vom Autor gezogenen Schlussfolgerungen, die sich während der Untersuchungen<br />

der Bereiche Gr<strong>und</strong>lagen, Mobiler Code <strong>und</strong> Sichere Kommunikation ergaben,<br />

bei der Konzeption berücksichtigt.<br />

Das erarbeitete Integrationskonzept <strong>und</strong> der darauf aufbauende Prototyp bilden<br />

eine Gr<strong>und</strong>lage, auf der sich das DPAC-Informationssystem der Firma Häcker-<br />

Automation in Zukunft weiter ausbauen <strong>und</strong> mit weiteren Funktionen versehen<br />

lässt.<br />

108


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

A<br />

Anhang<br />

A.1 Thesen dieser Arbeit<br />

• Da mobiler Code während des Transports über ein unsicheres Medium den<br />

unterschiedlichsten Bedrohungen ausgesetzt ist, muss er zu diesem Zeitpunkt<br />

durch geeignete Mechanismen geschützt werden.<br />

• Für den Schutz der Vertraulichkeit des mobilen Codes ist der Advanced Encryption<br />

Standard (AES) einzusetzen, da sein Vorgänger DES (Data Encryption<br />

Standard) diesbezüglich keine Sicherheit mehr gewährleisten kann.<br />

• Zukünftige Java-Web-Start-Versionen gilt es dahingehend zu verbessern, dass<br />

die vom Anwender getroffenen Entscheidungen bezüglich der Berechtigungen,<br />

die eine Applikation auf dem lokalen System hat, gespeichert werden,<br />

da ansonsten Akzeptanzprobleme auftreten.<br />

• Die Sicherheitserweiterung für Javas Remote Method Invocation (RMI Security<br />

Extension) hat bis heute das Entwurfsstadium noch nicht verlassen <strong>und</strong><br />

kann zur Sicherung der RMI-Kommunikation nicht eingesetzt werden.<br />

• Da RMI nie unmittelbar auf Sockets zugreift, können mit Hilfe von RMI-<br />

Socket-Factories benutzerspezifische Sockets implementiert werden die insbesondere<br />

die Einrichtung einer sicheren Kommunikationsverbindung zwischen<br />

Client <strong>und</strong> Server erlauben.<br />

• Da die RMI-Kommunikation einen offenen Port erfordert, kommt es zu Problemen,<br />

wenn RMI-Client oder RMI-Server hinter einer Firewall (Packetfilter)<br />

betrieben werden.<br />

• Der spontane Aufbau einer sicheren Kommunikationsverbindung mit Hilfe<br />

eines Virtuel Private Networks (VPN) ist nur dann möglich, wenn bereits eine<br />

entsprechende Infrastruktur zur Verfügung steht.<br />

• Die Client/Server-Architektur des DPAC-Informationssystems ist so konzipiert,<br />

dass auf Seiten des Clients nur die Präsentationslogik implementiert<br />

werden muss.<br />

• Ein Dienst zum Manipulieren <strong>und</strong> Abfragen der Daten im Backendsystem<br />

existiert auf dem DPAC-Anwendungsserver nur dann, wenn er von einem berechtigen<br />

DPAC-Client/Nutzer angefordert wurde <strong>und</strong> dieser damit arbeitet.<br />

Schwarzhausen, 01.07.2003<br />

Christian Stötzer<br />

I


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

A.2 Erstellen von Secure Sockets mit Hilfe der JSSE<br />

A.2.1<br />

Clientseitig<br />

An dieser Stelle soll die Erzeugung eines Secure-Socket-Objekts auf Seiten des<br />

Clients schrittweise beschrieben werden. Es wird vorausgesetzt, dass der zur<br />

Authentifizierung benötigte öffentliche Schlüssel des Servers in Form der Datei<br />

sever public.key bereits vorliegt.<br />

Vorbereitung<br />

1. Erzeugen eines Schlüsselpaars (öffentlich/privat) mit Hilfe des keytools.<br />

keytool -genkey -alias clientprivate -keystore client.private<br />

-keyalg rsa -keysize 1024<br />

Dieses Kommando erzeugt nach der Eingabe eines neuen keystore-Passworts<br />

sowie einiger Daten, die für das Testzertifikat benötigt werden, einen privaten<br />

<strong>und</strong> einen öffentlichen Schlüssel der Länge 1024 Bit für das RSA-Verfahren.<br />

Beide Schlüssel werden in der keystore-Datei client.private unter dem<br />

Alias clientprivate gespeichert.<br />

2. Export des öffentlichen Client-Schlüssels mittels keytool, um ihn für den Server<br />

verfügbar zu machen.<br />

keytool -export -alias clientprivate -keystore client.private<br />

-file client public.key<br />

Dieser Befehl schreibt nach Eingabe des keystore-Passworts eine Kopie des<br />

öffentlichen Client-Schlüssels in die Datei client public.key.<br />

3. Import des öffentlichen Server-Schlüssels für die spätere Authentifizierung<br />

des Servers.<br />

keytool -import -noprompt -alias severpublic -keystore<br />

server.public -file sever public.key<br />

Dieser Befehl importiert nach der Eingabe eines neuen keystore-Passworts<br />

den öffentlichen Schlüssel des Servers in eine neue keystore-Datei namens<br />

server.public. Zur Identifizierung bekommt der Schlüssel den Alias<br />

serverpublic zugewiesen.<br />

Programmierung<br />

4. Erzeugen eines SecureRandom-Objekts, das durch den Aufruf der Methode<br />

nextInt() eine kryptographische Pseudo-Zufallszahl berechnet.<br />

SecureRandom secureRandom = new SecureRandom();<br />

secureRandom.nextInt();<br />

II


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

5. Erzeugung eines leeren KeyStore-Objekts vom Typ ”JKS” <strong>und</strong> anschließende<br />

Initialisierung mit Hilfe der load()-Methode sowie der keystore-Datei<br />

client.private.<br />

KeyStore clientKeyStore = KeyStore.getInstance("JKS");<br />

clientKeyStore.load(new FileInputStream("client.private"),<br />

"keystore-Passwort".toCharArray());<br />

6. Erzeugen eines zweiten KeyStore-Objekts, welches den öffentlichen<br />

Schlüssel des Servers aufnimmt.<br />

KeyStore serverKeyStore = KeyStore.getInstance("JKS");<br />

serverKeyStore.load(new FileInputStream("server.public"),<br />

"keystore-Passwort".toCharArray());<br />

7. Erzeugen eines TrustManagerFactory-Objekts <strong>und</strong> anschließende Initialisierung<br />

mit dem serverKeyStore-Objekt. Das TrustManagerFactory-Objekt hat<br />

somit Zugriff auf den öffentlichen Schlüssel des Servers.<br />

TrustManagerFactory tmf =<br />

TrustManagerFactory.getInstance("SUNX509");<br />

tmf.init(serverKeyStore);<br />

Die TrustManagerFactory liefert später den TrustManager, der für die Authentifizierung<br />

des Servers benötigt wird.<br />

8. Erzeugen eines KeyManagerFactory-Objekts <strong>und</strong> anschließende Initialisierung<br />

mit dem clientKeyStore-Objekt. Das KeyManagerFactory-Objekt hat<br />

somit Zugriff auf den privaten Schlüssel des Clients.<br />

KeyManagerFactory kmf =<br />

KeyManagerFactory.getInstance("SUNX509");<br />

kmf.init(clientKeyStore,"keystore-Passwort".toCharArray());<br />

Die KeyManagerFactory liefert später den KeyManager, der für die Verwaltung<br />

der Schlüssel des Clients zuständig ist.<br />

9. Erzeugen eines SSLContext-Objekts, das eine Implementierung des Transport<br />

Layer Security Protokolls (TLS) repräsentiert. Anschließend wird es mit<br />

dem KeyManager, den die KeyManagerFactory liefert, dem TrustManager<br />

von der TrustManagerFactory <strong>und</strong> dem zu Beginn erzeugten SecureRandom-<br />

Objekt initialisiert.<br />

SSLContext sslContext = SSLContext.getInstance("TLS");<br />

sslContext.init(kmf.getKeyManagers(),<br />

tmf.getTrustManagers(),secureRandom);<br />

10. Die Methode getSocketFactory() des SSLContext-Objekts liefert ein<br />

SSLSocketFactory-Objekt, mit dessen Hilfe dann ein Secure-Socket-Objekt<br />

erzeugt wird.<br />

SSLSocketFactory sf = sslContext.getSocketFactory();<br />

SSLSocket socket = (SSLSocket)sf.createSocket(host,port);<br />

III


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

A.2.2<br />

Serverseitig<br />

Die notwendigen Schritte zur Generierung eines Secure-Server-Socket-Objekts auf<br />

Seiten des Servers ähneln denen, die clientseitig durchzuführen sind, um ein Secure-<br />

Socket-Objekt zu erzeugen. Soll der Server den Client authentifizieren, so muss auf<br />

Seiten des Server der öffentliche Schlüssel des Clients verfügbar sein. Im weiteren<br />

wird davon ausgegangen, dass die Datei client public.key den öffentlichen<br />

Schlüssel des Clients enthält <strong>und</strong> für den Server verfügbar ist.<br />

Vorbereitung<br />

1. Erzeugen eines Schlüsselpaars (öffentlich/privat) mit Hilfe des keytools.<br />

keytool -genkey -alias serverprivate -keystore server.private<br />

-keyalg rsa -keysize 1024<br />

Dieses Kommando erzeugt nach der Eingabe eines neuen keystore-Passworts<br />

sowie einiger Daten, die für das Testzertifikat benötigt werden, einen privaten<br />

<strong>und</strong> einen öffentlichen Schlüssel der Länge 1024 Bit für das RSA-Verfahren.<br />

Beide Schlüssel werden in der keystore-Datei server.private unter dem<br />

Alias serverprivate gespeichert.<br />

2. Export des öffentlichen Server-Schlüssels mittels keytool, um ihn für den Client<br />

verfügbar zu machen.<br />

keytool -export -alias serverprivate -keystore server.private<br />

-file server public.key<br />

Dieser Befehl schreibt nach Eingabe des keystore-Passworts eine Kopie des<br />

öffentlichen Server-Schlüssels in die Datei server public.key.<br />

3. Import des öffentlichen Client-Schlüssels für die spätere Authentifizierung<br />

des Clients.<br />

keytool -import -noprompt -alias clientpublic -keystore<br />

client.public -file client public.key<br />

Dieser Befehl importiert nach der Eingabe eines neuen keystore-Passworts<br />

den öffentlichen Schlüssel des Clients in eine neue keystore-Datei namens<br />

client.public. Zur Identifizierung bekommt der Schlüssel den Alias<br />

clientpublic zugewiesen.<br />

Programmierung<br />

4. Erzeugen eines SecureRandom-Objekts, das durch den Aufruf der Methode<br />

nextInt() eine kryptographische Pseudo-Zufallszahl berechnet.<br />

SecureRandom secureRandom = new SecureRandom();<br />

secureRandom.nextInt();<br />

IV


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

5. Erzeugung eines leeren KeyStore-Objekts vom Typ ”JKS” <strong>und</strong> anschließende<br />

Initialisierung mit Hilfe der load()-Methode sowie der keystore-Datei<br />

server.private.<br />

KeyStore serverKeyStore = KeyStore.getInstance("JKS");<br />

serverKeyStore.load(new FileInputStream("server.private"),<br />

"keystore-Passwort".toCharArray());<br />

6. Erzeugen eines zweiten KeyStore-Objekts, welches den öffentlichen<br />

Schlüssel des Clients aufnimmt.<br />

KeyStore clientKeyStore = KeyStore.getInstance("JKS");<br />

clientKeyStore.load(new FileInputStream("client.public"),<br />

"keystore-Passwort".toCharArray());<br />

7. Erzeugen eines TrustManagerFactory-Objekts <strong>und</strong> anschließende Initialisierung<br />

mit dem clientKeyStore-Objekt. Das TrustManagerFactory-Objekt hat<br />

somit Zugriff auf den öffentlichen Schlüssel des Clients.<br />

TrustManagerFactory tmf =<br />

TrustManagerFactory.getInstance("SUNX509");<br />

tmf.init(clientKeyStore);<br />

Die TrustManagerFactory liefert später den TrustManager, der für die Authentifizierung<br />

des Clients benötigt wird.<br />

8. Erzeugen eines KeyManagerFactory-Objekts <strong>und</strong> anschließende Initialisierung<br />

mit dem serverKeyStore-Objekt. Das KeyManagerFactory-Objekt hat<br />

somit Zugriff auf den privaten Schlüssel des Servers.<br />

KeyManagerFactory kmf =<br />

KeyManagerFactory.getInstance("SUNX509");<br />

kmf.init(serverKeyStore,"keystore-Passwort".toCharArray());<br />

Die KeyManagerFactory liefert später den KeyManager, der für die Verwaltung<br />

der Schlüssel des Servers zuständig ist.<br />

9. Erzeugen eines SSLContext-Objekts, das eine Implementierung des Transport<br />

Layer Security Protokolls (TLS) repräsentiert. Anschließend wird es mit<br />

dem KeyManager, den die KeyManagerFactory liefert, dem TrustManager<br />

von der TrustManagerFactory <strong>und</strong> dem zu Beginn erzeugten SecureRandom-<br />

Objekt initialisiert.<br />

SSLContext sslContext = SSLContext.getInstance("TLS");<br />

sslContext.init(kmf.getKeyManagers(),<br />

tmf.getTrustManagers(),secureRandom);<br />

10. Die Methode getServerSocketFactory() des SSLContext-Objekts liefert ein<br />

SSLServerSocketFactory-Objekt, mit dessen Hilfe dann ein Secure-Server-<br />

Socket-Objekt erzeugt wird.<br />

V


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

SSLServerSocketFactory ssf = sslContext.getSocketFactory();<br />

SSLServerSocket servs =<br />

(SSLServerSocket)ssf.createServerSocket(port);<br />

servs.setNeedClientAuth(true);<br />

VI


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Abbildungsverzeichnis<br />

1 Kosten / Nutzen Verhältnis für Sicherheitsvorkehrungen . . . . . . . 2<br />

2 Sicherheits-Gr<strong>und</strong>funktionen . . . . . . . . . . . . . . . . . . . . . 5<br />

3 Beispiel einer Zugriffsmatrix [19] . . . . . . . . . . . . . . . . . . 9<br />

4 Angriffszyklus [20] . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

5 Komponenten eines Kryptosystems [5] . . . . . . . . . . . . . . . . 19<br />

6 Funktionsweise des DES [24] . . . . . . . . . . . . . . . . . . . . . 26<br />

7 Triple-DES [28] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

8 Die Teilschichten des SSL-Protokolls im TCP/IP Modell [42][24] . 32<br />

9 Das SSL-Record-Protokoll [4] . . . . . . . . . . . . . . . . . . . . 34<br />

10 Anwendung von IPsec auf IP-Pakete [14] . . . . . . . . . . . . . . 36<br />

11 Bedrohungsszenarien für mobilen Code [5] . . . . . . . . . . . . . 40<br />

12 Komponenten der Java-Sicherheitsarchitektur [5] . . . . . . . . . . 49<br />

13 Sicherheitsmodelle in JDK1.0 <strong>und</strong> JDK1.1 [5][20] . . . . . . . . . . 50<br />

14 Der Java-Web-Start Applikationsmanager . . . . . . . . . . . . . . 56<br />

15 Allgemeiner Überblick über die Elemente einer JNLP-Datei [27] . . 58<br />

16 Frontend des Java-Policy-Tools . . . . . . . . . . . . . . . . . . . . 64<br />

17 WebStart Sicherheitshinweis . . . . . . . . . . . . . . . . . . . . . 65<br />

18 WebStart Sicherheitswarnung . . . . . . . . . . . . . . . . . . . . . 66<br />

19 WebStart HTTPS-Sicherheitswarnung . . . . . . . . . . . . . . . . 68<br />

20 Möglicher WebStart Sicherheitshinweis . . . . . . . . . . . . . . . 70<br />

21 Eine 3-tier-Architektur . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

22 Kommunikationspartner in einem VPN . . . . . . . . . . . . . . . 82<br />

23 3-tier-Architektur des DPAC-Informationssystems . . . . . . . . . . 88<br />

24 Frontend zur Kontaktverwaltung im DPAC-System . . . . . . . . . 90<br />

25 Schema des DPAC-Anwendungsservers . . . . . . . . . . . . . . . 98<br />

26 USB- <strong>und</strong> Parallel-Port Hardlock . . . . . . . . . . . . . . . . . . . 103<br />

VII


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

Literatur<br />

[1] ALADDIN KNOWLEDGE SYSTEMS GERMANY: Hardlock - Technical Documentation.<br />

Aladdin, 2001.<br />

[2] BRACZEK, MARK: Mobilität <strong>und</strong> IT-Sicherheit - Eine Einführung. Technische<br />

Universität Ilmenau, 2000.<br />

[3] BSI: IT-Gr<strong>und</strong>schutzhandbuch. B<strong>und</strong>esamtes für Sicherheit in der Informationstechnik,<br />

2002.<br />

[4] COULOURIS, GEORGE, JEAN DOLLIMORE <strong>und</strong> TIM KINDBERG: Verteilte<br />

Systeme - Konzepte <strong>und</strong> Design. Addison-Wesley, 3. Auflage, 2002.<br />

[5] ECKERT, CLAUDIA: IT-Sicherheit. Oldenbourg Verlag, 2001.<br />

[6] EILEBRECHT, LARS: Apache Web-Server. mitp, 2000.<br />

[7] ENGELKE, MARTINA: Datenschutz <strong>und</strong> Datensicherheit Vorlesungsskript.<br />

Otto-von-Guericke-Universität Magdeburg, 2001.<br />

[8] FERGUSON, NIELS <strong>und</strong> BRUCE SCHNEIER: A Cryptographic Evaluation<br />

of IPsec. Counterpane Internet Security, Inc., 1998. http://www.<br />

counterpane.com.<br />

[9] GOOSSENS, MICHEL, FRANK MITTELBACH <strong>und</strong> ALEXANDER SAMARIN:<br />

Der L A TEX Begleiter. Addison-Wesley, 1998.<br />

[10] HAAS, ROLAND <strong>und</strong> ULRICH SCHREINER: Java-Technologien für Unternehmensanwendungen.<br />

Hanser, 2003.<br />

[11] HUNGENBERG, THOMAS: Online-Lexikon der Informationssicherheit. Webseite,<br />

2000. http://www.demonium.de/th/home/sicherheit/<br />

lexikon/index.phtml.<br />

[12] INSTITUTS FÜR ANGEWANDTE INFORMATIONSVERARBEITUNG UND<br />

KOMMUNIKATIONSTECHNOLOGIE: iaik’s java crypto products. Webseite,<br />

2003. http://jce.iaik.tugraz.at/products/index.php.<br />

[13] JGURU: F<strong>und</strong>amentals of RMI - Short Course. Webseite, 2003. http:<br />

//developer.java.sun.com/developer/onlineTraining/<br />

rmi/RMI.html.<br />

[14] KOWALK, W.: Rechnernetze. Webseite, 2002. http://einstein.<br />

informatik.uni-oldenburg.de/rechnernetze/Default.<br />

htm.<br />

[15] KRÜGER, GUIDO: Handbuch der Java-Programmierung. Addison-Wesley, 3.<br />

Auflage, 2002.<br />

VIII


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

[16] LIPP, PETER, DIETER BRATKO, JOHANNES FARMER, WOLFGANG PLAT-<br />

ZER <strong>und</strong> ANDREAS STERBENZ: Sicherheit <strong>und</strong> Kryptographie in Java. Addison<br />

Wesley, 2000.<br />

[17] MCGRAW, GARY <strong>und</strong> EDWARD E. FELTEN: Securing Java: Getting Down to<br />

Business with Mobile Code. Wiley Computer Publishing, 1999.<br />

[18] PISTOIA, MARCO, DUANE F. RELLER, DEEPAK GUPTA, MILIND NAGURA<br />

<strong>und</strong> ASHOK K. RAMANI: Java2 Network Security. Prentice Hall PTR, 1999.<br />

[19] POHL, HARTMUT, GERHARD WECK <strong>und</strong> (HERAUSGEBER): Einführung in<br />

die Informationssicherheit. Oldenbourg Verlag München Wien, 1993.<br />

[20] RAEPPLE, MARTIN: Sicherheitskonzepte für das Internet. dpunkt.verlag, 2.<br />

Auflage, 2001.<br />

[21] REIF, HOLGER: Sicherheit in Rechnernetzen Vorlesungsskript. Technische<br />

Universität Ilmenau, Fakultät für Informatik <strong>und</strong> Automatisierung, Institut für<br />

Praktische Informatik <strong>und</strong> Medieninformatik, 1999.<br />

[22] REISER, HELMUT: Sicherheitsarchitektur für ein Managementsystem auf der<br />

Basis Mobiler Agenten. Herbert Utz Verlag, 2001.<br />

[23] RÜTSCHLIN, JOCHEN: Sicherheitsverwaltung in einer Umgebung heterogener<br />

Datenbanken im Intranet. Diplomarbeit, Universität Ulm, 1999.<br />

[24] SCHMEH, KLAUS: Kryptografie <strong>und</strong> Public-Key-Infrastrukturen im Internet.<br />

dpunkt.verlag, 2. aktualisierte Auflage, 2001.<br />

[25] SCHMIDT, JÜRGEN: Das private Internet. c’t, 10, 2003.<br />

[26] SCHMIDT, JÜRGEN: Der Pförtner zum Netz. c’t, 10, 2003.<br />

[27] SCHMIDT, RENÉ W.: JSR-56 - Java T M Network Launching Protocol and API<br />

Specification v1.0.1. Sun Microsystems, Inc., 2001.<br />

[28] SCHNEIER, BRUCE: Angewandte Kryptographie. Addison-Wesley, 1996.<br />

[29] SCHNEIER, BRUCE <strong>und</strong> MUDGE: Cryptanalysis of Microsoft’s PPTP Authentication<br />

Extensions (MS-CHAPv2). Webseite, 1999. http://www.<br />

counterpane.com/pptpv2-paper.html.<br />

[30] SCHWENK, JÖRG: Sicherheit <strong>und</strong> Kryptographie im Internet. vieweg, 2002.<br />

[31] SCOTT, CHARLIE, PAUL WOLFE <strong>und</strong> MIKE ERWIN: Virtuelle Private Netzwerke.<br />

O’Reilly, 1999.<br />

[32] SOHR, KARSTEN: Die Sicherheitsaspekte von mobilem Code. Doktorarbeit,<br />

Philipps-Universität Marburg, 2001.<br />

[33] SOSNA, DIETER: Datenschutz <strong>und</strong> Datensicherheit Vorlesungsskript. Universität<br />

Leipzig, 1999.<br />

IX


Inv.-Nr.:2003-07-02/047/IN96/2253<br />

[34] STEHLI, MARCEL: Java Web Start Technologie. Technische Universität Ilmenau,<br />

2001.<br />

[35] SUN MICROSYSTEMS: jar - The Java Archive Tool. Webseite, 2001.<br />

http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/<br />

jar.html.<br />

[36] SUN MICROSYSTEMS: jarsigner - JAR Signing and Verification Tool. Webseite,<br />

2001. http://java.sun.com/products/jdk/1.2/docs/<br />

tooldocs/solaris/jarsigner.ht%ml.<br />

[37] SUN MICROSYSTEMS: keytool - Key and Certificate Management Tool. Webseite,<br />

2001. http://java.sun.com/products/jdk/1.2/docs/<br />

tooldocs/solaris/keytool.html%.<br />

[38] SUN MICROSYSTEMS: Java Cryptography Extension. Webseite, 2003.<br />

http://java.sun.com/products/jce/.<br />

[39] SUN MICROSYSTEMS: Java Secure Socket Extension. Webseite, 2003.<br />

http://java.sun.com/products/jsse/.<br />

[40] SUN MICROSYSTEMS: Java Web Start. Webseite, 2003. http://java.<br />

sun.com/products/javawebstart/.<br />

[41] SUN MICROSYSTEMS: JavaOne conference Online. Webseite, 2003. http:<br />

//javaoneonline.mentorware.net.<br />

[42] TANENBAUM, ANDREW S.: Computernetzwerke. Prentice Hall, 3. revidierte<br />

Auflage, 1998.<br />

[43] THALHEIM, LISA, JAN KRISSLER <strong>und</strong> PETER-MICHAEL ZIEGLER: Körperkontrolle.<br />

c’t, 11, 2002.<br />

[44] THOMAS, STEPHEN A.: SSL and TLS Essentials. Wiley Computer Publishing,<br />

2000.<br />

[45] ULLENBOOM, CHRISTIAN: Java ist auch eine Insel. Galileo Computing,<br />

2002.<br />

[46] WOBST, REINHARD: Angekratzt - Kryptanalyse von AES schreitet voran. iX,<br />

12, 2002.<br />

[47] WUTKA, MARK: J2EE Developer’s Guide. Markt <strong>und</strong> Technik, 2002.<br />

[48] ZIMMERMANN, JÜRGEN <strong>und</strong> GERD BENEKEN: Verteilte Komponenten <strong>und</strong><br />

Datenbankanbindung. Addison-Wesley, 2000.<br />

X

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!