Introduction
Dans un environnement professionnel qui nécessite un accès 24 heures sur 24, 7 jours sur 7, les capacités de mise en réseau à distance sont essentielles. Cela signifie que les entreprises doivent savoir comment sécuriser les connexions à distance pour leurs clients, en plus d'utiliser elles-mêmes les connexions à distance dans un but d'administration du système.
À cette fin, le protocole Secure Shell (SSH) est essentiel aux fonctionnalités d'accès à distance, telles que :
La connexion à son poste de travail à distance, suite au développement du télétravail,
L'administration des serveurs à distance (éloignement géographique, data center, etc.),
Le transfert de fichiers.
SSH fait référence au protocole par lequel les communications réseau peuvent avoir lieu en toute sécurité et à distance à travers un réseau qui n'est pas nécessairement sécurisé.
Lors de son développement, SSH cherchait à remédier aux failles de sécurité de Telnet, ce qui a conduit à une première version, SSH-1. SSH-1 a fait de grands progrès dans la sécurité des opérations de mise en réseau, mais présentait quelques vulnérabilités dont la détection a conduit à la version SSH-2.
|
SSH 1.x |
SSH 2.x |
Encapsulation |
X11 |
Forwarding, X11, Transfert de Fichiers, etc. |
Algorithmes |
DES, 3DES, IDEA, Blowfish |
3DES, Blowfish, CAST128, Arcfour, AES-256 |
Authentification |
RSA (Faille de sécurité) |
RSA, DSA, Diffie-Helman |
Échange de clés |
Pour la session |
Renouvelées périodiquement |
Intégrité |
CRC4 (faille de sécurité) |
MD5, MD5-96 SHA1, SHA1-96 |
Aujourd'hui, la plupart des systèmes qui utilisent SSH prennent en charge SSH-2. Les mises à jour de cette version ont renforcé le protocole et en ont fait une méthode de chiffrement fiable de mise en réseau à distance. En authentifiant et en chiffrant chaque session, SSH protège les données contre les cyberattaques perpétrées par des pirates, ainsi que contre des formes plus subtiles de vol d'informations.
Comprendre comment fonctionne le protocole SSH permet de vous faciliter la configuration et la sécurisation de vos accès à distance en fonction des spécificités et besoins de votre entreprise, ainsi que de vos clients.
Les différentes méthodes de chiffrement utilisées par le protocole SSH
Elles sont aux nombre de trois :
Le chiffrement symétrique (ou chiffrement à clé partagée) : une clé unique (générée par l'algorithme d'échange de clés Diffie-Hellman) permet le chiffrement et le déchiffrement d'un message. Cette clé, générée avant que le client ne s'authentifie, n'est valable que pour la durée de la session SSH et sera donc renouvelée à chaque nouvelle connexion. Le chiffrement utilisé est défini dans le fichier de configuration.
Le chiffrement asymétrique : deux clés différentes sont utilisées pour le chiffrement et le déchiffrement. La clé publique permet le chiffrement d'un message qui ne pourra être déchiffré que par l'utilisation de la clé privée qui y est associée. Dans notre cas, le chiffrement asymétrique ne concerne pas l'intégralité de la session SSH. Le chiffrement n'est utilisé que pour sécuriser l'algorithme d'échange des clés vu précédemment afin de sécuriser la communication symétrique. Lorsque cette dernière connexion est établie, un message est transmis au client pour authentification : si celui-ci procède au déchiffrement, c'est qu'il détient la clé privée adéquate. La session SSH peut alors débuter.
Hachage : les algorithmes de hachage ne sont pas prévus pour être déchiffrés. Ils ont pour rôle d'assurer l'intégrité des données. L'algorithme de hachage transforme un bloc de données en chaîne hash à l'entrée : le même algorithme est effectué sur le même bloc de données à la sortie. Les deux chaînes doivent alors être équivalentes ou avoir la même empreinte, ce qui signifie que les données n'ont pas été corrompues.
Basée sur une demande de connexion d'un poste client vers un équipement serveur configuré, le protocole SSH permet d'assurer une connexion sécurisée à distance, mais également de transférer des fichiers de façon sécurisée.
Le serveur écoute les connexions sur un port défini en configuration (par défaut, le port 22). Il est également responsable de la connexion sécurisée et de l'authentification du client, puis crée l'environnement de la connexion si l'authentification est réussie.
De son côté, le client débute la négociation TCP et la connexion sécurisée, vérifie que les informations liées au serveur sont bien celles enregistrées, puis il fournit ses données d'authentification.
MéthodeLes différentes étapes de la connexion SSH
Phase 1 :
Il y a une identification mutuelle entre le poste client et le serveur avant de pouvoir établir une connexion sécurisée (SSH Transport Layer Protocol), également appelée tunnel SSH.
Cette première étape permet au client et au serveur de se mettre d'accord sur la méthode de chiffrement qui sera utilisée en fonction des algorithmes possibles pour chacun. L'intégrité des données est également assurée par l'utilisation d'un algorithme de hachage.
À compter de ce moment, la connexion est sécurisée par chiffrement symétrique et le restera jusqu'au terme de la session.
Phase 2 :
Le client (SSH User Authentication Protocol) doit maintenant s'authentifier pour obtenir des droits d'accès. Cette authentification, sécurisée, peut se faire de manière simple en entrant le couple identifiant/mot de passe, mais également par chiffrement asymétrique (avec échange de clés SSH).
Le choix entre l'authentification au travers du couple identifiant/mot de passe ou par chiffrement asymétrique doit se faire en fonction du besoin de sécurité de l'entreprise. Une authentification par chiffrement asymétrique est considérée comme plus sécurisée : en effet, les attaques par force brute (utilisation de robots testant de nombreux mots de passe en quelques secondes) peuvent permettre d'accéder à une session sécurisée non autorisée.
Phase 3 :
Le protocole de connexion (SSH Connection Protocol) permet de générer de multiples flux de données distincts les uns des autres.
OpenSSH
Présentation
À l'origine, SSH était une version libre développée par Tatu Ylonen. Différentes évolutions ont eu lieu, associées à la mise en place de licences et une utilisation imposant de plus en plus de restrictions, jusqu'à n'être utilisable que dans un cadre commercial.
Aujourd'hui commercialisée sous le nom de Tectia SSH, cette version de SSH fournit, entre autres, un support aux entreprises.
À partir de la version 1.2.12 de SSH, les développeurs de l'équipe OpenBSD ont décidé de travailler sur le projet OpenSSH, notamment en corrigeant certains des bugs détectés, et en ajoutant de nouvelles fonctionnalités. La première version d'OpenSSH a ainsi vu le jour à la fin de l'année 1999, sous la version SSH-1 dans un premier temps et quelques mois plus tard, à l'été 2000, la version 2 du protocole a pu être développée.
OpenSSH correspond donc à la version Open Source du protocole SSH. Cette version libre se voit régulièrement mise à jour afin notamment de corriger les différentes failles de sécurité qui peuvent être détectées.
Bien que ne fournissant aucun service de soutien aux entreprises, OpenSSH est doté d'une grande communauté d'utilisateurs et un soutien communautaire conséquent, notamment via divers forums. Le support de la communauté correspond à une contribution d'assistance utilisateurs, mais aussi de développement, de rapports de bugs ou de tests de correctifs, etc. De nombreuses failles de sécurité peuvent ainsi être corrigées régulièrement.
Intégré dans le dépôt Debian, ainsi que dans la plupart des distributions Linux, OpenSSH a été ajouté dans les distributions Windows depuis 2018 et est inclus de base sur Windows 10 et Windows Server 2019.
Les fonctionnalités d'OpenSSH
OpenSSH offre de nombreuses fonctionnalités, telles que le tunneling sécurisé, ainsi que plusieurs méthodes d'authentification, des outils clients permettant de faciliter les opérations de contrôle à distance.
La suite OpenSSH se compose à la fois d'outils serveurs et d'outils clients, tels que :
SCP : copie des fichiers entre différents hôtes sur un réseau. Il utilise SSH pour le transfert de données, avec la même authentification et la même sécurité.
Fourni par le package openssh-clients.
SFTP (ou SSH File Transfer Protocol) est un programme de transfert de fichiers similaire à FTP, mais les transferts sont effectués au travers d'un tunnel SSH chiffré et il peut également utiliser l'authentification par clé publique.
Fourni par le package openssh-clients.
FTP-SERVEUR est un sous-système SFTP côté serveur et démarré automatiquement par sshd.
Fourni par le package openssh-server.
OpenSSH implémente un client et un serveur SFTP.
SSH est le programme client principal, utilisé pour se connecter à une machine distante et exécuter des commandes sur celle-ci. Remplaçant « rlogin » et « rsh », il fournit un canal sécurisé et chiffré entre deux hôtes sur un réseau.
Fourni par le package openssh-clients.
SSH est également utilisé comme préfixe pour d'autres commandes concernant l'échange des clés et le chiffrement :
ssh-add permet d'ajouter des identités de cryptographie et d'algorithme de signature numérique (RSA et DSA) à l'agent d'authentification.
Fourni par le package openssh-clients.
ssh-agent permet de stocker les clés privées utilisées pour l'authentification par clé publique. Il démarre automatiquement au début d'une session.
Fourni par le package openssh-clients.
ssh-copyid est un script qui utilise SSH pour se connecter à une machine distante et installe votre propre clé publique dans la liste des clés autorisées d'une machine distante. Cette action permet de se connecter ultérieurement avec une authentification par clé.
Fourni par le package openssh-clients.
ssh-keygen permet de générer, gérer et convertir des clés d'authentification.
Fourni par le package openssh-server.
ssh-keyscan permet de collecter les clés d'hôtes ssh publiques d'un certain nombre d'hôtes.
Fourni par le package openssh-clients.
SSHD est le daemon qui permet de démarrer le service automatiquement dès l'ouverture de session.
Fourni par le package openssh-server.
ssh_config et sshd_config sont les fichiers de configuration du client et du daemon.
Relations entre OpenSSH et OpenSSL
Différences et similitudes entre OpenSSH et OpenSSL
Bien qu'étant deux méthodes d'échanges sécurisées, utilisant notamment des algorithmes de chiffrement pour sécuriser les communications et éviter que d'autres personnes présentes sur le réseau et non autorisées puissent avoir accès aux différentes données, OpenSSH et OpenSSL ne servent pas les mêmes objectifs.
OpenSSH, comme vu précédemment, a pour objectif d'assurer une connexion sécurisée à distance pour y exécuter des commandes, mais également de transférer des fichiers de façon sécurisée. Les données sont chiffrées, empêchant toute interprétation du trafic.
OpenSSH est utilisé le plus souvent par les administrateurs : une authentification client est indispensable.
De son côté, OpenSSL a pour objectif de sécuriser la transmission de données entre des connexions réseaux (sessions de navigation web, connexions VPN, bureau à distance, transferts de fichiers, etc.) et permet de :
Chiffrer les données
Assurer l'authentification
Assurer l'intégrité des données
OpenSSL est utilisé très régulièrement (et de manière « transparente ») par les utilisateurs se connectant sur Internet : aucune authentification client n'est nécessaire.
Pour autant, chacun des deux protocoles offre des similitudes, telles que :
Processus de chiffrement
Authentification
Intégrité des données
Fiabilité de la connexion
Bibliothèque libcrypto et OpenSSH
Au-delà des différences et similitudes entre les deux protocoles, il est à préciser qu'OpenSSL est un outil de chiffrement comprenant deux bibliothèques :
La première, libssl, correspond au protocole SSL
La seconde, libcrypto, correspond aux différents algorithmes de chiffrement pris en charge par OpenSSL
Les deux bibliothèques peuvent être utilisées de manière indépendante.
C'est cette seconde bibliothèque, libcrypto, qui est importée et utilisée par OpenSSH afin d'effectuer les opérations de chiffrement. Cette bibliothèque fournit une suite de fonctions permettant d'effectuer les chiffrements (symétrique et asymétrique), la signature/vérification, ainsi que la génération de hachages.