25/10/2018

Autoryzacja dwuetapowa przy użyciu SMS-ów nie jest bezpieczna – poznaj inne możliwości

Prywatność

Początkowo z koncepcji autoryzacji dwuetapowej korzystali tylko miłośnicy technologii, jednak po kilku latach weszła ona do powszechnego użytku. Jednak w dużej mierze ogranicza się ona do przesyłania haseł jednorazowych w SMS-ach. Niestety, nie jest to najbardziej niezawodna metoda. A poniżej wyjaśniam, dlaczego:

  • Jeśli włączona jest opcja wyświetlania powiadomień na zablokowanym ekranie, hasła wysyłane przez SMS można z łatwością odczytać.
  • Nawet jeśli powiadomienia są wyłączone, ktoś może wyjąć kartę SIM z urządzenia i umieścić ją w innym smartfonie, zyskując w ten sposób dostęp do wiadomości SMS zawierających hasła.
  • Wiadomości SMS z hasłami mogą zostać przechwycone przez ukrytego w smartfonie trojana.
  • Korzystając z różnych podstępnych taktyk (perswazja, przekupstwo itp.), przestępcy mogą wyłudzić od operatora mobilnego nową kartę SIM z numerem telefonu ofiary. Wówczas wiadomości SMS będą przychodziły na nową kartę, a telefon ofiary zostanie odłączony od sieci.
  • Wiadomości SMS zawierające hasła mogą zostać przechwycone poprzez podstawową lukę w protokole SS7 używanym do przesyłania wiadomości.

Warto zauważyć, że ta nawet najbardziej zawansowana technicznie i pracochłonna metoda kradzieży haseł z wiadomości SMS (eksploatacja luki SS7) była już wykorzystywane w praktyce. Pozostałe przypadki to dla cyberprzestępców codzienna rutyna. Wobec tego mamy do czynienia nie z hipotetycznym, ale prawdziwym zagrożeniem.

Ogólnie hasła SMS nie są zbyt bezpieczne, a czasami są nawet bardzo niebezpieczne. Dlatego warto poszukiwać alternatyw, jeśli chodzi o autoryzację dwuetapową.

Kody jednorazowe w pliku lub na kartce

Najprostszym sposobem zastąpienia haseł jednorazowych w wysyłanych wiadomościach SMS jest skorzystanie z… haseł jednorazowych, jednak przygotowanych zawczasu. Jest to całkiem niezła opcja, zwłaszcza w przypadku serwisów, do których logujesz się stosunkowo rzadko. Metoda ta może całkiem dobrze sprawdzać się nawet w przypadku starego dobrego Facebooka, zwłaszcza jako plan zapasowy.

Zasada działania jest dosyć prosta: na żądanie użytkownika serwis generuje i wyświetla kilkadziesiąt kodów jednorazowego użytku, które mogą później zostać użyte do autoryzacji logowania się. Kody te mogą zostać wydrukowane lub zapisane i umieszczone w bezpiecznym miejscu. Jeszcze prostszym rozwiązaniem jest zapisanie ich w postaci zaszyfrowanej notatki w menedżerze haseł.

Nie ma wielkiego znaczenia, czy kody te są przechowywane w postaci fizycznej, czy w formacie cyfrowym. Najważniejsze jest to, aby (1) nie zgubić ich i (2) uchronić je przed kradzieżą.

Można również wykorzystać specjalną aplikacje

Oprócz wspomnianych wyżej plusów wygenerowanie zestawu haseł jednorazowych ma również swoje minusy: wcześniej czy później wszystkie zostaną wykorzystane, a użytkownik może nie mieć do dyspozycji kolejnego kodu w najmniej odpowiednim momencie. Na szczęście jest lepszy sposób: kody jednorazowe można generować na bieżąco przy użyciu małej i (zwykle) nieskomplikowanej aplikacji autoryzującej.

Jak działają aplikacje autoryzujące

Korzystanie z aplikacji autoryzacji dwuetapowej nie jest trudne. W tym celu:

  • Zainstaluj na smartfonie aplikację.
  • Przejdź do ustawień bezpieczeństwa serwisu, w którym chcesz używać tej aplikacji.
  • Wybierz dwuetapową autoryzację (przy założeniu, że taka opcja istnieje). Usługa powinna wyświetlić kod QR, który można zeskanować bezpośrednio przez aplikację.
  • Zeskanuj kod przy użyciu aplikacji, co rozpocznie generowanie nowego kodu jednorazowego co 30 sekund.

