Comment configurer l'authentification à deux facteurs sur un Raspberry Pi
Le Raspberry Pi est devenu un outil omniprésent, ce qui le rend malheureusement une cible attrayante pour les acteurs malveillants et les cybercriminels. Nous allons explorer comment renforcer la sécurité de votre Pi en mettant en place une authentification à double facteur.
L'ascension fulgurante du Raspberry Pi
Le Raspberry Pi est un ordinateur de type carte mère unique. Lancé en 2012 au Royaume-Uni, il avait pour vocation d'encourager les jeunes à expérimenter, créer et apprendre la programmation. Sa forme initiale était celle d'une carte de la taille d'une carte de crédit, alimentée par un simple chargeur de téléphone.
Il offre une sortie HDMI, des ports USB, une connectivité réseau et fonctionne sous Linux. La gamme s'est ensuite enrichie de versions encore plus compactes, conçues pour être intégrées à divers produits ou pour fonctionner comme des systèmes "headless". Les prix oscillent entre 5 $ pour le modèle minimaliste Pi Zero, et 75 $ pour le plus performant Pi 4 B / 8 Go.
Son succès est indéniable, avec plus de 30 millions d'unités vendues à travers le globe. Les passionnés ont réalisé des projets incroyables et inspirants, comme envoyer un Pi aux confins de l'espace à bord d'un ballon.
Cependant, la popularité croissante de cette plateforme attire inévitablement l'attention des cybercriminels. Il est alarmant de constater le nombre de Pi qui fonctionnent encore avec le nom d'utilisateur et le mot de passe par défaut. Si votre Pi est accessible publiquement via Internet via le protocole Secure Shell (SSH), il est primordial de le sécuriser.
Même si votre Pi ne contient pas de données ou de logiciels précieux, il est crucial de le protéger. En effet, votre Pi pourrait servir de porte d'entrée pour accéder à votre réseau. Une fois qu'un acteur malveillant a réussi à infiltrer un réseau, il ciblera les autres appareils qui l'intéressent réellement.
Authentification à double facteur : un rempart supplémentaire
L'authentification, ou l'accès à un système, nécessite un ou plusieurs facteurs. Ces facteurs sont classés de la manière suivante :
- Quelque chose que vous savez : tel qu'un mot de passe ou une phrase secrète.
- Quelque chose que vous avez : tel qu'un téléphone portable, un jeton physique ou un dongle.
- Quelque chose que vous êtes : une donnée biométrique, telle qu'une empreinte digitale ou une analyse rétinienne.
L'authentification multi-facteurs (MFA) exige un mot de passe combiné avec un ou plusieurs éléments issus des autres catégories. Dans notre cas, nous utiliserons un mot de passe ainsi qu'un téléphone portable équipé d'une application d'authentification Google, et le Pi sera configuré avec un module d'authentification Google.
Une application mobile est jumelée à votre Pi grâce à la numérisation d'un code QR. Cela permet de transmettre des informations initiales à votre téléphone à partir du Pi, garantissant ainsi que leurs algorithmes de génération de codes produisent les mêmes codes de manière simultanée. Ces codes sont appelés mots de passe à usage unique basés sur le temps (TOTP).
Lorsqu'une requête de connexion est envoyée, votre Pi génère un code. Vous utilisez l'application d'authentification sur votre téléphone pour visualiser le code actuel. Votre Pi vous demandera alors votre mot de passe ainsi que votre code d'authentification. Ces deux éléments doivent être corrects pour que la connexion soit autorisée.
Configuration du Pi
Si vous accédez habituellement à votre Pi via SSH, il s'agit probablement d'un système "headless". Nous effectuerons donc la configuration via une connexion SSH.
Pour plus de sécurité, il est préférable d'établir deux connexions SSH : une pour la configuration et les tests, et l'autre comme filet de sécurité. Ainsi, si vous vous retrouvez accidentellement bloqué hors de votre Pi, la deuxième connexion SSH reste active. Les modifications des paramètres SSH n'affectent pas les connexions en cours, vous pouvez donc utiliser la seconde pour annuler les modifications et corriger toute situation problématique.
Si, par malheur, vous vous retrouvez complètement bloqué via SSH, vous avez toujours la possibilité de connecter votre Pi à un écran, un clavier et une souris, puis de vous connecter via une session normale. Autrement dit, vous avez toujours une solution pour vous connecter, à condition que votre Pi puisse être relié à un écran. Si ce n'est pas le cas, il est fortement recommandé de laisser la connexion SSH de sécurité ouverte tant que vous n'avez pas vérifié que l'authentification à double facteur fonctionne correctement.
La solution ultime consiste bien sûr à réinstaller le système d'exploitation sur la carte micro SD du Pi, mais nous essaierons de l'éviter.
Tout d'abord, nous devons établir nos deux connexions avec le Pi. Les deux commandes sont de la forme suivante :
ssh pi@nom_de_votre_pi.local
Le nom de ce Pi est "nom_de_votre_pi", mais vous devrez saisir le nom du vôtre. Si vous avez modifié le nom d'utilisateur par défaut, utilisez également celui-ci ; par défaut, il s'agit de "pi".
Par mesure de sécurité, saisissez cette commande deux fois dans deux fenêtres de terminal différentes, afin d'avoir deux connexions à votre Pi. Ensuite, réduisez l'une d'elles afin qu'elle ne vous gêne pas et que vous ne la fermiez pas accidentellement.
Après la connexion, vous verrez le message de bienvenue. L'invite affichera le nom d'utilisateur (dans ce cas, "pi"), et le nom du Pi (dans ce cas, "nom_de_votre_pi").
Vous devez modifier le fichier "sshd_config". Nous le ferons dans l'éditeur de texte nano :
sudo nano /etc/ssh/sshd_config
Parcourez le fichier jusqu'à ce que vous voyiez la ligne suivante :
ChallengeResponseAuthentication no
Remplacez "no" par "yes".
Appuyez sur Ctrl + O pour enregistrer vos modifications dans nano, puis sur Ctrl + X pour fermer le fichier. Utilisez la commande suivante pour redémarrer le démon SSH :
sudo systemctl restart ssh
Vous devez installer l'authentificateur Google, qui est une bibliothèque Module d'authentification enfichable (PAM). L'application (SSH) fera appel à l'interface Linux PAM, qui trouvera le module PAM approprié pour traiter le type d'authentification demandé.
Saisissez la commande suivante :
sudo apt-get install libpam-google-authenticator
Installation de l'application mobile
L'application Google Authenticator est disponible pour iPhone et Android, installez simplement la version adaptée à votre téléphone portable. Vous pouvez également utiliser Authy ou d'autres applications prenant en charge ce type de code d'authentification.
Configuration de l'authentification à double facteur
Dans le compte que vous utiliserez pour vous connecter au Pi via SSH, exécutez la commande suivante (n'incluez pas le préfixe sudo) :
google-authenticator
Il vous sera demandé si vous souhaitez que les jetons d'authentification soient basés sur le temps ; tapez Y, puis appuyez sur Entrée.
Un code QR (Quick Response) est généré, mais il peut apparaître brouillé car sa largeur dépasse la fenêtre de terminal standard de 80 colonnes. Élargissez la fenêtre pour pouvoir visualiser le code.
Vous verrez également des codes de sécurité sous le code QR. Ces derniers sont enregistrés dans un fichier nommé ".google_authenticator", mais il est conseillé d'en faire une copie dès maintenant. Si jamais vous perdez l'accès aux codes TOTP (par exemple en cas de perte de votre téléphone), ces codes pourront vous servir pour vous authentifier.
Vous devrez répondre à quatre questions, la première étant :
Do you want me to update your "/home/pi/.google_authenticator" file? (y/n)
Tapez Y, puis appuyez sur Entrée.
La question suivante vous demande si vous souhaitez interdire plusieurs utilisations du même code dans un intervalle de 30 secondes.
Tapez Y, puis appuyez sur Entrée.
La troisième question vous demande si vous souhaitez élargir la fenêtre d'acceptation des jetons TOTP.
Tapez N pour répondre à cette question, puis appuyez sur Entrée.
La dernière question est la suivante : "Voulez-vous activer la limitation de débit ?"
Tapez Y, puis appuyez sur Entrée.
Vous êtes de nouveau à l'invite de commande. Si nécessaire, élargissez la fenêtre du terminal et/ou faites défiler vers le haut afin de pouvoir visualiser entièrement le code QR.
Sur votre téléphone portable, ouvrez l'application d'authentification, puis appuyez sur le signe plus (+) en bas à droite de l'écran. Sélectionnez "Scanner un code QR", puis scannez le code QR qui s'affiche dans la fenêtre du terminal.
Une nouvelle entrée, portant le nom d'hôte du Pi, apparaîtra dans l'application d'authentification, accompagnée d'un code TOTP à six chiffres. Celui-ci est présenté sous forme de deux groupes de trois chiffres pour faciliter la lecture, mais vous devrez le saisir sans espace comme un nombre à six chiffres.
Un cercle animé à côté du code indique la durée de validité du code : un cercle complet équivaut à 30 secondes, un demi-cercle à 15 secondes, etc.
Finalisation du processus d'authentification
Il nous reste un fichier à modifier. Nous devons indiquer à SSH quel module d'authentification PAM utiliser :
sudo nano /etc/pam.d/sshd
Saisissez les lignes suivantes en haut du fichier :
#2FA auth required pam_google_authenticator.so
Vous pouvez également déterminer le moment où le code TOTP vous sera demandé :
- Après avoir saisi votre mot de passe : saisissez les lignes précédentes sous "@include common-auth", comme indiqué dans l'image ci-dessus.
- Avant de saisir votre mot de passe : saisissez les lignes précédentes au-dessus de "@include common-auth".
Notez les traits de soulignement (_) utilisés dans "pam_google_authenticator.so", contrairement aux tirets (-) utilisés précédemment avec la commande apt-get pour installer le module.
Appuyez sur Ctrl + O pour enregistrer les modifications dans le fichier, puis sur Ctrl + X pour fermer l'éditeur. Nous devons redémarrer SSH une dernière fois, puis nous aurons terminé :
sudo systemctl restart ssh
Fermez cette connexion SSH, mais laissez l'autre connexion SSH de sécurité ouverte jusqu'à ce que nous ayons vérifié l'étape suivante.
Assurez-vous que l'application d'authentification est ouverte et prête sur votre téléphone portable, puis ouvrez une nouvelle connexion SSH au Pi :
ssh pi@nom_de_votre_pi.local
Vous devriez être invité à saisir votre mot de passe, puis le code. Tapez le code affiché sur votre téléphone portable, sans aucun espace entre les chiffres. Comme pour votre mot de passe, il n'apparaît pas à l'écran.
Si tout se déroule comme prévu, vous devriez être autorisé à vous connecter au Pi ; sinon, utilisez votre connexion SSH de sécurité pour revoir les étapes précédentes.
La prudence est de mise
Cette configuration rend votre connexion au Raspberry Pi plus sécurisée qu'auparavant, mais aucune sécurité n'est infaillible à 100%. Des méthodes existent pour contourner l'authentification à double facteur. Ces méthodes reposent sur l'ingénierie sociale, les attaques de l'homme du milieu et de l'homme au point de terminaison, le piratage de cartes SIM et d'autres techniques sophistiquées que nous n'aborderons pas ici.
Alors, pourquoi se donner tant de mal si ce n'est pas parfait ? Eh bien, c'est la même raison pour laquelle vous verrouillez votre porte d'entrée lorsque vous sortez, même si certains sont capables de crocheter les serrures – la plupart ne le peuvent pas.