Uwierzytelnianie dwuskładnikowe dla SSH

„Secure Shell” SSH to protokół sieciowy służący do ustanawiania bezpiecznego połączenia między hostami, standardowo przez port 22 (który lepiej zmienić). Klienci i serwery SSH są dostępne dla większości systemów operacyjnych. Prawie każdy inny protokół sieciowy działa w ramach SSH, to znaczy można pracować zdalnie na innym komputerze, przesyłać strumień audio lub wideo zaszyfrowanym kanałem itp. Oprócz, za pośrednictwem serwera proxy SOCKS na zdalnym hoście możesz łączyć się z innymi hostami w imieniu tego zdalnego hosta.

Uwierzytelnianie odbywa się za pomocą hasła, ale programiści i administratorzy systemów tradycyjnie używają kluczy SSH. Problem w tym, że klucz prywatny może zostać skradziony. Dodanie hasła teoretycznie chroni przed kradzieżą klucza prywatnego, ale w praktyce przy przekazywaniu i buforowaniu kluczy można nadal używać bez potwierdzenia. Uwierzytelnianie dwuskładnikowe rozwiązuje ten problem.

Jak wdrożyć uwierzytelnianie dwuskładnikowe

Niedawno opublikowali programiści z Honeycomb szczegółowe instrukcje, jak wdrożyć odpowiednią infrastrukturę na kliencie i serwerze.

W instrukcji założono, że masz określony podstawowy host otwarty do Internetu (bastion). Chcesz połączyć się z tym hostem z laptopów lub komputerów przez Internet i uzyskać dostęp do wszystkich innych urządzeń znajdujących się za nim. 2FA gwarantuje, że osoba atakująca nie będzie mogła zrobić tego samego, nawet jeśli uzyska dostęp do Twojego laptopa, na przykład instalując złośliwe oprogramowanie.

Pierwsza opcja to OTP

OTP – jednorazowe hasła cyfrowe, które w tym przypadku wraz z kluczem posłużą do uwierzytelnienia SSH. Twórcy piszą, że nie jest to idealna opcja, ponieważ osoba atakująca może podnieść fałszywy bastion, przechwycić Twoje OTP i wykorzystać je. Ale lepsze to niż nic.

W tym przypadku po stronie serwera w konfiguracji Chef zapisywane są następujące linie:

  • metadata.rb
  • attributes/default.rb (od attributes.rb)
  • files/sshd
  • recipes/default.rb (skopiuj z recipe.rb)
  • templates/default/users.oath.erb

Po stronie klienta instalowana jest dowolna aplikacja OTP: zainstalowany Google Authenticator, Authy, Duo, Lastpass brew install oath-toolkit lub apt install oathtool openssl, następnie generowany jest losowy ciąg znaków (klucz) base16. Jest on konwertowany do formatu Base32 używanego przez mobilne uwierzytelniacze i importowany bezpośrednio do aplikacji.

W rezultacie możesz połączyć się z Bastionem i zobaczyć, że wymaga on teraz nie tylko hasła, ale także kodu OTP do uwierzytelnienia:

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

Drugą opcją jest uwierzytelnianie sprzętowe

W takim przypadku użytkownik nie musi za każdym razem wpisywać kodu OTP, ponieważ drugim czynnikiem jest urządzenie sprzętowe lub dane biometryczne.

Tutaj konfiguracja Chefa jest nieco bardziej skomplikowana, a konfiguracja klienta zależy od systemu operacyjnego. Jednak po wykonaniu wszystkich kroków klienci korzystający z systemu MacOS mogą potwierdzić uwierzytelnienie w SSH za pomocą hasła i przykładając palec do czujnika (drugi czynnik).

Właściciele iOS i Androida potwierdzają logowanie poprzez naciśnięcie jednego przycisku na smartfonie. Jest to specjalna technologia firmy Krypt.co, która jest jeszcze bezpieczniejsza niż OTP.

W systemie Linux/ChromeOS istnieje możliwość pracy z tokenami USB YubiKey. Oczywiście atakujący może ukraść Twój token, ale nadal nie zna hasła.

Źródło: www.habr.com

Dodaj komentarz