Kody są tworzone na podstawie klucza (który zna tylko użytkownik i serwer) oraz znaczników bieżącego czasu zaokrąglonego do 30 sekund. Obie składowe są takie same dla użytkownika i dla serwisu, zatem kody są generowane synchronicznie. Algorytm ten nosi nazwę OATH TOTP (ang. Time-based One-Time Password) i obecnie jest on najczęściej wykorzystywany.

Jego znaną alternatywą jest OATH HOTP (HMAC-based One-Time Password). Zamiast znacznika bieżącego czasu algorytm ten wykorzystuje licznik, który zwiększa każdy nowo tworzony kod o 1. Jednak w rzeczywistości jest on dosyć rzadko spotykany, ponieważ wykorzystuje skomplikowane synchroniczne generowanie kodów w aplikacji i po stronie serwisu. Mówiąc wprost, istnieje ryzyko, że w jakimś ważnym momencie licznik nie zadziała poprawnie, a hasło jednorazowe będzie niepoprawne.

Zatem algorytm OATH TOTP można uznać za standard (chociaż oficjalnie nie jest prawdziwym standardem, co sugerują twórcy w specyfikacji).

Kompatybilność aplikacji do weryfikacji dwuetapowej oraz serwisów 

Znaczna większość aplikacji do weryfikacji dwuetapowej używa tego samego algorytmu, więc w serwisach, które dają taką możliwość, można używać tej, która jest dla nas najwygodniejsza.

Oczywiście istnieją też wyjątki. Z powodów znanych tylko sobie niektóre serwisy wolą tworzyć własne aplikacje do weryfikacji dwuetapowej, które działają tylko z nimi. Co więcej, usługi te nie działają z żadną inną aplikacją, tylko z własną.

Jest to szczególnie popularne podejście wśród znanych wydawców gier wideo. Na przykład Blizzard Authenticator, Steam Mobile z wbudowanym Steam Guard czy Wargaming Auth nie są kompatybilne z aplikacjami i usługami podmiotów zewnętrznych. Oznacza to, że w danej platformie z grami można używać tylko tych specjalnie przygotowanych aplikacji wbudowanych.

Tą dziwną drogą poszedł również Adobe ze swoim programem Adobe Authenticator, który działa tylko z kontami AdobeID. Jednak do autoryzacji w koncie AdobeID można również używać innych programów, więc nie wiadomo do końca, dlaczego potrzebna była oddzielna aplikacja.

W każdym przypadku większość zwykłych firm IT nie ogranicza użytkowników w wyborze aplikacji do weryfikacji dwuetapowej. A nawet jeśli firma nagle zdecyduje się utworzyć własną aplikację, przeważnie może być ona używana do ochrony nie tylko kont powiązanych z firmą, ale również do innych serwisów.

Wystarczy wybrać aplikację do autoryzacji, która spełnia nasze oczekiwania pod kątem funkcji dodatkowych — będzie ona działała z większością serwisów, które obsługują aplikacje do weryfikacji dwuetapowej.

Najlepsze aplikacji do wersyfikacji dwuetapowej

Sklep Google Play i App Store oferują zadziwiająco duży wybór aplikacji do weryfikacji dwuetapowej. Nie zalecamy instalowania pierwszej lepszej podpowiedzi; może ona nie być najbardziej bezpieczna. Pamiętaj, że wybranej aplikacji powierzysz klucze do swoich kont (oczywiście nie będzie ona znać Twoich haseł). Ogólnie warto wybrać aplikację przygotowaną przez znanego i zaufanego producenta.

Chociaż wszystkie tego rodzaju aplikacje mają taką samą podstawową funkcjonalność — tworzenie kodów jednorazowych przy użyciu tego samego algorytmu — niektóre programy mają dodatkowe funkcje. Oto kilka najbardziej interesujących opcji.

  1. Google Authenticator

Obsługiwane platformy: AndroidiOS

