Dwustopniowa autoryzacja dla SSH

„Bezpieczna powłoka” SSH to protokół sieciowy służący do nawiązywania zabezpieczonego połączenia między hostami, standardowo na porcie 22 (który warto zmienić). Klienci SSH i serwery SSH są dostępne dla większości systemów operacyjnych. Wewnątrz SSH działa praktycznie każdy inny protokół sieciowy, co oznacza, że można zdalnie pracować na innym komputerze, przesyłać zasoby audio lub wideo przez zaszyfrowany kanał itp. Ponadto, przez proxy SOCKS na zdalnym hoście, można łączyć się z innymi hostami już z perspektywy tego zdalnego hosta.

Uwierzytelnienie odbywa się za pomocą hasła, ale programiści i administratorzy systemów tradycyjnie wykorzystują klucze SSH. Problem w tym, że klucz prywatny może zostać skradziony. Dodanie frazy hasła teoretycznie chroni przed kradzieżą klucza prywatnego, ale w praktyce przy forwardingu i cachowaniu kluczy mogą nadal być używane bez potwierdzenia. Uwierzytelnienie dwuskładnikowe rozwiązuje ten problem.

Jak wdrożyć uwierzytelnienie dwuskładnikowe

Programiści z firmy Honeycomb niedawno opublikowali szczegółową instrukcję, jak wdrożyć odpowiednią infrastrukturę po stronie klienta i serwera.

Instrukcja zakłada, że masz jakiś podstawowy host, otwarty w internecie (bastion). Chcesz łączyć się z tym hostem z laptopów lub komputerów przez internet i uzyskać dostęp do wszystkich innych urządzeń, które są za nim. 2FA gwarantuje, że przestępca nie będzie mógł tego zrobić, nawet jeśli uzyska dostęp do Twojego laptopa, na przykład instalując złośliwe oprogramowanie.

Pierwsza opcja — OTP

OTP to jednorazowe hasła cyfrowe, które w tym przypadku będą stosowane do uwierzytelniania SSH razem z kluczem. Programiści piszą, że to nie idealna opcja, ponieważ przestępca może uruchomić fałszywy bastion, przechwycić Twoje OTP i użyć go. Ale to lepsze niż nic.

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

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

Po stronie klienta instalowane jest dowolne aplikacja OTP: Google Authenticator, Authy, Duo, Lastpass, instalowane jest brew install oath-toolkit lub apt install oathtool openssl, następnie generowany jest losowy ciąg base16 (klucz). Konwertuje się go do formatu Base32, który jest używany przez mobilne autoryzatory, i importuje bezpośrednio do aplikacji.

W efekcie możesz połączyć się z bastionem i upewnić się, że teraz wymaga on nie tylko frazy hasła, ale także kodu OTP do autoryzacji:

➜ ssh -A bastion
Wprowadź frazę hasła dla klucza '[snip]': 
Jednorazowe hasło (OATH) dla '[user]': 
Witaj w Ubuntu 18.04.1 LTS...

Druga opcja — autoryzacja sprzętowa

W takim przypadku użytkownik nie musi co raz wprowadzać kodu OTP, ponieważ drugim czynnikiem staje się urządzenie sprzętowe lub biometryka.

Tutaj konfiguracja Chef jest nieco bardziej skomplikowana, a konfiguracja klientów zależy od systemu operacyjnego. Jednak po wykonaniu wszystkich czynności klienci na MacOS mogą potwierdzać autoryzację w SSH za pomocą frazy hasła i przyłożenia palca do czujnika (drugi czynnik).

Właściciele iOS i Android potwierdzają logowanie naciśnięciem jednego przycisku na smartfonie. To specjalna technologia od Krypt.co, która jest nawet bezpieczniejsza niż OTP.

Na Linux/ChromeOS istnieje opcja pracy z tokenami USB YubiKey. Oczywiście, przestępca może ukraść twój token, ale i tak nie zna frazy hasła.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster