Universität Karlsruhe Fakultät für Informatik Universität Karlsruhe

Proseminar Rund ums Internet

Sicherheit im Internet

Fabian Hartmann

Inhaltsverzeichnis

        Einleitung - Informationen und die nötige Sicherheit
        Was bedeutet "Sicherheit" überhaupt?
        Authorisierung und Authentifikation
                Passwörter
                Kryptographie
                        Der RSA-Algorithmus
                Digitale Signaturen
        Firewalls
                Paketfilter
                        IP Spoofing
                Circuit Relays
                        SOCKS
        Ausgewählte Sicherheitsvorkehrungen im Internet
                IPv6
                S-MIME
        Literatur

Einleitung - Informationen und die nötige Sicherheit

Informationen können von unschätzbarem Wert sein, so können sie direkt gekauft oder verkauft werden, dazu genutzt werden, um sich einen Vorsprung in Sachen Fortschritt vor der wirtschaftlichen und wissenschaftlichen Konkurrenz zu verschaffen oder um in fremdes Privatleben einzudringen. Es ist also offensichtlich, dass gewisse Daten vor dem Zugriff/der Manipulation Dritter geschützt werden müssen, sobald sie über das Internet transportiert werden, oder auf einem Computer liegen, der aus dem Internet zugänglich ist. Doch bevor "Sicherheit" hergestellt werden kann, muss erst einmal klar definiert werden, wie der geplante Schutz auszusehen hat - welche Informationen offenliegen (dürfen) und welche geschützt werden (müssen).

Was bedeutet "Sicherheit" überhaupt?

Sicherheit ist kein absoluter, fester Begriff, sondern muss je nach dem individuellen Bedarf neu definiert werden. Jeder Datenbestand hat eine größere oder kleinere Anzahl an Benutzern, die auf ihn zugreifen dürfen. Doch warum und unter welchen Umständen, muss erst in einer klar definierten Sicherheitsrichtlinie festgelegt werden. Aufbauend auf dieser Richtlinie werden dann die Schutzmechanismen installiert, bei denen es vielerlei zu beachten gilt: Muss man zum Beispiel sämtliche Daten gleichermaßen gut schützen, oder ist dazu der Zeit- und Geldaufwand zu hoch? Was ist "wichtig" und was weniger? Muss man nicht nur Daten schützen, sondern auch die Hardware?

Es gilt, sicher zu stellen, dass die Daten nicht von unauthorisierten Dritten gelesen und evtl. verändert können und dass sie beim Transport immer nur in ihrer Originalform nur das gewünschte, wahre Ziel erreichen. Gegebenenfalls müssen darüber hinaus auch von Angriff gefährdete Rechner vor fremden Zugriff und somit Virenattacken o.ä. geschützt werden. Wie diese Vorhaben jedoch realisiert werden, ist vom Aufwand und von der Vorgehensweise her immer unterschiedlich. Auf die gängigsten Methoden um "Sicherheit" herzustellen, wird nun im Folgenden eingegangen.

Diese basieren, wie bereits erwähnt, auf einer klar strukturierten und definierten Sicherheitsrichtlinie, an die sich alle beteiligten Personen halten müssen. Wer die nötigen Anweisungen missachtet oder vernachlässigt (z.B. indem er notierte Passwörter offen herumliegen lässt), kann auch das ausgeklügelste Sicherheitskonzept zum Kippen bringen.

Authorisierung und Authentifikation

Mit den folgenden Mechanismen kann fest- und sichergestellt werden, ob und dass es sich wirklich um einen berechtigten Nutzer oder berechtigte Nutzergruppe handelt (Authorisierung), und ob man es auch über unsichere Verbindungen mit den wahren Information/der wahren Gegenseite zu tun hat (Authentifikation).

Passwörter

