SSH : comment mieux se couvrir sur l'Internet

mieux protéger une application internet

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com
L'internet étant l'interconnexion de plusieurs machines, est exposé à des dangers sans précédent. Les écoutes des communications ne sont pas que le domaine des agents féderaux. Si l'échange n'est pas suffisamenet sécurisée, il peut s'avérer très facile de l'écouter et de récupérer les données sensibles. C'est pourquoi il existe un moyen de connexion plus certain que les autres - SSH.

Cet article nous amenera dans la découverte du monde des connexions sécurisées en mode SSH. Dans la première partie on essayera de définir ce moyen de connexion. Dans la deuxième on abordera son aspect technique. Le dernier paragraphe expliquera un peu plus une des spécificités du SSH, la connexion sur la base des clés privée et publique.

Qu'est-ce que c'est SSH ?
L'acronyme SSH signifie Secure SHell. Le SSH est un protocole qui gère la connexion entre une machine et un client SSH. Grâce à cette connexion on peut administrer un serveur (installer les logiciels, mettre à jour le système etc.) aussi bien que transférer les fichiers. Tout cela dans un environnement sécurisé. Il est donc un bon remplacant pour Telnet ou FTP.

A ce jour, 2 versions du protocole existent : la 1 et la 2. Cependant, les deux ne sont pas compatibles et la version 2 est conseillée à l'utilisation. Elle est plus sécurisée que la première et mieux architecturée. Une autre différence entre les deux se situe au niveau de cryptage des paquets. Les deux implémentent également de différents mécanismes de cryptage.

SSH nous protège contre les attaques suivantes :
- IP spoofing, DNS spoofing et IP source routing : dans ces attaques, un attaquant usurpe l'identité de l'expéditeur des paquets ou du nom de domaine.
- écoute du réseau et l'intercéption des données sensibles comme les mots de passe
- vol des connexions

On en déduit que SSH ne fait jamais confiance au réseau et rend impossible l'accès à des personnes malveillantes. Car même si une personne réussit à s'incruster dans le réseau, elle ne pourra pas décrypter ou rejouer le traffic dans le tunnel SSH. La seule chose possible dans ce cas, est la déconnexion de la connexion.

Comment fonctionne SSH ?
La sécurisation de l'échange se fait grâce à des clés privées et publiques dont chacune des parties, le client et le serveur, est en posession. Elles sont ensuite "mêlées" au cryptages asymétriques et symétriques pour garantir l'échange protégée. Voici le tableau qui présente les étapes de création d'un tunnel de connexion sécurisée SSH en détail :
EtapeDescriptionAttaquant
1Le serveur envoie sa clé publique au client. Le client utilise cette clé pour générer une sorte de "clé de session". Elle sera utilisée par la suite pour comprendre les messages échangés en mode crypté. Le client la stocke quelque part chez lui en clair.Même si l'attaquant réussit à accéder à la clé publique transmise, elle ne lui sera pas trop utile. En fait, la clé publique du serveur ne sert qu'à encrypter les données.
2Le client génère la clé de session. Il la renvoie au serveur qui la décrypte avec sa clé privée.L'attaquant peut intercepter la clé de session. Cependant, elle sera inutilisable car il ne pourra pas la décrypter sans avoir connaissance du clé privée du serveur.
3Le serveur décrypte la clé de session et la stocke quelque part chez lui en clair. Maintenant les deux connaissent le texte utilisé pour crypter et décrypter les messages. Ils peuvent donc être envoyés sans crainte qu'une personnes non-autorisée sera capable de s'introduire dans l'échange.C'est à partir de ce moment-là que le tunnel de connexion est créé entre le client et le serveur. Les deux peuvent donc envoyer librement toutes les données, sensibles inclus.Ne connaissant pas la clé de session décrypte, l'attaquant ne peut donc pas comprendre ce qui est échangé à travers le réseau.


Les modèles cryptographiques sont utilisés dans SSH. Le premier, le cryptage symétrique, encode le message à l'aide d'une clé connue par l'émetteur et le récepteur. Ce cryptage dans SSH a lieu au moment de transmission des messages. Les messages sont cryptés grâce à la clé de session. Cette dernière est générée avec le cryptage asymétrique au tout début de l'interaction. Ce modèle se base sur l'envoi d'une clé publique qui sert à crypter une information. Ensuite cette information est renvoyée par le destinataire de la clé publique à l'émetteur. L'émetteur peut alors la decrypter grâce à sa clé privée. L'attaquant peut alors intercepter la clé publique (elle peut être envoyée en clair), mais sans connaissance de la clé privée, il lui sera impossible de comprendre le message transmis. Le cryptage asymétrique conviendrait donc aussi dans le cas de transmission. Cependant, on utilise le cryptage symétrique car il est plus rapide et aussi sécurisé qu'asymétrique. Plus d'informations sur les cryptages se trouvent dans l'article Cryptage symétrique et asymétrique.

Connexion sans mot de passe avec SSH
Une des spécificités importantes du SSH est la possibilité de se connecter à une machine sans saisir le mot de passe. Cette fonctionnalité peut être utile dans de grands clusters où, par exemple, on peut vouloir se connecter à de différentes machines pour effectuer des opérations propres à chacune (nettoyage des fichiers temporaires sur une, compression des fichiers images sur d'autres etc.).

Cette authentification s'effectue grâce au cryptage asymétrique et la paire des clés privée/publique. Elle est très rapide à mettre en place. Le client doit d'abord générer la paire des clés privée/publique sur sa machine. Ensuite, la clé publique doit être copiée sur le serveur auquel on souhaite se connecter.

Pendant la génération des clés un passphrase peut être demandé. Il s'agit d'un mot qui sert à crypter la clé privée. Cependant dans le cas d'une connexion automatisée (machine - machine), il doit être laissé vide. Sinon, il sera obligatoire de le retaper à chaque fois.

SSH est donc un remplacement plus sécurisé des modes de connexion à une machine standards, comme FTP ou Telnet. Grâce à l'utilisation des 2 modèles cryptographiques, il garantit une échange sûre sans aucune mise en place d'éléments supplémentaires (l'échange en "clair"). SSH peut aussi être employé pour toutes les interactions entre les machines.
Bartosz KONIECZNY 08-09-2013 16:23 sécurité des applications web
Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil PHP

Comment créer un signature key pour OAuth

Un signature key est l'un des deux composants qui constituent la signature de la requête OAuth. Il est composé de : - la clé secrète que le fournisseur (Google, Yahoo...) attribue au client, elle doit être toujours présente dans le signature key - le ticket secret qui est renvoyé à de différentes étapes de l'échange avec le web service du fournisseur; s'il est absent (comme lors de la récupération du ticket de la requête), il faut alors passer une chaîne de caractères vide Les deux paramètres doivent être encodés. Une méthode pour générer le signature key peut se présenter ainsi :

function setSignatureKey($tokenSecret)
{
  return str_replace('%7E', '~', rawurlencode($this->userData['secret'])).'&'.str_replace('%7E', '~', rawurlencode($tokenSecret));
}