web-dev-qa-db-fra.com

Votre mot de passe SSH est-il révélé lorsque vous essayez de vous connecter au mauvais serveur?

Lorsque vous essayez accidentellement de vous connecter au mauvais serveur avec des informations d'identification de mot de passe, l'administrateur peut-il lire et enregistrer le mot de passe que vous avez utilisé?

191
vfclists

En termes simples: oui

Plus de détails...

Si vous vous connectez à ma machine, vous ne savez pas si j'utilise un serveur ssh normal ou un serveur qui a été modifié pour écrire le mot de passe transmis.

De plus, je n'aurais pas nécessairement besoin de modifier sshd, mais je pourrais écrire un module PAM (par exemple en utilisant pam_script), qui vous sera transmis votre mot de passe.

Donc oui. JAMAIS envoyez votre mot de passe à un serveur non fiable. Le propriétaire de la machine aurait facilement pu la configurer pour enregistrer toutes les tentatives de mots de passe.

(En fait, ce n'est pas rare dans le monde infosec; configurez un serveur de pot de miel pour enregistrer les mots de passe tentés)

214
Stephen Harris

Oui.

Le mot de passe est envoyé une fois la connexion cryptée établie, mais le serveur distant obtient le mot de passe en texte clair.

Si vous vous souciez de cela, la solution la meilleure et la plus simple consiste à utiliser des clés SSH.

Si vous avez des machines qui ne peuvent pas accepter de clés, une solution serait de créer un outil qui stocke vos mots de passe en toute sécurité, puis utilise sshpass pour toujours envoyer le mot de passe correct en fonction du serveur auquel vous vous connectez.


Maintenant, la raison pour laquelle le mot de passe est envoyé en texte clair, c'est qu'il laisse toutes les décisions de manipulation et de stockage à l'extrémité distante, et le client peut être totalement stupide. Il y a quelques formats de hachage (stockage) de mots de passe différents utilisés dans les systèmes Linux et BSD au cours des dix dernières années ( crypt (3) ), aucun d'entre eux ne nécessite le support du client.

Bien que cela soit également dû à l'histoire (c'est-à-dire qu'il en a toujours été ainsi). Il existe de meilleurs protocoles d'authentification défi-réponse qui pourraient être utilisés même avec des mots de passe. Par exemple SRP , qui fournit aux parties un secret partagé lors de l'authentification. Il a été implémenté pour certains serveurs SSH, mais le patch pour OpenSSH est pour une (très) ancienne version.

52
ilkkachu

Pour s'appuyer sur la réponse de Stephen Harris, voici une vue en temps réel que j'ai construite qui montre ce qu'un script d'authentification PAM modifié pourrait capturer lors de la connexion à une boîte via ssh (un pot de miel en quelque sorte). J'utilise une version modifiée de la bibliothèque PAM lib-storepw.

https://livesshattack.net

https://livesshattack.net/about

11
Willie S.

SSH est un protocole qui nécessite une confiance mutuelle. C'est la raison pour laquelle le client OpenSSH gère un fichier known_hosts, pour implémenter son schéma de confiance lors de la première utilisation.

Lorsque vous tentez de vous connecter à un serveur SSH, quel que soit le fournisseur du logiciel ou les données qu'il est configuré pour se connecter, vous participez à une procédure d'authentification. Lorsque vous utilisez l'authentification par mot de passe, vous transmettez votre mot de passe à ce serveur. C'est l'une des raisons pour lesquelles la cryptographie asymétrique (clé publique, certificats) est recommandée - la cryptographie à clé publique réduit considérablement le risque de divulgation de vos informations d'identification. (Bien que cela ne puisse pas vous protéger contre une attaque MitM si vous utilisez le transfert d'agent ssh ou un schéma similaire.)

2
jvoorhis