Ein Passwort ist wohl die bekannteste und verbreiteteste Methode, um spezielle Daten (Internetseiten, ZIP-Archive etc.) und Hardware allgemein (z.B. BIOS-Passwortabfrage beim Hochfahren eines PCs, PIN-Nummer beim Handy) vor dem Zugriff Dritter zu schützen. Der User wird dazu aufgefordert, eine festgelegte Zeichenkette einzugeben, oftmals auch in Verbindung mit einem gültigen Login-Namen.

Wie sicher ein Passwort im Endeffekt ist, hängt von den verwendeten Zeichen und der Passwortlänge ab. Angenommen, ein Brute-Force-Algorithmus soll ein 4 Zeichen langes Passwort knacken, und es ist bekannt, dass das Wort lediglich aus den Großbuchstaben A-Z besteht. Dann gibt es 264=456.976 Möglichkeiten, die der Algorithmus maximal ausprobieren muss, was auf heutigen handelsüblichen Rechnern eine Angelegenheit von Minuten oder gar Sekunden sein kann. Nimmt man jetzt noch die Kleinbuchstaben a-z hinzu, so müsste der Algorithmus schon maximal 524=7.311.616 Kombinationen durchprobieren. So kann man die Zahl noch weiter erhöhen, indem man noch die Ziffern 0-9 und Sonderzeichen hinzunimmt (Vergrößerung der Basis) und/oder die Länge des Passwortes erweitert (Vergrößerung des Exponenten), was zu immensen Aufwandsunterschieden führen kann.

An einem praktischen Beispiel soll dieser Sachverhalt nochmal verdeutlicht werden: Ein Programm, das Passwörter von RAR-Archiven im Brute-Force-Verfahren ausprobiert, benötigt auf einem AMD Athlon 1000 für alle Kombinationen (A-Z, a-z, 0-9) eines 5-Zeichen-Passwortes bereits voraussichtlich mehr als 15 Tage. Erhöht man die Anzahl der Zeichen auf 6, so werden mehr als 2,5 Jahre benötigt...

Eine andere Methode neben dem "stupiden" Brute-Force-Algorithmus ist z.B. das Arbeiten mit Wortlisten. Dies hat den Unterschied, dass nicht einfach sämtliche Zeichenkombinationen durchprobiert werden, sondern gezielt häufig verwendete Kennwörter nacheinander getestet werden, mit nicht zu unterschätzendem Erfolg. So konnten in einem Versuch mit einer aus nicht mal 20.000 Wörtern bestehenden Liste immerhin 7,4% von knapp 14.000 Passwörtern enttarnt werden (siehe [OK], S.131). Einfache oder allgemein bekannte Zeichenfolgen aller Art sollten also vermieden werden, seien es Namen, Telefonnummern, Autokennzeichen, Sprichwörter oder Passwörter, die nur aus einem Buchstaben bestehen ("yyyyyy"). In der grauen Theorie gilt, dass es am besten sei, eine mindestens 8 Zeichen lange Fantasiezeichenkette zu wählen, die sowohl Klein- als auch Großbuchstaben enthält, sowie Zahlen und Sonderzeichen, und diese alle 3-6 Monate zu ändern. Doch natürlich kann man von kaum jemanden verlangen, sich -zig kryptische Passwörter für das tägliche Leben zu merken, die sich darüber hinaus ständig ändern. Die Suche nach dem "perfekten Passwort" gerät hier also zur Gratwanderung.

Kryptographie

Es heisst, seit es die (Schrift-)Sprache gibt, existiert der Gedanke der Verschlüsselung, um gewisse Nachrichten nur einem Kreis von Eingeweihten zugänglich zu machen. Julius Cäsar z.B. schickte seinen Armeen Nachrichten, bei denen er alle Buchstaben drei Stellen im Alphabet nach vorne verschob. Aus ANGRIFF wurde also DQJULII. War das Ende des Alphabets erreicht, so ging es wieder von vorne los, aus XYZ wurde also ABC. So primitiv dieser Schutz auch scheinen mag: Bis vor 30 Jahren gab es nur Ansätze zur Kryptographie, bei denen Verschlüsselung und Entschlüsselung mit demselben Algorithmus (bzw. zwei gegensätzlichen Algorithmen, bei Cäsar also drei Buchstaben zurück zur Entschlüsselung) vorgenommen wurden. Man bezeichnet dieses Prinzip als symmetrischer Schlüssel. Das fortwährende Problem hier war das Weiterleiten des Schlüssels - Cäsar musste ja seinen Soldaten irgendwie mitteilen, dass sie im Alphabet überall drei Buchstaben zurückzählen mussten, um den Klartext zu erhalten, ohne dass der Feind unterwegs davon erfährt.

