Couches de sécurité SSH

Le protocole SSH permet à tout programme client et serveur créé selon les spécifications du protocole de communiquer de façon sécurisée et d'être utilisé de manière interchangeable.

A l'heure actuelle, il existe deux types différents de protocole SSH. La version 1 contient de nombreux algorithmes de chiffrement brevetés (toutefois, bon nombre de ces brevets sont périmés) et un trou de sécurité qui donne la possibilité éventuelle d'insérer des données dans le flot de données. Il vous est vivement recommandé d'utiliser des serveurs et clients compatibles avec la version 2 de SSH, si cela vous est possible.

OpenSSH comprend le support pour la version 2 (et des clés de chiffrement DSA disponibles gratuitement). Conjugué aux bibliothèques de chiffrement OpenSSL, OpenSSH offre une gamme complète de fonctions de sécurité.

Les deux versions (1 et 2) du protocole SSH utilisent des couches de sécurité semblables pour renforcer l'intégrité des communications sous différents aspects. Chaque couche fournit son propre type de protection, ce qui, lorsque utilisé de concert avec d'autres types, renforce la sécurité des communications et les rend plus facile à utiliser.

Couche transport

Le rôle principal d'une couche transport est de faciliter une communication sécurisée entre deux ordinateurs hôtes au moment de l'authentification et par la suite également. Elle utilise généralement le protocole TCP/IP, et accomplit sa tâche en s'occupant du chiffrement et du déchiffrement des données, en s'assurant que le serveur est le bon ordinateur pour l'authentification et en offrant la protection nécessaire aux paquets de données lors de leur envoi et de leur réception. En outre, la couche transport peut également faire la compression des données pour accélérer la vitesse de transfert de l'information.

Lorsqu'un client communique avec un serveur au moyen d'un protocole SSH, de nombreux éléments importants sont négociés afin que les deux systèmes puissent créer correctement la couche transport :

Durant l'échange des clés, le serveur s'identifie au client au moyen d'une clé hôte. Evidemment, si le client communique pour la première fois avec ce serveur, la clé du serveur lui est inconnue. OpenSSH contourne ce problème en permettant au client d'accepter la clé hôte du serveur lors de leur première connexion SSH. Ensuite, lors des connexions suivantes, la clé hôte du serveur peut être vérifiée au moyen d'une version enregistrée sur le client, ce qui permet au client de s'assurer qu'il communique bien avec le serveur désiré.

AttentionAvertissement
 

La méthode de vérification de la clé hôte utilisée par SSH n'est pas parfaite car, à ce stade, un individu pourrait se faire passer pour le serveur lors de la première connexion sans que le système local puisse nécessairement différencier le serveur désiré de l'individu voulant se faire passer pour lui. Toutefois, d'ici à ce qu'une meilleure méthode de distribution de la clé hôte soit disponible, cette méthode initiale non sécurisée est mieux que rien.

Le protocole SSH est conçu pour fonctionner avec la plupart des types d'algorithme de clé publique ou de format de codage. Après la création de deux valeurs lors de l'échange initial des clés (une valeur repère utilisée pour les échanges et une valeur secrète partagée), les deux systèmes commencent immédiatement à calculer de nouveaux algorithmes et de nouvelles clés pour protéger l'authentification et les données qui seront envoyées au cours de la connexion.

Authentification

Une fois que la couche transport a créé un tunnel sécurisé pour envoyer les informations entre les deux systèmes, le serveur indique au client quelles sont les différentes méthodes d'authentification prises en charge, telles que l'utilisation d'une signature chiffrée privée ou l'entrée d'un mot de passe. Le client doit ensuite essayer de s'authentifier au serveur au moyen d'une des méthodes spécifiées.

Etant donné que les serveurs peuvent être configurés de façon à permettre différents types d'authentification, cette méthode donne aux deux parties un niveau de contrôle optimal. Le serveur peut décider quelles méthodes d'authentification prendre en charge en fonction de son modèle de sécurité et le client peut choisir l'ordre des méthodes d'authentification à utiliser parmi celles qui sont disponibles. Grâce à la nature sécurisée de la couche transport SSH, même les méthodes d'authentification qui, de prime abord, semblent non sécurisées, telles que l'authentification d'ordinateur hôte, peuvent être utilisées en toute sécurité.

La plupart des utilisateurs exigeant un shell sécurisé procèdent à l'authentification au moyen d'un mot de passe. Contrairement aux autres modèles d'authentification, les mots de passe sont transmis sur les réseaux en texte clair. Cependant, comme ce mot de passe est complètement chiffré, il peut être envoyé sans problème sur n'importe quel réseau.

Connexion

Après avoir effectué avec succès l'authentification au moyen de la couche transport SSH, des canaux multiples sont ouverts en transformant la connexion simple entre les deux systèmes en connexion multiplex[1]. Chaque canal peut ainsi s'occuper de la communication d'une session de terminal différente, du transfert d'informations X11 ou de tout autre service séparé essayant d'utiliser la connexion SSH.

Le client et le serveur peuvent tous deux créer un nouveau canal et chaque canal reçoit un numéro différent aux deux extrémités (serveur ou client). Lorsque l'une d'elle essaie d'ouvrir un nouveau canal, le numéro de cette extrémité pour ce canal est envoyé avec la requête. Cette information est stockée à l'autre extrémité et utilisée pour diriger un type spécifique de communication d'un service à ce canal. Ainsi, des types différents de session ne peuvent se nuire entre eux et les canaux peuvent être fermés sans interrompre la connexion SSH principale entre les deux systèmes.

Les canaux prennent aussi en charge le contrôle du flot de données, ce qui leur permet d'envoyer et de recevoir des données de façon ordonnée. Ce faisant, aucune donnée n'est envoyée par le canal tant que l'hôte n'a pas reçu un message lui indiquant que le canal est en mesure d'en recevoir.

Les canaux sont particulièrement utiles avec la retransmission X11 et la retransmission de port TCP/IP par SSH. Des canaux séparés peuvent être configurés différemment, pour utiliser une quantité maximum de paquets différente ou pour transférer un type spécifique de données. Cela permet à SSH de faire preuve de souplesse lors de l'acheminement des données sur divers types de connexion à distance, tels que les liaisons sur des réseaux publics ou les connexions rapides sur des réseaux locaux d'entreprise, sans avoir à changer l'infrastructure de base du protocole. Le client et le serveur négocient automatiquement la configuration de chaque canal à l'intérieur de la connexion pour l'utilisateur.

Notes

[1]

Une connexion multiplex envoie plusieurs signaux sur un support commun et partagé. Avec le protocole SSH, divers canaux sont envoyés sur une connexion sécurisée commune.