Authentification à deux facteurs pour SSH

«Secure Shell» SSH est un protocole réseau pour établir une connexion sécurisée entre les hôtes, standard sur le port 22 (qui est préférable de changer). Les clients SSH et les serveurs SSH sont disponibles pour la plupart des systèmes d'exploitation. Presque tous les autres protocoles réseau fonctionnent à l'intérieur de SSH, c'est-à-dire que vous pouvez travailler à distance sur un autre ordinateur, transmettre un flux audio ou vidéo sur un canal crypté, etc. De plus, via les proxys SOCKS sur un hôte distant, vous pouvez vous connecter à d'autres hôtes au nom de cet hôte distant.

L'authentification a lieu avec un mot de passe, mais les développeurs et les administrateurs système utilisent traditionnellement les clés SSH. Le problème est que la clé secrète peut être volée. L'ajout d'une phrase secrète protège théoriquement contre le vol de la clé secrète, mais en pratique, lors du transfert et de la mise en cache des clés, elles peuvent toujours être utilisées sans confirmation . L'authentification à deux facteurs résout ce problème.

Comment implémenter l'authentification à deux facteurs


Les développeurs Honeycomb ont récemment publié des instructions détaillées sur la façon de mettre en œuvre l'infrastructure appropriée sur le client et le serveur.

L'instruction suppose que vous avez un certain hôte de base ouvert sur Internet (bastion). Vous souhaitez vous connecter à cet hôte à partir d'ordinateurs portables ou d'ordinateurs via Internet et accéder à tous les autres appareils qui se trouvent derrière. 2FA garantit qu'un attaquant ne peut pas faire de même même s'il a accès à votre ordinateur portable, par exemple en installant un malware.

La première option est OTP


OTP - mots de passe numériques à usage unique, qui dans ce cas seront utilisés pour l'authentification SSH avec la clé. Les développeurs écrivent que ce n'est pas une option idéale, car un attaquant peut prendre un faux bastion, intercepter votre OTP et l'utiliser. Mais c'est mieux que rien.

Dans ce cas, les lignes suivantes sont écrites dans la configuration Chef côté serveur:

  • metadata.rb
  • attributes/default.rb (à partir de attributes.rb )
  • files/sshd
  • recipes/default.rb (copie de la recipe.rb )
  • templates/default/users.oath.erb

Toute application OTP est installée côté client: Google Authenticator, Authy, Duo, Lastpass, brew install oath-toolkit ou apt install oathtool openssl , puis une chaîne aléatoire de base16 (clé) est générée. Il est converti au format Base32, utilisé par les authentificateurs mobiles, et importé directement dans l'application.

En conséquence, vous pouvez vous connecter au bastion et vous assurer qu'il nécessite désormais non seulement une phrase secrète, mais également un code OTP pour l'authentification:

 ➜ ssh -A bastion Enter passphrase for key '[snip]': One-time password (OATH) for '[user]': Welcome to Ubuntu 18.04.1 LTS... 

Deuxième option - Authentification matérielle


Dans ce cas, l'utilisateur n'est pas obligé de saisir un code OTP à chaque fois, car le deuxième facteur est le périphérique matériel ou la biométrie.

Ici, la configuration de Chef est un peu plus compliquée et la configuration des clients dépend du système d'exploitation. Mais après avoir terminé toutes les étapes, les clients sur MacOS peuvent confirmer l'authentification dans SSH en utilisant une phrase secrète et en appliquant un doigt sur le capteur (deuxième facteur).

Les propriétaires d'iOS et d'Android confirment l'entrée en appuyant sur un seul bouton du smartphone . Il s'agit d'une technologie spéciale de Krypt.co, qui est encore plus sûre que OTP.

Sous Linux / ChromeOS, il existe une option pour travailler avec les jetons USB YubiKey. Bien sûr, un attaquant peut voler votre jeton, mais il ne connaît toujours pas la phrase secrète.





Source: https://habr.com/ru/post/fr448970/


All Articles