Two-factor authentication (2FA)

11 maja 2023
Jakub Rojek Jakub Rojek
Photo by Onura Binaya on Unsplash (https://unsplash.com/photos/Uw_8vSroCSc)
Kategorie: Podstawy IT, Poradniki

O tym, że bezpieczeństwo danych i kont jest niezmiernie ważne, nie trzeba nikogo przekonywać, choć nie zaszkodzi co jakiś czas przypomnieć. Kwestią sporną jest natomiast sposób chronienia swojej własności. Niektórzy twierdzą, że nie mają nic ważnego do ukrycia i wystarczy im pojedyncze hasło. Inni zbroją się na wszelkie możliwe sposoby, szyfrując pliki na dysku, maile, a nawet posiadając osobny komputer do korzystania z banku. Wiadomo, że wszystko zależy od sytuacji i naszego poczucia bezpieczeństwa lub świadomości na temat możliwych zagrożeń - zupełnie inaczej podejdziemy do bezpieczeństwa przy okazji logowania się do serwisu z naszymi umowami, a inaczej do portalu z memami. Tym niemniej, pewne podstawowe zasady warto sobie wpoić, a jedną z nich jest włączenie dwuskładnikowego uwierzytelniania w większości miejsc.

W tym tekście opiszemy, czym jest ta technika, dlaczego powinniśmy z niej korzystać oraz jakie odmiany są do dyspozycji. Odmiany, ponieważ nie występuje ona tylko w jednej wersji, ale aż w trzech podstawowych, a niektórzy próbują wprowadzać rozwiązania towarzyszące i hybrydowe.

Czym jest 2FA?

Uwierzytelnianie dwuskładnikowe (ang. two-factor authentication, 2FA) jest sposobem logowania się do serwisu, który polega na potwierdzeniu swojej tożsamości są na dwa różne sposoby. Zwracam uwagę na "dwa różne sposoby" - nie polega to na podaniu hasła dwukrotnie lub użyciu dwóch różnych haseł wpisywanych w podobnym oknie. Żeby wyjaśnić, dlaczego to takie ważne, weźmy pod lupę trzy przykłady.

Na pewno wszyscy znamy osoby, które do wszystkiego posiadają jedno hasło lub ewentualnie kilka, ale będących wariacją tego pierwszego. Tacy ludzie tłumaczą to chęcią łatwiejszego zapamiętania swojego dostępu do serwisów, natomiast widocznie nie zakładają, że to hasło gdziekolwiek wycieknie. A przecież to się może zdarzyć każdemu - wpiszemy dane w nieodpowiednim miejscu, ktoś podejrzy nam przez ramię wciskane klawisze lub pomylimy pole i kod trafi do autouzupełniania w przeglądarce. A konsekwencje w tym przypadku mogą być tragiczne - znając nasz adres e-mail (co jest dość proste), atakujący może tym samym hasłem zalogować się wszędzie, łącznie z kontem pocztowym (umożliwiającym zmianę hasła w innych serwisach) czy bankowym. Chyba nie muszę opowiadać, jakie to będzie miało skutki.

Weźmy teraz przypadek osoby, która zdaje sobie sprawę z zagrożenia i ma różne hasła do każdego lub większości serwisów. Osobną kwestią jest siła tych haseł, ale przyjmijmy, że mają one rozsądną długość i zawierają duże litery, małe, cyfry oraz znaki specjalne. Jest bezpiecznie? Na pewno bardziej niż w poprzednim przykładzie, ale nadal hasło może nam wyciec przez naszą nieuwagę lub ktoś może zwyczajnie je zgadnąć, przeprowadzając tzw. atak brute force (próbując wszystkich kombinacji, ew. posiłkując się jakimś słownikiem). Oczywiście, jeśli włamie się w ten sposób do jednego serwisu, to można się jeszcze uratować, zmieniając tam nasz sekret po zauważeniu akcji. Ale jeśli ktoś odkryje nasze hasło do konta pocztowego, sprawa zaczyna robić się mniej zabawna, gdyż może zresetować hasła wszędzie indziej. A tworzenie osobnego konta pocztowego do wszystkich profili w Internecie jest - powiedzmy to sobie wprost - nierealne i "nieżyciowe".

Jednak załóżmy, że regularnie dbamy o nasze hasła i nie tylko je różnicujemy względem serwisów oraz usług, ale także co jakiś zmieniamy. Dbamy o to, aby nikt ich nie podpatrzył, wpisujemy je tylko na wyznaczonym komputerze oraz mamy nawyk czyszczenia cache'u w przeglądarce. Ale pamiętajmy, że jesteśmy tylko jedną stroną komunikacji - po drugiej jest serwis, do którego się logujemy i który nie zawsze może być równie dobrze zabezpieczony. To właśnie po włamaniach do baz danych często pojawiają się alerty dotyczące wycieku informacji. Na szczęście, większość usług haszuje hasła, co znakomicie utrudnia włamującemu ich odgadnięcie, ale nadal nie jest to niemożliwe.

Wszystkie te przypadki łączy jedno - jeśli ktoś zna nasz login (zwykle adres e-mail) oraz hasło, to może się za nas podać. Co więcej, trudno temu aktywnie przeciwdziałać i dowiedzieć się, że w tym momencie stajemy się ofiarą ataku. "Haker" (choć to słowo jest mocno na wyrost w tym przypadku) niczego innego nie potrzebuje. Oczywiście, więcej haseł do wpisania może podnieść poziom bezpieczeństwa, ale to wszystko jest na nic w momencie, kiedy ktoś ma dostęp do naszego komputera lub smartfona lub ma się dostatecznie dużo czasu, aby odgadnąć także drugi i kolejny sekret. Dlatego tak ważne jest, aby drugi stopień weryfikacji, który chcemy włączyć, wymagał skorzystania z innej drogi. To ta sama zasada, która wymaga wysłania zaszyfrowanego archiwum i hasła do niego dwiema różnymi metodami (np. mail i telefon).

Włączenie 2FA pozwala wybrać (naturalnie, w serwisach, które daną metodę implementują) jedną z trzech dróg dodatkowej weryfikacji - SMS, kody jednorazowe oraz tzw. U2F.

Krótkie wiadomości tekstowe (SMS)

Jest to najpowszechniejsza forma, do której wiele osób się przyzwyczaiło. Po wpisaniu hasła przez użytkownika serwis wysyła mu SMS-a z jednorazowym kodem do wpisania. Dopiero po wpisaniu tego ciągu znaków w aplikacji użytkownik staje się uwierzytelniony.

Ta forma dla wielu jest najprostsza do zrozumienia i najbardziej intuicyjna. Zwłaszcza, że wszyscy (lub prawie wszyscy) mają telefony komórkowe oraz zasięg, więc dostęp do SMS-ów jest bardzo powszechny. Z punktu widzenia użytkownika wydaje się to zatem najbardziej obiecującą formą potwierdzenia uwierzytelnienia, zwłaszcza że złodziej musiałby mieć dostęp do naszej komórki. Jednak - jak wszystko - metoda SMS-owa ma swoje wady.

Po pierwsze, wymaga podania swojego numeru telefonu w serwisie. Dla niektórych nie jest to żadna przeszkoda, gdyż i tak udostępniają dużo więcej, ale dla innych - potrzeba przełamania pewnej bariery, ponieważ numerem telefonu zwykle dzielimy się dużo mniej chętnie niż adresem e-mail. Niegdyś baliśmy się o jakieś głupie żarty w słuchawce, ale dzisiaj w ten sposób można trafić do bazy telemarketerów, oszustów, a czasem po prostu obawiać się zadzwonienia przez obsługę serwisów, bo nie każdy lubi rozmawiać przez telefon. Rozwiązaniem jest, oczywiście, drugi numer telefonu, przeznaczony tylko i wyłącznie do 2FA.

Po drugie, jest to stosunkowo droga forma dla twórców aplikacji. Wysłanie SMS-a przez bramki udostępniane przez wiele zewnęrznych firm nie jest darmowe i w przypadku ogromnej rzeszy użytkowników, którzy takie wiadomości mogą generować po kilka dziennie, koszt robi się stosunkowo duży. Swoją drogą, to właśnie prawdopodobnie jest powód, dlaczego w marcu 2023 r. Twitter decyzją Elona Muska zablokował tę formę dla użytkowników korzystających z serwisu za darmo - jedni powiedzą, że chodzi o bezpieczeństwo (o czym za chwilę), a drudzy, że o oszczędności. Skłaniałbym się ku drugiej wersji (zwłaszcza, że Musk swego czasu wyłączał usługi, aby zaoszczędzić na serwerach i zobaczyć, które są rzeczywiście potrzebne), aczkolwiek przyznaję, że PR-owo wygląda to na szukanie okazji na podreperowanie budżetu kosztem bezpieczeństwa użytkowników. Co nie do końca odpowiada prawdzie, gdy się bliżej temu przyjrzymy, ale wrażenie pozostaje.

Po trzecie, właśnie bezpieczeństwo. SMS-y nie są w pełni bezpieczne - mogą okazać się nieskuteczne w przypadku narażenia się na atak na kartę SIM, który jest jak najbardziej możliwy. Tym niemniej, nadal lepiej mieć włączone kody przez SMS niż nie posiadać żadnej formy 2FA.

Kody jednorazowe (OTP)

Drugi sposób dotyczy także "haseł", które są krótkotrwałe i możliwe do wykorzystania tylko raz (ang. one-time passwords, OTP), ale pomijają drogę SMS-ową. Jest to sposób znany klientom niektórych banków, gdzie udostępniane są karty kodów lub właśnie aplikacje generujące tokeny. Jak to działa?

Użytkownik najpierw musi zainstalować na telefonie aplikację uwierzytelniającą. Wybór jest dość szeroki - od najpopularniejszego Google Authenticatora poprzez Microsoft Authenticatora, aż do mniej "nośnych", ale nadal dobrych opcji w rodzaju LastPassa, Auth0, Twilio czy wielu innych. Większość z nich jest darmowa, niektóre posiadają też wersję desktopową i różnią się szczegółami, ale ich zasada działania pozostaje podobna.

Po instalacji użytkownik może sparować swoją aplikację z serwisami, do których chce się logować. Przykładowo, jeśli chcemy użyć tego do logowania do Mastodona, należy dodać nowe "konto" w Authenticatorze, a następnie w Mastodonie w ustawieniach wywołać kod QR. Wówczas telefonem skanujemy ten kod QR i od tego momentu aplikacja będzie generować nam kody jednorazowe ważne przez określony czas (po czym samoistnie je odświeżać, tworząc nowe zestawy numerów). Działa to identycznie, jak w przypadku SMS-ów, tylko właśnie nie dostajemy SMS-ów. Oprócz kodu QR można też skorzystać z kluczy konfiguracyjnych.

Jak widać, ta metoda jest bardzo podobna i - co więcej - nie wymaga nawet dostępu do Internetu. Wystarczy mieć zainstalowaną aplikację w telefonie, w której co pewien czas generowane są nowe kody dla sparowanych serwisów. Jeśli akurat potrzebujemy się zalogować lub potwierdzić jakąś operację - otwieramy aplikację i przepisujemy kod. Jest to darmowe (choć niektóre usługi oferują płatne funkcje), łatwe do zastosowania, a do tego tańsze od strony twórców serwisów.

Niestety, także tutaj pozostaje do rozwiązania problem przechwytywania kodów lub ich wyłuskiwania metodami socjotechnicznymi (tzw. phishing).

Klucz sprzętowy (U2F)

Dochodzimy do trzeciego, najbardziej bezpiecznej metody dwustopniowego uwierzytelniania, opartej o standard FIDO. Klucze sprzętowe U2F to zazwyczaj małe urządzenia przypominające pendrive'y, które umieszcza się w slocie USB komputera i w odpowiednim momencie aktywuje, wywołując wpisanie kodu. Nie ma tutaj zatem przechwytywania kodów czy ich generowania ich z zewnątrz, gdyż wymagane jest fizyczne posiadanie takich urządzeń. A są one zwykle przy właścicielu, dopięte do breloczka lub ukryte w bezpiecznym miejscu. Każdy egzemplarz posiada swój unikalny i zaszyfrowany kod dostępu i można w przybliżeniu uznać, że nie jest podrabialny.

Oczywiście, nie ma róży bez kolców - taki klucz kosztuje użytkownika trochę pieniędzy. W zależności od wersji i poziomu ochrony, cena zaczyna się od ok. 150 zł. Podobnie jak wcześniej omawiane aplikacje do OTP, także jeden egzemplarz może służyć do logowania w wielu różnych serwisach i nie trzeba posiadać osobnego urządzenia do każdej usługi. Pewnym problemem może być też pamiętanie o tym, aby nosić taki klucz ze sobą wszędzie tam, gdzie chcemy się zalogować do zabezpieczonej aplikacji, ale jeśli dopniemy go do kluczy, to nie powinniśmy specjalnie ucierpieć.

Ten sposób jest zatem najbardziej bezpieczny i przez to polecany przez takie serwisy branżowe, jak choćby Niebezpiecznika czy Zaufaną Trzecią Stronę. Kwota rzędu 150 zł za jeden klucz (choć warto mieć dwa, o czym za chwilę) jest naprawdę niewygórowana jak na chęć ochrony swojego konta przed niepowołanym dostępem w wielu serwisach. Możecie też sprawdzić, jaki klucz najbardziej pasuje do Waszych potrzeb na stronie producenta, a więc Yubico. Szerzej o tym sposobie możecie również poczytać na Sekuraku.

Inne sposoby

Warto zauważyć, że twórcy aplikacji od dawna znają ten problem i starają się przyciągnąć do siebie użytkowników także stawiając na bezpieczeństwo i pokazując swoje zaawansowanie w tym zakresie. Ogromna rzesza popularnych usług wspiera wcześniej wymienione sposoby, ale też dodaje swoje. Przykładem jest możliwość podania pomocniczego adresu e-mail czy wyświetlanie historii logowań, dzięki czemu użytkownik może się zorientować, czy ktoś nie próbował lub wręcz zdołał przywłaszczyć sobie konto.

A co, jeżeli w ogóle nie musielibyśmy wpisywać hasła? W tym momencie niektórzy wspomną o stosowaniu odcisku palca, rozpoznawania twarzy oraz skanowaniu tęczówki, a więc wszystko, co można umieścić pod hasłem biometrii. Wiele osób korzysta już z tych technologii, jednak inni mają obawy, choćby przed awarią sprzętu i brakiem możliwości zalogowania się na swoje konto mimo pełnych praw do tego (np. odcisk palca nie zostanie poprawnie porównany ze wzorcem). Niektórzy twórcy stosują też hasła jednorazowe wysyłane na adres e-mail, w związku z czym nie trzeba ustawiać swojego na stałe - to taka forma "wymuszonego" OTP.

A co jeśli zgubię narzędzie uwierzytelniające?

To wątpliwość, która niektórym spędza sen z powiek. Faktycznie, utrata telefonu lub klucza, a także zwykłe awarie sprzętowe są problemem, na który trzeba opracować rozwiązanie. Wiele serwisów oferuje tzw. kody zapasowe (ang. backup codes), z których można skorzystać w momencie, kiedy jest problem z SMS-ami lub aplikacją do OTP - należy je jednak wcześniej wygenerować i gdzieś zapisać. W przypadku kluczy sprzętowych warto zainwestować w podwójne urządzenie, z których drugi będzie stanowił właśnie taki backup. Wówczas jeden nosimy ze sobą, natomiast rezerwę pozostawiamy w bezpiecznym miejscu w domu.

Podsumowanie

Uwierzytelnianie dwuskładnikowe to dobry sposób na dodatkowe chronienie swoich kont w serwisach (i to nie tylko tych najbardziej drogocennych), a w przypadku ważniejszych osób lub usług biznesowych - wręcz warunek konieczny, aby nie zostać negatywnych bohaterem jakiegoś ataku. Jeśli tylko 2FA jest dostępne, polecamy je ustawić i korzystać, gdyż licho nie śpi i nigdy nie wiadomo, kiedy zabezpiecznie faktycznie okaże się potrzebne.

Pozdrawiam i dziękuję - Jakub Rojek.

Piszemy nie tylko artykuły na blogu, ale też aplikacje i dokumentację dla naszych klientów. Zobacz, z kim do tej pory współpracowaliśmy.

Komentarze

Wczytywanie komentarzy...

O autorze

Jakub Rojek

Główny programista i współwłaściciel Wilda Software, z wieloletnim doświadczeniem w tworzeniu i rozwoju oprogramowania, ale także w pisaniu tekstów na różnorakich blogach. Zaprawiony w boju analityk i architekt systemów IT. Jednocześnie absolwent Politechniki Poznańskiej i okazjonalny prowadzący zajęcia na tej uczelni. W wolnych chwilach oddaje się graniu w gry wideo (głównie w karcianki), czytaniu książek, oglądaniu futbolu amerykańskiego i e-sportu, odkrywaniu cięższej muzyki oraz wytykaniu innym błędów językowych.

Jakub Rojek