Der RSA-Algorithmus

Erst in den siebziger Jahren wurde dann das Konzept des asymmetrischen Schlüssels oder öffentlichen Schlüssels (engl. public key encryption) von Rivest, Shamir und Adleman (RSA) vorgestellt und damit quasi der bis heute gültige state-of-the-art Verschlüsselungsstandard geschaffen, der vor allem durch das beliebte Programm Pretty Good Privacy (PGP) berühmt wurde. Hier ist die Idee, dass zwei Schlüssel benutzt werden, die über einen mathematischen Algorithmus zusammenhängen, der eine ist nur zum Verschlüsseln, der andere nur zum Entschlüsseln gedacht. Der Schlüssel zum Codieren ist öffentlich und kann ruhig für alle frei zugänglich sein. Er wird bei Bedarf benutzt, um dem Empfänger die geheime Nachricht zu verschlüsseln und dieser wiederum behält den zweiten, privaten Schlüssel zum Decodieren der Nachricht für sich.

Mathematisch basiert die Idee zum Ver- und Entschlüsseln darauf, dass zwei möglichst große Primzahlen P und Q gewählt werden. Groß bedeutet hier mindestens 1024 Bit, also 100 oder mehr Bytes. Mit Hilfe dieser werden die beiden Schlüssel berechnet, und zwar durch zwei unterschiedliche Rechenverfahren (sonst wäre das Ergebnis und die beiden Schlüssel identisch). Multipliziert ergeben P und Q eine öffentliche, aber immens große, Zahl n, die nur unter sehr hohem Rechenaufwand wieder in ihre Primfaktoren zerlegt werden kann. Dieser, meist nicht lohnenswerte, Rechenaufwand ist de facto die Sicherheit, die der RSA-Algorithmus bietet. Man bezeichnet dieses Prinzip von der nur sehr schwer zu berechnenden Umkehrfunktion auch als Falltüralgorithmus. Ein weiteres Beispiel für so einen Falltüralgorithmus ist zum Beispiel ein Telefonbuch: Es ist sehr leicht, einem Namen eine Telefonnummer zuzuordnen, umgekehrt jedoch einer unbekannten Telefonnummer einen Namen zuzuordnen, ist praktisch unmöglich. Im Detail gilt für den RSA-Algorithmus:

Der Klartext wird als Binärzahl m der Länge n aufgefasst. Ist der Klartext zu lang, so wird er in mehrere Stücke zerlegt, die jeweils für sich verschlüsselt werden. Es sind:

n      =   P  ·  Q   : öffentliche Zahl
phi(n) = (P-1)·(Q-1)
m < n                : Klartext
e                    : öffentlicher Schlüssel
c = m^e mod n        : Geheimtext
d                    : privater Schlüssel
Der öffentliche Schlüssel e ist eine beliebige Zahl, die mehrere Bedingungen erfüllen muss: Gemeinsam mit der bekannten Zahl n wird mit e aus dem Klartext m der Codetext c erzeugt. Auch der private Schlüssel d wird mit Hilfe von e und n erzeugt, denn es gilt:
d·e mod phi(n) = 1
oder anders ausgedrückt
d·e  =  k·phi(n) + 1
für irgend ein ganzzahliges, positives k

