Comment configurer l’authentification multifacteur pour SSH sur Ubuntu 14.04

introduction

Un "facteur d’authentification" est une information unique utilisée pour prouver que vous disposez des droits nécessaires pour effectuer une action, telle que la connexion à un système. Un canal d’authentification est la manière dont un système d’authentification fournit un facteur à l’utilisateur ou oblige celui-ci à répondre. Les mots de passe et les jetons de sécurité sont des exemples de facteurs d’authentification. les ordinateurs et les téléphones sont des exemples de canaux.

SSH utilise des mots de passe pour l’authentification par défaut, et la plupart des instructions de renforcement de SSH recommandent l’utilisation d’une clé SSH. Cependant, il ne s’agit toujours que d’un seul facteur. Si un mauvais acteur a compromis votre ordinateur, il peut également utiliser votre clé pour compromettre vos serveurs.

Pour lutter contre cela, dans ce tutoriel, nous allons configurer une authentification multi-facteurs. L’authentification multifactorielle (MFA) requiert plusieurs facteurs pour s’authentifier ou se connecter. Cela signifie qu’un mauvais acteur devrait compromettre plusieurs choses, comme votre ordinateur et votre téléphone, pour pouvoir entrer. Les différents types de facteurs sont souvent résumés comme suit:

  1. Quelque chose que vous * connaissez *, comme un mot de passe ou une question de sécurité

  2. Quelque chose que vous * avez *, comme une application d’authentification ou un jeton de sécurité

  3. Quelque chose que vous êtes, comme votre empreinte digitale ou votre voix

Un facteur commun est une application OATH-TOTP, telle que Google Authenticator. OATH-TOTP (mot de passe unique à authentification ouverte) est un protocole ouvert qui génère un mot de passe à usage unique, généralement un numéro à 6 chiffres recyclé toutes les 30 secondes.

Cet article explique comment activer l’authentification SSH à l’aide d’une application OATH-TOTP en plus d’une clé SSH. La connexion à votre serveur via SSH nécessite alors deux facteurs sur deux canaux, ce qui le rend plus sécurisé qu’un mot de passe ou une clé SSH seule.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Étape 1 - Installation de libpam-google-authentator

Dans cette étape, nous installerons et configurerons le PAM de Google.

PAM, qui signifie «Module d’authentification adaptable», est une infrastructure d’authentification utilisée sur les systèmes Linux pour authentifier un utilisateur. Comme Google a créé une application OATH-TOTP, ils ont également créé un PAM qui génère des TOTP et est entièrement compatible avec n’importe quelle application OATH-TOTP.

Tout d’abord, mettez à jour le cache du référentiel Ubuntu.

sudo apt-get update

Ensuite, installez le PAM.

sudo apt-get install libpam-google-authenticator

Avec le PAM installé, nous allons utiliser une application auxiliaire installée avec le PAM pour générer une clé TOTP pour l’utilisateur auquel vous souhaitez ajouter un deuxième facteur. Cette clé est générée utilisateur par utilisateur et non à l’échelle du système. Cela signifie que chaque utilisateur souhaitant utiliser une application d’authentification TOTP devra se connecter et exécuter l’application auxiliaire pour obtenir sa propre clé.

google-authenticator

Après avoir exécuté la commande, quelques questions vous seront posées. La première demande si les jetons d’authentification doivent être basés sur le temps.

Ce PAM permet d’utiliser des jetons temporels ou séquentiels. L’utilisation de tokens_sequential-based signifie que le code commence à un moment donné, puis incrémente le code après chaque utilisation. Utiliser des jetons basés sur le temps signifie que le code change de manière aléatoire au bout d’un certain temps. Nous nous en tiendrons au temps, car c’est ce que les applications telles que Google Authenticator prévoient, alors répondez oui.

Do you want authentication tokens to be time-based (y/n)

Après avoir répondu à cette question, de nombreuses sorties défileront, y compris un grand code QR. Assurez-vous d’enregistrer la clé secrète, le code de vérification et les codes de grattage d’urgence dans un endroit sûr, comme un gestionnaire de mots de passe.

À ce stade, utilisez votre application d’authentification sur votre téléphone pour numériser le code QR ou saisissez manuellement la clé secrète. Si le code QR est trop volumineux pour être numérisé, vous pouvez utiliser l’URL au-dessus du code QR pour obtenir une version plus petite. Une fois que cela est ajouté, vous verrez un code à six chiffres qui change toutes les 30 secondes dans votre application.

Les questions restantes informent le PAM de son fonctionnement. Nous allons les parcourir un à un.

Do you want me to update your "~/.google_authenticator" file (y/n)

En gros, cela écrit la clé et les options dans le fichier + .google_authenticator +. Si vous dites non, le programme se ferme et rien n’est écrit, ce qui signifie que l’authentificateur ne fonctionnera pas.

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

En répondant oui ici, vous empêchez une attaque par rejeu en faisant expirer chaque code immédiatement après utilisation. Cela empêche un attaquant de capturer un code que vous venez d’utiliser et de vous connecter avec.

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

Répondre oui ici permet d’avoir jusqu’à 8 codes valides dans une fenêtre mobile de quatre minutes. En répondant non, nous limitons le nombre de codes valides à 3 dans une fenêtre mobile de 1:30 minute. Sauf si vous rencontrez des problèmes avec la fenêtre d'1h30, no est le choix le plus sûr.

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