Google Authenticator to najprostsza w użyciu aplikacja do weryfikacji dwuetapowej spośród wszystkich dostępnych. Nie ma ona żadnych ustawień, umożliwia dodawanie nowego tokena (nazwę nadawaną generatorowi kodów dla poszczególnego konta) lub usuwanie istniejącego. Aby skopiować kod, wystarczy go dotknąć.

Jednak taka prostota ma swoje wady: jeśli nie podoba Ci się coś w interfejsie aplikacji lub chcesz więcej funkcji, musisz wybrać inna aplikację.

Łatwość użytkowania.

  1. Duo Mobile

Obsługiwane platformy: AndroidiOS

Duo Mobile jest bardzo łatwy w użytkowaniu, minimalistyczny i nie ma dodatkowych ustawień. Ma jedną przewagę nad Google Authenticator: przechowywane kody są ukryte domyślnie — aby je zobaczyć, użytkownik musi dotknąć określonego tokenu. Jeśli tak jak ja nie lubisz, gdy kody do wszystkich kont są wyświetlane publicznie za każdym razem, gdy otwierasz program do autoryzacji, ta funkcja Duo Mobile jest dla Ciebie idealna.

Ukrywa kody domyślnie.

  1. Microsoft Authenticator

Obsługiwane platformy: AndroidiOS

Firma Microsoft również wybrała podejście bez fajerwerków w swoim minimalistycznym programie do autoryzacji. Microsoft Authenticator jest zauważalnie bogatszy w funkcje niż Google Authenticator. Po pierwsze, chociaż wszystkie kody są wyświetlane domyślnie, ukrywanie każdego tokena można skonfigurować oddzielnie.

Po drugie, Microsoft Authenticator upraszcza logowanie do kont Microsoft. Po wprowadzeniu swojego hasła wystarczy dotknąć przycisku w aplikacji, aby potwierdzić logowanie się — i nie trzeba wprowadzać kodu jednorazowego.

Można skonfigurować go tak, aby ukrywał kody.
Dodatkowe funkcje logowania się do kont Microsoft.

  1. FreeOTP

Obsługiwane platformy: AndroidiOS

Ta aplikacja autorstwa Red Hat jest warta rozważenia z czterech powodów. Po pierwsze, ma ona oprogramowanie typu open source. Po drugie, to najlżejsza aplikacja na naszej liście — wersja dla systemu system iOS waży zaledwie 750 KB (dla porównania, minimalistyczny Google Authenticator wymaga prawie 14 MB, a omówiona poniżej aplikacja Authy — aż 44 MB). Po trzecie, aplikacja ta ukrywa kody domyślnie, wyświetla je tylko po dotknięciu tokena. Po czwarte, FreeOTP umożliwia elastyczne konfigurowanie tokenów — nawet ręcznie. Naturalnie obsługiwana jest również popularna metoda tworzenia tokena, czyli skanowanie kodu QR.

Ukrywa kody domyślnie.
Zajmuje tylko 750 KB.
Oprogramowanie typu open source.
Wiele ustawień dostępnych podczas ręcznego tworzenia tokena.

  1. Authy

Obsługiwane platformy: AndroidiOSWindowsmacOSChrome

Authy to jedna z najbardziej bajeranckich aplikacji do weryfikacji dwuetapowej, a jej największą zaletą jest to, że wszystkie tokeny są przechowywane w chmurze. Dzięki temu można uzyskiwać do nich dostęp z poziomu dowolnego urządzenia, a równocześnie migracja na nowe urządzenia jest znacznie uproszczona. Nie trzeba ponownie aktywować weryfikacji dwuetapowej w każdym serwisie — można korzystać z istniejących tokenów.

Tokeny w chmurze są zaszyfrowane przy użyciu klucza na podstawie zdefiniowanego przez użytkownika hasła, co oznacza, że dane te są przechowywane bezpiecznie i nie tak łatwo je wykraść. Ponadto można ustawić PIN do logowania się do aplikacji lub zabezpieczyć ją przy użyciu odcisku palca, jeśli smartfon jest wyposażony w odpowiedni skaner.

Największym minusem aplikacji Authy jest to, że wymaga ona założenia konta powiązanego z numerem telefonu komórkowego — w przeciwnym razie nie zadziała.

