SSH : tout savoir sur le protocole Secure Shell

SSH ou Secure Shell, est un protocole d'administration à distance qui permet aux utilisateurs de contrôler et de modifier leurs serveurs distants via Internet. Le service a été créé pour remplacer de façon sécurisée le Telnet, non chiffré. 

Un tutoriel pour couvrir les bases du fonctionnement de SSH

SSH utilise des techniques cryptographiques pour garantir que toutes les communications vers et depuis le serveur distant soient chiffrées. Il fournit un mécanisme pour authentifier un utilisateur distant, transférer les entrées du client vers l'hôte et relayer la sortie vers le client.

Tout utilisateur Linux ou macOS peut accéder à son serveur distant directement à partir de la fenêtre SSH du terminal. Les utilisateurs Windows peuvent tirer parti des clients SSH tels que PuTTY. Vous pouvez exécuter des commandes shell de la même manière que vous le feriez si vous utilisez physiquement l'ordinateur distant.

Ce tutoriel SSH couvrira les bases du fonctionnement de SSH, ainsi que les technologies sous-jacentes utilisées par le protocole pour offrir une méthode sécurisée d'accès à distance. Il couvrira les différentes couches et les types de cryptage utilisés, ainsi que la nécessité de chaque couche.

Comment fonctionne SSH ?

La commande SSH se compose de 3 parties distinctes : SSH {utilisateur} @ {hôte}

  • La commande de clé SSH indique à votre système que vous souhaitez ouvrir une connexion Secure Shell cryptée. 
  • {utilisateur} représente le compte auquel vous souhaitez accéder. L'utilisateur root par exemple est l'équivalent de l'administrateur système avec des droits absolus sur toute modification au niveau du système.
  • {hôte} fait référence à l'ordinateur auquel vous souhaitez accéder. Cela peut être une adresse IP (par exemple 244.235.23.19) ou un nom de domaine (par exemple www.xyzdomain.com).

Pour les utilisateurs Mac et Linux, accédez au programme à partir de votre terminal, puis suivez la commande. Lorsque vous appuyez sur Entrée, vous serez invité à entrer le mot de passe du compte demandé. Lorsque vous le saisissez, rien n'apparaît à l'écran, mais votre mot de passe est en fait transmis. Une fois la saisie terminée, appuyez à nouveau sur Entrée. Si votre mot de passe est correct, vous serez accueilli par une fenêtre de terminal distant.

Comprendre les différentes techniques de cryptage

Par rapport à ses prédécesseurs, SSH offre un avantage significatif : l'utilisation du cryptage pour assurer un transfert sécurisé des informations entre l'hôte et le client. Il existe trois technologies de cryptage différentes utilisées par SSH :

  • Cryptage symétrique
  • Cryptage asymétrique
  • Hashing.

Le cryptage symétrique

Le cryptage symétrique est une forme de cryptage dans laquelle une clé secrète est à la fois utilisée pour le cryptage et le décryptage d'un message par le client et l'hôte. En effet, toute personne possédant la clé peut décrypter le message en cours de transfert. Le cryptage symétrique est souvent appelé clé partagée ou cryptage secret partagé. Il n'y a généralement qu'une seule clé qui est utilisée, ou parfois une paire de clés où une clé peut facilement être calculée à l'aide de l'autre clé.

Utilisation

Les clés symétriques sont utilisées pour crypter l'intégralité de la communication au cours d'une session SSH. Le client et le serveur dérivent tous deux la clé secrète en utilisant une méthode convenue, et la clé résultante n'est jamais divulguée à un tiers. Le processus de création d'une clé symétrique est effectué par un algorithme d'échange de clés. 

Le fait que la clé n'est jamais transmise entre le client et l'hôte rend cet algorithme particulièrement sécurisé. Les deux ordinateurs partagent des données publiques puis les manipulent pour calculer indépendamment la clé secrète. Même si une autre machine capture les données partagées publiquement, elle ne pourra pas calculer la clé, car l'algorithme d'échange de clés n'est pas connu.

