Seminarbeitrag SSH2 Sicherheit auf der Anwendungsschicht zum Seminar Sicherheit in Kommunikationsprotokollen Björn Wargenau EINLEITUNG...............................................................................................................2 Aktuelle Versionen und Implementierungen von SSH.......................................................3 DIE SSH2 PROTOKOLLE...........................................................................................3 Protokollarchitektur.............................................................................................................3 Das Transport Layer Protokoll............................................................................................5 Binary Packet Protocol........................................................................................................5 Kompression.......................................................................................................................7 Verschlüsselung...................................................................................................................7 Integrität der übermittelten Daten........................................................................................8 Schlüsselaustausch..............................................................................................................9 Diffie−Hellman Key Exchange...........................................................................................11 Das User Authentication Protocol .....................................................................................13 Authentication Requests....................................................................................................13 None Authentication Request............................................................................................14 Banner Messages...............................................................................................................16 Public Key Authentisierung...............................................................................................16 Authentisierung mittels Passwort.......................................................................................17 Hostbased Authentisierung................................................................................................18 DAS CONNECTION PROTOCOL.............................................................................19 Kanäle...............................................................................................................................19 Sessions.............................................................................................................................21 TCP/IP Port Forewarding..................................................................................................24 SICHERHEIT VON SSH2.........................................................................................26 Sicherheit gegen aktive Angriffe.......................................................................................26 Sicherheit gegen passive Angriffe.....................................................................................27 Weitere Sicherheitsrisiken.................................................................................................27 QUELLEN .................................................................................................................28 Einleitung Viele Programme die heute in Netzwerken für Kommunikation und Datenübertragung verwendet werden sind unsicher, dazu zählen zum Beispiel die häufig verwendeten Anwendungen Telnet, ftp, Pop sowie die r−Tools. All diese Programme haben zwei Probleme: Die Übertragung von Benutzername und Passwort im Klartext Keine Authentisierung des Kommunikationspartners Dies kann von Angreifern leicht ausgenutzt werden, um sich Zugang zu Postfächern oder Benutzerlogins zu beschaffen. Empfängt zum Beispiel ein Benutzer mittels Pop in einem Ethernet seine E−Mail, so kann sein Login und Passwort leicht mit einem Snifferprogramm abgefangen werden. Diese Programme können auch von Laien bedient werden, z.b. wird mit KDE das Programm KSniff ausgeliefert, welches sogar eine graphische Oberfläche hat. Mit Hilfe von SSH hat der Benutzer die Möglichkeit die Datenübertragung zu verschlüsseln und sicherzustellen das der mit dem richtigen Partner kommuniziert. Das Hauptanwendungsfeld von SSH ist der Ersatz von Telnet, es gibt aber noch weitere Nutzungsmöglichkeiten. SSH kann auch dazu verwendet werden die Übertragung von Benutzerdaten durch unsichere Protokolle, wie z.B. Pop zu sichern. SSH kann vom Benutzer auf dem System installiert werden, falls es auf dem System nicht vorhanden ist, es sind keine root Rechte erforderlich. Aktuelle Versionen und Implementierungen von SSH Die aktuelle Versionsnummer von SSH ist 2.3 SSH2 ist nicht kompatibel mit der Version SSH1. Das bedeutet ein SSH1 Server kann keine Anfragen von SSH2 Clients beantworten. Der umgekehrte Fall SSH2 Server und SSH1 Client kann vom Server unterstützt werden, allerdings muss beim Client in diesem Fall eine Warnung angezeigt werden. Implementierungen von SSH2 gibt es unter anderem von SSH Communications Security www.ssh.com Eine freie Implementierung gibt es vom Open SSH Project www.openssh.org Die SSH2 Protokolle Protokollarchitektur Jeder SSH2 Server muss einen Host Key besitzen. Er kann aber auch mehr als einen besitzen. Mehrere Server können sich den gleichen Host Key teilen. Jeder Host muss mindestens einen Host Key für jedes zu unterstützende Verschlüsselungsverfahren besitzen. Der host key wird während des Schlüsselaustausches verwendet, um zu überprüfen, ob der Client wirklich mit dem korrekten Server spricht. Damit dies möglich ist, muss der Client vorher den public key des Servers kennen. Dazu können zwei verschiedene Vertrauens Modelle benutzt werden: Client Datenbank Der Client verfügt über eine lokale Datenbank in der jedem Hostnamen der public key des Hosts zugeordnet ist. Der Vorteil dieser Methode ist das keine zentrale Stelle zur Authentisierung erforderlich ist. Ein Nachteil ist das der Benutzer sich selbst um die Verwaltung der public keys kümmern muss. Certification Authority CA Hier wird die Verknüpfung von Hostname und public key von einer certification authority zertifiziert. Der Vorteil dieser Variante ist das diesem Verfahren der Client nur den CA key zu kennen braucht. Nachteile sind: jeder host key muss von der CA zertifiziert werden und der Benutzer muss der CA vertrauen. SSH2 Implementierungen sollten bei dem Test von public keys nach der "best effort" Strategie vorgehen. Das bedeutet das bei der Zuordnung von Hostname zu public key Fehler auftreten können. Im Protokoll ist die Möglichkeit vorgesehen, das bei der ersten Verbindung zwischen einem Client und einem Host die Hostname − public key Verknüpfung nicht überprüft wird. In diesem Fall ist die Verbindung weiterhin sicher gegen passives Abhören, aber nicht gegen man−in−the−middle Angriffe. Dies vereinfacht die Benutzung von SSH, da der public key des Servers in diesem Fall bei der ersten Verbindung runtergeladen werden kann. Allerdings ist diese Art sich einen public key zu beschaffen auch ein Sicherheitsproblem. Daher wird vorgeschlagen diese Option zu deaktivieren. SSH2 Implementierungen können zusätzliche Methoden zur Verifikation von Host keys zur Verfügung stellen. Ein Beispiel ist ein hexadezimaler Fingerprint der mit Hilfe des Hasch− Algorithmus SHA−1 erzeugt wurde. Derartige Fingerprint können einfach übers Telefon oder Visitenkarten übermittelt werden. SSH wird in 3 Protokollen definiert: Transport layer protocol [SSH−TRANS] User authentication protocol [SSH−USERAUTH] Connection protocol [SSH−CONN] Das Transport Layer Protokoll Dieses Protokoll stellt Server Authentisierung, Vertraulichkeit und Integrität zur Verfügung. Verbindungsaufbau Der Client baut eine TCP Verbindung zum Server auf. Dazu wird in der Regel Port 22 benutzt, dieser wurde für SSH registriert. Nun senden Server und Client einen "identification string" der Form: "SSH−protoversion−softwareversion comments" . Der Server kann, bevor er den "identification string" sendet, noch andere Daten senden. Clients müssen in der Lage sein diese Daten zu erkennen, sie dürfen aber ignoriert werden. Die Versionsinformationen müssen aus printable us−ascii bestehen und dürfen keine Leerzeichen oder Minuszeichen enthalten. Der im "identification sting" enthaltene Kommentarteil kann zusätzliche Informationen enthalten, die dem Benutzer bei Problemlösungen helfen sollen. Nachdem beide Seiten die Versionsinformationen ausgetauscht haben beginnt der Schlüsselaustausch. Alle Pakete die von nun an ausgetaucht werden sollten das "binary packet protocol" benutzen. Binary Packet Protocol Pakete dieses Protokolls haben die folgende Form: packet_length padding_lengt h payload random padding mac Bedeutung der Felder: uint32 packet_length: Die Länge des Paketes in Bytes ohne das Feld packet_length und ohne den MAC. byte padding_length: Enthält die Länge des Feldes padding in Bytes. byte[packet_length − padding_length − 1] payload: Dieses Feld enthält die Nutzdaten. byte [padding_length] random padding: Zufällige Bytefolge mit der das Paket vergrößert wird, bis die Paketlänge ohne MAC entweder Vielfaches von 8 oder der "cipher block size" ist, je nachdem welcher der beiden Werte größer ist. Mindestens 4 Bytes lang. byte [mac_length] mac: Dieses Feld enthält den "message authentication code", nachdem einer ausgehandelt wurde. Am Anfang ist dieses Feld leer. Die minimale Länge eines Binary Packet Protocol Packetes ist 16 Bytes. Alle SSH2 Implementierungen müssen in der Lage sein Pakete zu verarbeiten bei denen die Länge des playloads 32768 Bytes oder kleiner ist. Kompression Es kann zwischen Client und Server ein Kompressionsverfahren ausgehandelt werden. Mit diesem wird dann das Feld payload verschlüsselt. Bislang sind zwei Kompressionsverfahren definiert: none muss implementiert werden es erfolgt keine Kompression zlib kann implementiert werden GNU ZLIB (LZ77) Kompression [RFC−1950] und [RFC−1951]. Verschlüsselung Verschlüsselungsalgorithmus und Schlüssel werden während des Schlüsselaustausches ausgehandelt. Ist Verschlüsselung aktiviert dann müssen die Felder packet length, paddinglength, payload und padding verschlüsselt werden. Es sollen Schlüssel mit einer effektiven Schlüssellänge von mindestes 128 Bit verwendet werden. Die Verschlüsselungsverfahren müssen für beide Richtungen unabhängig sein, das bedeutet es ist möglich für die Richtung Client Server ein anderes Verfahren zu verwendet als bei der Richtung Server Client. Folgende Verschlüsselungsverfahren sind momentan definiert: Verfahren Implementierung 3des−cbc REQUIRED blowfish− cbc RECOMMENDED twofish−cbc RECOMMENDED arcfour OPTIONAL idea−cbc OPTIONAL cast128−cbc OPTIONAL none OPTIONAL Integrität der übermittelten Daten Um die Integrität der übermittelten Daten sicherzustellen wird jedem Packet ein MAC (message authentication code) hinzugefügt. Dieser wird aus dem Inhalt des Paketes, der Sequenznummer des Paketes und einen Geheimnis, das nur Client und Server kennen, berechnet. Mac−Algorithmus und Schlüssel werden während des Schlüsselaustausches ausgehandelt. Am Anfang der Verbindung ist kein MAC− Algorithmus aktiv und die Länge des MAC Feldes ist 0. Nach dem Schlüsselaustausch wird der MAC folgendermaßen berechnet: MAC = mac(key, sequence_number, unencrypted_packet) wobei key ein Geheimnis ist, das nur Client und Server kennen sequence_number die Sequenznummer des aktuelles Paketes ist es wird von 0 gezählt, bei 2^32 springt der Zähler wieder auf 0 Die Sequenznummer wird nie gesendet. unencrypted_packet die Felder packet_length,padding_length,payload and padding sind Schlüsselaustausch Es gibt für SSH2 nur eine definierte Methode um Schlüssel auszutauschen, hierbei handelt es sich um das Diffie−Hellman Verfahren. Der Schlüsselaustausch beginnt damit das Client und Server das folgende Paket senden: SSH_MSG_KEXINIT cookie (random bytes) kex_algorithms server_host_key_algorithms encryption_algorithms_client_to_server encryption_algorithms_server_to_client mac_algorithms_client_to_server mac_algorithms_server_to_client compression_algorithms_client_to_server compression_algorithms_server_to_client languages_client_to_server languages_server_to_client first_kex_packet_follows uint32 0 (reserved for future extension) Bedeutung der Felder: byte SSH_MSG_KEXINIT: Ein Byte, das den Typ des Paketes bestimmt byte[16] cookie (random bytes): Zufälliger Wert, soll verhindern das die andere Seite die Schlüssel und Sitzungskennung feststellen kann String kex_algorithms: Der Schlüsselaustauschalgorithmus String server_host_key_algorithms: List der Algorithmen die der host key des Servers unterstützt String encryption_algorithms_client_to_server: Liste der akzeptierbaren symmetrischen Verschlüsselungsalgorithmen String encryption_algorithms_server_to_client: Liste der akzeptierbaren symmetrischen Verschlüsselungsalgorithmen String mac_algorithms_client_to_server: Liste der akzeptierbaren MAC− Algorithmen String mac_algorithms_server_to_client: Liste der akzeptierbaren MAC− Algorithmen String compression_algorithms_client_to_server: Liste der akzeptierbaren Kompressions−Algorithmen String compression_algorithms_server_to_client: Liste der akzeptierbaren Kompressions−Algorithmen Der für die Verbindung verwendete Verschlüsselungs−, Kompressions− und Message Authenticationalgorithmus ist jeweils der erste in der Liste des Clients, der auch beim Server vorhanden ist. Nach dem sich Client und Server mit dem KEXINIT−Packet auf Verschlüsselungs−, Kompressions− und Message− Authentisierungsalgoithmen geeinigt haben wird der Schlüsselaustauschalgorithmus aufgerufen. Diffie−Hellman Key Exchange x=ZufallsZahl() e=g^x mod p y=ZufallsZahl() f=g^y mod p e f K=e^y mod p H=hash(V_C, V_S, I_C, I_S, K_S, e, f, K) S=signatur(H) S K_S Verifiziert K_S K=f^x mod p H=hash(V_C, V_S, I_C, I_S, K_S, e, f, K) Teste ob s stimmt CLIENT K x y g e f K_S p V_S, V_C I_S, I_C SERVER Gemeinsames Geheimnis von Server und Client Zufallszahl, nur dem Client bekant Zufallszahl, nur dem Server bekant Generator, hier in der Regel 2 wird Client berechnet und gesendet lässt ohne y keine Rückschlüsse auf Geheimnis zu der Server benötigt e um das Geheimnis zu ermitteln wird Server berechnet und gesendet lässt ohne x keine Rückschlüsse auf Geheimnis zu der Client benötigt f um das Geheimnis zu ermitteln Public key des Servers Primzahl 17976931348623159077083915679378745319786029604875601170644 42368419718021615851936894783379586492554150218056548598050 36464405481992391000507928770033558166392295531362390765087 35759914822574862575007425302077447712589550957937778424442 42661733472762929938766870920560605027081084290769293201912 8194467627007 Version Strings von Client und Server Payload der Keyexchange Packete Das User Authentication Protocol Das User Authentication Protokoll setzt auf dem SSH Transport Layer Protokoll auf. Es authentisiert den Benutzer beim Server. Es geht davon aus das Integrität und Vertraulichkeit durch die darunter liegenden Protokolle zur Verfügung gestellt werden. Authentication Requests Authentication Requests müssen die folgende Form haben: SSH_MSG_USERAUTH_REQUEST user name (in ISO−10646 UTF−8 encoding) service name (in US−ASCII) method name (US−ASCII) Rest des Paketes ist abhängig von der gewählten Authentisierungs−Methode Bedeutung der Felder: byte : SSH_MSG_USERAUTH_REQUEST Ein Byte, das den Typ des Paketes bestimmt String user name : Name des Benutzers der sich beim Server anmelden will String service name : Name des Dienstes den der Benutzer nach der Authentisierung benutzen will String method name : Die Methode mit der sich der Benutzer authentisieren will Existiert der vom Client übermittelte Benutzername nicht, dann kann der Server die Verbindung beenden, oder eine Liste der möglichen Authentisierungsmethoden senden, aber jeder Authentisierungs−Versuch muss dann fehlschlagen. Damit wird es einem Angreifer nicht ermöglicht zu testen, ob ein bestimmter Benutzername existiert. Lehnt der Server einen Authentisierungsversuch des Clients ab dann antwortet er mit dem Packet: SSH_MSG_USERAUTH_FAILURE authentications that can continue partial success Bedeutung der Felder: byte : SSH_MSG_USERAUTH_FAILURE Ein Byte, das den Typ des Paketes bestimmt String user name : Eine Liste der Authentisierungsmethoden die noch zum Erfolg führen können boolean partial success : Falsch, da die Authentisierung fehlgeschlagen ist War die Authentisierung des Clients erfolgreich dann antwortet der Server mit : SSH_MSG_USERAUTH_SUCCESS Bedeutung der Felder: byte : SSH_MSG_USERAUTH_SUCCESS Ein Byte, das den Erfolg der Authentisierung anzeigt Alle Nachrichten, die von nun an vom Client empfangen werden, werden an den Dienst weitergeleitet , der über dem User Authentication Protocoll läuft. Nach Empfang der Nachricht SSH_MSG_USERAUTH_SUCCESS startet der Server den vom Benutzer angegebenen Dienst. None Authentication Request Ein Client kann die vom Server unterstützten Authentisierungsmethoden anfordern, indem er dem Server einen Authentication Request mit dem method namen "none" sendet. Daraufhin kann der Server die Liste mittels eines SSH_MSG_USERAUTH_FAILURE Paketes zum Client senden. Banner Messages Das User Authentication Protocoll erlaubt es dem Server eine sogenannte Banner Message zum Client zu senden bevor die Authentisierung stattfindet. Diese sollte dann vom Client an den Benutzer weitergeleitet werden. Public Key Authentisierung Diese Art der Authentisierung muss von allen SSH2 Implementierungen unterstützt werden. Bei diesem Verfahren gilt der Besitz des privaten Schlüssels als Authentisierung. Der private Schlüssel des Benutzers ist in der Regel verschlüsselt gespeichert und muss vor dem Erstellen der Signatur mit Hilfe der Passphrase entschlüsselt werden. Um die Authentisierung durchzuführen sendet der Client das folgende Packet. Die allgemeine Form eines SSH_MSG_USERAUTH_REQUEST ist beschrieben. weiter oben SSH_MSG_USERAUTH_REQUEST user name service "publickey" TRUE public key algorithm name public key to be used for authentication signature Bedeutung der Felder: string : signature Eine mit dem privaten Schlüssel des Benutzers erstellte Signatur von session identifier und dem oben angegebenen Packet ohne das Feld Signatur Der Server muss überprüfen ob der vom Client verwendete Schlüssel für Authentisierungen verwendet werden darf und ob die Signatur stimmt. Falls dies der Fall ist, ist die Authentisierung erfolgreich. Authentisierung mittels Passwort Bei diesem Verfahren gilt die Kenntnis eines geheimen Passwortes als Authentisierung. Der Client sendet dazu folgendes Packet an den Server: SSH_MSG_USERAUTH_REQUEST user name service "password" FALSE plaintext password (ISO−10646 UTF−8) Da über das SSH2 Transport Layer Protokoll eine verschlüsselte Datenübertragung durchgeführt wird, stellt die Übermittlung des Passwortes kein Sicherheitsrisiko dar. Der Server antwortet entweder mit der Nachricht SSH_MSG_USERAUTH_SUCCESS oder SSH_MSG_USERAUTH_FAILURE. Hostbased Authentisierung Dieses Verfahren zur Authentisierung basiert auf dem Rechnernamen des Clients, dem Login des Benutzers auf diesem Rechner und einem privaten Schlüssel auf dem Client. Es ist bequem aber nicht besonders sicher. Der Client authentisiert sich indem er eine mit dem privaten Schlüssel des Clients erstellte Signatur sowie den Rechnernamen und das Login des Benutzers zu Server sendet: SSH_MSG_USERAUTH_REQUEST user name Service "host based" public key algorithm for host key public host key and certificates for client host client host name (FQDN; US−ASCII) client user name on the remote host (ISO−10646 UTF−8) Signature Bedeutung der Felder: string : signature Eine mit dem privaten Schlüssel des Clients erstellte Signatur von session identifier, und dem oben gezeigten Packet ohne das Feld Signatur. Der Server überprüft ob der host key zu dem Namen des Client Rechners passt, ob der angegebene Benutzer sich von diesem Rechner aus einloggen darf und ob die Signatur gültig ist. Der Benutzername kann bei der Authentisierung auch ignoriert werden. Falls dieses Verfahren verwendet wird muss darauf geachtet werden, das ein normaler Benutzer nicht Zugriff auf den privaten Schlüssel des Client Rechners hat. Das Connection Protocol Das Connection Protokoll läuft über dem SSH2 User Authentication Protocol. Es multiplext den verschlüsselten Kanal in verschiedene logische Kanäle. Die vom Connection Protokoll zur Verfügung gestellten Kanäle können von vielen Anwendungen benutzt werden. Standardmäßig wird Unterstützung für sichere interaktive Shellsitzungen, Tunneln beliebiger TCP/IP Ports und sichere X11 Verbindungen zur Verknüpfung gestellt. Kanäle Alle Terminal Sitzungen, X11 Verbindungen usw. laufen über Kanäle. Diese können von Client und Server erstellt werden. Will eine Seite einen Kanal öffnen, dann ordnet sie diesem zuerst eine Nummer zu und sendet dann folgendes Packet: SSH_MSG_CHANNEL_OPEN channel type (restricted to US−ASCII) sender channel initial window size maximum packet size Hier folgen vom Kanal abhängige Daten Bedeutung einiger Felder: String : channel type Die Art der Verbindung z.B. − X11 − Shell uint32 sender channel : Lokale Nummer des Kanals uint32 maximum packet size : maximale Größe von Paketen die empfangen werden Nun entscheidet die andere Seite ob der Kanal geöffnet werden kann und antwortet mit: SSH_MSG_CHANNEL_OPEN_CONFIRMATION recipient channel sender channel initial window size maximum packet size Hier folgen vom Kanal abhängige Daten oder mit SSH_MSG_CHANNEL_OPEN_FAILURE recipient channel reason code additional textual information (ISO−10646 UTF−8) language tag (as defined in [RFC−1766]) [RFC−2044]) Daten werden dann mit Paketen der folgenden Form übertragen: SSH_MSG_CHANNEL_DATA recipient channel Data Bedeutung der Felder: byte SSH_MSG_CHANNEL_DATA : ein Byte, das den Typ des Paketes bestimmt uint32 recipient channel : der Zielkanal byte[] data : Nutzdaten Das Schließen eines Kanals erfolgt mit dem Packet: SSH_MSG_CHANNEL_EOF recipient_channel Bedeutung der Felder: byte SSH_MSG_CHANNEL_DATA : ein Byte, das den Typ des Paketes bestimmt uint32 recipient channel : der Zielkanal Sessions Eine Session ist die Ausführung eines entferntes Programms. Dabei kann es sich um eine Shell, ein Anwendungsprogramm oder um ein Systemprogramm handeln. Eine Session wird mit folgendem Packet eröffnet: SSH_MSG_CHANNEL_OPEN "session" sender channel initial window size maximum packet size Eine Session kann durch einen "session chanel open request" vom Client beim Server angefordert werden. Clients sollten aus Sicherheitsgründen session chanel open requests ablehnen. Pseudo Terminal anfordern Eine Pseudo Terminal wird mit folgendem Packet vom Server angefordert. Dieses wird für interaktive Shellsitzungen benötigt SSH_MSG_CHANNEL_REQUEST recipient_channel "pty−req" want_reply TERM environment variable value (e.g., vt100) terminal width, characters (e.g., 80) terminal height, rows (e.g., 24) terminal width, pixels (e.g., 480) terminal height, pixels (e.g., 640) encoded terminal modes Daraufhin erstellt der Server einen Kanal: SSH_MSG_CHANNEL_OPEN "pty" sender channel initial window size maximum packet size Sichere X11 Verbindungen Eine sichere X11 Verbindung wird mit folgendem Packet vom Server angefordert: SSH_MSG_CHANNEL_REQUEST recipient channel "x11−req" want reply single connection x11 authentication protocol x11 authentication cookie x11 screen number Daraufhin kann der Server mit folgendem Packet die sichere X11 Verbindung herstellen: SSH_MSG_CHANNEL_OPEN "x11" sender channel initial window size maximum packet size originator address (e.g. "192.168.7.38") originator port Starten von Programmen oder einer Shell auf dem Server Es muss schon eine Session existieren. Dann kann der Client mit dem folgenden Packet ein Interaktive Shell starten. SSH_MSG_CHANNEL_REQUEST recipient channel "shell" want reply Der Client kann auch andere Programme starten, falls er auf der Server die entsprechenden Rechte hat. Dies erfolgt durch Senden des Paketes: SSH_MSG_CHANNEL_REQUEST recipient channel "exec" want reply Command TCP/IP Port Forewarding Port Forewarding bedeutet, das Nachrichten die normalerweise über eine unsichere Verbindung zu einem bestimmten Port des Servers gesendet werden, stattdessen zuerst an einen lokalen Port gesendet werden. Der SSH Client lauscht auf diesem lokalen Port und falls dort Daten eintreffen sendet er sie über einen sicheren Kanal zum SSH− Server auf der Gegenseite weiter, dieser übergibt die Daten dann an den eigentlichen Zielport. Mit dieser Methode kann zum Beispiel die Übergabe von Benutzername und Passwort beim Abfragen von Mails gesichert werden, allerdings werden die Daten vom Server zum Client unverschlüsselt übertragen. Normalfall: Login, Passwort pop client pop server Client Server Abgesichert: sicherer Kanal SSH Client SSH Server Login , Passwort pop client Client pop server Server Port Forewarding wird mit folgendem Paket vom Server angefordert: SSH_MSG_GLOBAL_REQUEST "tcpip−forward" want reply address to bind (e.g. "0.0.0.0") port number to bind Dieser Dienst wird in der Regel nur vom Server zur Verfügung gestellt. Erhält ein Client diesen Request sollte er ihn ablehnen. Nachdem ein Server diesen Request erhalten hat kann er mit folgendem Packet das port forewarding aktivieren. SSH_MSG_CHANNEL_OPEN "forwarded−tcpip" sender channel initial window size maximum packet size address that was connected port that was connected originator IP address Sicherheit von SSH2 Sicherheit gegen aktive Angriffe SSH2 kann durch sogenannte "man−in−the−middle" Attacken angegriffen werden. Normalfall: public key Client Server Angriff: Client Server public key des Angreifers Angreifer Dies wird dadurch möglich, das es dem Client erlaubt werden kann den public key des Servers herunterzuladen, wenn sich der Client zum ersten Mal mit dem Server verbindet. Dies kann von einem Angreifer ausgenutzt werden, indem Verbindungsaufnahme des Clients mit dem Server vorgibt selbst der durch DNS− oder IP Spoofing. Der Client würde in diesem Fall Angreifers runterladen. Der Client geht nun davon aus das am anderen Kommunikationspartner ist und sendet diesem geheime Informationen. er bei der ersten Server zu sein, etwa den public key des Ende der gewünschte Vor diesem Angriff kann sich der Client schützen indem das Runterladen des public keys beim Servers deaktiviert wird, in diesem Fall muss der public key anders verteilt werden, was die Benutzbarkeit von SSH erschweren würde. Der Client hat die Möglichkeit die Echtheit des runtergeladenen public keys etwa durch einen Fingerprint zu überprüfen, dieser ist relativ kurz und kann übers Telefon oder über Visitenkarten weitergegeben werden. Der Server kann seinen public key durch eine dritte Stelle (CA) beglaubigen lassen. Verfügt der Client dann über den public key dieser Stelle kann er diese Beglaubigung prüfen Sicherheit gegen passive Angriffe SSH2 ist gegen passive Angriffe, das bedeutet das Abhören der Kommunikation von zwei Parteien, ohne direkte in diese einzugreifen sicher, wenn man davon ausgeht das die verwendeten kryptographischen Verfahren sicher sind. Weitere Sicherheitsrisiken Erlangt ein Angreifer root Rechte auf dem Server kann die Sicherheit nicht mehr gewährleistet werden, da er dann auch Zugriff auf den private key des Servers hat. Ein weiteres Risiko ist eine schwache Passphrase, mit der der private key auf dem Rechner des Clients geschützt wird. Kann ein Angreifer diese Passphrase erraten und hat Zugriff auf die Datei in welcher der private key des Benutzers liegt , dann kann er sich beim Server als Benutzer authentisieren. Quellen http://www.ietf.org/html.charters/secsh−charter.html Seite der IETF mit Definition des SSH2 Protokolls http://www.gfnet.de/security/ssh.html Ein Übersicht über SSH http://kepler.offis.uni−oldenburg.de/lehre/Seminar/SemSichWS99/10/index.html Seminarbeitrag vom letzten Jahr http://www.ssh.org/download.html Kommerzielle SSH2 Version von SSH Communications Security www.openssh.com Das Open SSH Projekt bietet eine freie Implementierung von SSH2. Andrew s. Tannenbaum Computernetzwerke, 3. Auflage Erläuterung des Diffie−Hellman Verfahren auf Seite 640 bis 642