Tokeny są przechowywane w chmurze, dzięki czemu można używać ich na wszystkich urządzeniach.
Migracja do innych urządzeń jest bezproblemowa.
Logowanie do aplikacji jest chronione kodem PIN lub odciskiem palca.
Na ekranie wyświetlany jest tylko kod dla ostatnio używanego tokena.
Odmiennie niż w przypadku innych aplikacji, obsługuje ona nie tylko platformę Android i iOS, ale również Windows, macOS i Chrome.

− Nie działa, jeśli konto w aplikacji Authy nie zostanie połączone z numerem telefonu.

  1. Yandex.Key

Obsługiwane platformy: AndroidiOS

Moim zdaniem Yandex.Key to najlepsza aplikacja do autoryzacji dwuetapowej. Nie wymaga ona natychmiastowej rejestracji — można z niej korzystać tak jak z programu Google Authenticator. Ponadto ma różne funkcje dodatkowe dostępne dla osób, które lubią dostosowywać do siebie programy.

Po pierwsze, Yandex.Key można zablokować kodem PIN lub odciskiem palca. Po drugie, umożliwia ona utworzenie chronionej hasłem kopii zapasowej tokenów w chmurze Yandex (wymaga to podania numeru telefonu) i przywracanie jej na dowolnym używanym urządzeniu. Co więcej, tokeny można przesłać na nowe urządzenie w przypadku migracji.

Yandex.Key łączy prostotę aplikacji Google Authenticator z rozszerzoną funkcjonalnością aplikacji Authy. Jedynym minusem jest fakt, że przy wielu tokenach interfejs nie jest zbyt łatwy w obsłudze.

Oferuje minimalizm i rozszerzoną funkcjonalność poprzez ustawienia.
Kopie zapasowe tokenów można tworzyć w chmurze, aby używać ich na wielu urządzeniach i podczas migracji na nowe.
Logowanie do aplikacji jest chronione kodem PIN lub odciskiem palców.
Na ekranie wyświetlany jest tylko kod dla ostatnio używanego tokena.
Zastępuje hasło do konta Yandex.

− Podczas posiadania wielu tokenów trudniej jest znaleźć ten potrzebny.

Programy do autoryzacji sprzętowej FIDO U2F: YubiKey i inne

Jeśli aplikacja generująca kody jednorazowe nie wydaje się przekonująca, a Ty chcesz czegoś solidniejszego i bardziej niezawodnego do ochrony swoich kont — najlepiej przy użyciu klucza, który dosłownie nosisz w kieszeni — weź pod uwagę tokeny sprzętowe wykorzystujące standard U2F (Universal 2nd Factor), autorstwa FIDO Alliance.

Jak działają tokeny FIDO U2F

Tokeny sprzętowe U2F są uwielbiane przez specjalistów od bezpieczeństwa, głównie dlatego, że z perspektywy użytkownika nie są skomplikowane w użyciu. W celu rozpoczęcia korzystania z nich należy podłączyć token U2F do urządzenia i zarejestrować go w kompatybilnej usłudze. Cały proces opiera się na kilku kliknięciach.

Następnie, aby potwierdzić logowanie się do usługi, należy podłączyć token U2F do urządzenia, z którego masz zamiar się zalogować, i dotknąć przycisku tokena (niektóre urządzenia wymagają podania kodu PIN lub skanu odcisku palca). Nie trzeba dostosowywać skomplikowanych ustawień, wprowadzać długich ciągów losowych znaków czy podejmować innych działań.

Wystarczy włożyć klucz i nacisnąć przycisk

Podczas rejestrowania tokena w serwisie tworzona jest para kluczy kryptograficznych — prywatny i publiczny. Klucz publiczny jest przechowywany na serwerze, a prywatny — w czipie Secure Element, który jest sercem tokena U2F i nigdy nie opuszcza urządzenia.

Klucz prywatny służy do szyfrowania danych logowania, które są przesyłane do serwera i mogą zostać odszyfrowane przy użyciu klucza publicznego. Jeśli osoba podszywająca się pod właściciela spróbuje przesłać potwierdzenie logowania zaszyfrowane przy użyciu nieodpowiedniego klucza prywatnego, odszyfrowanie go przy użyciu klucza publicznego nie uda się, a serwis nie zezwoli na dostęp do konta.

Jakie są dostępne urządzenia U2F

