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
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).
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.
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).
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.
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.
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:
- e muss kleiner als n sein (also als das Produkt aus P und Q).
- e darf keine gemeinsamen Faktoren mit dem Produkt phi(n) =
(P-1)·(Q-1) haben (e und phi(n) sind teilerfremd).
- e muss ungerade sein (ergibt sich eigentlich bereits aus Punkt 2,
da phi(n) zwangsläufig gerade ist).
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.
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.
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:
- Das Sicherheits-Management konzentriert nur auf einen Punkt und
wird dadurch stark vereinfacht. Alle anderen Komponenten des internen
Netzes bleiben im Wesentlichen unberührt.
- Alle Verbindungen müssen über die Firewall laufen und können somit
protokolliert und überwacht werden.
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.
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 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
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.
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.
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.
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.
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.
- [COM]:
Douglas Comer:
TCP/IP (3rd ed.), Vol. 1: Principles,
Protocols and Architecture.
Prentice Hall, 1995, ISBN 0-13-216987-8.
- [NET]:
John Franco:
Network Layers And Firewalls.
http://www.ececs.uc.edu/~franco/C785/html/Week1/firewall.html.
- [OK]:
Othmar Kyas:
Sicherheit im Internet, 2. Auflage.
International Thomson Publishing, 1998, ISBN 3-8266-40424-1.
- [PKI]:
The Open Group:
PKI Tutorial.
http://www.opengroup.org/messaging/G260/pki_tutorial.htm.
- [RSA]:
Hans-Werner Lang:
RSA-Verfahren.
http://www.iti.fh-flensburg.de/lang/algorithmen/code/krypto/rsa.htm.
- [TAN]:
Andrew S. Tanenbaum:
Computer Networks, 3rd Edition.
Prentice Hall, 1996, ISBN 0-13-349945-6.
|
Letzte Änderung: 2003-02-06 12:53:41
|