Mode de fonctionnement de SSH

L'établissement du dialogue entre le client et le serveur suit un protocole particulier :

  1. établissement d'une couche transport sécurisée

  2. chiffrement des données à l'aide de clefs symétriques pendant la transaction

Le client peut s'authentifier en toute sécurité, et accéder aux applications conformes aux spécifications du protocole.

Mode de fonctionnement de la couche transport SSH

La couche transport assure le chiffrement et le déchiffrement des données. Elle assure également la compression pour améliorer le transfert. Le client et le serveur négocient plusieurs éléments afin que la session puisse s'établir.

  1. l'échange des clés

  2. l'algorithme de clé publique à utiliser

  3. l'algorithme de chiffrement symétrique à utiliser

  4. l'algorithme d'authentification de message à utiliser

  5. l'algorithme repère (hash) à utiliser

Lors du premier échange, le client ne connaît pas le serveur. Le serveur propose alors une clé hôte qui servira par la suite au client de moyen d'identification du serveur.

M0:$ ssh -l mlx M1.foo.org
Warning: Permanently added 'M1,x.y.z.t' (DSA) to the list of known hosts.
mlx@M1.foo.org's password:
Last login: Sat Nov  2 11:37:32 2002 from 212.47.248.114
Linux 2.2.19.
mlx@M1.foo.org:$

Voilà une idée de ce que cela donne :

freeduc-sup.alt.eu.org,144.85.15.72 ssh-rsa AAAAB3NzaC1y (...)
pegase,195.115.88.38 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIE (...)
freeduc-sup.eu.org,137.194.161.2 ssh-dss AAAAB3NzaC1kc3M (...)
(...)

Le risque de ce processus, vient donc surtout de la première transaction, où le client n'a pas le moyen d'identifier de façon fiable le serveur avec qui il communique. Un pirate peut dans certains cas, tenter de détourner cette opération. Au cours d'un échange, le client et le serveur modifient régulièrement leurs clés. A chaque opération de renouvellement de clé, un pirate qui aurait réussi à décrypter les clés, devrait refaire toute l'opération.

Authentification :

Une fois le tunnel sécurisé mis en place, le serveur envoie au client les différentes méthodes d'authentification qu'il supporte. Dans le cadre d'une authentification par mot de passe, celui-ci peut être envoyé en toute sécurité puisqu'il est chiffré.

Connexion :

Une fois l'authentification réalisée, le tunnel SSH peut multiplexer plusieurs canaux en délégant la tâche à des agents.

[mlx@M1 X11]$ pstree -l 24245
sshd---bash-+-drakfw
            |-pstree
            |-2*[xclock]
            `-xlogo

Ici on voit dans la même session ssh, 2 canaux pour xclock, 1 pour xlogo et 1 pour la commande pstree. Chaque canal est numéroté. Le client peut fermer un canal sans pour autant fermer toute la session.

Fichiers de configuration d'OpenSSH

OpenSSH est constitué de deux ensembles de fichiers de configuration, comme c'est en général le cas sur les services sous linux (ldap, samba..). Il y a un fichier de configuration pour les programmes clients (ssh, scp et sftp) et l'autre pour le service serveur(sshd). Les informations de configuration SSH qui s'appliquent à l'ensemble du système sont stockées dans le répertoire /etc/ssh. Voici les principaux fichiers de configuration :

ssh_config               fichier de configuration client SSH pour l'ensemble 
                         du système. Il est écrasé si un même fichier est
                         présent dans le répertoire personnel de
                         l'utilisateur 
                         (~/.ssh/config). 
sshd_config              fichier de configuration pour sshd. 
ssh_host_dsa_key         clé DSA privée utilisée par sshd. 
ssh_host_dsa_key.pub     clé DSA publique utilisée par sshd. 
ssh_host_key             clé RSA privée utilisée par sshd pour la 
                         version 1 du protocole SSH. 
ssh_host_key.pub         clé RSA publique utilisée par sshd pour la 
                         version 1 du protocole SSH. 
ssh_host_rsa_key         clé RSA privée utilisée par sshd pour la 
                         version 2 du protocole SSH. 
ssh_host_rsa_key.pub     clé RSA publique utilisée par sshd pour la 
                         version 2 du protocole SSH. 

Les informations spécifiques à un utilisateur sont stockées dans son répertoire personnel à l'intérieur du répertoire ~/.ssh/:

authorized_keys ou parfois   authorized_keys2
                           ce fichier contient une liste de clés
                           publiques "autorisées". Si un utilisateur
                           se connecte et prouve qu'il connaît la clé
                           privée correspondant à l'une de ces clés, 
                           il obtient l'authentification. Notez qu'il
                           ne s'agit que d'une méthode d'authentification 
                           facultative. 

id_dsa                     contient l'identité d'authentification 
                           DSA de l'utilisateur. 
id_dsa.pub                 la clé DSA publique de l'utilisateur. 
id_rsa                     la clé RSA publique utilisée par sshd pour
                           la version 2 du protocole SSH. 
identity                   la clé RSA privée utilisée par sshd pour la 
                           version 1 du protocole SSH. 
known_hosts                ce fichier contient les clés hôte DSA des
                           serveurs SSH auxquels l'utilisateur s'est connecté. 

Exemple sur une machine :

mlx@M1:~$ ls -al .ssh/
total 16
drwx------   2 mlx mlx     4096 Jan 16  2004 ./
drwxr-xr-x   5 mlx mlx     4096 Oct 18 16:12 ../
-rw-------   1 mlx mlx     1192 Mar 11  2004 authorized_keys2
-rw-------   1 mlx mlx      240 Jan 16  2004 known_hosts