Sitedetout - Tutoriels informatiques

Le protocole sécurisé SSH

1 – Introduction

Nous l’utilisons chaque jour pour accéder à nos machine Unix/Linux distantes sans être réellement conscient de ce qui se passe derrière. C’est le protocole SSH ou Secure Shell. Ce protocole réseau permet une connexion sécurisée à une machine distante. Il fonctionne en mode client-serveur. C’est à dire que vous utilisez un client SSH pour se connecter à un serveur SSH. Ce dernier est présent dans toutes les distributions Unix/Linux et écoute par défaut sur le port 22.

2 – Historique

SSH a été créé en 1995 comme une alternative aux protocoles telnet et rlogin non sécurisés. Il a été ensuite amélioré pour permettre aussi de transférer des fichiers à l’aide du programme SCP (version SSH 1.x) et plus tard le protocole SFTP (version SSH 2).

Sachez pour info que le protocole SFTP diffère du protocole FTPS. Bien que les deux permettent de transférer des fichiers, SFTP est une abréviation de “SSH File Transfer Protocol”, il est similaire au protocole FTP et fonctionne au dessus de SSH. FTPS quand à lui n’est que le protocole FTP au dessus de SSL.

3 – Fontionnement du protocol SSH

Le protocole SSH est dit sécurisé car la communication entre le client et le serveur SSH est cryptée. En effet, pour arriver à ce résultat cette dernière passe par plusieurs étapes :

ssh_handshake_sitedetout.org
  • Le client commence par initier une connexion TCP sur le port 22 du serveur (port d’écoute par défaut du protocole SSH).
  • Une fois la connexion établie, le serveur envoie sa version du protocole SSH.
  • Le client reçoit le message du serveur et renvoi aussi sa version SSH.
  • Une fois la version du protocole SSH choisie, l’étape d’échange de clés (key exchange) débute. Durant cette étape, le client est le serveur envoient l’un à l’autre plusieurs listes chacune triée par ordre de préférence.
  • Le serveur choisi pour chaque catégorie le premier de la liste du client qu’il supporte aussi.
  • Si le serveur choisi l’algorithme diffie-hellman pour l’échange de clés, alors cette étape se passe comme suit :
ssh handshake
  • Le client envoie min , n et max correspondants au groupes acceptés minimal, préféré et maximal.
  • Le serveur choisi un groupe et renvoi P et G au client
  • Le client choisi un numéro x tel que 1 < x < (p-1)/2, il calcul e = g^x mod p, et renvoi “e” au serveur (x est gardé secret chez le client).
  • Le serveur aussi choisi un numéro y tel que 0 < y < (p-1)/2, il calcul f = g^y mod p et renvoi “f” au client (y est gardé secret chez le serveur). Il utilise aussi le “e” reçu pour calculer K = e^y mod p. Il renvoie alors au client les éléments suivants :
    • f
    • Le certificat contenant la clé public du serveur
    • K signé par la clé privé du serveur
    • H = hash(V_C || V_S || I_C || I_S || K_S || min || n || max || p || g || e || f || K) signé par la clé privé du serveur
  • Si c’est la première connexion du client à ce serveur, et que le certificat n’est pas reconnu par les autorité de certification configurés, un avertissement vous sera affiché pour faire ou non confiance au certificat du serveur. Le client pourra ensuite se baser sur “f” pour calculer K = f^x mod p. il calculera aussi le même H = hash(V_C || V_S || I_C || I_S || K_S || min || n || max || p || g || e || f || K) et vérifiera qu’il a été bien signé par le serveur moyennant la clé publique qu’il a reçu.

A présent les deux intervenants détiennent une même clé de session K = e^y mod p = f^x mod p tel que 1 < K < p – 1. Toute communication ultérieure sera cryptée par celle-ci.

4 – Exemple réel

Voici une capture Wireshark montrant ces étapes, on voit bien aussi qu’à partir de la ligne 17, les paquets SSH sont cryptés.

Le cryptage des packets se fera par un cryptage symétrique dont sa clé de chiffrage/déchiffrage est K. Les deux intervenants se sont partagé cette clé sans la transmettre sur le réseau.

Une fois cette dernière définie, l’étape d’authentification est déclenchée et elle sera cryptée quelle que soit son type : Mot de passe, Clé publique, Kerberos ou autre …

Le prochain tutoriel vous expliquera comment mettre en place une authentification SSH par clés et sans mot de passe.

Sources : rfc4419


Commentaires de Le protocole sécurisé SSH

  • hello, juste pour signaler une petite faute de frappe dans la phrase : “Voici une capture Wireshark montrant ces étapes, on voit bien aussi qu’à partir de la ligne 17, les packets SSH sont cryptés”

    reunionf 6 décembre 2020 12 h 20 min Répondre
    • Merci reunionf. c’est corrigé.

      Issamo12 11 janvier 2021 16 h 08 min

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Menu Title
Chargement...

Powered by sitedetout.com