3.1 Passwort-Sicherheit
Ist das Paßwort jetzt sicher? Keine Spur! Beim Einloggen
in ein entferntes System per telnet, ftp, WWW oder rlogin
wird Ihr Paßwort normalerweise im Klartext übertragen.
Jeder, der die Übertragung (durch den Einsatz von "Schnüffel-Software"
z. B. auf einem PC im Netz) mitlesen kann, kennt danach Ihr Paßwort.
Benutzen Sie das Internet zur Übertragung Ihres Paßwortes,
so wissen Sie nicht, welchen Weg Ihr Paßwort bei der Übertragung
nimmt, und wer eventuell die Übertragung mitlesen kann.
Um das Problem der Paßwortübertragung über Netzwerke
zu lösen, wurden in den letzten Jahren verschiedene Methoden
entwickelt. Zwei sehr ähnliche Ansätze sind Secure Shell (ssh),
SecureRPC von SUN und Kerberos vom MIT. Die Ansätze vermeiden
die Klartextübertragung des Paßwortes durch asymmetische
Verschlüsselung. Der ganze Mechanismus macht jedoch nur Sinn,
wenn der Rechner, an dem man sitzt, über diesen Mechanismus
verfügt. Muß man sich zuvor mit telnet oder
rlogin auf einem anderen Rechner einloggen, so geht das
Paßwort nach wie vor zwischen dem eigenen Arbeitsplatz und
dem Rechner im Klartext übers Netz.
Eine Public-Domain-Variante ist S/Key. Sie benutzt eine
Serie von Einmal-Paßwörtern, die auf beiden Seiten
aus dem geheimen Paßwort des Benutzers errechnet werden
kann. Selbst die Neuinitialisierung der Einmal-Keys ist ohne die
Gefahr des Abhörens möglich. Der Benutzer bleibt von
diesem Mechanismus verschont, er benutzt nach wie vor ein Paßwort
für verschiedene Systeme.
Gut für Eindringlinge sind Accounts mit Account-Namen als Passwort,
Gast- und Demoaccounts ohne Passwort oder Accounts mit voreingestellten
Passwörtern. Es sollte zudem verhindert werden, daß die
Passwortdatei von Unbefugten gelesen werden kann.
Für die Auswahl eines Passworts gilt:
- keine Login-Namen
- keine anderen Namen
- keine Wörter oder Abkürzungen, die im Wörterbuch zu finden sind
- keine persönlichen Informationen (Geburtstag, Telefonnummer usw.)
- keine Variante der oben genannten schlechten Passwörter
(z.B. rückwärts oder Großbuchstaben usw.)
- nicht nur Ziffern nutzen
Der Zwang, regelmäßig das Passwort zu ändern, kann auch Unsicherheit
zur Folge haben. Ein vierteljählicher Rhythmus führt beispielsweise zu
"Frühling", "Sommer", "Herbst" und "Winter". Raten Sie mal, welche Begriffe
bei monatlichem Wechsel vorkommen...
Gut sind Passworte mit einer Mischung aus Groß- und Kleinbuchstaben, die
mindestens sechs Zeichen lang sind und aus einer zufälligen Auswahl von
Ziffern und Buchstaben bestehen.
Notwendig ist eine entsprechende Systemunterstützung für sichere
Passwörter, insbesondere auch für ihre beschränkte Gültigkeitsdauer.
Wenn möglich, sollten Passwortdateien überprüft werden,
ob die Passworte sicher sind und regelmäß geändert werden.
Programme dafü sind crack, crahs oder cops.
Änderungsfaule Benutzer erwischt man relativ einfach. Es wird eine Kopie von
/etc/shadow angelegt und nach einem bestimmten Zeitraum mit der aktuellen
Version der Datei verglichen.
Passwort-Cracker sind nichts anderes als Programme, die mittels der
Kombination von Wörterbuch-Attaken und der Brute-Force-Methode versuchen,
Paßwörter zu erhalten. Auf Basis eines umfangreichen Wörterbuches testen sie
in sehr hoher Geschwindigkeit Wort für Wort, Zeichenkette für Zeichenkette
auf Passwörter. Basierend auf einer umfangreichen Wörterbuchdatei wird jeder
Wörterbucheintrag mit der vom Betriebssystem benutzten Verschlüsselung
verschlüsselt und mit einem Zielpasswort verglichen. Wenn es zu einer
?ereinstimmung kommt, ist das Passwort geknackt. Gute Passwort-Knacker gehen
aber noch weiter, indem sie Regeln verwenden, z. B.:
- jedes Wort auch rückwärts testen
- Groß- und Kleinschreibung kombinieren
- Wörter zusammenhängen (z. B. Wort vorwärts + Wort rückwärts)
- Einfügen von Zahlen am Anfang, Ende oder im Wort
Studien zeigten daß bis zu 30% aller Passwörter in einem UNIX-System erkannt
werden können. Bekannte UNIX-Passwort-Cracker sind 'Crack' und 'John the Ripper',
auf welche noch kurz eingegangen wird, 'Hades' (von Remote und Zabkar) oder
'CrackerJack' (von Jakal); für Windows NT sind 10phtCrack 2.0, ScanNT (von
Midwestern Commerce Inc.) und NTCrack (von Somarsoft) die beliebtesten.
Crack wurde von Alec D. E. Muffet, einem Unix-Software-Ingenieur aus Wales,
geschrieben. Crack automatisiert die Methode, einen sinnvollen Bereich des
Suchraums zu bearbeiten. Das Programm benutzt eine Reihe von Wörterbüchern
als Quelle von möglichen Paßwörtern zusammen mit einer Menge von Regeln, mit
denen diese Wörter variiert werden können (z.B. Großschreiben des ersten
Buchstaben oder Umdrehen des Wortes). Zusammen mit einer äußerst effizienten
Implementierung der crypt()-Funktion und der Rechenleistung heutiger Maschinen
läßt sich mit crack eine ziemlich ausführliche und erfolgversprechende Suche in
wenigen Tagen oder gar Stunden durchführen.
Mit dem Befehl crack copy_of_password_file wird der Crack-Vorgang
gestartet. Da das Cracken von Dateien mit mehreren hundert Einträgen den Rechner
nicht unbeträchtlich belastet, bietet Crack ein sehr nützliches Feature: Der
Crackversuch läßt sich auf mehrere Rechner aufteilen, so daß die Belastung der
Resourcen verteilt werden kann.
John the Ripper vermag sogar mit verschiedenen Verschlüsselungsschemen umzugehen,
u.a. mit DES, Blowfish, MD5 und WinNT LM Hashes. Weiter versteht er verschiedene Modi:
- Wortliste: Es wird versucht, das Passwort anhand einer Wortliste und optionaler
Regeln zu entschlüsseln. Solche Regeln können Buchstabendreher, Kombinationen aus
Groß- und Kleinschreibung, zusammen gesetzte Wörter usw. beinhalten. Die maximal
zulässige Passwortlänge kann angegeben werden.
- Einfacher Modus: John überprüft das Passwort gegen das Nutzerkennzeichen,
Informationen des GECOS-Feldes und "verbreitete" Passwörter (aus der Datei
/var/lib/john/password.lst)
- Inkrementeller Modus: Alle erdenklichen Zeichenkombinationen werden getestet.
Die Passwortlänge kann wiederum beschränkt werden. Mit dieser Methode kann jedes
Passwort entschlüsselt werden - vorausgesetzt, man bringt die nötige Geduld mit;
- Externer Modus: Hierbei handelt es sich um eine Schnittstelle, die den Einsatz
anderer Crackmethoden ermöglicht.
3.2 Rechnersicherheit
In der Betriebssystemsoftware (und auch der Anwendungssoftware) treten immer
wieder Fehler auf, die unautorisierten Zugang für Hacker durch Ausnutzen
von Sicherheitslöchern zuläßt. Eine hardwareunabhängige
Sammlung dieser Fehler und die Initiative zur Behebung derselben unternehmen
die CERTs (Computer Emergency Response Team). Wie viele Einrichtungen im
Internet existieren CERTs auf mehreren Ebenen. Das deutsche CERT (DFN-CERT)
ist an der Uni Hamburg lokalisiert. Die gesammelten Informationen des CERT
werden auf einem FTP-Server zur Verfügung gestellt:
(ftp.informatik.uni-hamburg.de,
Directory: /pub/security). Nachrichten an das CERT können per E-Mail
an dfncert@informatik.uni-hamburg.de gesendet werden.
Das Wichtigste ist jedoch die Prävention:
- "Securing your system by breaking into it"
- Regelmäßig Informationen einholen
- Patches und Security-Fixes einspielen
3.3 Abschottung von öffentlichen Datenbereichen
Für bestimmte Dienste wurden oder werden Sicherheitsmaßnahmen
getroffen. So wird auf Unix-Servern für WWW oder ftp für den Abfragenden
das Datenverzeichnis zum Wurzelverzeichnis. Auf diese Weise ist auch bei
Sicherheitsmängeln im Serverprogramm niemals ein Zugriff auf Dateien
außerhalb des reservierten Plattenbereichs möglich. Diese Methode
kann man auch für den Betrieb einer Mailbox oder einen Gast-Login ohne
Paßwort verwenden.
3.4 Überwachung von Protokolldateien und Benutzern
Jedes Betriebssystem legt Protokolle der wichtigsten Systemvorgänge
an. Diese Protokolldateien sollten ständig auf Unregelmäßigkeiten
untersucht werden, um so einen Eindringling aufzuspüren.
- Logdateien sind das wichtigste Hilfsmittel zum Erkennen von Angriffen.
- Tatsächlichen Angriffen geht meist eine Analyse des Rechners durch
den Hacker voraus (z.B.: Portscan).
- Günstigster Zeitraum für das Lesen der Logdateien: Montag morgen,
da die meisten Hacks am Wochenende passieren.
Die Auswertung der Logdateien kann vielfach auch automatisch erfolgen.
Typische Hinweise für einen Angriff sind unter anderem:
- Uhrzeit: Ein falsches Login um 10:30 deutet weniger auf einen
Hack-Versuch hin als desgleichen um 0:30.
- "refused connect"-Meldungen, insbesondere wenn sie von einem Benutzer
root oder von entfernten Rechnern kommen. Beispiel:
Aug 1 18:36:21 lx-lbs wu.ftpd[13430]:
- Spezielle Meldungen von Portscanner-Logs, wie z.B.:
Oct 12 17:27:07 lx-lbs scanlogd: From 141.39.253.200:20 to 141.39.253.196
ports 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, ..., flags ??r??u,
TOS 00, TTL 255, started at 17:27:02
- Typisch für eine Dial-of-Service-Attacke sind folgende Meldungen:
Oct 3 00:20:30 lx-lbs inetd[119]: fork: Resource temporarily unavailable
Oct 3 00:20:37 lx-lbs last message repeated 7 times
(kein Speicher mehr wegen zu vieler offener Prozesse)
Viele Nutzer gehen auch mit ihrem Rechneraccount recht fahrlässig um.
So werden aus Bequemlichkeit keine Paßworte verwendet oder der Account
an einen Freund 'verborgt'. Hier helfen nur Aufklärung und bei wiederholten
Verstößen Entzug der Rechenberechtigung. Wichtig ist es auch,
festzulegen, wer neue Software in den Rechner einspielen darf. Denn auf
diesem Weg gelangen Viren oder Trojanische Pferde ins System.
3.5 Sichern des Rechners
Keinen Zugang zum Server zulassen
Ein Server, der frei zugänglich ist, kann nicht sicher sein.
Der Server ist der Kern eines jeden lokalen Netzes, es ist deshalb erforderlich, daß
besonders viele Ressourcen zu dessen Schutz bereitgestellt werden. Der Schutz des
Servers sollte Maßnahmen gegen unerwünschten physischen Zugang, Feuer, unregelmäßige
Stromversorgung, Komponentenausfall (typischerweise in Speichermedien) und mangelhafte
Kühlung umfassen. Für jedes Betriebssystem gibt es Tricks,
wie man sich bei physikalischem Zugriff auf den Rechner unautorisiert Zugang
verschaffen kann. Es ist außerdem auch schon vorgekommen, daß Rechner
regelrecht ausgeschlachtet wurden und nur noch das Gehäuse mit Netzteil
zurückblieb. Der Server wird in einen abgesperrten Raum gestellt, zu dem der
Zugang sehr begrenzt ist. Nur der Systemverwalter und eventuelle Superuser und der
Hardwareservice haben Zugang hierzu.
Es ist weiterhin zu empfehlen, für das Supervisor-Login nur einen bestimmten
Arbeitsplätze zuzulassen. Sollte das Passwort des Systemverwalters kompromittiert
werden, so ist es weiterhin nur möglich, das Login von dieser Maschine vorzunehmen.
Bei der Installation des lokalen Netzes und auch bei dessen laufendem Ausbau sollte
bedacht werden, ob im Anschluß an den Serverraum ausreichende Ventilations- und
Kühlungskapazität vorhanden ist, um ein vernünftige Arbeitsbedingungen für die zentralen
Komponenten des lokalen Netzes zu sichern.
Vorbeugende Maßnahmen bestehen in der Verwendung von feuerhemmendem oder feuerfestem
Baumaterial. Der Serverraum sollte keine brennbaren Dinge enthalten, z. B. Druckerpapier,
Handbücher, Verpackungen, Holzregale und -tische. Weiterhin wichtig sind Rauch- und
Feuermelder, griffbereite Feuerlöscher und Training der Mitarbeiter für den Brandfall.
Entscheidend für eine effektive Vorbeugung und Begrenzung von Wasserschäden ist, daß
der Serverraum nicht unterhalb der Erdoberfläche eingerichtet wird. Der Serverraum
darf auch nicht unter überführten Rohrleitungen, Abflüssen, Küchenbereichen und
Badebereichen plaziert werden. Die Sicherung der Stromversorgung umfaßt Maßnahmen
gegen Störungen und totalen Stromausfall. Ein Stromausfall kann durch unterbrochene
Versorgungsleitungen, aber auch durch Ansprechen von ?erlastsicherungen hervorgerufen
werden. Um sich gegen Störungen oder Ausfall der Stromversorgung zu schützen, empfiehlt
sich nachdrücklich die Anschaffung und Installation einer USV (unterbrechungsfreie
Stromversorgung), die gerade mit diesen Verhältnissen fertig wird. Die USV muß eine
Notstromversorgung (akkumulatorbasiert) in dem Umfang bieten können, wie es zur
Durchführung eines kontrollierten Herunterfahrens des Servers erforderlich ist.
Generelle Maßnahmen bezüglich Stromversorgung und lokales Netz
Nicht benötigte Dienste und Ports sperren
Windows NT
Bei Windows NT-Servern wählt man in der Systemsteuerung das Icon "Dienste" an.
Hier kann dann jeder nicht benötigte Dienst gesperrt (deaktiviert) werden.
Unix
Bei UNIX und Linux bearbeitet man mit einem Editor die Datei /etc/inetd.conf.
Dienste werden deaktiviert, indem man die entsprechenden Zeilen mit einem # am Anfang
auskommentiert. Hier ein Ausschnitt der Datei:
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
ftp stream tcp nowait root /usr/sbin/tcpd wu.ftpd -a
# ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
# nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/leafnode
shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L
# shell stream tcp nowait root /usr/sbin/tcpd in.rshd -aL
#
# login stream tcp nowait root /usr/sbin/tcpd in.rlogind
# login stream tcp nowait root /usr/sbin/tcpd in.rlogind -a
# exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
# talk dgram udp wait root /usr/sbin/tcpd in.talkd
# ntalk dgram udp wait root /usr/sbin/tcpd in.talkd
#
pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s
Das Aktivieren der neuen Konfiguration erfolgt mit dem Kommando:
kill -HUP Prozess-ID von inetd.
z. B.: (Eingaben fett gedruckt)
root@lx2-lbs# ps -aux | grep inetd
root 121 0.0 0.3 912 420 ? S 13:07 0:00 /usr/sbin/inetd
root 1098 0.0 0.3 884 400 p2 S 16:36 0:00 grep inetd
root@lx2-lbs# kill -HUP 121
Beschränkung des Zugriffs auf alle Dienste
Unter UNIX gibt es zwei Möglichkeiten der Einschränkung:
- Alles ist erlaubt, bestimmte Dinge sind verboten.
- Alles ist verboten, bestimmte Dinge sind erlaubt.
Die zweite Variante ist sicherer! Gesteuert wird der Zugriff von außen
durch zwei Dateien, /etc/hosts.deny und /etc/hosts.allow.
Am einfachsten läßt sich die Steuerung des Zugriffs an einem
Beispiel zeigen. Die Syntax lautet generell bei allen Einträgen:
Dienst: Benutzerkreis.
| /etc/hosts.deny | /etc/hosts.allow |
ALL: ALL
|
shd: ALL
in.telnetd: .xyz.mydomain.de
wu.ftpd: .xyz.mydomain.de
|
In obigem Beispiel ist also alles verboten, bis auf ssh von überall her,
telnet und FTP nur innerhalb der Domain xyz.mydomain.de.
Unsichere Zugänge zum System entfernen
- Anmeldung als Superuser sollte nur von der Systemkonsole aus zulässig sein
- unnötige Software aus dem System entfernen
- Software regelmäßig warten und updaten
- sichere(re) Software und Serverprogramme verwenden
- Zugriffsrechte aus Systemdateien prüfen und ggfs. Zugriffsrechte
so weit wie möglich beschränken
- unsichere Software sperren (Sniffer etc.)
- SUID-Programme prüfen, ob das SUID- oder SGID-Bit gesetzt sein muß
Systemsicherheit überprüfen
Die Aktivitäten auf dem Rechner und im Netz sollten regelmäig
überprüft werden, um Probleme und Angriffe zu entdecken.
Dazu ist es notwendig, daß die Administratoren ihre Systeme
sehr gut kennenlernen:
- Wo ist was konfiguriert? (/etc/inetd.conf)
- Wo ist was protokolliert? (/var/log/messages)
- Welche unterstützenden Systemkommandos gibt es? (ps, last)
- Wie sind die Informationen zu finden und zu filtern? (find, grep)
Installation von Alarmmechanismen
Datensammlung
- Erzeugung zusätzlicher LOG-Dateien
- Erkennung von Hacks durch Suche nach bestimmten Einträgen in LOG-Dateien
- Oft automatisches Benachrichtigen des Administrators
Beispiele:
- Watcher: Protokoll-Tool, Plattform Unix.
- Win-Log: Einfaches
Rechnerüberwachungstool für Windows-NT. Hält unter anderem alle
Login- und Logout-Vorgänge fest.
- scanlogd: Bestandteil vieler Linux-Distributionen. Hält Portscans
in der messages-Datei fest.
- Courtney:
Checkt den Rechner auf Satan-Scans. Plattform: Unix
Analyse bestehender Log-Dateien
- Logsurfer:
Checkt die messages-Datei von Unix-Rechnern auf bestimmte
Einträge und führt daraufhin bestimmte Aktionen durch.
- Logcheck:
Einfaches Unix-Programm zum Überwachen der Logdateien.
Siehe auch den Abschnitt über Intrusion Detection
im nächsten Kapitel.
Allgemeine Sicherhungsmaßnahmen
Die Kabelführung in der Nähe von größeren Elektromotoren, Neonbeleuchtungen und anderen
Quellen elektrischer Störungen muß vermieden werden. Vermeiden Sie auch, daß kritische
Komponenten (Server, Hubs, Bridges, Router, etc.) an den gleichen Versorgungsstrang
angeschlossen sind wie mögliche Störungsquellen (Kopiergeräte, Kühlschränke, Laserdrucker,
usw). Am besten werden solche Komponenten separat abgesichert oder sie erhalten eine
eigene USV - was kein Problem ist, wenn mehrere Komponenten zusammen mit der USV in
einen Schaltschrank eingebaut werden. Wählen Sie eine Kabelführung und eine Netztopologie,
die eine starke Trennung und einen großen Schutz der Netzkomponenten bietet. Lassen Sie
die elektrischen Installationen von einem Fachmann mit Kenntnissen auf den Gebieten
Stromversorgung und lokale Netze überprüfen.
Sicherung von Netzdruckern: Berichte, Projekte und andere Dokumente, die im Unternehmen
ausgearbeitet werden, liegen früher oder später über die Netzdrucker in schriftlicher
Form vor. Die meisten Mitarbeiter haben wahrscheinlich schon vertrauliches Material im
Druckerraum gesehen, wenn sie dort gewesen sind, um ihre eigenen Ausdrucke abzuholen.
Die Möglichkeit, daß ausgedrucktes Material in die falschen Hände gerät, ist deshalb
offensichtlich. Das Risiko eines unsachgemäßen Zugangs zu vertraulicher Information
wird durch eine oder mehrere der folgenden Maßnahmen verringert: Schaffen Sie lokale
oder persönliche Drucker für Mitarbeiter oder Arbeitsgruppen an, die sich mit
vertraulichen Informationen beschäftigen. Ein oder mehrere Drucker können auch in einen
Raum verlegt werden, wo ein Sicherheitsmitarbeiter für die Verteilung ausgedruckten
Materials sorgt.
Bei der Industriespionage existiert der Begriff "trashing". Das läuft ganz einfach
darauf hinaus, weggeworfenes schriftliches und elektronisches Material als Quelle zu
Paßwörtern, Benutzer-IDs oder anderen wertvollen Informationen über das Unternehmens
zu benutzen. Schriftliches Material können Ausdrucke, Handbücher, interne Memos,
Berichte und anderes sein. Weggeworfene Disketten, CD-ROMS, Festplatten und Bänder
können ebenfalls Daten enthalten, die nicht in die falschen Hände fallen sollten.
Maßnahmen gegen trashing sind abgeschlossene Abfallbehälter und der Reißwolf sowie
Zerstörung oder ?erschreiben von ausgemusterten Datenträgern. Dazu gehören übrigens
auch die Carbon-Farbbänder von Schreibmaschinen und die Transferfolien von
Normalpapier-Faxgeräten und bestimmten Typen von Farbdruckern.
3.6 Sichere Protokolle
S-HTTP
Das Secure Hypertext Transfer Protocol nimmt nicht nur am Transferprotokoll
Erweiterungen vor, sondern definiert auch neue Elemente für die HTML-Sprache.
S-HTTP stellt einen Rahmen für die Anwendung verschiedener kryptografischer
Standardmethoden dar. Jede Nachricht kann durch eine beliebige Kombination
aus drei Mechanismen geschützt werden: digitale Unterschrift, Datenverschlüsselung
und Authentifizierung. Eine S-HTTP-Nachricht besteht aus einer gekapselten
HTTP-Nachricht und einigen vorangestellten Kopfzeilen, die das Format der
gekapselten Daten beschreiben.
Beide Seiten können im Rahmen einer Verhandlung Angaben über die verwendbaren
beziehungsweise geforderten Erweiterungen gegenüber HTTP machen. Dazu gehören:
Nachrichtenformate, Typen der Zertifikate, Schlüsselaustauschmechanismus,
Verfahren für digitale Unterschriften, Hash-Algorithmus für den digest
sowie Verschlüsselungsverfahren für Kopf und Inhalt. Das könnte folgendermaßen
aussehen: 'Dieser Client verschlüsselt alle Nachrichten mittels DES und
vermag mit DES oder RC5 verschlüsselte Nachrichten zu empfangen.'
Sowohl asymmetrische (öffentliche Schlüssel mit entsprechenden Zertifikaten)
als auch symmetrischen Verfahren (Sender und Empfänger benutzen denselben
Geheimschlüssel) sind aufgeführt. Im ersten Fall stehen auch digitale
Unterschriften zur Verfügung, im zweiten kann der Austausch des Geheimschlüssels
auf drei Wegen erfolgen: in-band (Schlüssel wird mit dem öffentlichen
Schlüssel des Servers geschützt), out-band (ein vorher festgelegter
Schlüssel) und Kerberos (Nutzung von Kerberos-Tickets). Mit dem
Sitzungsschlüssel läßt sich ein Transaktionsschlüssel chiffrieren, der
bei der Datenverschlüsselung Anwendung findet.
S-HTTP definiert einen neuen URL-Protokolltyp 'shttp', der auf die Fähigkeiten
des Servers bezüglich S-HTTP hinweist. Der Client wird damit aufgefordert, bereits
die Anforderung gekapselt zu senden. Die dazu notwendigen Informationen sind in
neuen Attributen (DN, NONCE, CRYPTOPTS) des Ankers für diesen Link beziehungsweise
dem neuen Sprachelement (tag) CERTS enthalten. Damit lassen sich beispielsweise
die Informationen eines Formulars verschlüsseln.
SSL
Das zweite Protokoll mit kommerziellem Hintergrund erlangt seine Bedeutung durch die
große Verbreitung des Web-Browsers Netscape Navigator. Dieser Client beherrscht ein
Protokoll namens Secure Socket Laver (SSL). Wie der Name andeutet, ist es nicht nur
für HTTP vorgesehen, sondern soll jedes zuverlässige Transportprotokoll (im Falle
Netscape/SSLRef: TCP) um ein Konzept für einen sicheren Kanal (Vertraulichkeit,
Authentifikation, Datenintegrität) erweitern.
Mit SSL (das Kürzel steht für Secure Sockets Layer) kommt früher oder später jeder
Surfer in Berührung auch wenn er es unter Umständen gar nicht bemerkt. Eine gesicherte
Verbindung über dieses Protokoll erkennt man im Browser daran, daß die dargestellte URL
mit dem Kürzel "https://" beginnt; zusätzlich erscheint in der Statusleiste des Browsers
ein eingerastetes Vorhängeschloß. SSL entstand ursprünglich 1994 als proprietäre Lösung
von Netscape für ein verbindungsorientiertes Sicherungsprotokoll auf der Datenschicht.
Schon ein Jahr später wurde es bei der IETF (Internet Engineering Task Force) zur
Normung eingereicht, heute dient es in der Version 3.0 als Arbeitsbasis der
"Transport Layer Security (TLS) Working Group" der IETF.
Der ursprüngliche Zweck von SSL bestand lediglich in der Sicherung der Kommunikation
zwischen Web-Server und Browser; inzwischen läßt es sich in diversen Varianten allerdings
auch zusammen mit NNTP, POP3, SMTP oder Telnet einsetzen.
Im ISO/OSI-Schichtenmodell der Datenkommunikation residiert SSL zwischen der
Transportschicht (TCP oder UDP) und der Anwendung. Dabei stellt der SSL-Layer für
die Applikation statt der normalen Socket-Funktionen wie read oder write spezielle
Methoden zur Eröffnung und Nutzung einer sicheren Uansportverbindung zur Verfügung.
Die Anwendung reicht die Daten, anstatt sie direkt an die Transportschicht zu übergeben,
also zunächst an SSL weiter. Dieses schützt Verbindung und Daten durch die
Bearbeitung mit kryptographischen Verfahren und übermittelt erst anschließend die
Daten an die Transportschicht.
Insgesamt kombiniert SSL fünf verschiedene Protokolle:
- Das SSL Application Data Protocol wickelt die Datenübermittlung zwischen Anwendung und SSL ab.
- Das SSL Alert Protocol dient der Weiterleitung von Warn- und Fehlermeldungen.
- Das SSL Change Cipher Spec Protocol übernimmt die Initialisierung der festgelegten kryptographischen Verfahren.
- ?er das SSL Handshake Protocol handeln Server und Client das zu verwendende kryptographische Verfahren aus.
- Das SSL Record Protocol nimmt die Ver- bzw. Entschlüsselung sowie, falls verlangt, eine Komprimierung der Nutzdaten vor.
Die Organisation von SSL als Layer zwischen Applikations- und TransportSchicht erlaubt
dabei, zusätzlich auf Anwendungsebene Sicherheitsprotokolle wie S-HTTP (Secure HTTP)
oder SET (Secure Electronic Transactions) zu implementieren. Dadurch läßt sich die
Gesamtsicherheit des Systems noch einmal steigern, wenn auch zu Lasten der Performance.
| Portnummer | Art | Protokoll |
| 443 | HTTP über SSL | HTTPS |
| 465 | SMTP über SSL | SSMTP |
| 563 | NNTP über SSL | SNNPS |
| 992 | Telnet über SSL | LNETS |
| 995 | POP3 über SSL | SPOP3 |
Um über SSL eine gesicherte Verbindung aufzubauen, müssen die Kommunikationspartner
sich zunächst einmal über die zu verwendenden kryptographischen Verfahren und Parameter
einig werden. Grundsätzlich bietet SSL dabei Schlüssel-Austauschverfahren, eine
symmetrische Verschlüsselung sowie die Berechnung einer kryptographischen Prüfsumme
als Möglichkeit an. Für jede dieser Möglichkeiten lassen sich verschiedene Verfahren
nutzen. etwa RSA oder Diffie-Hellmann für den Schlüsselaustausch, DES oder
IDEA für die Verschlüsselung sowie MD5 und SHA für die Prüfsumme. Als kleiner
Haken erweist sich dabei, daß die meisten SSL-relevanten Produkte aus den
USA stammen und daß aufgrund der dort geltenden
Exportbeschränkungen nur bestimmte Schlüssel-Längen genutzt werden können.
Vor der Übertragung der eigentlichen Daten arbeiten Client und Server ein
Handshake-Protokoll ab, in dem der Sitzungsschlüssel ausgetauscht und die
Authentifikation vorgenommen wird. Der Client eröffnet den Handshake mit einem
Einmalwert (challange), der Liste der unterstützten Verschlüsselungsverfahren und
sofern vorhanden - einer Session-ID aus einer früheren Sitzung. Der Server antwortet
mit einer neuen Connection-ID. Wenn er im Cache die angegebene Session-ID findet,
können beide Seiten einen früher vereinbarten Hauptschlüssel (master key) benutzen.
Anderenfalls sendet der Server sein Zertifikat und eine Liste der verwendbaren Chiffren.
Der Client generiert einen neuen Master-Key und sendet ihn mit dem Public-Key des
Servers verschlüsselt an diesen. Aus dem Hauptschlüssel und verbindungsbezogenen
Daten werden mittels einer Hash-Funktion (MD5) die Sitzungsschlüssel abgeleitet, die
für die Datenverschlüsselung Anwendung finden. Für jede Richtung (Senden/Empfangen)
wird dabei ein eigener Sitzungsschlüssel benutzt - der Hauptschlüssel selbst kommt
bei der Datenverschlüsselung nie zum Einsatz. Abschließend schickt der Client die mit
seinem Sendeschlüssel chiffrierte Connection-ID und der Server den mit seinem
Sendeschlüssel verschlüsselten Einmalwert. Der Client überprüft unter Verwendung
seines Empfangsschlüssels, ob der Einmalwert mit dem von ihm gesendeten übereinstimmt
und kann damit sicher gehen, daß der Server als der tatsächliche Inhaber des
Zertifikats authentisch ist. Denn anderenfalls konnte der Server den Hauptschlüssel
nicht korrekt entschlüsseln und folglich keine Sitzungsschlüssel generieren.
Der Server hat ebenfalls die Möglichkeit, die Authentizität des Clients zu überprüfen.
Die Aufforderung dazu enthält einen Einmalwert und eine Liste anwendbarer
Verfahren zur Authentifikation. Der Client antwortet mit seinem Zertifikat und
Authentifikationsinformationen. Für diese wird mit MD5 ein digest Über Sende- und
Empfangsschlüssel, den Einmalwert und das Zertifikat des Servers erzeugt und mit dem
privaten Schlüssel des Clients (entsprechend dem Zertifikat) verschlüsselt. Zum
Abschluß schickt der Server dem Client verschüsselt die neue Session-ID.
Nach erfolgreicher Beendigung des Handshake-Protokolls sind beide Seiten zur
Übertragung der Anwendungsdaten bereit. Diese werden im Rahmen eines
Record-Protokolls nach dem vereinbarten Verfahren verschlüsselt und mit einem
Message Authentication Code zur Gewährleistung der Datenintegrität versehen.
Das SSL-Protokoll bietet einen sehr einfachen und effizienten Mechanismus
zur Befriedigung der Sicherheitsbelange vieler Anwendungsprotokolle.
Neben der Verschlüsselung bietet SSL optional noch eine zweite Methode an, die
Verbindung zu sichern: Die Authentisierung eines oder beider beteiligter
Kommunikationspartner. Diese Variante stützt sich auf den Einsatz externer
Certification Authorities (wie etwa Verisign), über die sich digitale Zertifikate
ausstellen lassen. Die digitalen Unterschriften der wichtigsten Zertifizierungs-Instanzen
bringen Internet Explorer und Navigator dabei schon mit, so daß zur Kommunikation mit
diesen nicht noch extra Zertifikate angefordert werden müssen. Die verschiedenen
SSL-Protokollversionen bieten bei der Authentifizierung unterschiedliche Möglichkeiten.
SSL-2 erfordertlediglich eine Zertifizierung des Servers, so daß der Kommunikationspartner
vom Client aus einwandfrei identifizierbar ist. Dadurch lassen sich gängige
Täuschungsmanöver wie IP-Spoofing (also das Vorgaukeln einer fremden IP-Adresse zum
Abfangen der an diese gerichteten Daten) unterbinden. Beim Verbindungsaufbau erhält der
Client vom Server das digitale Zertifikat der Site. Daraufhin generiert der Client
einen Session Key, mit dem er die gesamte Kommunikation mit der Site verschlüsselt.
Den Key selber verschlüsselt er mit dem Public Key des authentifizierten Servers, so
daß nur dieser die Verbindungsdaten lesen kann.
SSL-3 setzt die Zertifizierung der Kommunikationspartner voraus. Dazu muß der Anwender
bei einem Trust Center ein Client-Zertifikat anfordern, das meist kostenpflichtig
ist (ca. 15 Dollar). In der Kombination von Server- und Client-Authentifizierung bietet
SSL dann komplett abgesicherte Verbindungen via Internet.
Neben den "Standard"-Varianten von SSL existieren auch spezialisierte Varianten dieses
Verfahrens. Die bekannteste davon ist Fortezza, welche von den US-Behörden zum
Austausch sensitiver Daten benutzt wird. Sie setzt zur schnelleren Verschlüsselung
auf Hardware und verwendet als Schlüssel-Austauschmechanismus KEA anstatt RSA. ?er
kurz oder lang wird SSL als Standard vermutlich von dem auf ihm basierenden
TLS 1.0 - das bereits als IETF-Draft vorliegt ganz abgelöst werden.
Ausführliche Whitepapers zu Aufbau und Funktion des Secure Sockets Layer und den
dazugehörigen Sicherheits-Zertifikaten finden Sie unter
http://directory.netscape.com/Computers/Security/Internet/SSL-TLS
http://directory.netscape.com/Camputers/Internet/Protocols/SSL-TLS
Typische Beispiele für Certification Authorities bieten
Verisign
(http://www.verisign.com) und
Globalsign
(http://www.globalsign.com).
Dort erhalten Sie sowohl Server- als auch Client-Zertifikate. Von letzteren
offerieren beide Anbieter auch kostenlose, jedoch zeitbeschränkte Versionen.
Eine umfassende Darstellung des neuen IETF-Standards TLS 1.0 direkt aus erster
Hand bietet der RFC 2246.
S/Key
Die Idee zum wahrscheinlich am weitesten verbreiteten Programm zur Nutzung von
Einmalpaßwörtem (OTP: orte time password) stammt bereits aus dem Jahre 1981. Aber
erst ein knappes Jahrzehnt später wurde sie in den Bellcore Labs aufgegriffen und
nahm als S/Key Gestalt an. Der zugrundeliegende Mechanismus ist verblüffend einfach:
Aus einem geheimen Paßwort s wird durch N-fache Anwendung einer sicheren Hash-Funktion
(MD4) ein OTP erzeugt:
P0 = fN(s)
Das nächste OTP erhält man durch (N -1)-maliges Anwenden des Hash:
P1 = fN-1(s)
Die generelle Erzeugunsvorschrift lautet damit:
Pi = fN-i(s)
bzw.
Pi = f(Pi+1)
Erlangt ein Unberufener Kenntnis von einem OTP Pi, kann er trotzdem nicht
das nächste zu verwendende Paßwort Pi+1 ermitteln, da sich die Umkehrung
f'(pi) der sicheren Hash-Funktion nicht berechnen läßt. Der entfernte
Host erhält zunächst das OTP P0. Wenn sich ein Benutzer anmelden will,
schickt der Host ihm die Sequenznummer i des letzten gespeicherten Paßworts. Der
Benutzer antwortet daraufhin mit dem nächsten Paßwort pi+1. Der Host führt
folgende Berechnung durch:
Pi = f(fN-i-1l(s)) = f(Pi+1)
Stimmt der berechnete Wert nut dem gespeicherten überein, so ist der Nutzer
authentifiziert. Daraufhin überschreibt der Host das alte OTP pi mit dem
soeben erhaltenen Pi+1. Somit muß der Host das geheime Paßwort gar nicht
kennen.Da mit jedem Gebrauch und somit zunehmenden i die Anzahl der Iterationen der
Hash-Funktion abnimmt, muß zu einem bestimmten Zeitpunkt eine Reinitialisierung
(Neuberechnung der OTPs) vorgenommen werden.
S/Key erweitert diesen Grundalgorithmus dahingehend, daß das Paßwort eine Verkettung
aus dem eigentlichen Paßwort s und einem Initialwert (seed) darstellt. Der Initialwert
wird vom entfernten Host gemeinsam mit der Sequenznummer gesendet. Damit läßt sich ein
geheimes Paßwort, das der Nutzer sich merkt, für verschiedene Hosts und auch für die
Reinitialisierung verwenden.
Zum Berechnen der OTPs stehen Clientprogramme für Unix-, Macintosh-, DOS- und
Windows-Systerne zur Verfügung. Der Nutzer braucht nur die Sequenznummer, den
Initialwert und sein geheimes Paßwort einzugeben. Alternativ kann er sich auch
eine Liste von OTPs im voraus berechnen lassen, um sie beispielsweise auf Reisen mit
sich zu führen. Auf der Hostseite werden das 'login'- und das 'su'-Programm sowie
der ftp-Server modifiziert. Diese Änderungen laufen unter allen gebräuchlichen
Unix-Systemen.
S/Key ist auf
ftp.thumper.bellcore.com/pub/nmh/
verfügbar. Die Navy Research Labs haben das Programmpaket unter der Bezeichnung
OPIE 2.0 (one-time passwords in everything) weiterenwickelt:
ftp.rirl.navy.mil/pub/security/nrl-opie/.
Secure Shell (ssh und scp)
Unter "SSH" versteht man einerseits ein Programm, die Secure Shell, andererseits aber
eine Protokoll-Schnittstelle, über die auch Dateien kopiert oder andere Protokolle
getunnelt werden können. Das SHH-Protokoll wurde von Tatu Ylönen an der TU Helsinki
in Finnland entwickelt. Dieses Protokoll wurde erstmalige im Juni 1995 als lizenzfreie
Version 1.0 freigegeben. Von da an wurden stets Weiterentwicklungen unternommen, an
denen hauptsächlich die von Ylönen gegründete Firma SSH Communications Security Ltd.
beteiligt war und ist. Derzeit befindet sich eine Version 2.0 auf dem Markt, die
jedoch nicht mehr kommerziell vertrieben wird, sondern lizenzpflichtig ist.
Des weiteren gibt es eine Reihe freier Implementierungen, wie z.b. OpenSSH, die
auf das Protokoll 1.X aufsetzen und daher frei verfügbar sind
http://www.openssh.org).
Die Secure Shell ermöglicht das Einloggen auf einem anderen Rechner über das Netz, um
Programme auf dem Remote- Rechner auszuführen oder Dateien über das Netz zu kopieren.
Einerseits unterstützt sie dabei die zuverlässige gegenseitige Authentifizierung der
Partner. Andererseits bietet sie sicheren Schutz vor dem Abhören der Kommunikation
(Unterbindung von "Man in the middle attack", "IP-Spoofing", "Hijacking", etc.) und
zuverlässige Integritätsüberwachung. Dabei kommt es vor allem an auf starke Verschlüsselung
des Datenverkehrs, X11 Forwarding, Port Forwarding, sichere Authentifzierung, Agent
Forwarding und Datenkompression. Von SSH werden ausschließlich symmetrische
Verschlüsselungsalgorithmen zum Austausch der übermittelten Daten unterstützt: IDEA,
DES, 3DES, Blowfish, TwofishArcfour.
OpenSSH verwendet beispielsweise die symmetrischen Verschlüsselungsalgorithmen Triple-DES,
Blowfish und IDEA. Sie sind alle drei patentfrei. Man kann davon ausgehen, daß diese
Verfahren sicher sind, da sie offen gelegt und keine gravierenden Sicherheitslücken
bekannt sind. Das symmetrische Verfahren beruht darauf, daß der gesamte Datenverkehr
mit nur einem geheimen Schlüssel verschlüsselt ist und dieser sowohl beim Sender als
auch Empfänger zum Ver- bzw. Entschlüsseln benutzt wird. Da dieser geheime Schlüssel
den beiden an der Sitzung teilnehmenden Personen zur Kommunikation bekannt sein muß,
muß ein Schlüsselaustausch stattfinden. Dazu verwendet SSH den RSA-Algorithmus.
Prinzipiell läuft ein Login folgendermaßen ab (Es wird vorausgesetzt, daß auf
dem Zielrechner der ssh-Server und auf der Client-Workstation, von der aus man eine
Verbindung zum Zielrechner herstellen will, der ssh-Client installiert ist):
- Nachdem der Client eine erfolgreiche TCP/IP-Verbindung zum Server aufgebaut hat,
tauschen beide Seiten ihre installierte Protokollversion aus. Falls die Versionen
inkompatibel sind, wird die Kommunikation sofort abgebrochen.
- Andernfalls schalten Server und Client auf ein paketbasiertes Binär-Protokoll um.
- Anschließend sendet der Server seine beiden öffentlichen RSA-Schlüssel eH
und eS (Host- und Server-Key) sowie eine Auflistung der von ihm
unterstützten symmetrischen Chiffren zum Klienten. Der Client verifiziert eH
mit Hilfe einer lokalen Datenbasis (bzw. "lernt" diesen Key, falls der Nutzer es zuläßt).
- Wurde eH akzeptiert, generiert der Client einen zufälligen
Sitzungsschlüssel, chiffriert diesen mittels der beiden RSA-Keys eH und
eS. Dann sendet er das Resultat zusammen mit der Angabe des von ihn gewählten
symmetrischen Verfahren an den Server.
- Ab diesem Zeitpunkt läuft die gesamte Kommunikation verschlüsselt ab. Der
Client authentifiziert sich mit einem der unterstützen Verfahren (Username und Paßwort sind also
schon verschlüsselt).
Die Hostschlüssel dienen der Identifikation des Rechners und sind "langlebig",
Serverschlüssel werden in regelmäßigen Abständen neu generiert
(z. B. einmal pro Stunde).
- Nach erfolgreicher Authentifizierung wird für den Nutzer eine Arbeitsumgebung auf dem
Server-Rechner hergestellt. Zusätzlich verschlüsselt ssh X11-Verbindungen, setzt
dabei automatisch die Display-Variable und gestattet, beliebige TCP/IP-Verbindungen zu
tunneln.
Eigenschaften von SSH im Überblick
- Gedacht als Ersatz für die Unix-R-Kommandos (rlogin, rsh, rcp), telnet
- Verschlüsselung der Verbindung
- Auch einsetzbar zur Sicherung von X-Window, telnet, ftp und POP durch
Umleitung der Verbindung über einen gesicherten Kanal
- Automatische Umsetzung der Display-Variablen unter X
- Starke Host-Authentifizierung
- Unterstützte Plattformen:
- nahezu alle Unix-Systeme
- Windows 3.x, 95/98, NT
- Macintosh
Mit der SSH besteht Schutz vor
- Abören von Passwörtern und Terminalverbindungen durch Sniffer
- DNS-Spoofing
- IP-Spoofing
In der Grundversion unterstützt die Secure Shell vier Verfahren zur Authentifizierung
des Clients, wobei die Nutzung der einzelnen Verfahren durch Kommandozeilen-Argumente
bzw. Einträge in den entsprechenden Konfigurationsdateien gezielt vom Server zugelassen
bzw. unterdrückt werden können:
- Host-Based-Authentifizierung
Bei diesem Verfahren basiert die Authentifizierung auf dem Hostnamen des Client. Sie
entspricht der Authentifizierung bei rlogin und rsh unter UNIX. Hierbei werden die
bekannten Hosts beim Server durch einen Eintrag in der Datei etc/hosts.equiv oder
/etc/shosts.equiv bzw. $HOME/.rhosts oder $HOME/.shosts.
verwaltet. Dieses Verfahren ist nicht gegen Spoofing-Attacken gefeit.
- Host-Based-RSA-Authentifizierung
Dieses Verfahren stellt eine Kombination aus der "Host-Base-Authentifizierung" mit einer
RSA-basierten Authentifizierung des Clients dar. Dabei werden die public Keys der
Clients in den Dateien $HOME/.ssh/known_hosts und /etc/ssh_known_hosts
des Servers abgelegt. Bei der Authentifizierung muß der Client in einem
"Challenge-Response-Dialog" nachweisen, daß er den zugehörigen privaten Schlüssel kennt.
- Paßwort-Authentifizierung
Hierbei erfolgt die Authentifizierung durch die Angabe eines Benutzerpassworts. Dabei
wird die Verschlüsselung bei Übertragung des Passworts durch den Sitzungsschlüssel
gewährleistet. Das Sicherheitsrisiko hängt dabei von der Stärke des Passwortes ab.
- Reine RSA Authentifizierung
Diese Methode gilt als flexibel und potentiell sicherste Methode zur Client
Authentifizierung. Hierbei muss der Client über einen "Challenge-Response-Dialog"
nachweisen, das er den zum public-key gehörigen private-key kennt. Dieses
Challenge-Response-Verfahren läßt sich dabei automatisch durch den SSH-Agenten abwickeln.
Die zur Authentifizierung notwendigen öffentlichen Schlüssel stehen dabei im
Serververzeichnis $HOME/.ssh/authorized_keys. Das notwendige Schlüsselpaar
des Nutzers wird beim Client in deiner Datei namens $HOME/.ssh/identity gespeichert.
- ssh als Ersatz von telnet und rlogin:
ssh [Userid@] Remote-Host
Die Userid muß nur dann angegeben werden, wenn die Userids auf der
Client-Workstation und dem Zielrechner unterschiedlich sind.
- ssh als Ersatz von rexec und rsh:
ssh [Userid@] Remote-Host Befehl
Wenn der Befehl Wildcards (?, * usw.) enthält, muß er in Hochkommata
eingeschlossen werden, damit diese auch wirklich erst auf dem Zielrechner
aufgelöst werden,
- scp als Ersatz von rcp und ftp:
- Um eine Datei von der lokalen Workstation zu einem entfernten Zielrechner zu
übertragen:
scp Datei [Userid@] Remote-Host: [Datei | Directory]
- Um eine Datei von einem entfernten Rechner auf die lokale Workstation zu kopieren:
scp [Userid@] Remote-Host: Datei Datei | Directory
Es ist möglich, durch die Angabe von Wildccards (z. B. *.txt) mit einem Befehl mehrere
Dateien zu kopieren. In diesem Fall muß für das Zielsystem ein bereits
existierendes Verzeichnis angegeben werden, in das die Dateien kopiert werden sollen.
Die Angabe einer Zieldatei ist dann nicht möglich.
Um ganze Verzeichnisse rekursiv zu kopieren, kann man die Option -r verwenden:
scp -r Directory [Userid@] Remote-Host: [Directory]
bzw.
scp -r [Userid@] Remote-Host: Directory Directory
Gibt man die Userid nicht explizit an, wird diejenige genommen, unter der das
scp-Kommando auf der lokalen Workstation abgesetzt wird. Alternativ kann
in einer lokalen ssh-Konfigurationsdatei $HOME/.ssh/config für jeden
Zielrechner eine Userid definiert werden, die defaultmäßig genommen wird.
Zugangsvalidierung
Bei der Zugangsvalidierung über ssh gibt es im wesentlichen zwei
Möglichkeiten:
- Zugang mit Paßwort-Authentisierung
Nach Absetzen eines der oben beschriebenen Befehle wird man nach dem Paßwort
auf dem Zielrechner gefragt. Dieses wird verschlüsselt übertragen.
- Zugang mit RSA-Authentisierung
ssh bietet zusätzlich die sogenannte RSA-Authentisierung. Diese Form der Validierung ist
noch sicherer: Statt eines einzelnen Paßwortes kann ein ganzer Satz (Passphrase) als
Zugangsvalidierung gewählt werden. Der private RSA-Schlüssel (Generierung s.u.)
wird mit dieser Passphrase verschlüsselt, um ihn vor Mißbrauch zu schützen.
D.h. selbst wenn der RSA-Schlüssel in unerlaubte Hände gerät, kann er nur dann
genutzt werden, wenn auch die Passphrase bekannt ist.
Wegen der erhöhten Sicherheit, wird empfohlen, möglichst diese Art der
Validierung zu nutzen.
Andere Dienste über SSH tunneln
Es ist möglich, E-Mail, ftp, etc. über eine ssh-Verbindung zu tunneln.
Unverschlüsselte Verbindung
Verschlüsselte Verbindung
TSAP=Transport Service Access Point
ssh ohne Passwort
Public Key Authentication dient dazu, sich per SSH auf einem anderen
Rechner einzuloggen oder Dateien zu ?tragen, ohne sich jedes Mal mit einem
Pa?ort authentifizieren zu m?n. Technisch geschieht dies so, da?zwei zueinander
passende Schl?l-Dateien erzeugt werden - in der einen steht der Private
Key, in der anderen der Public Key.
Der Private Key bleibt beim Benutzer und mu?vor fremdem Zugriff
gesch? werden; der Public Key hingegen wird auf dem Server
hinterlegt.
Wenn der Benutzer sich nun anmelden m?e, ?pr?der Server, ob er im
Besitz eines zum hinterlegten Public Key passenden Private Keys ist, und
gew?t nur dann den Zugang auch ohne Pa?ort.
Wenn man Public Key Authentication benutzt, dann ist ab sofort der
Private Key dem normalen Pa?ort gleichgestellt.
So wie man sein Pa?ort vor fremdem Zugriff sch?n mu?(z.B. in dem man es
nicht aufschreibt und dann den Zettel rumliegen l? - in einen Tresor gepackt,
w? ein solcher Zettel aber o.k.), so mu?man jetzt den Private Key
vor fremdem Zugriff sch?n.
Deswegen besteht die M?chkeit, den Private Key wiederum mit einer
Passphrase zu sch?n - im Prinzip wie ein Pa?ort f?en Private
Key, nur ohne L?enbeschr?ung.
Wo ist denn da der Vorteil, wenn man sich zwar ohne Passwort einloggen kann,
aber f?en Private Key doch wieder eine Passphrase braucht?
Nun, zum einen kann man sich sp?r mit diesem einen Schl?l auf viele
verschiedene Rechner einloggen und mu?sich nicht deren evtl. verschiedene
Pa??r merken.
Zum anderen gibt es den SSH Agent, der in der Lage ist, sich die
Passphrase f?ie Dauer ein Sitzung zu merken, so da?man sie nur einmal
eingeben mu?und bei allen weiteren Logins und Datei-Transfers nicht mehr
gefragt wird.
Es besteht auch die M?chkeit, eine leere Passphrase zu
verwenden - dann aber ist der Private Key ungesch?!
Jetzt mu?man auf anderem Wege sicherstellen, da?niemand an den Schl?l
herankommt, d.h. z.B. die Datei-Zugriffsrechte d?n nur dem Eigent? den
Zugriff erlauben.
Zu einer passwortlosen Authentifizierung muß zuerst ein Schlüsselpaar
generiert werden und zwar auf dem Rechner von dem aus man ssh ohne Passwort
verwenden möchte. Wenn man nicht weiß welchen Typ Schlüssel
man braucht, generiert man einfach alle. Dabei wird man jedesmal nach einem
Passwort gefragt. Das ist nicht das Login-Passwort, sondern ein beliebiges
neues Passwort, das nur dazu dient, seinen Privaten Schlüssel zu erzeugen.
plate@atlas:~ > cd .ssh
plate@atlas:~/.ssh > ssh-keygen ; ssh-keygen -t rsa ; ssh-keygen -t dsa
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/plate/.ssh/identity):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/plate/.ssh/identity.
Your public key has been saved in /home/plate/.ssh/identity.pub.
The key fingerprint is:
ff:49:ac:41:86:40:a9:be:ea:13:59:48:ba:6b:0f:36 plate@atlas
Generating public/private rsa key pair.
Enter file in which to save the key (/home/plate/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/plate/.ssh/id_rsa.
Your public key has been saved in /home/plate/.ssh/id_rsa.pub.
The key fingerprint is:
6e:8f:94:d2:bb:d6:68:37:fb:98:7c:1c:01:8c:de:0b plate@atlas
Generating public/private dsa key pair.
Enter file in which to save the key (/home/plate/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/plate/.ssh/id_dsa.
Your public key has been saved in /home/plate/.ssh/id_dsa.pub.
The key fingerprint is:
c1:32:0a:68:57:e9:d4:77:b5:01:6a:05:ae:8c:b6:24 plate@atlas
plate@atlas:~/.ssh > ls
id_dsa id_rsa identity known_hosts
id_dsa.pub id_rsa.pub identity.pub random_seed
Es wird jeweils ein privater Schlül und ein öffentlicher Schlüssel
generiert.
Als nächstes muß der generierte Public Key (Dateiendung ".pub") in die Datei
/$HOME/.ssh/authorized_keys bzw. .../authorized_keys2 auf der
Gegenseite (der Rechner, auf dem man sich ohne Passwort einloggen möchte)
eingetragen werden. Der Public Key und auch die authorized_keys*-Datei
sind Textdateien. Die Zeile aus der id_*-Datei muß an die
authorized_*-Datei angehängt werden, z.B. via Cut&Paste oder durch
Kopieren der Datei (mit Passwort-Login) und Anhängen. Anschließend werden
diese Authentifizierungsdaten verwenden:
plate@atlas:~/.ssh > scp identity.pub tralala:/home/plate/.ssh/
plate@tralala's password:
identity.pub 100% |*****************************| 526 00:00
plate@atlas:~/.ssh ssh tralala
plate@tralala's password: passwort
Last login: Sat Jan 4 10:23:12 2003 from atlas
...
Je nach ssh-Version muß auch einer der anderen Keys verwendet werden,
z.B. id_dsa.pub nach authorized_keys2.
Es existieren drei Arten von Keys, die auch in unterschiedlichen
Dateien abgespeichert werde. Zu beachten ist, dass hier die
diversen Implementierungen (F-Secure ssh, OpenSSH) divergieren.
- RSA1 (alt, SSH Protokoll 1)
- Erzeugen: ssh-keygen
Dateien: $HOME/.ssh/identity, $HOME/.ssh/identity.pub
- DSA (SSH Protokoll 2)
- Erzeugen: ssh-keygen -t dsa
Dateien: $HOME/.ssh/id_dsa, $HOME/.ssh/id_dsa.pub
- RSA (SSH Protokoll 2)
- Erzeugen: ssh-keygen -t rsa
Dateien: $HOME/.ssh/id_rsa, $HOME/.ssh/id_rsa.pub
Falls die Dateien
authorized_* schon existieren, müssen die
Keys an die Dateien angehängt werden.
Auf jeden Fall sind noch die Zugriffsrechte zu setzen:
chmod 600 ~/.ssh/authorized_*
Anschließend kann nochmals ein neuer Versuch gemacht werden, sich
ohne Passwort anzumelden:
plate@atlas:~/.ssh ssh tralala
Last login: Sat Jan 4 11:18:38 2003 from atlas
...
Troubleshooting mit ssh -v, Zugriffsrechte aller Dateien auf go-rwx
setzen, gegebenenfalls einen eigenen sshd mit Debugging auf einem
nicht-privilegiertem Port starten.
Bei OpenSSH braucht man den Public Key einfach nur in der Datei
~/.ssh2/authorization eintragen mit der Zeile:
Key MEIN-SSH-PUBLICKEY.pub
In Verzeichnis ~/.ssh2/ sollte sich natürlich die Datei
MEIN-SSH-PUBLICKEY.pub
befinden. Jetzt loggt man sich wieder aus und richtet den auf dem lokalen Rechner
verbliebenen Private Key zur Authentifizierung ein, indem die Zeile
IdKey MEIN-SSH-PUBLICKEY
in
~/.ssh2/identification einträgt.
Wenn nicht vorhanden, dann muss man den OpenSSH Public-Key in das SSH2-Format
bringen.
authorized_keys2 enthält eine Zeile ohne Zeilenumbruch:
ssh-dss
AAAAB3NzaC1kc3MAAACBAIygQj1gQp+XTk9oaZdkI8FJoABaWjwJjTVxiXUdau7pIddAht3rmcAgrQEN
z6Cy4he7Dbdu
...
rpnVxyEKaHSYRmGDbB78810kugDeF5+lZs881MN7UnA3crygPs2PEXmpJIK+GfiztqJvf0UjzhaPofLI
sQ1O9Q== USER@HOST
Wird umgewandelt in die Datei
ident-ssh2.pub geschrieben:
---- BEGIN SSH2 PUBLIC KEY ----
Subject: root
Comment: "1024-bit dsa, root@atlas, Wed Jan 23 2002 12:04:22"
AAAAB3NzaC1kc3MAAACBAIygQj1gQp+XTk9oaZdkI8FJoABaWjwJjTVxiXUdau7pIddAht
...
f0UjzhaPofLIsQ1O9Q==
---- END SSH2 PUBLIC KEY ----
Fragen und Antworten:
Informationen über den ssh-Verbindungsaufbau
Mit der Option -v wird ssh/scp im 'Verbose Mode'
aufgerufen. Hierdurch werden Informationen ausgegeben, die zur Problemanalyse
hilfreich sein können.
Wieso fragt ssh nach dem Paßwort auf dem Zielrechner statt nach der RSA-Passphrase?
Es gibt drei Gründe:
- Der öffentliche Schlüssel wurde nicht auf dem Zielrechner abgelegt.
- Das Heimatverzeichnis des Benutzers auf dem Zielrechner hat zu viele Rechte.
In der Standardkonfiguration erwartet ssh, daß Schreibrechte nur für den Owner
gesetzt sind. Sobald sie auch für andere gesetzt sind, schaltet ssh auf
Validierung über Paßwort zurück.
- Die Verwaltung der Benutzerdaten auf dem Zielrechner läuft über DCE. In diesem
Fall hat man keine Möglichkeit, die RSA-Authentisierung zu nutzen.
Man erhält die Warnung "Host key not found from the list of known hosts."
Man sollte sicherstellen, daß die Datei /etc/ssh_known_hosts
existiert und auf dem aktuellen Stand ist. Beim ssh-Zugang zu einem anderen Rechner
muß man beim ersten Login über ssh darauf vertrauen, daß
der HostKey, den der Zielrechner anbietet, korrekt ist.
In jedem Fall kann der Login-Prozeß mit yes fortgesetzt werden.
Der HostKey wird dann automatisch in die Datei $HOME/.ssh/known_hosts
eingetragen, und die Meldung sollte beim nächsten Login über ssh
nicht mehr erscheinen. Außerdem sollte man darauf achten, daß man den
Zielrechner immer in derselben Form anspricht, da der Name zusammen mit dem HostKey
in $HOME/.ssh/known_hosts eingetragen wird und der HostKey
anschließend nur für diesen Namen bekannt ist.
Man erhält die Warnung "HOST IDENTIFICATION HAS CHANGED! ..."
Man sollte die Verbindung durch die Eingabe von no zunächst einmal abbrechen.
Erkundigen Sie sich bitte beim jeweiligen Administrator, ob der HostKey wirklich
geändert wurde. Ist dies der Fall, sollten Sie den bestehenden Eintrag
für die Maschine aus der Datei $HOME/.ssh/known_hosts löschen, damit
der aktuelle HostKey beim nächsten Login an die Datei angefügt werden kann.
IP Security (IPSec)
IPSec (Internet Protocol Security) stellt nicht ein einziges Protokoll dar, sondern eine
Architektur zum Aufbau verschlüsselter Kommunikationsbeziehungen.Es wurde in den RFCs
1825 bis 1829 festgeschrieben. Es erfolgt eine Authentisierung und/oder Verschlüsselung
von Datenpaketen auf der IP-Paket-Ebene, also noch bevor UDP- oder TCP-Pakete in IP-Pakete
eingepackt und über die Leitung verschickt werden. Dieser Vorgang ist auf Ebene drei
(Net-work-Layer) des ISO-7-Schichtmodells angesiedelt. je nach Zweck wird zu dem IP-Header
(der ja die Quell- und die Zieladresse des Datenpakets trägt) ein Authentication Header
(kurz AH) eingefügt, oder die verschlüsselten Daten werden verpackt (ESP = Encapsulating
Security Payload). Mit dieser Sicherheitserweiterung kann demnach jedes einzelne Datenpaket vor Verfälschung geschützt und verschlüsselt werden. Damit würden einige Protokolle auf übergeordneten Schichten, wie z. B. SSL, bei bestimmten An wendungen überflüssig werden, denn je nach verwendetem Schlüssel lassen sich Pakete auch verbindungsorientiert sichern. Anwendungsbezogene Sicherheitsfunktionen, wie beispielsweise digitale Signaturen, werden weiterhin erforderlich sein, da IPSEC die Pakete nur auf dem Weg zwischen zwei Instanzen schützt. IPSEC ermöglicht
- den Einsatz verschiedener Verschlüsselungsalgorithmen
- verschiedene Sicherheitsdienste (Zugangskontrolle, Beglaubigung, Integrität,
Vertraulichkeit)
- Kontrolle, wie detailliert die Sicherheitsdienste angewandt werden.
IPSEC ermöglicht den Aufbau von verschlüsselten Kanälen zwischen Routern oder von Clients
zu Routern und ist damit eine Schlüsseltechnologie für den Aufbau von VPNs (Virtual
Private Networks). IPSEC besteht im wesentlichen aus zwei Teilen:
- Protokolle zur Implemenation der Sicherheitsdienste: AH (Authentication Header) und ESP
(Encapsulating Security Payload)
- Schlüsselmanagement: ISAKMP Protokoll (Internet Security Association and Key Management
Protocol)
Beim Verschlüsseln kann zwischen zwei Modi unterschieden werden:
- Im Transport-Mode wird der Inhalt des Paketes (also das UDP- oder TCP-Paket) in den
kryptografischen Rucksack gepackt und mit dem identischen IP-Header auf die Reise geschickt.
- Im Tunnel-Mode wird das ganze Paket mit originalem IP-Header verschlüsselt und mit
einem Klartext-IP-Header versehen. Der Tunnel-Mode erhöht zwar den Overhead, sorgt aber
dafür, daß IP-Adressen nicht gefälscht werden können, da diese auch verschlüsselt
übertragen und so am Zielsystem geprüft werden können.
IPSEC läßt beliebige Schlüsselmanagement-Verfahren zu und erlaubt auch, starke
Algorithmen und SmartCards zu verwenden. Das SKIP-Verfahren (Simple Key Management for
Internet Protocol) beispielsweise ist auf DES (für ESP) und MD5 (für AH) definiert und
beruht auf dem Diffie-Hellman-Keymanagement.
SET
Bei SET (Secure Electronic Transactions) handelt es sich um eine reine Anwendung, die
ausschließlich zur sicheren Abwicklung von Zahlungsvorgängen dient. Ziel der maßgeblich
von Mastercard und Visa getragenen Initiative ist es, einen Standard für das sichere
Bezahlen mit Kreditkarten in unsicheren Netze, wie z. B. das Internet, zu schaffen.
Für den nur zögernd anlaufenden Electronic Commerce wird von diesem Standard erwartet,
daß er die notwendige Sicherheit und damit auch Akzeptanz auf Seiten der Nutzer
realisiert. Darüber hinaus gewährleistet SET, daß es zu keinem Medienbruch bei der
Abwicklung von Bestell- und Zahlungsvorgängen kommt. SET wurde auf der Basis von
sieben sogenannten Business-Requirements entwickelt, die die Anforderungen an diesen
Standard wie folgt spezifizieren:
- Zahlungs- und Orderinformationen sollen vertraulich behandelt werden.
- Die Integrität der im Rahmen des Zahlungsvorgangs übermittelten Daten soll gewährleistet sein.
- Der Kartenbenutzer muß sich als Karteninhaber authentisieren.
- Der Händler muß sich gegenüber dem Karteninhaber authentisieren.
- Es sollen die besten kryptografischen Verfahren verwendet werden.
- Das Protokoll soll nicht von sicheren Transportmechanismen auf unteren
Schichten abhängen, dessen Benutzung aber nicht verbieten.
- Das Protokoll soll auf verschiedenen Hard- und Software-Plattformen
lauffähig sein (Interoperabilität).
Weiterhin unterscheidet SET sieben an der Transaktion beteiligte Parteien:
Karteninhaber, Händler, Kartenherausgeber (für Karteninhaber), Akquisiteur
(für Händler), Zahlungs-Gateway, Kreditkarten-Institut diverse Zertifizierungsstellen
(Karteninhaber-Zertifizierungsstelle, Zahlungs-GatewayZertifizierungsstelle). Die
Transaktion zwischen Kunde und Händler hat folgenden formalen Ablauf:
- Der Karteninhaber wählt Waren und Dienstleistungen per Internet aus.
- Der Karteninhaber trägt seine Auswahl in ein elektronisches Bestellformular ein.
- Der Karteninhaber wählt die Art der Bezahlung aus (derzeit nur die Bezahlung
per Kreditkarte).
- Der Karteninhaber versendet die Daten (Bestellung/Zahlungsinstruktionen) an den
Händler (Kartenmarke, Kartennummer usw.).
- Der Händler läßt sich die Zahlung durch die Finanzinstitution des Karteninhabers
bestätigen (Zahlungs-Authorisierungsanfrage).
- Der Händler sendet nach einer positiven Antwort eine Auftragsbestätigung an den Kunden.
- Der Händler liefert die Ware aus.
- Der Händler fordert von der Finanzinstitution des Karteninhabers die Bezahlung.
SET beschäftigt sich vor allem mit den unter Punkt 4, 5, 6 und 8 genannten Transaktionen.
Als kryptografische Methoden werden symmetrische Verfahren (DES zur Verschlüsselung der
Daten) sowie asymmetrische Ver-fah-ren (RSA) und Hashfunktionen (SHA1 für digitale
Signaturen zur Authentisierung und Integritätsprüfung) genutzt. Mit der Einführung
sogenannter dualer Signaturen hat das SET-Verfahren eine sehr interessante Lösung für
die selektive Geheimhaltung von Transaktionen zwischen Kunde, Händler und Bank entwickelt.
Diese Lösung stellt sicher, daß der Händler nicht in den Besitz der
Kreditkarteninformationen gelangt und das Finanzinstitut des Kunden nicht in den Besitz
der Bestellinformationen. Beide können aber prüfen, ob diese Informationen korrekt sind
(Integrität) und von wem sie gesendet wurden (Authentisierung). Der Ablauf ist wie folgt:
- Der Kunde errechnet je einen Hashwert für die Bestellung und die
Kreditkarteninformationen. Beide Hashwerte werden miteinander verbunden und darüber
ein weiterer Hashwert errechnet.
- Dieser Hashwert wird vom Kunden mit seinem privaten Schlüssel signiert (duale
Signatur).
- Der Benutzer sendet die duale Signatur, den Hashwert der Kreditkarteninformationen
und die verschlüsselten Bestellinformationen (HybridVerfahren) an den Händler.
- Der Händler entschlüsselt die Bestellinformation, errechnet darüber einen
Hashwert, verbindet diesen Wert mit dem Hashwert der Kreditkarteninformationen
und errechnet über das Ergebnis einen Hash. Diesen Wert vergleicht er mit dem
vom Kunden zugeschickten signierten Wert. Stimmen beide Werte überein, ist der
Kunde authentisiert und die Integrität der Informationen sichergestellt.
Analog dazu erfolgt die Transaktion des Kunden mit seiner Finanzinstitution,
wobei die Bank die ver-schlüs-selten Kreditkarteninformationen erhält die duale
Signatur und den Hashwert der Bestellung. Der wesentliche Vorteil ist, daß dieses
Verfahren auch vor nicht vertrauenswürdigen Händlern schützt denn
Kreditkarteninformationen gelangen niemals in die Hände eines Händlers.
Ein Nachteil des SET-Verfahrens ist der relativ große Aufwand. Der Kunde muß sich
zunächst eine mehrere MB umfassende Software aus dem Netz laden (Wallet-Software),
bevor er seine Buchungen absichern kann. Auch auf Banken und Händler kommt ein hoher
Aufwand an Supportleistungen zu. Mit dem SET-Verfahren zur Sicherung von
Kreditkartenzahlungen im Internet konkurrieren deshalb derzeit auch andere
Verschlüsselungssysteme, insbesondere auf der Basis von SSL.
HBCI
Im August 1995 veröffentlichte der Zentrale Kreditausschuss (ZKA) das "Homebanking
Computer Interface" (HBCI), das als standardisierte Schnittstelle zwischen Kunde und
Bank, die bis dato gewachsenen, inkompatiblen Homebankingsysteme ablösen und
vereinheitlichen sollte. Bis heute wurde die HBCI-Spezifikation mehrfach überarbeitet
(aktuell: Version 2.2) und scheint sich zunehmend als europäischer Standard für
"Homebanking" durchzusetzen. Im Hinblick auf zukünftige Erweiterungen stellte man
zahlreiche Anforderungen an den neuen HBCI-Standard.
- Multibankfähigkeit: Jede Zahlungsverkehrsoftware mit HBCI-Kernel soll in der Lage
sein, mit jedem Kreditinstitut bzw. HBCI-Server zu kommunizieren. Erreicht werden soll
dies über ein einheitliches Protokoll, fest definierte Kommunikationsdialoge und -Ports.
- Transportdienstunabhängigkeit: Das HBCI-Protokoll kann und soll mit jedem
Transportdienst zurechtkommen und somit dem Kunden eine freie Wahl des Zugangs
(Providerwahl) ermöglichen.
- Endgeräteunabhängigkeit: Neben dem PC und Notebook sollen auch mobile Geräte wie
Handy und PDA als mögliche HBCI-Kommunikationsplattformen berücksichtigt werden.
- Offenheit: Durch frei zugängliche Spezifikationen und Entwicklungstools (APIs)
soll nicht nur Vertrauen geschaffen, sondern auch die einfache Entwicklung von
HBCI-Anwendungen vorangetrieben werden.
- Sicherheit: Die Sicherheitsmechanismen zum Schutz der übertragenen Daten, sowie
die Authentifizierung soll auf den derzeit anerkannten und als sicher geltenden
Standards beruhen und gegebenenfalls erweiterbar sein.
- Flexibilität: Die HBCI-Spezifikation soll möglichst modular (objektorientiert)
aufgebaut ein um eigene Geschäftsvorfälle hinzufügen und parametrisieren zu können
und um die Eigenentwicklung von HBCI-Anwendungen zu vereinfachen.
- Präsentationsdienstunabhängigkeit: Der HBCI-Kernel soll nur Rohdatenströme zur
Verfügung stellen und die Kunde-zu-Bank-Kommunikation abwickeln. Die Visualisierung
und Interaktion mit dem Kunden soll alleine Aufgabe der Homebanking-Anwendung sein.
- Anwendungssystem-Unabhängigkeit: Es soll möglich sein, HBCI-Anwendungen sowohl
über fest installierte Software, als auch über dynamisch geladene Software-Module
(JavaApplets, ActiveX, etc.) zu realisieren.
- Plattformunabhängigkeit: Die HBCI-Spezifikation soll keine Einschränkungen
bezüglich des verwendeten Betriebsystems machen und als Entwicklungsumgebung
(HBCI-Kernel) möglichst auch für alle Plattformen verfügbar sein.
- Online & Offline-Arbeiten soll möglich sein, um ?ertragungskapazitäten effektiver
zu nutzen und um dem Kunden mehr Komfort zu bieten.
Die genannten Anforderungen wurden inzwischen alle in die HBCI-Spezifikation aufgenommen
und führten zu einer breiten Akzeptanz des neuen Standards bei den deutschen und
europäischen
Kreditinstituten. Trotz der nach wie vor weiten Verbreitung von proprietären
Homebanking-Systemen, vor allem in Form von "Java-Banking-Applets" im Internet, scheinen
immer mehr Banken zumindest prinzipiell auf den neuen HBCI-Standard zu setzen. Homebanking
auf Basis des HBCI-Standards gilt als sehr sicher, da eine Vielzahl von Sicherungsverfahren
eingesetzt werden:
- Starke Verschlüsselung der übertragenen Daten auf Basis eines Triple-DES Algorithmus.
Es handelt sich hierbei um ein symmetrisches Blockchiffre-Verfahren, dass einen geheimen
168-Bit-Schlüssel nutzt.
- Sichere Authentifizierung des Kunden und der Bank sowie der übertragenen Dokumente
durch digitale Signaturen. Hierbei sind derzeit zwei Verfahren standardisiert:
- RSA-Signaturen (asymmetrisches Verfahren)
- MAC-Signaturen (symmetrisches Verfahren, basiert auf DES)
- Passwortschutz zur Authentifizierung auf Kundenseite
- Signaturzähler zur Erkennung und Vermeidung von Doppeleinreichungen
In der Praxis unterstützen Programme wie Quicken oder StarMoney den neuen HBCI-Standard
und ermöglichen so den sicheren und einfachen Zugang. Voraussetzung neben einer geeigneten
Homebanking-Software ist natürlich, dass die Hausbank HBCI-Banking anbietet und ein
geeigneter Chipkartenleser für die HBCI-Chipkarten vorhanden ist. Derzeit existiert zwar
noch ein zweites Verfahren auf Basis von RSA-Disketten, dieses wird aber sicherlich in
naher Zukunft durch das weitaus sichere Chipkarten-System abgelöst werden. Die
HBCI-Chipkarten enthalten die, für die HBCI-Kommunikation notwendigen, geheimen Schlüssel
zur Signierung und Chiff-rierung der ausgetauschten Daten und wickeln alle
sicherheitsrelevanten Prozesse (Hashwert-bildung, Signierung, Verschlüsselung, etc.) ab.
Vorteil der Chipkarten: die geheimen Schlüssel verlassen nie die Karte, sie sind einfach
zu handhaben und machen unter anderem die umständ-lichen TAN-Listen überflüssig.
Damit das hohe Sicherheitsniveau bei der Nutzung von HBCI-Chipkarten auch gewahrt bleibt,
sollte man vor allem bei dem benötigten Chipkartenleser nicht sparen. Derzeit gibt es drei
Klassen von Chipkartenterminals, die sich hauptsächlich in ihren Sicherheitsmerkmalen
unterscheiden. Die einfachen Chipkartenleser werden der "Klasse 1" zugeordnet und eignen
sich nur eingeschränkt für sicherheitsrelevante Anwendungen, da sie von eingeschleuster
Software (Trojaner) durchaus manipuliert werden können. Besser geeignet sind daher
Chipkartenterminals der "Klasse 2", die nicht nur die sichere PIN-Eingabe mittels einer
eigenen Tastatur ermöglichen, sondern auf einem kleinen LC-Display auch alle
Transaktionen/Vorgänge zur Kontrolle und Bestä tigung anzeigen. Das höchste
Sicherheitsniveau bieten jedoch Chipkartenterminals der "Klasse 3", wobei derzeit nur
KOBIL solche Geräte liefern kann. Diese Chipkartenterminals verfügen über eine
Zulassung des ZKA und ermöglichen zusätzlich die Verwaltung von Signa-turen, das
sichere Bezahlen mit der Geldkarte im Internet, sowie das Aufladen der Geldkarte
(geplant für HBCI v3.0). Die HBCI - Spezifikation und FAQ des ZKA findet man unter
http://www.hbci.de.
3.7 Firewall-Rechner
Als Schutz vor Einbruchsversuchen in lokale Netze, die über einen Anschluß
an öffentliche Netze verfügen (z. B. Internet, aber auch ISDN),
haben sich Firewall-Rechner, kurz 'Firewalls' bewährt. Ähnlich
der Zugbrücke einer Burg erlauben sie den Zugang nur an einer definierten
Stelle. Damit läßt sich der Datenverkehr von und nach außen
kontrollieren. Normalerweise sind zahlreiche Rechner des Unternehmens, die
unter diversen Betriebssystemen laufen, direkt aus dem öffentlichen
nächten Kapitel.
3.8 Rechner geknackt, was nun?
Checkliste
- Maschine vom Netz trennen!
- Administrator verständigen. Alle weiteren Schritte nur im Beisein
eines Experten durchführen.
- Andere Administratoren warnen. (Mailingliste)
- System untersuchen. Wenn möglich von einer Diskette booten, da
Systemprogramme modifiziert sein könen.
- "Snapshot" vom System anlegen. (evtl. Beweismittel)
- Vergleich der Systemprogramme mit den Originalen (z.B. auf der
Installations-CD). Häufig ausgetauschte Dateien bei Unix-Systemen sind:
telnet, in.telnetd, login, su, ftp, ls, ps,
netstat, ifconfig, find, du, df, libc, sync, inetd und
syslogd
- Untersuchen der Dateien /etc/passwd und der /etc/shadow
bei Unix-Systemen. Bei anderen Plattformen untersuchen der User-Datenbank über
entsprechende Programme: Möglicherweise wurden Benutzer hinzugefügt oder
Benutzerrechte geändert.
- Untersuchung der Daten. Je nach Verwendungszweck des Rechners sollten
kritische Daten untersucht werden, wie z.B. Verzeichnisse von FTP-Servern,
HTML-Seiten bei Web-Servern, Programm-Verzeichnisse bei File-Servern.
Achtung: Oft werden Programme in einem Verzeichnis namens "..."
installiert, das man leicht übersieht.
- Sind zusätzliche Programme installiert worden? (Trojanische Pferde
Sniffer, etc.)
- Alle Systemlogfiles überprüfen, z. B.: messages, xferlog, wtmp,
utmp, warn
- Nach Beendigung der Untersuchung: Platte neu formatieren und System
neu installieren (Nötig bei Austausch der System-Programme durch den
Hacker!)
- Alle anderen betreuten Maschinen untersuchen
3.9 Erkennung trojanischer Pferde bei Windows
Viren- oder Trojanerscanner verwenden
Zunächst sollten Sie sich einen Virenscanner kaufen oder aus dem Internet
herunterladen. Sehr viele Hersteller bieten eine in den Funktionen uneingeschränkte
Testversion zum ausprobieren an. Nachdem die Software installiert wurde, sollte unbedingt
ein Update per Internet durchgeführt werden. Bevor Sie zum ersten mal Ihr System
nach Viren und Trojanern durchsuchen lassen, sind noch ein paar wichtige Einstellungen
an der Antivirensoftware zu tätigen. Das Programm ist dahingehend zu konfigurieren,
daß beim Scan alle Dateien untersucht werden. Außerdem sollte das
Programm in keinem Fall bei einer festgestellten Infektion sofort eine Säuberung
oder Entfernung der infizierten Dateien vornehmen. Das ist sehr wichtig, da einige
Trojaner den Virenscannern erhebliche Probleme bei der Entfernung bereiten bzw. diese
sehr fehlerhaft entfernt werden. Das kann schnell zur Folge haben, daß ein System
nicht mehr nutzbar und/oder unter Umständen kaum noch reparabel ist. Das
Trojaner-Programm "SubSeven" in neueren Version bereitet hier z. B. sehr oft erhebliche
Probleme. Sollte die AntiViren Software keine Infektionen feststellen, so heißt
das jedoch noch lange nicht, daß ein System auch wirklich trojanerfrei ist.
Autorun-Einträge überprüfen
In der Regel macht ein Trojaner nur dann Sinn, wenn er sich auf dem System so installiert,
daß er bei jedem Systemstart ausgeführt wird. Das bedeutet: Der Trojaner
läuft ständig im Hintergrund des Systemes mit und wartet, bis der User eine
Onlineverbindung aufbaut. DIe Start-Quellen bei Windows sind leider äußerst
vielfältig:
- Autostart-Ordner
Diese Möglichkeit wird von Trojanern sehr selten genutzt. Grund: Die Entdeckungsgefahr
ist zu hoch. Den Autostart-Ordner finden Sie z. B. wie folgt: Windows-Start -> Suchen
-> Dateien/Ordner. Num "Autostart" eingeben, worauf der Ordner angezeigt wird.
- Datei WIN.INI
Eine vor allem früher sehr häufig anzutreffende Methode ist die Eintragung in
die Win.ini unter den Parametern "Load=" oder "Run=". Vorsicht! Manche Trojanische
Pferde tragen sich nicht direkt hinter der Parameter-Bezeichnung ein, sondern nach
zahlreichen Leerzeichen, damit dieses nicht sofort erkannt wird. Scrollen Sie also
mit dem unteren Balken einfach mal nach rechts. Den besten Zugriff auf diese Datei
(und SYSTEM.INI, Autoexec.bat, Config.sys) hat man über das Programm SYSEDIT.
(Start -> Ausführen -> sysedit.exe eingeben).
- Datei SYSTEM.INI
Eine Eintragung erfolgt unter dem Paramter "shell=". Vorsicht: Hier ist schon eine
Eintragung Namens "Explorer.exe" enthalten, die nicht gelöscht werden darf.
Es könnten jedoch noch weitere Eintragungen vorhanden sein.
- Datei Autoexec.bat
Trojaner nutzen diese Möglichkeit so gut wie gar nicht. Da jedoch diese
Möglichkeit ebenfalls gegeben ist, wird sie hier mit angeführt.
- Datei Config.sys
Einige, wenige Trojaner tarnen sich auch als Gerätetreiber auf Windows-95/98/ME-Systemen.
Diese Trojaner lassen sich jedoch schwer realisieren und sind daher zum Glück noch
recht selten.
- Datei Winstart.bat
Wenn hier eine Eintragung erkennbar ist, bedeutet dieses in der Regel folgendes: Eine
Befehlzeile veranlasst das Kopieren einer Datei, welche vor dem letzten Systemstart
gelöscht wurde. Bisher sind kaum Trojaner bekannt, die diesen Weg nutzen.
- Datei Wininit.ini
Nicht zu verwechseln mit der Datei WIN.INI! Die Datei Wininit.ini muß sich im
übrigen auch nicht auf jedem System befinden. Jedoch kann hier einmalig zwecks
Autorun (also Ausführung einer Datei bzw. eines Trojaners) ein Eintrag erfolgen,
welcher danach sogar gelöscht wird. Im übrigen heißt die Datei
"Wininit.ini" im ausgeführten (geladenen) Windows-System dann "Winit.bak".
Normalerweise wird diese Datei für das Fortsetzen von Installationsprogrammen
nach einem Neustart verwendet. Sie wird aber auch mitunter von Virenscannern zur
Entfernung von Trojanern oder Viren genutzt.
- Datei progman.ini
Das ist die Stuerdatei des "Program-Managers" - ein Relikt aus Windows-3.1. Sie wird
aber immer noch beim Start verarbeitet.
- Datei control.ini
Auch hier ist es theoretisch möglich, einen Eintrag unterzubringen. Bisher ist
jedoch noch kein Fall bekannt, wo sich eine Trojaner hier eingetragen hat.
- Windows-Registrierung
Um hier zu forschen, muß der Registry-Editor aufgerufen werden (Start ->
Ausführen -> regedit eingeben). Ein Programm mit scheinbar unendlichen
Eintragungen/Ordnern öffnet sich. Hier interessieren nur einige, wenige Pfade:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce\
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices\
- Die sogenannten Unknown-Methoden
Auch hier wird die Windows-Registrierung für den Autostart genutzt. Unter
diesen Pfaden sind folgende Einträge zu finden:
HKEY_CLASSES_ROOT\exefile\shell\open\command\ @="%1" %*"
HKEY_CLASSES_ROOT\comfile\shell\open\command\ @="\"%1\" %*"
HKEY_CLASSES_ROOT\batfile\shell\open\command\ @="\"%1\" %*"
HKEY_CLASSES_ROOT\htafile\Shell\Open\Command\ @="\"%1\" %*"
HKEY_CLASSES_ROOT\piffile\shell\open\command\ @="\"%1\" %*"
HKEY_LOCAL_MACHINE\Software\CLASSES\batfile\shell\open\command\ @="\"%1\" %*"
HKEY_LOCAL_MACHINE\Software\CLASSES\comfile\shell\open\command\ @="\"%1\" %*"
HKEY_LOCAL_MACHINE\Software\CLASSES\exefile\shell\open\command\ @="\"%1\" %*"
HKEY_LOCAL_MACHINE\Software\CLASSES\htafile\Shell\Open\Command\ @="\"%1\" %*"
HKEY_LOCAL_MACHINE\Software\CLASSES\piffile\shell\open\command\ @="\"%1\" %*"
Vor der Zeichenkette "%1" %* könnte noch ein Programm eingetragen
worden sein. Normalerweise ist jedoch nur die oben gezeigte Eintragung vorhanden.
Sollte hier somit noch eine ausführbare Datei (exe, com etc.) enthalten sein,
so könnte sich dahinter ein trojanisches Pferd verbergen.
Bei Trojanerverdacht in keinem Fall den gesamten Eintrag
entfernen, sondern nur das Programm!
- Tarnung als Gerätetreiber
Ein Trojanisches Pferd kann sich auch als Gerätetreiber tarnen, was jedoch
noch verhältnismässig selten der Fall ist. Auch erweist sich die genaue
Identifizierung als nicht gerade einfach. Schließlich kann sich hinter
einem Eintrag auch ein harmloser Gerätetreiber verbergen, dessen Löschung
mehr Schaden als Nutzen bringt. Auch für Treiber erfolgt eine Eintragung
in der Registrierung - jedoch unter einem "ungewohntem" Pfad:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\INTLD
Zur Identifizierung sollte jedoch zumindest ein Process-Viewer zur Hilfe genommen
werden, der unter Umständen eine der im o. g. Pfad Eintragung als laufenden
Prozess anzeigt. Windows liefert von Haus aus ein sehr brauchbares Programm namens
"Dr. Watson" mit.
- über "Explorer.exe" auf Laufwerk C:\
Aufgrund eines Bugs in Windows, wird immer zunächst die erste aufzufindende
Datei "explorer.exe" ausgeführt (also in Verzeichnis C:\), bevor die eigentliche
Datei "c:\windows\explorer.exe gestartet wird. Erstere bewirkt, daß ein Trojaner
dieses Namens zunächst geladen werden kann, der dann seinerseits die "richtige"
Datei startet.
- Ersetzen der Datei runonce.exe
Die Original-Windows-Datei "runonce.exe" wird durch ein modifizierte Datei ersetzt,
die damit einen Autostart ermöglicht.
Laufende Prozesse überprüfen
Häufig kommt man einem Trojaner schon auf die Schliche, indem man die laufenden
Prozesse überprüft. Betätigen Sie die Tasten: AltGr + Strg + Entf.
Nun erscheint eine Box, welche laufende Prozesse anzeigt, die man auch entsprechend
beenden kann. Allerdings ist diese Methode überhaupt nicht sicher, da die meisten
trojanischen Pferde es verstehen, sich vor diesem "Taskmanager" zu verstecken.
Windows liefert aber von Haus aus ein gutes Werkzeug zur ?erprüfung aller
laufenden Prozesse mit. Das Programm heißt "Dr. Watson" (Start ->
Ausführen -> drwatson eingeben). Gehen Sie auf den Menüpunkt "Ansicht"
und wählen Sie die Option "Erweiterte Ansicht". Für Anfänger ist
Dr. Watson jedoch erwas schwierig, da das Programm wirklich alles anzeigt, was Windows
so treibt.
Überprüfung der Ports mittels Netstat
Da wie weiter oben beschrieben, die meisten Trojaner im Hintergrund auf eine Onlineverbindung "warten", belegen diese einen TCP-Port. Die Ports kann man mittels
des Programms "netstat" überprüfen. Rufen Sie die DOS-Eingabeaufforderung
auf und geben Sie folgenden Befehl ein: netstat -a. Eine Online-Verbindung
darf dabei nicht bestehen. Die Ausgabe könnte so aussehen:
Aktive Verbindungen
Proto Lokale Addresse Remote-Addresse Status
TCP _:27374 0.0.0.0:45178 LISTENING
UDP _:27374 *:*
Wie man sieht, wird der Port 27374 "belegt". Anhand der Portliste könnte man
daraus schliessen, daß ein System mit dem Trojaner "SubSeven" neuerer Version
infiziert ist. Zumindest ist es ein recht sicheres Anzeichen dafür.
Die Überprüfung mit einer einzigen der oben genannten Methoden ist nicht
unbedingt aussagekräftig. Gehen Sie jedoch alle Methoden nacheinander durch,
werden Sie dem Trojaner sicherlich auf die Schliche kommen können.
3.10 Vertrauen?
Eine verblÜffende Erkenntnis ist, daß trojanische Pferde, Viren,
Trap-Doors etc. von jemanden mit Zugriff auf den Source-Cxxle praktigch
unsichtbar gemacht werden können. Nehmen wir an, ein Systementwickler
hat auf einem Rechner eine Spezialversion des Login-Programms erstellt, das
bei der Eingabe von "tralala" sofort ohne Abfrage eines Paßwortes eine
Super-User-Kennung bereitstellt. Damit kann er auf jedem Rechner auf dem
dieses Programm installiert ist, sofort Super-User werden (Trap-Door).
Allerding würde diese Abfrage nach "tralala" im Source-Code des
Login-Programms stehen und kann leicht entdeckt und entfernt werden.
Nach einer Neuübersetzung ist dieses 'Spezialfeature' wieder verschwunden.
Also geht er trickreicher vor und ändert den Compiler, so daß er beim
Übersetzen des Login-Programms, die Abfrage nach "tralala" in das Login-Program
einbaut. Damit hat er das Problem aber nur verschoben. Im Source-Code des Login-Programms
ist nichts mehr zu sehen, dafür aber in der Source des C-Compilers.
Nun geht er einen Schritt weiter und ändert den C-Compiler so, daß er
zusätzlich beim Übersetzen des C-Compilers die entsprechende Anderung in
den C-Compiler einbaut. Er übersetzt den C-Compiler mit dieser Anderung. Damit
hat er den C-Compiler trainiert, er kann die &aAuml;nderung im Source-Code des
Compiles wieder rückgängig machen. Bei jeder Ü0bersetzung des Compilers
wird die Änderung ja wieder eingebaut.
Damit ist die Modifikation des Login-Programms nirgends mehr in Source-Form zu sehen.
Jede Spur dieser Sicherheitslücke ist verschwunden. Man kann das Betriebssystem
komplett neu übersetzen und die Sicherheitslücke ist immer noch drin.
In einem gewissen Sinn hat das System die Information über das "tralala"-Feature
gelernt und sie braucht nicht mehr im Source-Code repräsentiert zu werden.
Dieses Verfahren funktioniert natürlich nicht nur mit dem C-Compiler sondern mit
jedem Programm, das andere Programme transformiert: Compiler anderer Sprachen, Assembler,
Skript-Interpreter, Linker, selbst Compiler für Microcode können betroffen sein.
Selbst die genaue Durchsicht der Sourcen kann in manchen Fällen nicht verhindern,
daß man Software benutzt, die seltsame Dinge tut.
Zum vorhergehenden Abschnitt
Zum Inhaltsverzeichnis
Zum nächsten Abschnitt
Copyright © FH München, FB 04, Prof. Jürgen Plate