Il faut cependant noter que le jeton secret est spécifique à chaque session SSH et est généré avant l'authentification du client. Une fois la clé générée, tous les paquets circulant entre les deux machines doivent être chiffrés par la clé privée. Cela inclut le mot de passe saisi par l'utilisateur, de sorte que les informations d'identification soient toujours protégées contre les renifleurs de paquets réseau.

Les chiffrements symétriques

Il existe une variété de chiffrements symétriques, y compris, mais sans s'y limiter, AES (Advanced Encryption Standard), CAST128, Blowfish, etc. Avant d'établir une connexion sécurisée, le client et un hôte décident du chiffrement à utiliser, en publiant une liste de cyphers pris en charge par ordre de préférence. 

Le chiffrement privilégié parmi les cyphers pris en charge par les clients qui est présent sur la liste de l'hôte est utilisé comme chiffrement bidirectionnel. Par exemple, si deux machines Ubuntu 14.04 LTS communiquent entre elles via SSH, elles utiliseront aes128-ctr comme chiffrement par défaut.

Le cryptage asymétrique

Contrairement au cryptage symétrique, le cryptage asymétrique utilise deux clés distinctes pour le cryptage et le décryptage. Ces deux clés sont appelées clé publique et clé privée. Ensemble, ces deux clés forment une paire de clés publique-privée.

Clé publique ouvertement distribuée

La clé publique, comme son nom l'indique, est ouvertement distribuée et partagée avec toutes les parties. Bien qu'elle soit étroitement liée à la clé privée en termes de fonctionnalité, la clé privée ne peut pas être calculée mathématiquement à partir de la clé publique. La relation entre les deux clés est très complexe. Un message chiffré par la clé publique d'une machine ne peut être déchiffré que par la clé privée de la même machine. Cette relation unidirectionnelle signifie que la clé publique ne peut pas décrypter ses propres messages, ni ne peut décrypter quoi que ce soit chiffré par la clé privée.

La clé privée doit rester privée. Autrement dit, pour que la connexion soit sécurisée, aucun tiers ne doit jamais la connaître. La force de l'ensemble de la connexion réside dans le fait que la clé privée n'est jamais révélée, car c'est le seul composant capable de décrypter les messages qui ont été chiffrés à l'aide de sa propre clé publique. Par conséquent, toute partie ayant la capacité de déchiffrer des messages signés publiquement doit posséder la clé privée correspondante.

Utilisation

Contrairement à la perception générale, le cryptage asymétrique n'est pas utilisé pour crypter la totalité de la session SSH. Il n'est utilisé que pendant l'algorithme d'échange de clés de cryptage symétrique. Avant de lancer une connexion sécurisée, les deux parties génèrent des paires de clés publiques-privées temporaires et partagent leurs clés privées respectives pour produire la clé secrète partagée.

Une fois qu'une communication symétrique sécurisée a été établie, le serveur utilise la clé publique du client pour la générer et la transmettre au client pour authentification. Si le client parvient à déchiffrer le message, cela signifie qu'il détient la clé privée requise pour la connexion. La session SSH commence alors.

Le hashing

Le hachage unidirectionnel est une autre forme de cryptographie utilisée dans les connexions Secure Shell. Les fonctions de hachage unidirectionnelles diffèrent des deux formes de chiffrement ci-dessus en ce sens qu'elles ne sont jamais destinées à être déchiffrées. Ils génèrent une valeur unique d'une longueur fixe pour chaque entrée qui ne montre aucune tendance claire qui pourrait être exploitée. Cela les rend pratiquement impossibles à inverser.

Générer un hachage cryptographique

Il est facile de générer un hachage cryptographique à partir d'une entrée donnée, mais impossible de générer l'entrée à partir du hachage. Cela signifie que si un client détient l'entrée correcte, il peut générer le hachage cryptographique et comparer sa valeur pour vérifier s'il possède l'entrée correcte.