Im Klartext bedeutet dies, dass man ein k finden muss, welches für die nach d aufgelöste Gleichung ein ganzzahliges Ergebnis liefert. Dies schafft man nur durch Ausprobieren, da man nur eine Gleichung zur Verfügung hat, jedoch zwei Unbekannte (k und d). Zum Dechiffrieren wird dann im Prinzip genau dieselbe Gleichung angewandt wie zum Chiffrieren, benötigt wird wieder die öffentliche Zahl n, sowie natürlich der private Schlüssel und der Codetext:

m = c^d mod n
Dass dieses funktioniert, wird durch einen Satz von Euler belegt, der besagt: Ist n = P·Q, so gilt für alle Zahlen m mit m < n und alle natürlichen Zahlen k:
m^(k·phi(n)+1) mod n  =  m
Also gilt:
c^d mod n  =  m^(de) mod n
           =  m^(k·phi(n) + 1) mod n
           =  m
Um RSA zu knacken, müsste ein unbefugter Dritter versuchen, den privaten Schlüssel d aus dem öffentlichen Schlüssel e zu berechnen oder phi(n) irgendwie zu bestimmen. Es lässt sich zeigen, dass beides mindestens so schwer ist, wie die Primfaktorzerlegung n = P·Q zu berechnen. Dieses ist nach heutiger Kenntnis zu rechenaufwendig. Auch direkt die e-te Wurzel aus c zu berechnen (modulo n) ist zu rechenaufwendig. Ein interessanter Bonus für diese Form von Kryptographie ist zusätzlich, dass ja prinzipiell bekannt ist, wie der RSA-Algorithmus funktioniert und somit auch, wie man ihn theoretisch knacken könnte. Dies ist paradoxerweise eindeutig ein Vorteil gegenüber allen geheimen Algorithmen, die darauf bauen, von der Funktionsweise her für die Allgemeinheit unbekannt zu sein. Der Leichtsinn, sich in evtl. falscher Sicherheit zu wiegen, kann gefährlicher sein, als sich der Unsicherheit bewusst zu sein und ihr entgegen zu arbeiten.

Dass RSA-verschlüsselte Nachrichten aufgrund des Aufwandes mit den heutigen technischen Möglichkeiten praktisch unmöglich zu knacken sind (eine entsprechend hohe Bitzahl bei P und Q vorausgesetzt), hatte zur Folge, dass Programme wie PGP unter das US-Waffengesetz fielen und somit bei dortigen Servern Ausfuhrbestimmungen zu beachten waren. Hauptsorge der US-Regierung war dabei, dass PGP Datenkontrolle grundsätzlich nicht zulässt, wobei aber auch inzwischen eingesehen wurde, dass nationale Exportverbote für eine weltweit frei erhältliche Software unsinnig sind.

Digitale Signaturen

Generell sprechen wir von digitalen Signaturen, wenn Daten zu Authentifikationszwecken an andere Daten angehängt werden, in der Form, dass der Anhang eindeutig einer Person zugeordnet wird (daher Signatur, also Unterschrift) und eine unerlaubte Veränderung der Nachricht sofort bemerkt wird. In der Praxis wird auch hier das Prinzip von öffentlichen und privaten Schlüsseln angewandt, nur genau anders herum als im vorigen Abschnitt. Der Unterzeichner erzeugt zum Schutz vor Manipulation einen eindeutigen Code auf Basis der Nachricht (sog. Hashcode) und verschlüsselt diesen mit seinem privaten Schlüssel. Das Ganze wird, wie eben erwähnt, an die eigentliche Nachricht angehängt. Die Echtheit der (lesbaren!) Nachricht bzw. des Absenders kann dann von dem Empfänger mit seinem passenden öffentlichen Schlüssel überprüft werden. Zuerst wird nach demselben Algorithmus wie beim Absender der Hashcode der Nachricht entwickelt. Daraufhin wird mit dem öffentlichen Schlüssel die Signatur des Absenders entschlüsselt und die beiden Hashcodes werden verglichen. Sollte die Nachricht zwischenzeitlich von jemandem verändert worden sein, so ist der vom Empfänger errechnete Hashcode ein anderer als der ursprüngliche des Absenders.

