Zabezpieczenie kont fizycznym kluczem U2F – czym są klucze U2F i jak podpiąć je do konta
W ostatnim czasie coraz powszechniejszy staje się temat fizycznych kluczy U2F, jako jednego ze składników uwierzytelnienia wielopoziomowego. Bardzo często osoby nie mające styczności z technologią informacyjną, zastanawiają się czym one są i czy nie stanowią one po prostu skomplikowanego przerostu formy nad treścią. Stosunkowo sporo osób pytało mnie, co jest potrzebne, by je skonfigurować oraz jak w ogóle to działa. Sama procedura jest bardzo prosta, a klucze mają zarówno swoje plusy, jak i minusy. Z tego też powodu postanowiłem krótko opisać ich działanie, pokazać jak w prosty sposób podpiąć je do kont wiodących dostawców usług on-line, dokonać w nich pierwszego logowania oraz jak dzięki nim poprawić swoje bezpieczeństwo. W artykule tym poruszę także temat potencjalnego zagubienia kluczy.
Czym jest U2F?
Universal 2nd Factor (U2F) stanowi otwarty standard uwierzytelnienia, stworzony przez firmy Google oraz Yubico, z udziałem NXP Semiconductors. Głównym założeniem projektu było przeciwdziałanie atakom phishingowym, w których napastnik podstawiając spreparowany formularz logowania do strony (za pośrednictwem maila, SMSa, reklamy w wyszukiwarce), może od nas wyłudzić dane do logowania, a następnie dokonać udanego uwierzytelnienia np. naszego konta mailowego. Dzięki temu miałby już prostą drogę do pozostałych naszych kont. Właśnie dlatego o maile powinniśmy dbać w szczególności.
Standardowo używając kluczy U2F, przy każdej próbie logowania, po zweryfikowaniu loginu i hasła, strona wymaga od użytkownika dodatkowego uwierzytelnienia przy pomocy klucza fizycznego. Jest on dodatkową warstwą zabezpieczeń, która nie opiera się tylko na danych wprowadzanych ręcznie przez użytkownika, a na fizycznym urządzeniu, które do swojego działania wymaga akcji właściciela w postaci dotknięcia klucza. Na rynku dostępne są rozwiązania różnych producentów, wykorzystujące pełną gamę sposobów komunikacji, od USB, USB-C, Lightning, NFC (dostępne obecnie w praktycznie wszystkich kluczach YubiKeys), aż po Bluetooth (świadczone przez klucze serii Titan). Najbardziej polecanymi producentami są Yubico i ich seria kluczy YubiKeys oraz Google z serią Google Titan. Ja w tym artykule skupię się głównie na tych pierwszych.
Większość urządzeń dostępnych w ofercie (nawet najtańszych) oferuje zarówno certyfikację U2F, jak i FIDO2. Czym one się różnią?
- Logowanie w trybie U2F, wymaga najpierw zalogowania się na serwisie przy pomocy loginu i hasła, a dopiero po tym usługa prosi nas o podłączenie klucza fizycznego. Wynika to z samej budowy tego standardu (ale o tym nieco później) – dzięki temu jednak klucz można wykorzystywać na nieograniczonej liczbie stron.
- FIDO2 pozwala na logowanie się samym kluczem lub loginem i kluczem. Niestety z przyczyn technologicznych, z powodu, że pewne dane muszą zostać zapisane na pamięci urządzenia, która z przyczyn kosztowych nie jest duża, klucz można podpiąć w ten sposób tylko do 25 kont. Nie jest wtedy jednak wymagane logowanie hasłem.
W skrócie: jak to działa?
Opierając się na dokumentacji producenta, w celu rejestracji takiego klucza, usługa wysyła do urządzenia za pośrednictwem przeglądarki m.in. swoje AppID – unikalny identyfikator aplikacji (dla stron internetowych jest to adres URL, a dla aplikacji mobilnych ich unikalne ID). Po odebraniu przez klucz U2F powyższego pakietu i wzbudzeniu go dotykiem (zabezpieczenie przed niepowołaną rejestracją klucza), urządzenie generuje tzw. nonce (losową liczbę), a następnie przepuszcza je wraz z AppID oraz tzw. sekretem urządzenia przez funkcję haszująca HMAC-SHA256 – w ten sposób otrzymując klucz prywatny. Z klucza prywatnego wyprowadzany jest klucz publiczny. Sekret urządzenia natomiast, to specyficzny klucz, generowany na chipie urządzenia, w czasie jego produkcji. W przypadku kluczy firmy Yubico, klucz prywatny jest ponownie szyfrowany wraz z AppID i sekretem urządzenia przy pomocy tej samej funkcji, tworząc kod uwierzytelnienia wiadomości (MAC). Po przejściu tego procesu, urządzenie tworzy zaszyfrowany tzw. KeyHandle, zawierający zarówno nonce, jak i MAC. W przypadku urządzeń innych dostawców zaszyfrowany KeyHandle zawiera nonce oraz klucz prywatny. Tak przygotowane KeyHandle i klucz publiczny wysyłane są za pośrednictwem przeglądarki do serwera usługi, celem przechowywania ich dla przyszłych prób uwierzytelnienia konta. W ten sposób nic (poza sekretem wygenerowanym przy produkcji klucza) nie musi być przechowywane na urządzeniu.
Źródło grafiki: yubico.com.
By uwierzytelnić użytkownika, serwis po weryfikacji loginu i hasła, za pośrednictwem przeglądarki wysyła do klucza U2F tzw. challenge wraz z AppID oraz przypisanym do konta KeyHandle. Po otrzymaniu wiadomości, urządzenie odszyfrowuje klucz prywatny, by przy jego pomocy poprawnie podpisać przesłany challenge i AppID. Dzięki unikalnemu sekretowi urządzenia, wysłany KeyHandle może być odszyfrowane jedynie przy pomocy klucza U2F, który go wygenerował. Co za tym idzie, MAC lub klucz prywatny zawarty w KeyHandle działa tylko dla konkretnej kombinacji klucza U2F i AppID, dla których był utworzony. Gdy wszystko się zgadza, urządzenie odsyła odpowiedź, która przez przeglądarkę wraca do serwera i tam jest weryfikowana. Gdy w całym procesie wysłana domena odpowiada tej przypisanej na kluczu, a klucz prywatny zgadza się z kluczem publicznym, uwierzytelnienie zostaje przepuszczone. Jeżeli znów próba logowania nastąpi z domeny, która nie jest zarejestrowana na urządzeniu lub klucz nie będzie odpowiadał temu, który podpięty jest pod usługę, wtedy logowanie zakończ się niepowodzeniem. Zgodnie ze specyfikacją, dane wysyłane są bezpośrednio na serwer usługi, a nie na serwer producenta urządzenia.
Źródło grafiki: yubico.com.
Uproszczony proces uwierzytelnienia natomiast prezentuje się następująco:
Źródło grafiki: yubico.com.
Czy warto stosować klucze U2F oraz jak się uchronić przed konsekwencjami ich zgubienia?
Sama technologia nie wymaga instalowania dodatkowych sterowników, a co najważniejsze jest obsługiwana przez większość wiodących przeglądarek komputerowych, jak i mobilnych oraz przez część aplikacji mobilnych, w których taka możliwość logowania jest zaimplementowana. Obsługiwane są również wszelkiego rodzaju przejściówki, by nie uzależniać się tylko od jednego rodzaju portu komunikacji. Niestety nie wszystkie strony korzystają z tego rozwiązania, np. obecnie w Polsce ani jeden bank, nie daje możliwości takiego połączenia, podobnie jak większość polskich skrzynek mailowych. Usługi dużych korporacji międzynarodowych w większości jednak dają możliwość ich podpięcia. Tam, gdzie można je stosować, rozwiązanie mocno wpływa na zwiększenie bezpieczeństwa konta, do którego jest podpięte. Dużo skuteczniej chroni nas przed atakami phishingowymi, w trakcie których wcale nie tak trudno o podanie kodu uwierzytelniającego z aplikacji lub SMSa, jeżeli wcześniej podało się już tam login i hasło. A już na pewno skuteczniej od samego hasła, których hashe wyciekają masowo nawet z dużych portali lub po prostu składają się z imienia dziecka, zakończonego cyfrą jeden i wykrzyknikiem. W obecnych czasach rozszyfrowanie takiego hasła to kwestia nawet sekund. Warto więc stosować mocniejsze zabezpieczenia.
Listę aplikacji wspierających klucze YubiKeys znajdziecie pod tym adresem: https://www.yubico.com/pl/works-with-yubikey/catalog/?sort=popular.
Ogólna lista natomiast znajduje się tutaj: https://buybitcoinworldwide.com.
Niestety nie są one pełne i bywają usługi (szczególnie polskie), które wspierają to rozwiązanie, jednak nie widnieją na żadnych listach. W takim wypadku najlepiej sprawdzić stronę, z której korzystacie, czy wspiera uwierzytelnienie kluczem fizycznym, jako jeden z czynników uwierzytelnienia.
Oczywiście nie jest to cudowne rozwiązanie na wszystkie nasze problemy i samo nie uchroni nas przed innymi potencjalnymi drogami ataków, jak np.:
- wyciek danych, w przypadku zainfekowania naszego stanowiska złośliwym oprogramowaniem – taki komputer nie należy już do nas, a jest pod kontrolą zupełnie innej osoby;
- ataków typu MITM (man-in-the-middle);
- wycieków danych z bazy serwera danej usługi (pojawiających się każdego dnia);
- czy sprzedaż danych przez pracowników usługi, do której się logujemy.
Nie można także wykluczyć w przyszłości potencjalnych błędów zarówno oprogramowania trzeciego, jak i samego rozwiązania, które mogą doprowadzić do udanego ataku. Jak w każdym przypadku, mimo iż obecnie takie luki nie są znane, nie można wykluczyć, że kiedyś się nie pojawią. W 2018 roku amerykański serwis WIRED relacjonując wydarzenia z konferencji Offensive Con w Berlinie, poinformował o odkrytym przez badaczy (Markus Vervier i Michele Orru) sposobie oszukania fizycznych kluczy dzięki wykorzystaniu wbudowanej w przeglądarkę Chrome funkcji WebUSB. Luka podobno miała umożliwić atak man-in-the-middle, w którym fałszywa strona Google przekazuje nazwę użytkownika i hasło do prawdziwej strony logowania Google, a następnie przekazuje użytkownikowi prośbę o token U2F i dzięki funkcjo WebUSB odbiera unikalną odpowiedź od klucza YubiKey, którą przekazuje już do prawdziwej strony Google. Problem podobno dotyczył wtedy kluczy YubiKey Neo, oferujących inne protokoły łączenia z przeglądarką, niż te standardowo wykorzystywane. O ile więc same klucze są bezpieczne, o tyle nigdy nie wiadomo, jaką lukę wprowadzić może oprogramowanie firmy trzeciej. Nagranie z prezentacji nadal znajduje się na kanale YouTube Offensive Con, pod adresem: https://www.youtube.com/watch?v=pUa6nWWTO4o.
Na uwadze trzeba mieć także możliwość zgubienia takiego klucza. O ile samo znalezienie go przez losową osobę, nie powinno nam zagrozić (jeżeli nie wie do kogo on należy i szybko go odepniemy), o tyle dla nas może to być już większy problem. Dlatego zawsze należy zabezpieczyć się przynajmniej jednym zapasowym kluczem, który podobnie jak ten główny, podpięty jest do wszystkich naszych usług, by w razie czego możliwe było szybkie odzyskanie dostępu do kont. Nie poleca się również kupowania używanych kluczy, gdyż nie wiemy nigdy, co się z nimi działo wcześniej.
Pamiętajcie, że nic nie zastąpi rozsądku! Pierwsze o co więc musicie zadbać, to o zachowanie dobrych praktyk pracy z danymi. Posiadanie bezpiecznych i unikalnych haseł dla każdego konta, nie klikanie linków nieznanego pochodzenia, nie otwieranie linków z SMSów, czy omijanie spamu…
Na rynku dostępnych jest oczywiście więcej dostawców powyższych kluczy, najbardziej znanymi i polecanymi rozwiązaniami są jednak YubiKeys firmy Yubico oraz Google Titan. A różne tańsze oraz droższe modele oferują różne funkcje dodatkowe, przez co warto zapoznać się z całą ofertą tych firm. Wszystkie z nich są rozwiązaniami małymi i poręcznymi, które idealnie dopasują się do naszego pęku kluczy, gdy już się zdecydujemy na zakup. W przypadku kluczy YubiKeys warto zadbać również o odpowiednie etui, dzięki któremu unikniemy uszkodzenia klucza, który ze sobą nosimy.
Podpięcie klucza U2F do konta Google:
- Logujemy się na konto Google.
- Wchodzimy do menu „Zarządzaj kontem Google” i wybierz opcję „Bezpieczeństwo”, „Weryfikacja dwuetapowa”, „Klucz bezpieczeństwa”, a następnie klikamy przycisk „Dodaj klucz bezpieczeństwa”.
- Z listy wybieramy klucz fizyczny i klikamy „Dalej”.
- Podłączamy klucz do portu USB, a w oknie, które się pojawi wybieramy „Ok”. Gdy wyskoczy stosowny komunikat, dotykamy naszego klucza, w celu jego aktywacji.
- Wprowadzamy nazwę klucza (najlepiej by nazwa głównego klucza różniła się od tego zapasowego, byśmy w przypadku zgubienia lub uszkodzenia wiedzieli, który odpiąć od konta) i klikamy „Dalej”. Portal informuje nas o podłączeniu urządzenia do konta, co ponownie potwierdzamy przyciskiem „Dalej”.
- Procedurę należy powtórzyć także z drugim, zapasowym kluczem.
- Po dodaniu zapasowego klucza, system zaproponuje nam włączenie Zaawansowanej Ochrony, wybieramy wtedy „Dowiedz się więcej”, by przejść dalej. Na nowej stronie wybieramy „Rozpocznij”.
- Klikamy „Zarejestruj klucze bezpieczeństwa”. Jako główny klucz dodajemy swój pierwszy klucz, natomiast jako klucz zapasowy drugi (nie podłączamy kluczy, zanim interfejs nas o to nie poprosi). Po dodaniu kluczy potwierdzamy akcję, a następnie potwierdzamy całość klikając „Zarejestruj się”.
- Na wypadek uszkodzenia obu kluczy warto jeszcze wygenerować sobie kody zapasowe, które posłużą nam do odzyskania konta. By wygenerować kody zapasowe należy wejść ponownie do menu „Zarządzaj kontem Google”, „Bezpieczeństwo”, a następnie wybrać opcję „Kody zapasowe”.
- Klikamy „Otrzymywanie kodów zapasowych”, po czym pojawi się lista kodów jednorazowego użytku, które musimy zachować i jak najlepiej zabezpieczyć.
- Pozostał nam już tylko ostatni krok w drodze do naszego bezpieczeństwa. Musimy usunąć z konta zapasowy adres email, który nie jest tak samo chroniony jak ten. Wchodzimy do menu „Zarządzaj kontem Google”, „Dane osobowe”, „E-mail”, „Adres pomocniczy”, a następnie po prostu usuwamy przy pomocy klawisza delete znajdujący się tam email i zapisujemy zmiany.
Podpięcie klucza U2F do konta Facebook:
- Logujemy się na konto Facebook.
- Wchodzimy w menu „Ustawienia i prywatność”, „Ustawienia”, „Bezpieczeństwo i logowanie”, a następnie wybieramy opcję Edytuj w zakładce „Używaj uwierzytelnienia dwuskładnikowego”. Na koniec klikamy przycisk „Skonfiguruj”, przy kategorii „Klucz zabezpieczeń”.
- W nowym oknie klikamy „Zarejestruj klucz zabezpieczeń”.
- Wkładamy klucz do portu USB, a następnie potwierdzamy chęć podpięcia go oraz dostępu do niego.
- Jeżeli wcześniej tego nie zrobiliśmy, to ustawiamy PIN dla klucza (może zawierać litery, znaki specjalne, cyfry itd.) lub logujemy się już istniejącym, gdy PIN jest już zakodowany na urządzeniu.
- Dotykamy klucza dwa razy, by go zaktywować.
- Wprowadzamy nazwę głównego klucza (najlepiej by różniła się ona od nazwy tego zapasowego, byśmy w przypadku zgubienia lub uszkodzenia wiedzieli, który odpiąć) i potwierdzamy.
- Gdy dodamy już pierwszy klucz, klikamy „Dodaj nowy klucz zabezpieczeń” oraz powtarzamy całą procedurę, tym razem dla klucza zapasowego. Całość potwierdzamy przyciskiem „Ok”.
- Po dodaniu kluczy, warto usunąć z konta zapasowy adres email, który nie jest tak samo chroniony, jak nasze konto. Niestety Facebook nie daje możliwości zupełnego usunięcia adresu e-mail z ustawień, dlatego zmieniamy go na taki, który jest równie dobrze chroniony.
- Pozostało nam jeszcze ustawienie kodów odzyskiwania dostępu, na wypadek uszkodzenia lub utraty obu kluczy. W tym celu wchodzimy w menu „Ustawienia i prywatność”, „Ustawienia”, „Bezpieczeństwo i logowanie”, wybieramy opcję Edytuj przy funkcji „Używaj uwierzytelnienia dwuskładnikowego”, a następnie klikamy „Skonfiguruj” przy zakładce „Kody odzyskiwania dostępu”. Po tym klikamy „Uzyskaj kody”, by otrzymać listę jednorazowych kodów do przywracania konta. Kody musimy zachować i jak najlepiej zabezpieczyć, by nie dostały się w niepowołane ręce.
Podpięcie klucza U2F do konta Microsoft:
Autor: Daniel 'zoNE’ Gabryś