Najbardziej znanym i powszechnym przykładem narzędzia do autoryzacji U2F jest YubiKey, autorstwa Yubico. Mimo że firma ta była inicjatorem wspomnianego standardu, zdecydowała się go udostępnić publicznie, a w tym celu powstała organizacja FIDO Alliance. A ponieważ standard ten ma charakter otwarty, użytkownik nie jest ograniczony w wyborze: urządzenia kompatybilne z U2F są produkowane i sprzedawane przez różne firmy, a sklepy internetowe oferują wiele różnych modeli.

YubiKey — prawdopodobnie najpopularniejszy token do autoryzacji U2F

Na przykład Google zaprezentował niedawno zestaw programów do autoryzacji pod nazwą Google Titan Security Keys. W rzeczywistości klucze te są produkowane przez Feitian Technologies (drugi pod względem popularności po Yubico producent tokenów U2F), dla którego Google przygotował własne oprogramowanie układowe.

Oczywiście wszystkie programy do autoryzacji sprzętu zgodne ze standardem U2F będą działać z każdym serwisem, który jest również zgodny z tym standardem. Jednak różnią się one przede wszystkim obsługiwanymi przez klucz interfejsami. To bezpośrednio narzuca urządzenia, z którymi może współdziałać:

USB: do łączenia z komputerami PC (nie ma znaczenia, czy mają zainstalowany system Windows, Mac czy Linux; klucze działają bez instalowania sterowników). Oprócz kluczy z niestandardowym złączem USB-A istnieją też klucze dla wejścia USB-C.

NFC: do korzystania ze smartfonami i tabletami z platformą Android.

Bluetooth: wymagany na urządzeniach mobilnych, które nie mają NFC. Na przykład właściciele iPhone’ów nadal potrzebują programu do autoryzacji wykorzystującego Bluetooth. Chociaż iOS umożliwia już aplikacjom korzystanie z NFC (wcześniej dozwolony był tylko Apple Pay), większość producentów aplikacji kompatybilnych z U2F jeszcze nie umożliwia korzystanie z tej funkcji. Programy autoryzujące poprzez Bluetooth mają wiele wad: po pierwsze, należy je ładować; po drugie, o wiele dłużej się je paruje.

Podstawowe modele tokenów z autoryzacją U2F zwykle obsługują tylko ten rodzaj uwierzytelniania i kosztują 10–20 dolarów. Droższe urządzenia (20–50 dolarów) mogą również działać jako karta elektroniczna, generować hasła jednorazowe (w tym OATH TOTP i HOTP), generować i przechowywać klucze szyfrowania PGP, a także mogą być wykorzystywane do logowania się w systemie Windows, macOS, Linux itp.

Co wybrać: SMS, aplikację czy YubiKey?

Powstaje pytanie, co wybrać do autoryzacji dwuetapowej? Na to pytanie nie ma uniwersalnej odpowiedzi. W różnych serwisach można używać różnych wersji i kombinacji autoryzacji 2FA. Na przykład najważniejsze konta (skrzynka pocztowa połączona z innymi kontami itp.) powinny mieć najwyższy stopień zabezpieczeń — czyli należy chronić je przy użyciu tokena sprzętowego U2F, gdzie pozostałe opcje 2FA będą zablokowane. W ten sposób masz pewność, że nikt nigdy nie uzyska dostępu do Twojego konta, jeśli nie będzie mieć tokena.

Dobrym pomysłem jest również połączenie dwóch kluczy do jednego konta, podobnie jak w przypadku kluczy samochodowych: jeden zawsze masz w kieszeni, a drugi leży w bezpiecznym miejscu na wypadek, gdyby ten pierwszy został zgubiony. Co więcej, możesz używać różnych rodzajów kluczy: na przykład aplikacji do autoryzacji na smartfonie jako głównego sposobu uwierzytelniania, a tokenu U2F lub haseł jednorazowych zapisanych na kartce jako opcji zapasowej.

Najważniejsze jest to, aby unikać używania haseł jednorazowych wysyłanych w wiadomościach SMS wszędzie tam, gdzie tylko jest to możliwe. To prawda, nie zawsze jest to możliwe. Na przykład usługi finansowe mają zwykle konserwatywne podejście i rzadko oferują autoryzację poprzez inną formę niż SMS.