SSH utilise des hachages pour vérifier l'authenticité des messages. Cela se fait à l'aide de HMAC ou de codes d'authentification de message basés sur le hachage. Cela garantit que la commande reçue n'est en aucun cas altérée.

Pendant que l'algorithme de cryptage symétrique est sélectionné, un algorithme d'authentification de message approprié est également sélectionné. Cela fonctionne de la même manière que la sélection du chiffrement, comme expliqué dans la section de chiffrement symétrique.

Chaque message transmis doit contenir un MAC, qui est calculé à l'aide de la clé symétrique, du numéro de séquence du paquet et du contenu du message. Il est envoyé en dehors des données cryptées symétriquement en tant que section finale du paquet de communication.

Comment SSH fonctionne-t-il avec ces techniques de chiffrement  ?

Le fonctionnement de SSH consiste à utiliser un modèle client-serveur pour permettre l'authentification de deux systèmes distants et le chiffrement des données qui transitent entre eux.

SSH fonctionne sur le port TCP 22 par défaut (bien que cela puisse être modifié si nécessaire). L'hôte (serveur) écoute sur le port 22 (ou tout autre port attribué par SSH) pour les connexions entrantes. Il organise la connexion sécurisée en authentifiant le client et en ouvrant le bon environnement shell si la vérification est réussie.

Le client doit commencer la connexion SSH en : 

  • lançant la prise de contact TCP avec le serveur
  • assurant une connexion symétrique sécurisée
  • vérifiant si l'identité affichée par le serveur correspond aux enregistrements précédents (généralement enregistrés dans un fichier de stockage de clés RSA) 
  • présentant les informations d'identification utilisateur requises pour authentifier la connexion.

Il y a deux étapes pour établir une connexion. Premièrement, les deux systèmes doivent s'accorder sur des normes de chiffrement pour protéger les communications futures.  Deuxièmement, l'utilisateur doit s'authentifier. Si les informations d'identification correspondent, l'accès est accordé à l'utilisateur.

Négociation de cryptage de session

Lorsqu'un client tente de se connecter au serveur via TCP, le serveur présente les protocoles de chiffrement et les versions respectives qu'il prend en charge. Si le client a une paire similaire de protocole et de version, il y a accord et la connexion est lancée avec le protocole accepté. Le serveur utilise également une clé publique asymétrique que le client peut utiliser pour vérifier l'authenticité de l'hôte.

Une fois cela établi, les deux parties utilisent ce que l'on appelle un algorithme d'échange de clés Diffie-Hellman pour créer une clé symétrique. Cet algorithme permet à la fois au client et au serveur d'arriver à une clé de cryptage partagée qui sera désormais utilisée pour crypter l'ensemble de la session de communication.

Authentification de l'utilisateur

L'authentification des informations d'identification reste la dernière étape avant que l'utilisateur ne soit autorisé à accéder au serveur. Pour cela, la plupart des utilisateurs SSH utilisent un mot de passe. L'utilisateur est invité à entrer le nom d'utilisateur, suivi du mot de passe. Ces informations d'identification passent en toute sécurité à travers le tunnel crypté symétriquement.  Il n'y a donc aucune chance qu'elles soient capturées par un tiers.

Bien que les mots de passe soient chiffrés, il n'est toujours pas recommandé d'utiliser des mots de passe pour les connexions sécurisées. En effet, de nombreux robots peuvent simplement forcer brutalement les mots de passe faciles à deviner ou par défaut et accéder à votre compte. Les experts recommandent les paires de clés SSH. Il s'agit d'un ensemble de clés asymétriques utilisées pour authentifier l'utilisateur sans avoir à saisir de mot de passe.

Newsletter

Envie de ne louper aucun de nos articles ? Abonnez vous pour recevoir chaque semaine les meilleurs actualités avant tout le monde.

Cliquez pour commenter