Pourquoi devrais-je utiliser l'authentification par clé publique pour SSH?

26

J'utilise un serveur SSH et j'utilise toujours une authentification par mot de passe simple. Partout où je lis sur la sécurité, il est conseillé d'utiliser l'authentification par clé publique. Mais je n'obtiens pas les avantages. Les utiliser est, à mes yeux, un travail peu sûr ou très pratique.

Bien sûr, si quelqu'un essaie de forcer la connexion à mon serveur SSH, la clé publique est beaucoup plus forte que n'importe quel mot de passe. Mais à part ça, c'est totalement précaire.

Les conseillers soutiennent principalement que vous n'avez pas à vous souvenir d'un mot de passe. Comment est-ce pas sûr? Donc, si quelqu'un pirate mon ordinateur, il obtient non seulement mon ordinateur, mais aussi mon serveur? Si j'utilise SSH de différents clients, je dois stocker les clés publiques une par une, ce qui multiplie les risques qu'elles tombent entre de fausses mains. Je pourrais les enregistrer sur une clé USB que je porte avec moi, mais elle peut être perdue et le viseur a accès à mon serveur.

Je suis peut-être mieux servi avec l'authentification à deux facteurs.

Y a-t-il un argument qui me manque? Quelle est la meilleure façon pour moi?

Aravor
la source
10
Lorsqu'elle est bien faite, l'authentification par clé publique est une forme de 2FA avec quelque chose que vous connaissez (la phrase secrète de la clé privée) et quelque chose que vous avez (la clé privée).
Sven
1
@EEAA Pourquoi est-ce important tant que votre clé privée en possède une?
user253751
6
Avec une clé privée, si je vous incite à vous connecter au mauvais serveur par erreur, vous ne tapez pas votre mot de passe sur mon serveur.
user253751
1
De nombreuses organisations doivent (pour une raison quelconque) exiger que l'authentification à deux facteurs soit utilisée. Cela est impossible à faire en s'appuyant sur des clés privées chiffrées.
EEAA
6
Pour ce que ça vaut, je suis en profond désaccord avec Sven sur la classification de la clé privée comme quelque chose que vous avez . Il échoue au test fondamental de quelque chose que vous avez , car il est reproductible arbitrairement, étant simplement des données numériques. L'authentification par clé publique seule n'est pas 2FA; si vous vous dites que c'est le cas, vous vous trompez sur votre sécurité.
MadHatter prend en charge Monica le

Réponses:

32

si quelqu'un pirate mon ordinateur, il obtient non seulement mon ordinateur, mais aussi mon serveur?

C'est potentiellement vrai de toute façon avec les enregistreurs de frappe: dès que vous vous connectez à votre serveur à partir de l'ordinateur compromis, ils obtiennent le mot de passe.

Mais il y a 3 avantages aux clés:

1) Authentification en cache. Saisissez une fois votre phrase secrète, exécutez plusieurs commandes ssh. Ceci est très utile si vous utilisez quelque chose qui utilise ssh comme transport, comme scp, rsync ou git.

2) Authentification évolutive. Entrez une fois votre phrase secrète, connectez-vous à plusieurs machines . Plus vous avez de machines, plus c'est utile. Si vous avez 100 machines, que faites-vous? Vous ne pouvez pas utiliser le même mot de passe (sauf s'il s'agit d'une ferme de clones) et vous ne vous en souvenez pas autant. Vous devez donc utiliser un gestionnaire de mots de passe et vous revenez à un point de compromis unique. En fait, la phrase secrète clé est votre gestionnaire de mots de passe.

2b) Il évolue dans l'autre sens si vous avez plusieurs administrateurs utilisant les mêmes systèmes, car vous pouvez révoquer les clés de l'utilisateur A sans avoir à dire à B, C, D, E, F ... que le mot de passe a changé.

(Cela peut également être fait avec des comptes individuels et sudo, mais vous devez ensuite provisionner ces comptes d'une manière ou d'une autre)

