Qu’est ce que SSH ? Comprendre le Protocole Secure Shell
Vous avez probablement déjà entendu parler de SSH, car il s’agit d’un jargon Internet souvent utilisé dans le domaine de la cybersécurité. Cependant, il se peut que vous soyez dépassé par la question de savoir ce que c’est exactement et comment fonctionne SSH en premier lieu.
Ce tutoriel SSH couvrira les bases du fonctionnement du protocole 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 types de cryptage utilisés, ainsi que le but de chaque couche.
Sommaire
Qu’est-ce que SSH
Le protocole Secure Shell (SSH) est un standard de sécurité utilisé pour échanger des données de manière sécurisée sur un réseau, notamment sur Internet. Il garantit la confidentialité des données en les cryptant avant de les transmettre
Le service a été créé en tant que remplacement sécurisé pour le Telnet non chiffré, et utilise des techniques cryptographiques pour s’assurer que toutes les communications vers et depuis le serveur distant se produisent de manière chiffrée. 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.
L’image ci-dessous montre une fenêtre SSH typique. Tout utilisateur Linux ou MacOS peut SSH dans leur serveur distant directement à partir de la fenêtre du terminal. Les utilisateurs de Windows peuvent utiliser des clients SSH comme Putty. Vous pouvez exécuter des commandes shell de la même manière que vous le feriez si vous étiez en train d’utiliser physiquement l’ordinateur distant.
Fonctionnement de SSH
Si vous utilisez Linux ou Mac, alors l’utilisation de SSH est très simple. Si vous utilisez un système d’exploitation Windows, vous devrez utiliser des outils Windows de connexion SSH. Le client SSH le plus populaire est PuTTY.
Pour les utilisateurs de Mac et Linux, passez à votre programme de terminal, puis suivez la procédure ci-dessous :
La commande SSH se compose de 3 parties distinctes :
ssh {user}@{host}
La commande de la clé SSH indique à votre système que vous souhaitez ouvrir une connexion Secure Shell cryptée. {user} représente le compte auquel vous souhaitez accéder. Par exemple, vous voudrez peut-être accéder à l’utilisateur root, qui est essentiellement synonyme d’administrateur système avec tous les droits de modification de tout sur le système. {host} fait référence à l’ordinateur auquel vous souhaitez accéder. Ceci peut être une adresse IP (par ex. 244.235.23.19) ou un nom de domaine (par exemple, www.xyzdomain.com).
Lorsque vous appuyez sur Entrée, vous serez invité à entrer le mot de passe du compte demandé. Lorsque vous le saisissez, rien ne s’affiche à l’écran, mais votre mot de passe est en fait transmis. Une fois que vous avez fini de taper, appuyez une fois sur Enter. Si votre mot de passe est correct, vous serez accueilli avec une fenêtre de terminal à distance.
Consultez notre tutoriel, si vous voulez en savoir plus sur certaines commandes SSH.
À quoi sert SSH ?
SSH est un protocole réseau sécurisé permettant d’établir une connexion cryptée entre un client et un serveur. Il offre une multitude d’utilisations pratiques dans le domaine informatique :
- Gestion à distance des serveurs, de l’infrastructure et des ordinateurs des collaborateurs : Les administrateurs système peuvent se connecter de manière sécurisée à des serveurs distants pour effectuer des tâches de configuration, de maintenance et de surveillance à distance.
- Transfert de fichiers en toute sécurité : SSH propose des protocoles comme SFTP (SSH File Transfer Protocol) et SCP (Secure Copy Protocol) pour le transfert sécurisé de fichiers entre des ordinateurs distants, garantissant ainsi la confidentialité et l’intégrité des données.
- Accès à des services dans le cloud sans exposer les ports d’une machine locale à l’Internet : Les utilisateurs peuvent se connecter de manière sécurisée à des services dans le cloud via SSH sans avoir à exposer les ports de leur machine locale à Internet, renforçant ainsi la sécurité de leur infrastructure.
- Connexion à distance aux services d’un réseau privé : SSH permet aux utilisateurs de se connecter de manière sécurisée aux services d’un réseau privé depuis n’importe où dans le monde, assurant ainsi la confidentialité et la sécurité des communications.
- Contournement des restrictions d’un pare-feu : En utilisant le tunneling SSH, les utilisateurs peuvent contourner les restrictions d’un pare-feu en acheminant leur trafic à travers une connexion SSH sécurisée, offrant ainsi un accès sécurisé à des services normalement bloqués par le pare-feu.
Comprendre différentes techniques de cryptage
L’avantage important offert par SSH par rapport à ses prédécesseurs est l’utilisation du cryptage pour assurer le transfert sécurisé d’informations entre l’hôte et le client. Host se réfère au serveur distant auquel vous tentez d’accéder, tandis que le client est l’ordinateur que vous utilisez pour accéder à l’hôte. Il existe trois technologies de cryptage différentes utilisées par SSH :
- Cryptage symétrique
- Cryptage asymétrique
- Hashing.
Cryptage symétrique
Le cryptage symétrique est une forme de cryptage où une clé secrète est 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 transféré.
Le cryptage symétrique est souvent appelé clé partagée ou cryptage de secret partagé. Il n’y a habituellement qu’une seule touche qui est utilisée, ou parfois une paire de touches où une clé peut facilement être calculée à l’aide de l’autre clé.
Les clés symétriques sont utilisées pour chiffrer toute la communication lors d’une session SSH. Le client et le serveur dérivent 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 s’effectue par un algorithme d’échange de clés. Ce qui rend cet algorithme particulièrement sécurisé, c’est le fait que la clé n’est jamais transmise entre le client et l’hôte. Au lieu de cela, les deux ordinateurs partagent des données publiques, puis les manipulent pour calculer de manière indépendante la clé secrète. Même si une autre machine capture les données publiquement partagées, il ne sera pas capable de calculer la clé car l’algorithme d’échange de clés n’est pas connu.
Il faut toutefois noter que la clé secrète est spécifique à chaque session SSH et est générée avant l’authentification du client. Une fois la clé générée, tous les paquets qui se déplacent entre les deux machines doivent être cryptés par la clé privée. Cela inclut le mot de passe tapé dans la console par l’utilisateur, de sorte que les informations d’identification sont toujours protégées des sniffers de paquets réseau.
Il existe une variété de chiffrages 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 quel chiffrage utiliser, en publiant une liste des chiffrages compatibles, par ordre de préférence. Le chiffrage préféré des cybers clients pris en charge sur la liste de l’hôte est utilisé comme chiffrage bidirectionnel.
Par exemple, si deux machines Ubuntu 14.04 LTS communiquent entre elles sur SSH, elles utiliseront aes128-ctr comme leur chiffrement par défaut.
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 public-privé.
La clé publique, comme son nom l’indique, est distribuée et partagée ouvertement 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 crypté par une clé publique d’une machine ne peut être déchiffré que par la clé privée d’une même machine. Cette relation à sens unique signifie que la clé publique ne peut pas décrypter ses propres messages, ni décrypter quelque chose de crypté par la clé privée.
La clé privée doit rester privée, c’est-à-dire que la connexion doit être 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 elle est le seul composant capable de décrypter des messages cryptés à l’aide de sa propre clé publique. Par conséquent, toute partie ayant la capacité de décrypter des messages signés publiquement doit posséder la clé privée correspondante.
Contrairement à ce qu’on croit, le cryptage asymétrique n’est pas utilisé pour chiffrer toute la session SSH. Au lieu de cela, 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 public-privé 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 des clients pour générer et contester et transmettre au client une authentification. Si le client peut décrypter avec succès le message, cela signifie qu’il dispose de la clé privée requise pour la connexion. La session SSH commence alors.
Hashing (hachage)
Le hachage à sens unique est une autre forme de cryptographie utilisée dans les connexions Secure Shell. Les fonctions one-way-hash diffèrent des deux formes de cryptage ci-dessus en ce sens qu’elles ne sont jamais destinées à être déchiffrées. Elles génèrent une valeur unique d’une longueur fixe pour chaque entrée, dont aucune tendance claire ne peut être exploitée. Cela rend pratiquement impossible l’inversion.
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 du hash. 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 la bonne entrée.
SSH utilise des hachages pour vérifier l’authenticité des messages. Ceci est fait en utilisant HMAC, ou Hash-based Message Authentication Codes. Cela garantit que la commande reçue n’est modifiée d’aucune manière que ce soit.
Même si l’algorithme de cryptage symétrique est sélectionné, un algorithme d’authentification de message approprié est également sélectionné. Cela fonctionne de manière similaire à la façon dont le chiffrage est sélectionné, comme expliqué dans la section sur le cryptage symétrique.
Chaque message transmis doit contenir un MAC, qui est calculé en utilisant la clé symétrique, le numéro de séquence de paquets et le contenu du message. Il est envoyé en dehors des données cryptées symétriquement comme la partie finale du paquet de communication.
Comment fonctionne SSH avec ces techniques de cryptage
La façon dont fonctionne SSH, c’est qu’il utilise un modèle client-serveur pour permettre l’authentification de deux systèmes distants et le cryptage des données qui les traversent.
SSH fonctionne par défaut sur le port TCP 22 (bien que cela puisse être modifié si nécessaire). L’hôte (serveur) écoute le port 22 (ou tout autre port SSH assigné) et guette les connexions entrantes. Il organise la connexion sécurisée en authentifiant le client et en ouvrant le bon environnement de correct si la vérification est réussie.
Le client doit commencer la connexion SSH en lançant le handshake TCP avec le serveur, en assurant une connexion symétrique sécurisée, en vérifiant si l’identité affichée par le serveur correspond aux enregistrements précédents (habituellement enregistrés dans un fichier de stockage de clés RSA) et présente les informations d’identification requises pour authentifier la connexion.
Il existe deux étapes pour établir une connexion : d’abord, les systèmes doivent s’entendre sur les normes de cryptage pour protéger les communications futures, et deuxièmement, l’utilisateur doit s’authentifier. Si les informations d’identification correspondent, l’utilisateur reçoit l’accès.
Négociation de chiffrement de session
Lorsqu’un client tente de se connecter au serveur via TCP, le serveur présente les protocoles de cryptage et les versions respectives qu’il prend en charge. Si le client possède une paire de protocoles et de versions correspondant, un accord est atteint et la connexion commence 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 que cela est établi, les deux parties utilisent ce qu’on appelle un algorithme d’échange de clés Diffie-Hellman pour créer une clé symétrique. Cet algorithme permet au client et au serveur d’arriver à une clé de cryptage partagée qui sera désormais utilisée pour chiffrer toute la session de communication.
Voici comment l’algorithme fonctionne à un niveau très basique:
- Le client et le serveur se mettent d’accord sur un très grand nombre premier, qui n’a bien sûr aucun facteur en commun. Cette valeur de nombre premier est également appelée valeur de départ.
- Ensuite, les deux parties conviennent d’un mécanisme de cryptage commun pour générer un autre ensemble de valeurs en manipulant les valeurs de base d’une manière algorithmique spécifique. Ces mécanismes, également appelés générateurs de cryptage, effectuent de grandes opérations sur les valeurs de base. Un exemple d’un tel générateur est AES (Advanced Encryption Standard).
- Les deux parties génèrent indépendamment un autre nombre premier. Celui-ci est utilisé comme clé privée secrète pour l’interaction.
- Cette clé privée nouvellement générée, avec le numéro partagé et l’algorithme de cryptage (p. Ex. AES), sert à calculer une clé publique qui est distribuée à l’autre ordinateur.
- Les parties utilisent ensuite leur propre clé privée, la clé publique partagée de l’autre machine et le numéro premier d’origine pour créer une clé partagée finale. Cette clé est calculée indépendamment par les deux ordinateurs, mais créera la même clé de cryptage des deux côtés.
- Maintenant que les deux côtés ont une clé partagée, ils peuvent chiffrer symétriquement toute la session SSH. La même clé peut être utilisée pour chiffrer et décrypter des messages (lire : section sur le cryptage symétrique).
Maintenant que la session sécurisée symétriquement cryptée a été établie, l’utilisateur doit être authentifié.
Authentification de l’utilisateur
La phase finale avant que l’utilisateur ait accès au serveur authentifie ses informations d’identification. 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é par le tunnel crypté symétriquement, de sorte qu’il n’ a aucune chance d’être capturé par un tiers.
Bien que les mots de passe soient cryptés, il n’est toujours pas recommandé d’utiliser des mots de passe pour les connexions sécurisées. C’est parce que de nombreux robots peuvent simplement forcer des mots de passe faciles ou mots de passe par défaut, et accéder à votre compte. Au lieu de cela, l’alternative recommandée est SSH Key Pairs.
Il s’agit d’un ensemble de clés asymétriques utilisées pour authentifier l’utilisateur sans avoir à entrer de mot de passe.
Risques de sécurité associés au SSH et meilleures pratiques
Malgré sa réputation de sécurité, l’utilisation de SSH comporte également des risques potentiels. Les attaques par force brute visant les identifiants SSH, les vulnérabilités logicielles et les erreurs de configuration peuvent compromettre la sécurité des connexions.
Pour atténuer ces risques, il est recommandé de suivre certaines meilleures pratiques de sécurité. Cela comprend l’utilisation de clés SSH robustes plutôt que de mots de passe, la mise à jour régulière des logiciels SSH pour corriger les failles de sécurité connues, et la configuration appropriée des paramètres de sécurité pour limiter l’accès non autorisé. De plus, la surveillance continue des journaux d’activité SSH peut aider à détecter et à répondre rapidement aux tentatives d’intrusion.
En suivant ces bonnes pratiques, les utilisateurs peuvent renforcer la sécurité de leurs connexions SSH et réduire les risques d’exploitation.
Conclusion
Obtenir une compréhension approfondie du fonctionnement sous-jacent de SSH peut aider les utilisateurs à comprendre les aspects de sécurité de cette technologie. La plupart des gens considèrent que ce processus est extrêmement complexe et incompréhensible, mais c’est beaucoup plus simple que la plupart des gens pensent.
Si vous vous demandez combien de temps il faut pour qu’un ordinateur calcule un hachage et authentifie un utilisateur, ça se passe en moins d’une seconde. En fait, la plupart du temps est consacrée au transfert de données sur Internet.
Nous espérons que ce tutoriel sur SSH vous a aidé à voir comment différentes technologies peuvent être regroupées pour créer un système solide dans lequel chaque mécanisme a un rôle très important à jouer. Egalement, maintenant, vous savez pourquoi Telnet est devenu une technique du passé, dès l’arrivée de SSH.
Pour plus de contenus sur Linux, vous pouvez consulter nos tutoriels VPS.
Qu’est-ce que SSH ? – FAQ
Pourquoi SSH est-il utilisé ?
Secure Shell (SSH en abrégé) est un protocole de communication réseau qui permet à deux ordinateurs de communiquer entre eux. SSH permet également le transfert de données entre deux ordinateurs.
Que signifie SSH ?
SSH est l’abréviation du protocole réseau Secure Shell ou Secure Socket Shell.
Qu’est-ce que SSH par rapport à SSL ?
SSH crée un réseau sécurisé entre ordinateurs qui permet le transfert de données. SSL, quant à lui, crypte les données transférées, réduisant ainsi les tentatives de malveillance et d’hameçonnage.