Paper - Lehre und Forschung Thorsten Strufe
Paper - Lehre und Forschung Thorsten Strufe
Paper - Lehre und Forschung Thorsten Strufe
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