OpenSSH
OpenSSH est une implémentation libre du protocole SSH permettant une connexion interactive, comme telnet, mais 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 de divulguer des mots de passe en clair, comme c'est le cas avec les protocoles ftp ou telnet, évitant du coup les attaques de type man-in-the-middle (un pirate se trouvant entre votre ordinateur et le serveur distant.).
Présentation d'OpenSSH
OpenSSH permet de se connecter en interactif à une machine distante en toute sécurité: avant même l'authentification le protocole met en place une liaison sécurisée. Bien qu'il soit possible d'utiliser OpenSSH avec les mots de passe, il est préférable de supprimer cette possibilité dans le fichier de configuration afin de ne permettre que des accès basés sur les double-clés encryptées; une clé secrète qui reste dans votre ordinateur et une clé publique que vous posez dans les machines sur lesquelles vous voulez pouvoir vous connecter. C'est le même principe que PGP/GPG.
OpenSSH est disponible pour la plupart des Unices (*BSD, Linux, IRIX, AIX, Solaris, etc...) sous forme d'un serveur, d'un client et de divers petits utilitaires.
Afin de contourner les lois américaines sur l'exportation de logiciels de cryptographie, OpenSSH a été développé en Europe et au Canada. En prenant une des dernières versions libres de SSH et en lui retirant les algorithmes protégés par des brevets, ses développeurs ont réunis une base de travail. Ils ont ensuite ajouté des fonctionnalités (Kerberos IV, 'One-Time-Password', etc.), corrigé quelques bugs et réalisé quelques tours de passe-passe.
Cryptographie
La cryptographie désigne un moyen de 'cacher' les données. Par exemple, la chaîne de caractère '54MiJhDlwsi0c' est une version chiffrée (cryptée) de la chaîne 'ssh', '.eJFct/G.zm3s' de 'april'. Comme on peut le voir, nous sommes bien loin de 'codes secrets' tel qu'on les imaginait étant enfants. Impossible de revenir en arrière de façon aisée (Essayez donc de savoir quelle chaîne à été cryptée pour donner 'kFvZeJP.VCmAA').
La cryptographie sert principalement 3 objectifs:
- la confidentialité (protection des données lors du transfert)
- l'authentification (identification des partenaires, contrôle d'accès aux ressources et données, non répudiation de l'origine de l'information)
- l'intégrité des données (données non altérées accidentellement ou frauduleusement lors du transfert ou sur place)
OpenSSH, et plus généralement le protocole SSH, sert dans les deux premiers cas. Un exemple du troisième cas est la 'signature' MD5 de fichiers à télécharger. Une fois téléchargé, le fichier donne la même signature MD5: vous pouvez partir du principe que vous avez le fichier original, et pas une copie qui aurait été modifiée.
Versions
OpenSSH est compatible avec plusieurs versions du protocole SSH: 1.3, 1.5 et 2.
Les versions 1.x du protocole utilisent l'algorithme RSA pour la négociation de clés, puis 3DES ou blowfish pour le chiffrement des données. Le brevet RSA est tombé dans le domaine public et par conséquent, il est possible de l'inclure dans une application sans licence dans le monde entier. Les prochaines version d'OpenSSH devraient pouvoir incorporer RSA sans restrictions. Pour contourner le brevet, les version datant d'avant septembre 2000 s'appuient sur la bibliothèque OpenSSL pour lui fournir les quelques algorithmes posant problèmes. (Attention: l'utilisation de cette bibliothèque est soumise à conditions dans certains pays, où elle est notamment assimilée à des armes de guerre). Enfin, les versions 1.x utilisent un simple CRC pour vérifier l'intégrité des données, ce qui peut résulter, dans quelques cas bien précis, à un petit trou de sécurité.
La version 2 du protocole, utilisée dans OpenSSH depuis le 4 mai 2000, a été créée pour éviter ces problèmes de brevets. Elle utilise les algorithmes asymétriques DSA et DH pour le chiffrement des données et l'algorithme HMAC pour la vérification des données, supprimant ainsi le problème des CRC.
Comme il est breveté (et pas disponible dans OpenSSL), il faut noter qu'aucune des versions d'OpenSSH ne gère l'algorithme IDEA, utilisé dans les versions commerciales de SSH.
Modèle client/serveur
Comme tout bon protocole qui se respecte, OpenSSH est composé d'un serveur et d'un client :
- Le serveur (sshd) écoute sur un port donné (habituellement le 22). Pour une connection entrante, il vérifie que c'est bien un client ssh qui est à l'autre bout, demande à l'utilisateur de s'identifier via paire de clés asymétriques ou un mot de passe. Dans le premier cas, le serveur va lire un fichier de clés publiques (~/.ssh/authorized_keys) dans le répertoire home de l'user annoncé. S'il y trouve une clé ayant le même nom que celle proposée par le client, il va les vérifier par l'envoi d'un 'challenge' crypté avec la clé publique. Seule la clé privée pourra le décrypter, et elle renverra le challenge décrypté, prouvant que le client connait la clé privée, mais sans jamais la dévoiler.
Dans le deuxième cas, le serveur vérifie que le mot de passe et le nom correspondent à un utilisateur de la machine. Cette méthode n'est utilisée que si la méthode par paire de clés a échoué. Le mot de passe étant lui-même crypté durant le transfert, il n'est pas possible de l'intercepter en clair. Si le client est autorisé, la machine locale est disponible en interactif, avec les droits de la personne entrée. Il existe d'autres façons de se connecter par ssh, notamment en utilisant des fichiers .rhosts, mais leur usage n'est pas encouragé car la sécurité de l'authentification n'étant plus fiable à 100%. - Le client sert à se connecter au serveur. C'est lui qui choisi les algorithmes (et par là, la version du protocole). Si le serveur ne reconnait pas l'algorithme demandé, c'est au client d'en proposer un autre.
- Certaines options peuvent être configurées des deux côtés, serveur et client. La règle qui prévaut alors est celle du 'Tout ce qui n'est pas interdit est autorisé'. Par exemple, le client autorisera les applications X-window à passer par le tunnel ssh, que si la configuration du serveur ne l'interdit pas expressément.
Comparaisons
OpenSSh est, on l'a dit, une alternative à SSH. Il est également tout indiqué pour remplacer telnet et les outils comme rlogin/rsh. Voici un petit aperçu des différences:
ssh
La principale différence entre OpenSSH et SSH est bien entendu le fait qu'OpenSSH soit libre. Il y a aussi quelques petites différences de configuration, comme le logging du côté serveur. Enfin, l'algorithme IDEA n'est pas disponible: vous devez utiliser 3DES ou blowfish en lieu et place.
telnet
En utilisant telnet, lorsque vous entrez votre mot de passe, celui-ci va voyager en clair sur le réseau. Ça signifie que n'importe qui, se situant entre un client et le serveur, peut intercepter son mot de passe avec un simple outils de surveillance de réseau (tel qu'il y en a dans toutes les distributions GNU/Linux, par exemple). Du coup, la sécurité de votre serveur est réellement en danger!
rsh/rlogin
rsh/rlogin désignent des protocoles de connection à un hôte distant, selon des règles un peu légères. Par exemple, il peut être possible de se connecter sur un serveur depuis une station 'autorisée'. C'est à dire que n'importe qui, sans connaître le moindre mot de passe, peut se connecter à ce serveur dès le moment où il se trouve -physiquement ou non- sur une machine reconnue par le serveur comme autorisée. C'est bien là un moyen peu sûr de se connecter.
Système requis
- côté serveur :
- A peu près n'importe quelle machine fonctionnant sous une déclinaison d'UNIX (GNU/Linux, *BSD, Solaris, AIX, IRIX, HP/UX, SCO, etc.).
- Il vous faut être superviseur (root) sur le serveur pour pouvoir installer OpenSSH.
- Bien entendu, votre serveur doit être connecté à un réseau, voire à l'internet.
- côté client :
- De même que pour le serveur, à peu près n'importe quel UNIX fait l'affaire.
- Une connection réseau (Ethernet, PPP, etc...) est nécessaire pour atteindre le serveur.
Licence
La licence d'OpenSSH est la licence BSD (la même que Apache, OpenBSD, etc.). Elle est libre, mais non copyleftée. Il est possible de trouver des infos dans un article du site d'APRIL.