J'ai entendu plusieurs fois à plusieurs reprises ne jamais laisser SSH avec un mot de passe ouvert sur Internet. Pourquoi est-ce si grave?
Je comprends que le mot de passe peut être forcé, mais que se passe-t-il s'il s'agit d'un mot de passe très solide qui prendrait des éons à se fissurer?
Y a-t-il plus de choses à considérer que juste la force brute ou me manque-t-il autre chose?
Pourquoi est-ce si grave?
Parce qu'il y a des tonnes de bots qui analysent le Web pour les ports ouverts et essaient de se connecter, une fois qu'un bot de scanner trouve un port SSH ouvert, il peut être mis en file d'attente pour un autre bot (ou botnet) pour essayer de forcer brutalement le mot de passe. L'un des risques ici est que, éventuellement, ils parviennent à trouver le mot de passe et à prendre le contrôle du serveur.
Je comprends que le mot de passe peut être forcé, mais que se passe-t-il s'il s'agit d'un mot de passe très solide qui prendrait des éons à se fissurer?
Avoir un mot de passe long est une technique d'atténuation, mais la consommation de ressources (bande passante, espace disque utilisé pour les journaux et le processeur par exemple) d'une attaque par force brute peut également être dommageable.
Quelques techniques pour atténuer une attaque par force brute sur SSH:
Le principal risque est que la connexion initiale puisse être interceptée par un Man-In-The-Middle, afin qu'un attaquant puisse récupérer le mot de passe.
La première fois qu'un utilisateur se connecte à un serveur SSH, quelque chose de semblable au suivant s'affiche:
$ ssh scanme.nmap.org
The authenticity of Host 'scanme.nmap.org (45.33.32.156)' can't be established.
ECDSA key fingerprint is SHA256:8iz5L6iZxKJ6YONmad4oMbC+m/+vI9vx5C5f+qTTGDc.
Are you sure you want to continue connecting (yes/no)?
Maintenant, à moins que chaque utilisateur ne vérifie cette empreinte digitale pour s'assurer qu'il s'agit bien de votre serveur, il y a un risque que leur connexion ait été interceptée (par exemple, MITM sur leur réseau interceptant directement le trafic, ou un certain type de piratage DNS).
En effet, SSH est "Trust on First Use". Si vous vous êtes déjà connecté à cet hôte et que la clé change soudainement, le message suivant s'affiche à la place, avertissant l'utilisateur.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE Host IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA Host key has just been changed.
The fingerprint for the RSA key sent by the remote Host is
5c:9b:16:56:a6:cd:11:10:3a:cd:1b:a2:91:cd:e5:1c.
Please contact your system administrator.
Add correct Host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:1
RSA Host key for ras.mydomain.com has changed and you have requested strict checking.
Host key verification failed.
L'avertissement atténuera cette attaque pour les utilisateurs qui se sont déjà connectés depuis ce client particulier.
D'autres risques moins critiques de l'ouverture de SSH sur Internet sont qu'il existe de nombreux robots qui trouvent et tentent de se connecter à de tels serveurs. Si vous avez un mot de passe fort sur tous les comptes, le risque de compromis est très faible (j'entends par fort celui qui ne figurera certainement pas dans une liste de mots que l'attaquant peut utiliser ou créer). Les règles habituelles s'appliquent - par exemple, pas de réutilisation de mot de passe, mot de passe stocké en toute sécurité, etc. L'inconvénient est que les fichiers journaux s'accumuleront rapidement avec toutes les tentatives d'authentification reçues.
En ce qui concerne SSH lui-même dans n'importe quel mode d'authentification, car il s'agit d'un autre service, il existe une possibilité de découverte de vulnérabilités qui pourraient être exploitées automatiquement par de tels robots. Cependant, le risque de cela n'est pas plus grand que celui d'un serveur Web ou d'une application Web d'être exploité. Comme tout serveur avec des services publics, une bonne stratégie de gestion des vulnérabilités est recommandée.
Voir aussi cette réponse , la partie relative aux messages d'avertissement SSH et au risque de continuer, même avec l'authentification par clé publique.
J'ai entendu plusieurs fois à plusieurs reprises ne jamais laisser SSH avec un mot de passe ouvert sur Internet. Pourquoi est-ce si grave?
Je comprends que le mot de passe peut être forcé, mais que se passe-t-il s'il s'agit d'un mot de passe très solide qui prendrait des éons à se fissurer?
L'avantage très fort de la désactivation des connexions SSH par mot de passe est vraiment d'empêcher les comptes par défaut avec des mots de passe faibles ou les utilisateurs qui choisissent des mots de passe faibles d'être forcés par la force. À l'heure actuelle, vous ne disposez peut-être que de quelques comptes sans mots de passe faibles, mais quelque chose pourrait être installé à l'avenir, si ce n'est pas le cas. Plus vous avez de systèmes ou de complexité au fil du temps, plus le risque augmente.
Cas anecdotique: une de mes connaissances a perdu son serveur et tout ce qu'il contient parce qu'il a donné à un ami un compte avec le mot de passe de changeme qui n'a pas été modifié. Aucune sauvegarde à distance n'a été créée non plus, il a donc tout perdu.
Les clés SSH sont considérablement plus sécurisées par défaut. À moins que la génération de clés soit interrompue , le niveau de compromis le plus bas nécessite d'obtenir la clé des utilisateurs. Alors qu'avec les mots de passe, le niveau ne fait que deviner quand quelqu'un expose un mot de passe faible. Il s'agit de s'assurer que les futures défaillances humaines sont protégées.
Une autre chose à considérer est la possibilité de vulnérabilités (bien que connues depuis un certain temps ou jour zéro) dans le démon sshd lui-même, qui pourraient être exploitées par un attaquant. Pour atténuer cela, il est préférable d'ouvrir sshd uniquement aux utilisateurs travaillant à partir d'adresses IP connues auxquelles vous faites confiance, ou via un VPN, si possible.
Il existe plusieurs raisons différentes pour lesquelles il est plus sûr d'utiliser l'authentification par clé publique plutôt que l'authentification par mot de passe:
Étant donné que je déconseille d'utiliser l'authentification par mot de passe, je déconseillerai également de la laisser activée sur votre serveur ssh pour les raisons suivantes:
Si je comprends bien, une clé n'est pas si différente d'un mot de passe; c'est juste beaucoup, beaucoup plus long et donc plus difficile à casser. De plus, vous avez besoin d'un mot de passe sur le dessus.
Mais je voudrais également souligner qu'il est logique de n'autoriser que certaines adresses IP à se connecter même à votre port SSH. Cela diminue les fichiers journaux et il est généralement recommandé de n'autoriser l'accès (pas de connexion) à un service si nécessaire. Ainsi, par exemple, à une plage d'adresses IP de votre entreprise VPN . Mais ne comptez jamais là-dessus.
Le déplacement du port SSH est parfois suggéré, mais je n'y vois que peu d'avantages.
Aussi (hors sujet): n'autorisez jamais la connexion SSH pour root.