Jak zabezpieczyć logowanie do serwera za pomocą jednorazowych tokenów

dodał 2 czerwca 2017 o 07:21 w kategorii HowTo, Krypto  z tagami:
Jak zabezpieczyć logowanie do serwera za pomocą jednorazowych tokenów

Wielu zwykłym administratorom serwerów wystarcza możliwość logowania do SSH za pomocą loginu i hasła. Niektórzy używają też swojego klucza. My chcemy zaproponować inne ciekawe rozwiązanie – tokeny z aplikacji Google Authenticator.

W poprzednich artykułach opisywaliśmy w jaki sposób możemy udowodnić swoją tożsamość łącząc się do usługi SSH z wykorzystaniem kluczy publicznych oraz prywatnych. W tym artykule przedstawimy kolejny sposób na wzmocnienie procesu uwierzytelniania stosując uwierzytelnianie wielopoziomowe (ang. multi-factor authentication).

Artykuł pod patronatem Aruba Cloud

We współpracy z firmą ArubaCloud pokazaliśmy Wam, jak postawić swój serwer backupów, jak skonfigurować własny serwer VPN i podłączyć do niego komputer, telefony komórkowe oraz domowy ruter a także jak schować się przed cenzurą sieci i jak zacząć serwer zabezpieczać, jak postawić swój własny zdalny pulpitswój serwer WWWjak monitorować zmiany w plikachjak zablokować reklamy na komórce oraz jak skonfigurować bezpieczną kopię zapasową.

Jeśli nie macie jeszcze swojego własnego serwera, to jest to dobra okazja by się w taki wyposażyć. Aruba oferuje dwa miesiące korzystania ze swojego podstawowego serwera gratis – a po zakończeniu promocji będzie on Was kosztował zaledwie 4 złote miesięcznie. Instrukcję jak krok po kroku skorzystać z promocji i uruchomić swój serwer znajdziecie w tym artykule. Jeśli macie już swój serwer – to zapraszamy do lektury kolejnych akapitów.

Uwierzytelnianie

Uwierzytelnianie jest procesem udowadniania swojej tożsamości. Jednym z powszechnych sposobów uwierzytelniania jest podanie informacji, które znamy (ang. somehing you know) – zazwyczaj jest to nazwa użytkownika i hasło. Proces uwierzytelniania może wymagać od nas dodatkowych czynników, tj:
– czegoś co posiadamy (ang. something you have) – na przykład urządzenie z kodem uwierzytelniającym, token,
– czegoś unikatowego powiązanego z naszą osobą (ang. something you are), na przykład odcisk palca, głos, obraz siatkówki oka.

Dwuskładnikowe uwierzytelnianie

Często stosuje się dwuskładnikowe uwierzytelnianie (two-factor authentication, 2FA) czyli łączące dwie wyżej wymienione metody. Przykładem takiego użycia może być proces logowania przez protokół SSH: po podaniu poprawnego loginu (coś, co wiemy) zostaniemy poproszeni o podanie informacji z tokena (coś, co posiadamy). W niniejszym artykule pokażemy jak skonfigurować serwer w Aruba Cloud aby po nawiązaniu połączenia przez protokół SSH uwierzytelnić się za pomocą loginu, hasła oraz tokenu.

Urządzenie mobilne jako token

Przed rozpoczęciem konfiguracji serwera musimy zaopatrzyć się w aplikację, która będzie pełniła rolę naszego programowego tokenu. W tym celu skorzystamy z aplikacji „Google Authenticator”, dostępnej dla Androida oraz dla iOS. Aplikacja ta może przydać się także do zabezpieczenia konta Google, Twittera czy nawet Wykopu.

Konfiguracja serwera

Cały proces możecie obejrzeć na poniższym filmie, a pod nim znajdziecie wersję tekstową instrukcji.

Zanim przystąpisz do konfiguracji upewnij się, że na Twoim serwerze jest poprawnie ustawiony czas. Tokeny są powiązane z funkcją czasu.

1) Instalujemy repozytorium EPEL – w nim znajduje się wymagany pakiet – google-authenticator

2) Instalujemy pakiet google-authenticator z repozytorium EPEL:

3) Rekonfigurujemy PAM i wskazujemy bibliotekę pam_google_authenticator.so dopisując na końcu pliku /etc/pam.d/sshd następującą linię:

Słowo „nullok” na końcu linii oznacza, że metoda autoryzacji za pomocą tokenu jest opcjonalna. Użytkownicy, którzy nie mają wygenerowanych tokenów autoryzacyjnych wciąż będą mogli zalogować się na przykład za pomocą kluczy SSH.

4) Restartujemy usługę SSH

Tworzenie tokenu

1) Uruchamiamy polecenie google-authenticator z konta, które będzie wymagało dwuskładnikowego logowania. W naszym przypadku będzie to konto o loginie krystian:

W konsoli zostanie wygenerowany obraz QR. Jeśli napotkamy problemy ze zeskanowaniem kodu QR możemy odwiedzić adres www,  który został wygenerowany w domenie google.com.

Google Authenticator – programowy token uwierzytelniania dwuetapowego

Jak korzystać z 2FA?

Łącząc się do serwera Aruba Cloud za pomocą protokołu SSH zostaniemy poproszeni o podanie kodu jednorazowego:

Jak zatem widać, nie jest to szczególnie skomplikowane, a może w znaczący sposób podnieść bezpieczeństwo procesu logowania. Co jednak zrobić gdy zgubimy telefon lub nie mamy go akurat przy sobie? Jeśli utracimy urządzenie autoryzacyjne wciąż będziemy mogli zalogować się do konta korzystając z kodów pomocniczych. Kody te (’emergency scratch codes’) zostały wygenerowane podczas tworzenia tokenu i są zapisane w pliku /home/krystian/.google_authenticator (linie 8-12):

Warto je zapisać w bezpiecznym ale jednocześnie dostępnym miejscu by nie stracić możliwości połączenia z serwerem w krytycznym momencie. Łącząc się do usługi SSH możemy podać jeden ze zdefiniowanych kodów pomocniczych. Każdy kod możemy wykorzystać tylko raz – po zalogowaniu się kod pomocniczy jest usuwany z pliku .google_authenticator.

Oczywiście opisywana metoda dwuskładnikowego uwierzytelnienia jest jednym z wielu dostępnych wariantów – biorąc jednak pod uwagę fakt, że jego wdrożenie generuje jedynie koszt spędzonego nad nim czasu a poziom bezpieczeństwa rośnie, to rekomendujemy je wszystkim administratorom.

Dla pełnej przejrzystości – za przygotowanie oraz opublikowanie powyższego artykułu otrzymujemy wynagrodzenie.