3) Automatisation et délégation partielle. Vous pouvez configurer SSH pour exécuter une commande particulière lorsqu'une clé se connecte . Cela permet à un processus automatisé sur le système A de faire quelque chose sur le système B sans avoir une confiance totale sans mot de passe entre les deux.

(Il s'agit d'un remplacement pour rlogin / rsh, qui était hilarante de manière non sécurisée)

Modifier: un autre avantage des clés publiques plutôt que des mots de passe est le scénario courant où le serveur est compromis par une vulnérabilité. Dans ce cas, la connexion avec un mot de passe compromet immédiatement le mot de passe. La connexion avec une clé ne fonctionne pas! Je dirais que c'est plus courant que le bureau d'origine de l'administrateur compromis.

pjc50
la source
2
2b est très important. les clés autorisées sont facilement gérées de manière centralisée, la modification d'un mot de passe et sa distribution à tous les utilisateurs nécessitent plus de travail.
Jonas Schäfer
Quelles sont les techniques de gestion centralisée des clés autorisées? (Je connais bien le fait de mettre des fichiers authorized_keys sur un système de fichiers partagé, mais il doit y en avoir d'autres)
pjc50
1
Au moment où vous avez plusieurs dizaines ou centaines de serveurs, vous utilisez probablement Chef, Ansible, Puppet, Holo ou quelque chose comme ça qui gère ceux-ci. Ou vous avez les clés autorisées dans une base de données LDAP ou autre.
Jonas Schäfer
1
N'oubliez pas le transfert d'agent: vous pouvez vous connecter avec ssh -Aet à partir de là, vous connecter à des machines qui permettent au public de votre hôte d'origine.
Halfgaar
@Halfgaar ... sans rien changer spécifiquement sur l'hôte à partir duquel vous vous connectez. Je viens d'apprendre cette fonctionnalité et je l'adore!
Canadian Luke REINSTATE MONICA
12

Si vous utilisez de bons mots de passe, cela peut être suffisamment sécurisé. Je limite généralement le nombre de serveurs accessibles au public au minimum et autorise SSH à partir d'IP spécifiques lorsque cela est possible.

De plus, vous pouvez protéger vos clés par mot de passe (mot de passe). Ainsi, cette phrase secrète doit être saisie chaque fois que vous devez vous connecter à votre ou vos serveurs. Personne ne peut alors utiliser votre clé sans la phrase de passe appropriée.

Il existe des postes similaires:

  1. Publier à partir de la défaillance du serveur .
  2. Publier à partir de l'échange de pile de sécurité .
  3. Message du superutilisateur .
Khaled
la source
2
La phrase clé est un must à mon humble avis. Lorsque vous utilisez ssh-agent, jetez un œil à l'option -t de ssh-add pour lui faire décharger les clés après un certain temps.
fuero
12

L'autorisation de la clé publique est plus sécurisée lorsque l'attaquant parvient à être l'homme du milieu (MitM) entre votre ordinateur client et le serveur et que vous ne remarquez pas la modification de la clé d'hôte (peut-être parce que vous ne l'avez pas fait). 'ai pas l'ancienne clé, par exemple parce que c'est la première fois que vous utilisez cet ordinateur client spécifique).

(Il en va de même lorsque l'attaquant parvient à prendre le contrôle du serveur et qu'il existe d'autres serveurs sur lesquels les mêmes informations d'identification fonctionnent.)

Avec l'authentification par mot de passe standard, vous soumettez votre mot de passe (à l'intérieur de la connexion cryptée) en texte brut, le serveur authentique le hachera normalement et comparera le résultat à un hachage stocké dans sa base de données de mots de passe. Un attaquant MitM pourrait plutôt prendre ce mot de passe, ouvrir une connexion sur le vrai serveur, et s'y connecter ... et soit vous envoyer le contenu (pour que vous ne remarquiez rien), soit simplement faire ses propres trucs diaboliques sur votre serveur .

Avec l'authentification par clé publique, le client signe essentiellement certaines données connues du serveur et du client pour prouver qu'il est en possession de la clé privée et envoie la signature au serveur. Ces données signées incluent un identifiant de session, qui dépend de nombres aléatoires choisis par le client et le serveur, et est donc différent pour chaque session. Si le MitM ouvre sa propre connexion SSH au serveur réel, celui-ci aura un ID de session différent, et donc la signature fournie par le client n'y fonctionnera pas.

Bien sûr, comme d'autres réponses l'ont déjà dit, vous devez garder votre clé privée sécurisée, par exemple cryptée avec une phrase secrète, ou possible sur un appareil séparé qui ne crée des signatures qu'après avoir entré un code PIN.

Paŭlo Ebermann
la source
2

OpenSSH peut conserver sa propre autorité de certification pour gérer les clés d'hôte et de client SSH et peut y utiliser des listes de révocation. Cela pourrait ajouter à la sécurité fournie par l'authentification par clé.

fuero
la source
2

Vous avez raison au sujet de la revendication "vous n'avez pas besoin d'un mot de passe". C'est vraiment peu sûr du côté client.

Ce qui rend le fait d'autoriser uniquement les clés publiques pour la connexion est beaucoup plus sûr, c'est qu'il n'y a aucun moyen d'accéder par force brute à votre serveur. Tout ce que pourrait être un attaquant serait de mettre une certaine charge sur votre serveur - vous pouvez utiliser fail2ban pour garder cela en échec.

Pour la sécurité côté client, vous devez protéger la clé privée avec une bonne phrase de passe. Bien sûr, la connexion au serveur est désormais plus lourde qu'avec un mot de passe. Pour surmonter cela, vous pouvez utiliser l' agent ssh pour stocker la clé privée en mémoire si vous avez l'intention de vous connecter au serveur plusieurs fois de suite. Il est recommandé de limiter la durée pendant laquelle une clé doit être conservée en mémoire.

guntbert
la source
3
aucun moyen d'accéder à la force brute ... je ne dirais pas non ... vous pouvez forcer la clé privée de la même manière que le mot de passe, mais vous avez beaucoup plus d'entropie dans la clé privée que dans le mot de passe général, ce qui le rend tout à fait inutile (jusqu'à présent sans ordinateurs quantiques).
Jakuje
0

Je suis peut-être mieux servi avec l'authentification à deux facteurs.

Une possibilité pour 2FA pour SSH (et une qui nécessite relativement peu de configuration / complexité) est en fait d'utiliser une clé publique et un mot de passe.

Je crois que quelque chose dans le sens de AuthenticationMethods publickey,keyboard-interactivepeut être ajouté /etc/ssh/sshd_configpour que cela fonctionne.

Plus généralement, le problème est plus que les mots de passe (seuls) ne sont pas une excellente méthode d'authentification car ils sont souvent de qualité douteuse. Un «argument» très simple pour les clés par rapport aux mots de passe est qu'une clé sera généralement d'au moins 2048 bits, et souvent plus (pour les clés EC, ce serait la force effective, plutôt que la taille réelle). Ces bits sont également générés par un mécanisme cryptologiquement sécurisé (ou approprié).

Un mot de passe est souvent inférieur à 2048 bits et n'est souvent pas dérivé d'une source cryptographiquement sécurisée.

Vous pouvez également sécuriser vos clés avec un mot de passe, pour vous prémunir contre les problèmes liés à leur perte (bien que quelqu'un puisse essayer de forcer brutalement ce mot de passe).

Donc, fondamentalement, les différences peuvent être rendues assez transparentes entre les clés et les mots de passe, et l'utilisation de clés vous permet d'acheter un meilleur mot de passe qu'un humain pourrait traiter. Cela ne veut pas dire qu'ils sont une panacée, mais en moyenne, ils offrent plus de sécurité que les mots de passe.

iwaseatenbyagrue
la source