La limitation de débit signifie qu’un attaquant distant ne peut tenter qu’un certain nombre de conjectures avant d’être bloqué. Si vous n’avez pas encore configuré la limitation de débit directement dans SSH, le faire maintenant constitue une excellente technique de durcissement.

Étape 2 - Configuration d’OpenSSH

La prochaine étape consiste maintenant à configurer SSH pour utiliser votre clé TOTP. Nous devrons informer SSH du PAM, puis configurer SSH pour l’utiliser.

Tout d’abord, ouvrez le fichier de configuration sshd pour l’éditer en utilisant + nano + ou votre éditeur de texte préféré.

sudo nano /etc/pam.d/sshd

Ajoutez la ligne suivante au bas du fichier.

. . .
# Standard Un*x password updating.
@include common-password

Le mot «nullok» à la fin indique à PAM que cette méthode d’authentification est facultative. Cela permet aux utilisateurs sans clé OATH-TOTP de toujours se connecter à l’aide de leur clé SSH. Une fois que tous les utilisateurs ont une clé OATH-TOTP, vous pouvez supprimer «nullok» sur cette ligne pour la rendre obligatoire.

Enregistrez et fermez le fichier.

Ensuite, nous allons configurer SSH pour prendre en charge ce type d’authentification. Ouvrez le fichier de configuration SSH pour le modifier.

sudo nano /etc/ssh/sshd_config

Recherchez + ChallengeResponseAuthentication et définissez sa valeur sur` + yes`.

. . .
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication
. . .

Enregistrez et fermez le fichier, puis redémarrez SSH pour recharger les fichiers de configuration.

sudo service ssh restart

Étape 3 - Sensibilisation de SSH à MFA

Dans cette étape, nous allons tester si la clé SSH fonctionne.

Commencez par ouvrir un autre terminal et essayez maintenant d’utiliser SSHing sur le serveur. Vous remarquerez que vous vous êtes connecté à cette deuxième session en utilisant votre clé SSH, sans entrer votre code de vérification ou votre mot de passe. En effet, une clé SSH remplace toutes les autres options d’authentification par défaut. Nous devons dire à SSH d’utiliser le code TOTP et d’utiliser votre clé SSH à la place de votre mot de passe.

Ouvrez à nouveau le fichier de configuration sshd.

sudo nano /etc/ssh/sshd_config

Localisez la ligne + PasswordAuthentication +, décomprimez-la en supprimant le caractère + # + en tête de la ligne et mettez à jour sa valeur sur + no +. Cela indique à SSH de ne pas demander de mot de passe.

. . .
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication
. . .

Ensuite, ajoutez la ligne suivante au bas du fichier. Cela indique à SSH les méthodes d’authentification requises.

. . .
UsePAM yes

Enregistrez et fermez le fichier.

Ensuite, ouvrez le fichier de configuration PAM sshd.

sudo nano /etc/pam.d/sshd

Recherchez la ligne + @ include common-auth + et commentez-la en ajoutant un caractère + # + en tant que premier caractère de la ligne. Cela indique à PAM de ne pas demander de mot de passe. nous avions précédemment dit à SSH de ne pas utiliser + sshd_config +.

. . .
# Standard Un*x authentication.
@include common-auth
. . .

Enregistrez et fermez le fichier, puis redémarrez SSH.

sudo service ssh restart

Essayez maintenant de vous connecter à nouveau au serveur. Vous devriez voir que vous vous êtes authentifié partiellement avec votre clé SSH, puis que votre code de vérification vous a été demandé. Il ressemblera à ceci:

Exemple de sortie de connexion

ssh @

Authenticated with partial success.
Verification code:

Entrez votre code de vérification à partir de votre application OAUTH-TOTP et vous vous connecterez au serveur. Vous avez maintenant MFA activé pour SSH!

Conclusion

Comme avec tout système que vous renforcez et sécurisez, vous devenez responsable de la gestion de cette sécurité. Dans ce cas, cela signifie ne pas perdre votre clé SSH ou votre clé secrète TOTP. Cependant, il arrive parfois que des choses se produisent et que vous perdiez le contrôle des touches pour vous permettre d’entrer.

Voici quelques suggestions pour retrouver l’accès à votre serveur:

  • * Si vous perdez ou n’avez pas accès à votre application TOTP, * utilisez vos codes de récupération comme code de vérification. Cela se produit si vous avez un nouveau téléphone et que vous avez oublié d’exporter vos clés de l’ancien, ou si votre téléphone est à court d’énergie.

  • * Si vous perdez votre clé secrète et la sauvegarde, * utilisez la console via le panneau de commande DigitalOcean pour vous connecter. Ensuite, renommez ou supprimez le fichier + ~ / .google_authenticator +. Ceci garantira que PAM n’est pas au courant de votre configuration et ne vous demandera pas de code. Assurez-vous que «+ / etc / pam.d / sshd +» a toujours «nullok» ajouté, comme à l’étape 2; Si vous changez cela, assurez-vous de redémarrer SSH.

  • * Si vous perdez votre clé SSH, * utilisez à nouveau la console pour vous connecter et supprimez votre ancien public de + ~ / .ssh / allowed_hosts +. Ensuite, vous pouvez soit la remplacer par une nouvelle clé.

En disposant de deux facteurs (clé SSH + jeton MFA) sur deux canaux (votre ordinateur et votre téléphone), il est pratiquement impossible pour un agent extérieur de forcer la pénétration dans votre machine via SSH, ce qui accroît considérablement la sécurité de votre ordinateur. votre machine.