OpenSSH est une implémentation
libre du protocole SSH, permettant une connexion interactive comme pour
Telnet mais de manière sécurisée. Il peut
également servir à mettre en place des "tunnels"
sécurisés pour y faire passer des applications (transfert
de fichiers, application X-Window...). Il permet ainsi d'éviter
la diffusion des mots de passe en clair sur le réseau,
contrairement à certains protocoles comme ftp ou telnet.
Distribué sous license de type Apache, OpenSSH assure des
fonctions de cryptographie basée sur OpenSSL.
Historique
OpenSSH est issu, à l'origine, de la version
libre 1.2.12 de ssh développée par Tatu Ylönen . Ce
logiciel a évolué et a finit par se placer sous des
licenses de plus en plus restrictives puis n'est devenue utilisable
qu'au sein d'un environnement commercial.
C'est à partir de cette version et du travail de
Björn Grönvall sur le développement de sa
propre version (OSSH), que des développeurs du projet OpenBSD
ont commencé à travailler (correction de bugs et
ajout de fonctionnalités) pour sortir la première
version d'OpenSSH (la 1.2.2) inclue dans OpenBSD 2.6
à la fin de l'année 1999. Cette version d'OpenSSH ne
supportait que les versions 1.3 et 1.5 du protocole et ce n'est qu'au
milieu de l'année 2000 que la version 2.0 du protocole fut
intégré au sein de la version 2.0 d'OpenSSH,
distribuée dans OpenBSD 2.7.
Depuis le début, le projet OpenSSH se compose de deux
équipes distinctes de développeurs. L'une s'attache
à fournir un code simple et optimisé pour OpenBSD tandis
que
l'autre s'occupe de rendre ce code portable pour la plupart des
systèmes Unix (AIX, HP-UX, SOLARIS, MacOS X, Linux,
Cygwin,....). Cela permet de fournir un code plus fiable, plus facile
à maintenir et surtout plus rapide à produire.
OpenSSH en est à la version 3.7 et supporte les versions 1 et 2
du protocole SSH. Il est toutefois préférable, dans la
mesure du possible, d'utiliser la version 2 de SSH car celle-ci corrige
quelque failles de sécurité présentes dans la
version 1.
Contenu et
fonctionnalités
Architecture
Le protocole SSH2 est standardisé par le groupe de travail secsh
de l'IETF. La structure
générale de SSH2 est décrite dans le draft d'
architecture et se compose en trois couche distinctes :
- La couche transport
qui fournit la négociation des algorithmes et l'échange
des clés.
- La couche
d'authentification utilisateur quifournit les mécanismes
nécessaire à l'authentification des utilisateurs qui peut
se faire par mot de passe, par utilisation de clés publiques ou
basée sur l'hôte.
- La couche connexion
multiplexe différents canaux simultanés à travers
la connexion d'authentification et permet de tunneliser les sessions de
login et de faire suivre les connexions TCP. De plus un service de
vérification de flux sur les canaux est assuré, ces
derniers pouvant accepter des options spécifiques.
Fonctionnalités
OpenSSH fournit les fonctionnalités suivantes :
- Un projet Open Source
- Une license libre
- Un cryptage fort qui a lieu avant l'authentification,
garantissant la sécurisation de celle-ci.
- Le X11 forwarding qui permet le cryptage du trafic distant X
windows.
- Le port forwarding qui permet de faire suivre des connexions
TCP/IP à une machine distante à travers un canal
crypté.
- Une authentification forte pouvant être effectuée de
plusieurs manières : .rhosts avec authentification d'hôte
basée sur RSA, authentification RSA pure, mots de passe à
usage unique avec s/key, et finalement authentification Kerberos.
- L'agent forwarding présent sur la machine de l'utilisateur
et permettant de stocker les clés d'authentification RSA ou DSA.
- Le respect des standards des protocoles SSH 1.3, 1.5, et 2.0
assurant une interopérabilité d'openSSH avec d'autres
versions commerciales.
- La transmission des tickets Kerberos et AFS.
- Une compression des données effectuée avant le
cryptage et permettant d'améliorer les performances sur des
liens réseau de faible capacité.
Programmes disponibles
Les différentes fonctionnalités offertes par
OpenSSH et citées précédemment sont
assurées à travers différents programmes fournis
à l'issu de l'installation du logiciel. On retrouve ainsi :
- ssh le client
sécurisé basé sur le principe de telnet ou rlogin.
- sshd le serveur
permettant à l'utilisateur de se logger.
- ssh-agent qui assure la
fonction d'agent forwarding.
- ssh-add qui permet
d'ajouter des clés à l'agent d'authentification
précédent.
- sftp un programme de type
FTP fonctionnant avec SSH 1 et 2.
- scp un programme de copie
de fichiers comme rcp.
- ssh-keygen qui permet de
générer les clés.
- sftp-server
sous-systèmes serveur SFTP démarré par sshd.
- ssh-keyscan qui permet de
récupérer des clés publiques d'hôtes
à partir d'un ensemble d'hôtes.
- ssh-keysign assure une
aide à l'authentification basée sur l'hôte.
Caractéristiques des protocoles SSH
Le tableau ci-dessous retrace les principales différences
entre les protocoles SSH1 et SSH2.
Outre le
nombre beaucoup plus important de fonctionnalités et
d'algorithmes supportés par SSH2, il convient d'utiliser cette
version du protocole en raison du plus haut niveau de
sécurité offert.
Principe du chiffrement par clés
Chiffrement
par clés privées
Aussi appelé chiffrement
symétrique ou chiffrement à clé secrète;
cette technique de cryptage nécessite l'utilisation d'une seule
et même clé pour le chiffrement ainsi que pour le
déchiffrement.
Le principal inconvénient de cette technique concerne la
distribution des clés qui doivent rester secrètes et ne
doivent pas être partagées. Ainsi, si n personnes partagent veulent
utiliser un système à clés secrètes, il
faudra générer n*(n-1)/2
clés différentes. De plus l'échange de ces
clés sur un canal non sécurisé est fortement
déconseillé.
Chiffrement par
clés publiques
Le chiffrement par clé publique ou
chiffrement asymétrique nécessite, quant à lui,
l'utilisation de deux clés (une privée et une publique).
La clé publique est utilisée pour chiffrer les
données que seule la clé privée est capable de
déchiffrer. Il suffit donc à un utilisateur voulant
utiliser ce type de chiffrement de diffuser sa clé publique aux
personnes avec qui il veut échanger des données
sécurisées. Ces dernières auront ainsi la
possibilité de chiffrer des données que seul le
détenteur de la clé privé pourra
déchiffrer.
Les clés publiques peuvent être distribués
librement puisqu'elles ne permettent pas d'effectuer de
déchiffrement. Néanmoins, il faudra veiller à
s'assurer de l'identité de la personne fournissant la clé
publique pour ne pas risquer de lui fournir des informations
confidentielles en pensant s'adresser à quelqu'un d'autre.