Firewalls

Mit dem Begriff "Firewall" bezeichnet man allgemein eine Komponente im privaten, internen Netzwerk (LAN), verbunden mit einem öffentlichen, externen Netz (also wie dem Internet). In Spezialfällen kann auch eine Firewall verschiedene Netzsegmente eines LANs voneinander trennen. Sie hat dafür zu sorgen, dass die User innerhalb des privaten Netzes möglichst ohne Einschränkungen auf das externe Netz zugreifen können und gleichzeitig vor Zugriffen aus dem öffentlichen Netz geschützt sind. Um dies zu ermöglichen, darf nur die Firewall den einzigen Zugang zum externen Netz darstellen. Es ergeben sich dadurch mehrere Vorteile: Es gibt mehrere verschiedene Mechanismen, mit denen eine Firewall alleine oder kombiniert ausgestattet werden kann und die je nach User und Dienst die Verbindungen zulassen oder verhindern, darunter Paketfilter und Circuit Relays.

Paketfilter


Bild 1

Paketfilter sind in der Lage, Datenpakete nach den Kriterien Sende- und Empfangsadresse, Protokolle, Ports und benutzerdefinierten Bitmasken zu filtern (also zu blockieren). Dies geschieht mittels einer Filtertabelle, in der die gültigen Kombinationen aus den genannten Kriterien festgelegt werden (siehe Tabelle - dort werden die gültigen Kombinationen eines Paketfilters mit zwei Schnittstellen als möglichen Eingang dargestellt).

ARRIVES ON INTERFACE IP SOURCE IP DEST. PROTOCOL SOURCE PORT DEST. PORT
2 * * TCP * 21
2 * * TCP * 23
1 128.5.*.* * TCP * 25
2 * * UDP * 43
2 * * UDP * 69
2 * * TCP * 79

Der Paketfilter überprüft bei jedem ankommenden (eingehenden und ausgehenden) Datenpaket, ob dessen Kriterien mit der Filtertabelle konform gehen. Wenn ja, wird es weitergeleitet, andernfalls verworfen. Diese Richtung macht mehr Sinn, als die ungültigen Kombinationen mittels der Filtertabelle zu führen, denn die Anzahl bekannter Ports mit ihren Sicherheitslücken ist groß und wächst immer weiter. Die Tabelle müsste ständig auf dem neuesten Stand gehalten werden. So aber werden erst einmal pauschal alle Adress/Port-Kombinationen blockiert und nur freigegeben, wenn es einen guten Grund dafür gibt.

Da es sich hier um einen schnell zu implementierenden und relativ unkomplizierten Schutz handelt, ergeben sich immer mehr Schwierigkeiten je komplexer das interne Netzwerk ist - die Filtertabelle mit ihren Quell- und Zieladressen wächst und wird zunehmend unübersichtlicher. Hinzu kommt, dass es keine wirkliche Authentifikation gibt, ausser über das Überprüfen der IP-Sendeadresse. Das sogenannte IP Spoofing (engl. fälschen, schwindeln) gehört aber zu den beliebtesten Hackerangriffen.

IP Spoofing

IP Spoofing bedeutet, dass der Angreifer Datenpakete mit gefälschter IP-Sendeadresse erzeugt, die das Paket eines internen Senders vortäuscht. Das Ziel jedoch schickt seine Bestätigung (ACK) nicht an den Hacker, sondern an die gültige, vorgetäuschte Sendeadresse zurück (vgl. Bild 3). So wirkt der unzulässige Datenstrom vom Angreifer zum Netzwerk völlig ordnungsgemäß, der Angriff wird nicht als solcher identifiziert und bleibt unbemerkt. Auf diese Art wird gefährlicherweise nach wie vor scheinbare Sicherheit vermittelt und sobald der Hacker es durch das Spoofing erstmal geschafft hat, Datenpakete ins abgesicherte Netz zu versenden, stehen die Möglichkeiten für weitere Angriffe offen.


