Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/05/2016, à 18:33

D4mocl3s

Fonctionnalités avancées de SSH + Certificats

Bonjour,

Je viens ici ouvrir un topic car je n'arrive pas à trouver les réponses à mes questions, notamment concernant les attaques MITM (Man In The Middle) sur une connexion SSH.

Pour situer le contexte, j'ai actuellement installé/configuré un mini serveur domestique avec Ubuntu Server 16.04 LTS, mon but étant de pouvoir y accéder depuis n'importe où à travers internet. Je l'ai bien sur sécurisé mais avant de le rendre accessible depuis internet, je voudrais pouvoir comprendre entièrement les mécanismes de SSH.
Pour ce qui est des bases (génération et authentification par clés, utilisation d'un agent, etc..) je pense les maîtriser.

Questions :

- A quoi servent les clés privées/publiques générées dans /etc/ssh/ à l'installation de OpenSSH ? Car si on suit chaque tutos, on recrée une paire de clés. Je voudrais être certain de bien avoir compris, si on génère une paire clés RSA en 4096 bits sur le client et que l'on met la clé publique sur le serveur, la connexion sera chiffrée/déchiffrée de bout en bout à l'aide des clés 4096 bits et non avec les clés dans /etc/ssh/ ? Je pose cette question car je ne comprends pas bien pourquoi les clés privées présentes dans /etc/ssh/ sont spécifiées dans le fichier de configuration du serveur ssh (sshd_config).

- Quand on initie une connexion ssh par clés, la cryptographie asymétrique rentre en jeu. Peut-on faire on sorte d'utiliser une cryptographie mixte (cryptographie asymétrique pour la négociation de la clé de chiffrement puis cryptographie symétrique) ?

- L'attaque MITM (source : http://www.hsc.fr/ressources/presentations/mitm/index) est-elle un réel risque pour une personne qui comme moi passe par internet pour initier une connexion ssh sur un serveur distant ?

- Pour s'en prémunir, j'ai lu quelques informations sans réellement les comprendre et c'est justement ça mon problème big_smile. Il serait question de vérifier l'empreinte (fingerprint) lorsque l'on se connecte et/ou de mettre en place un certificat.
Pour la première proposition, j'ai lu (source : https://fr.wikibooks.org/wiki/Le_syst%C … istant_SSH) qu'il fallait utiliser la commande sudo ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key sur le serveur, mais pourquoi la clé privée du serveur rentre en ligne de compte ? Et aussi petit problème annexe, il semblerait que mon empreinte soit hashé, comment la voir en claire ?
Pour la seconde proposition, j'ai réussi à trouver un tuto pas très clair (source : https://blog.geoffroy.gramaize.eu/2012/ … rtificats/) sauf que moi je veux utiliser Putty pour me connecter à mon serveur ssh et je n'ai pas réussi à trouver un endroit prévu pour y installer un certificat.

Merci par avance pour vos réponses et éclaircissements smile

Dernière modification par D4mocl3s (Le 22/05/2016, à 10:12)

Hors ligne

#2 Le 21/05/2016, à 18:47

jplemoine

Re : Fonctionnalités avancées de SSH + Certificats

Je pense que les tutos font une erreur : sauf erreur de ma part, il est possible d'avoir qu'une paire de clé pour plusieurs serveurs (sauf qu'en terme de sécurité si la clé est corrompue, on aura accès à plusieurs serveurs..).
Il est possible de "dupliquer" la clé publique sur plusieurs serveurs et d'utiliser la même clé privé pour se connecter à plusieurs serveurs.
Ce que j'ai fait est que la clé privée est sur une clé USB qui me sert aussi à me connecter sur l'ordinateur.
- Pas de clé : authentification forte avec une double authentification via un PTO
- Avec la clé : authentification faible. La clé suffit et pour la connexion locale et pour accéder aux serveurs (mais que depuis le réseau local).


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 21/05/2016, à 19:17

D4mocl3s

Re : Fonctionnalités avancées de SSH + Certificats

Je n'arrive pas trop à voir à quelle interrogation tu réponds.

jplemoine a écrit :

Je pense que les tutos font une erreur : sauf erreur de ma part, il est possible d'avoir qu'une paire de clé pour plusieurs serveurs (sauf qu'en terme de sécurité si la clé est corrompue, on aura accès à plusieurs serveurs..).

Euh je pense que tu te trompes ou alors j'ai mal compris, on peut très bien avoir plusieurs paires de clés pour se connecter sur plusieurs serveurs. La seule restriction est de renseigner la clé publique sur le serveur SSH et d'employer la clé privée associée pour se connecter au serveur. En règle général, si on a plusieurs serveurs à administrer depuis un seul et même client, on génère qu'une seule paire de clés et on met la clé publique sur chaque serveur. Seulement, pour plus de sécurité on peut très bien avoir plusieurs paires de clés pour chaque connexion à un serveur.

jplemoine a écrit :

Ce que j'ai fait est que la clé privée est sur une clé USB qui me sert aussi à me connecter sur l'ordinateur.

Théoriquement, la bonne pratique impose justement d'avoir une paire de clé différente pour une connexion initiée à un même serveur depuis différents clients. La clé privée doit en effet rester très discrète et donc rester sur un seul client.

jplemoine a écrit :

authentification forte avec une double authentification via un PTO

Qu'est-ce que tu appelles PTO ?

Dernière modification par D4mocl3s (Le 21/05/2016, à 19:25)

Hors ligne

#4 Le 21/05/2016, à 23:52

jplemoine

Re : Fonctionnalités avancées de SSH + Certificats

Pour la clé privé sur la clé USB : c'est en fait que la clé reste avec moi... (mais ce n'est pas nécessairement une méthode pour un usage "normal").
Pour le PTO, j'ai craqué : c'est OTP.. (On Time Password).
Pour les clés sur plusieurs serveurs, c'est que je me suis mal exprimé : j'ai une seule clé privé qui permet d'aller sur plusieurs serveurs.
--> on est donc pas obligé (mais c'est peut-être fortement conseillé) de générer une paire de clés pour chaque serveur.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#5 Le 22/05/2016, à 00:12

D4mocl3s

Re : Fonctionnalités avancées de SSH + Certificats

C'est bon j'ai enfin trouvé un document à la hauteur de mes attentes (http://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf) smile

Je vais essayer de mettre en application ce que j'ai lu, mais je pense que ça ne va pas être sans difficulté car j'ai toujours les même interrogations. Si quelqu'un a déjà mis en place ce qui est expliqué au chapitre 4.5, je suis preneur.

Hors ligne

#6 Le 22/05/2016, à 08:32

Compte anonymisé

Re : Fonctionnalités avancées de SSH + Certificats

Les clés créées à l'installation d'OpenSSH servent à identifier l'hôte, pas à chiffrer les connexions. Ce sont celles-ci qui sont vérifiées pour t'avertir que tu te connectes à un hôte inconnu.

D4mocl3s a écrit :

- Quand on initie une connexion ssh par clés, la cryptographie asymétrique rentre en jeu. Peut-on faire on sorte d'utiliser une cryptographie mixte (cryptographie asymétrique pour la négociation de la clé de chiffrement puis cryptographie symétrique) ?

Ça m'étonnerait beaucoup que l'asymétrique soit utilisé pour autre chose que l'échange de clés. Les algos asymétriques sont très lents et ne peuvent pas chiffrer de gros volumes de données. Je pense que ce que tu veux se passe déjà.

D4mocl3s a écrit :

- L'attaque MITM (source : http://www.hsc.fr/ressources/presentations/mitm/index) est-elle un réel risque pour une personne qui comme moi passe par internet pour initier une connexion ssh sur un serveur distant ?

Si tu déposes tes clés sur le serveur par Internet la première fois, tu dois vérifier son empreinte. Ça veut dire que tu dois déjà la connaître. Comme ça, tu seras sûr de te connecter au bon serveur. Une fois connecté une fois, SSH t'affichera un avertissement si l'empreinte change pour les connexions suivantes, ce qui se passerait forcément dans le cas d'un MITM si la clé du serveur n'a pas été compromise.

D4mocl3s a écrit :

utiliser la commande sudo ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key

Cette clé a justement déjà été créée à l'installation d'OpenSSH, pas besoin d'en créer une nouvelle.

D4mocl3s a écrit :

il semblerait que mon empreinte soit hashé, comment la voir en claire ?

Ça, je ne comprends pas. Par définition, une empreinte est créée en hashant la clé.

D4mocl3s a écrit :

Pour la seconde proposition, j'ai réussi à trouver un tuto pas très clair (source : https://blog.geoffroy.gramaize.eu/2012/ … rtificats/) sauf que moi je veux utiliser Putty pour me connecter à mon serveur ssh et je n'ai pas réussi à trouver un endroit prévu pour y installer un certificat.

Je ne vois pas bien l'intérêt d'utiliser un certificat pour un serveur perso. Vérifier l'empreinte une fois suffit.

#7 Le 22/05/2016, à 10:08

D4mocl3s

Re : Fonctionnalités avancées de SSH + Certificats

Les clés créées à l'installation d'OpenSSH servent à identifier l'hôte, pas à chiffrer les connexions. Ce sont celles-ci qui sont vérifiées pour t'avertir que tu te connectes à un hôte inconnu.

TriChromureDeChaton a écrit :
D4mocl3s a écrit :

- Quand on initie une connexion ssh par clés, la cryptographie asymétrique rentre en jeu. Peut-on faire on sorte d'utiliser une cryptographie mixte (cryptographie asymétrique pour la négociation de la clé de chiffrement puis cryptographie symétrique) ?

Ça m'étonnerait beaucoup que l'asymétrique soit utilisé pour autre chose que l'échange de clés. Les algos asymétriques sont très lents et ne peuvent pas chiffrer de gros volumes de données. Je pense que ce que tu veux se passe déjà.

En effet tu as raison, j'ai lu après coup que la cryptographie asymétrique intervenait dans les mécanismes de SSH seulement lors de la négociation de la clé de chiffrement afin de pouvoir juste effectuer du chiffrement symétrique. Donc en fait si je ne m'abuse, SSH utilise de la cryptographie hybride.
Par contre j'ai une autre question qui me vient à l'esprit big_smile Comment influencer SSH pour qu'il utilise tel ou tel chiffrement symétrique ? (4.1.5 http://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf)

TriChromureDeChaton a écrit :
D4mocl3s a écrit :

- L'attaque MITM (source : http://www.hsc.fr/ressources/presentations/mitm/index) est-elle un réel risque pour une personne qui comme moi passe par internet pour initier une connexion ssh sur un serveur distant ?

Si tu déposes tes clés sur le serveur par Internet la première fois, tu dois vérifier son empreinte. Ça veut dire que tu dois déjà la connaître. Comme ça, tu seras sûr de te connecter au bon serveur. Une fois connecté une fois, SSH t'affichera un avertissement si l'empreinte change pour les connexions suivantes, ce qui se passerait forcément dans le cas d'un MITM si la clé du serveur n'a pas été compromise.

D4mocl3s a écrit :

utiliser la commande sudo ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key

Cette clé a justement déjà été créée à l'installation d'OpenSSH, pas besoin d'en créer une nouvelle.


D4mocl3s a écrit :

il semblerait que mon empreinte soit hashé, comment la voir en claire ?
Ça, je ne comprends pas. Par définition, une empreinte est créée en hashant la clé.

La commande ssh-keygen ci-dessus ne génère aucune clé, elle est justement là pour afficher l'empreinte par contre je me suis mal exprimé. En effet, l'empreinte est déjà un condensa sous la forme ssh-rsa 8192 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx mais avec la commande ci-dessus, j'obtiens un condensa crypté. Alors ce n'est peut-être pas la bonne commande, mais dans ce cas comment connaître l'empreinte de son serveur et sur quelle clé faut-il s'appuyer pour découvrir l'empreinte de son serveur ?

EDIT : La commande ssh-keygen ci-dessus affiche bien le fingerprint de la clé spécifiée sauf que j'obtenais le condensa en SHA256. Putty lors de la première connexion affiche le fingerprint en MD5 et c'est ça qui m'a mis en défaut car je n'arrivais pas à voir la relation entre le fingerprint que j'obtenais lors la première connexion au serveur SSH avec putty et le fingerprint que j'obtenais avec la commande la commande ssh-keygen ci-dessus. Pour afficher le fingerprint en MD5 avec ssh-keygen, il faut utiliser l'option E : sudo ssh-keygen -l -E MD5 -f ssh_host_dsa_key


TriChromureDeChaton a écrit :
D4mocl3s a écrit :

Pour la seconde proposition, j'ai réussi à trouver un tuto pas très clair (source : https://blog.geoffroy.gramaize.eu/2012/ … rtificats/) sauf que moi je veux utiliser Putty pour me connecter à mon serveur ssh et je n'ai pas réussi à trouver un endroit prévu pour y installer un certificat.

Je ne vois pas bien l'intérêt d'utiliser un certificat pour un serveur perso. Vérifier l'empreinte une fois suffit.

Oui c'est sur car la vérification de l'empreinte permet de passer outre les certificats, c'est juste pour essayer d'aller un peu plus loin dans le fonctionnement de SSH. (4.1.1 http://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf)

Dernière modification par D4mocl3s (Le 22/05/2016, à 12:25)

Hors ligne