Bild 3

Circuit Relays


Bild 4

Durch den Einsatz von Circuit Relays als Firewall-Komponenten kann die Netzsicherheit stark erhöht werden. Durch sie werden Applikationen ermöglicht, die auf den Kommunikationsprotokollen TCP und UDP basieren (z.B. WWW oder Telnet), ohne dass eine durchgehende Kommunikationsverbindung auf Netzwerkebene (siehe Paketfilter) zugelassen werden muss. Aus diesem Grund nennt man Circuit Relays und die im Anschluss vorgestellten Application Gateways auch Proxy Server (proxy: engl. Handelsbevollmächtigter, Stellvertreter). Das Circuit Relay ist sozusagen die Vermittlung für diese Protokolle. Die eingehenden Verbindungen enden am Circuit Relay und werden am anderen Ende wieder aufgebaut.

SOCKS

Die am meisten verbreitete Implementierung eines Circuit Relays ist die Public Domain-Software SOCKS von David Koblas. Die Software fungiert als TCP- bzw. UDP-Relay, unterstützt das neue IPv6-Protokoll (siehe unten), Verschlüsselung und Benutzerauthentifikation. Referenzimplementationen von SOCKS-Servern gibt es für alle gängigen UNIX-Varianten und für Windows NT. SOCKS ist völlig unabhängig von irgendwelchen Applikationen, deshalb kann praktisch jeder Dienst mittels SOCKS über die Firewall betrieben werden, ohne dass eine durchgehende TCP-Verbindung bestehen muss. Jedoch müssen die Clientanwendungen SOCKS unterstützen.

Ausgewählte Sicherheitsvorkehrungen im Internet

Neben den eben erläuterten Vorrichtungen, für die man im Normalfall selbst zu sorgen hat, wurden mittlerweile auch in der Architektur des Internets selbst Möglichkeiten geschaffen, um mehr Sicherheit zu ermöglichen. Einige ausgewählte von diesen sollen hier zum Abschluss nochmal vorgestellt werden.

IPv6

Wegen des extrem starken Wachstums und vieler sicherheitskritischer Applikationen im Internet wurde Anfang der neunziger Jahre immer deutlicher, dass das Internet-Protokoll in wesentlichen Zügen völlig überarbeitet werden muss. Das Ergebnis zum heutigen nach wie vor gängigen IPv4 war der Nachfolger IPv6. Näheres hierzu findet man im Proseminar von Ralf Krestel (http://i81pc4.ira.uka.de/seminar/krestel/index.html). Sicherheitstechnisch gab es nun die Neuerung, dass auch auf der Ebene des Internet-Protokolls Authentifikation und Verschlüsselung möglich ist. So kann im Authentification Header des IPv6-Paketes im Sinne einer digitalen Signatur ein Hashcode eingetragen werden, welcher somit einen Schutz der Daten vor Manipulation bietet. Darüber hinaus kann mit einem weiteren Header die Vertraulichkeit von Daten gewährleistet werden, indem das komplette Datenpakete oder Teile davon verschlüsselt übertragen werden.

S-MIME

Unter MIME versteht man eine frei verfügbare Spezifikation für E-Mails, mit der es möglich ist, Text in Sprachen mit unterschiedlichen Zeichensätzen sowie Multimediainhalte zwischen verschiedenen Computersystemen mit verschiedenen E-Mail-Standards auszutauschen. Näheres hierzu findet man im Proseminar von Phillip Woock (http://i81pc4.ira.uka.de/seminar/woock/index.html). In Erweiterung zu dieser Spezifikation wurden nun mit S-MIME zwei weitere Inhaltstypen definiert, die es ermöglichen, digitale Signaturen und Verschlüsselungsmechanismen in MIME-Nachrichten anzuwenden.

Literatur

  [Universität Karlsruhe] [Institut für Technische Informatik] [E-Mail an Autor]  
Letzte Änderung: 2003-02-06 12:53:41