Rafał prostuje Bitcoina: (nie)bezpieczńestwo
Temat ten przedstawiłem ostatnio dwa razy: na Krypto Szczecinie 20. stycznia i Beer&Bitcoin #16 22. stycznia. Ponieważ nie było nagrania – oto daję Wam ścianę tekstu :)
TL;DR
- Osobne hasło do każdego serwisu i każdej skrzynki pocztowej
- NIE używanie 2FA na maila
- Aktywacja 2FA w formie GA lub U2F ostatecznie SMS
Uwierzytelnianie dwuetapowe: 2FA (two-factor-authentication) – czym jest?
2FA dodaje dodatkowy element do standardowego trybu logowania (jakim jest user+pass). Jest to zazwyczaj jakaś wariacja na temat „coś co wiesz i coś co masz”. „Wiedzą” w naszym przypadku jest znajomość loginu i hasła, a „czymś” - dodatkowy element, który jest tematem tego wpisu.
Szczególnym rodzajem „czegoś” jest biometria. Wiadomo przecież, że ani odciski palów ani wzór siatkówki nie zmienia się nam na żądanie. Biometria służyć więc może jako dodatkowe hasło (lub po prostu zastąpić wpisywanie user/pass) ale nie jest tym, co możemy nazwać elementem 2FA.
Dlaczego?
2FA z założenia jest elementem zmiennym, co daje dodatkową obronę przed keyloggerami (programami podsłuchującymi klawiaturę i wysyłającymi wszystko co piszemy hakierom). „Czymś” obecnie najczęściej jest nasz telefon.
Ale po kolei.
Ewolucja 2FA
W początkach bankowości elektronicznej często spotykanym elementem 2FA były „zdrapki”. Najczęściej w formie kartonika o konkretnym numerze oraz tabeli zawierającej pary cyfr/znaków. Podczas logowania do systemu dostawaliśmy informację jaką liczbę z której kartki mamy tym razem wprowadzić. Rozwiązanie dość proste, ale z zasadniczą wadą – bardzo długa droga pomiędzy bankiem a userem. Ktoś przecież musiał te kartki przygotować wydrukować, zapakować, wysłać i dostarczyć do odbiorcy. Bardzo wiele sposobności na przechwycenie bezcennej informacji. No a w domu psy koty, dzieci i całe mnóstwo innych sposobów na zniszczenie czy zagubienie „kartonika”.
Kolejnym elementem 2FA są SMSy.
Przy rejestracji w banku/serwisie podajemy nasz numer telefonu na który otrzymujemy kod jaki należy wprowadzić podczas logowania. W obecnej sytuacji, gdy praktycznie każdy ma telefon a SMSy dla firm kosztują tyle co nic – rozwiązanie tanie, szybkie i dość skuteczne. Dlaczego „dość”? Jeżeli ktoś śledzi serwisy dotyczące bezpieczeństwa i/lub hakowania wielokrotnie natknął się na informację o kolejnym udanym ataku, w którym złodzieje uzyskali albo kopię karty SIM albo przekierowali SMSy na swój numer. Nie są też rzadkością aplikacje które potrafią odczytać i przesłać a następnie skasować SMS z telefonu – ofiara nie ma żadnego śladu włamania.
Tokeny RSA/SecurID
Jedno z bardzo dobrych zabezpieczeń, nadal stosowane (niechętnie) przez niektóre banki. Jest to male urządzenie w formie breloczka, na którego wyświetlaczu pojawiają się co określony czas nowe cyfry. Podczas logowania podajemy je oprócz login/pass i po stronie serwisu jest weryfikowane, czy kod się zgadza. Całkowicie bezobsługowe urządzenia, choć były też wersje z klawiaturką i wymagające podania PINu w celu zobaczenia aktualnego kodu. Jedynym wektorem ataku jest tu kradzież urządzenia.
Niestety, pewna ilość użytkowników używa tokena jako breloczka do kluczy…
2FA na maila.
Obecnie bardzo częsta i bardzo wygodna, ale jednocześnie NAJGORSZA wersja 2FA.
Przy logowaniu do serwisu dostajemy informację o konieczności sprawdzenia skrzynki e-mail i albo wejście do serwisu przez kliknięcie w link z maila lub przepisanie przesłanego na maila kodu. Jako że zwykle mamy pocztę otwartą – super wygodne i szybkie. Ale NIE bezpieczne. Zwłaszcza, gdy logowanie na skrzynkę e-mail nie mamy dodatkowo zabezpieczonego i/lub używamy TEGO SAMEGO HASŁA do skrzynki i innych serwisów. Bolesny błąd, który nadal jest popełniany przez rzeszę użytkowników serwisów kryptowalutowych.
Typowy wektor ataku to przejęcie skrzynki e-mail (np. w wyniku wycieku haseł z innego serwisu lub brute-force przy słabym/słownikowym haśle), reset hasła w docelowym serwisie i otrzymanie na maila linka pozwalającego wykonać reset lub jednorazowe hasło do logowania.
Tego banki nie mają: GA i U2F.
Google Authenticator to aplikacja używająca otwartego protokołu OTP (one time password).
Protokół ten opiera się na szyfrowaniu kluczem symetrycznym oraz znaczniku czasowym.
Co to oznacza?
Oznacza to tyle, że ten sam klucz prywatny potrzebny do dziania jest dostępny po obu stronach – w zabezpieczanym serwisie oraz u użytkownika. Rodzi to niestety ryzyko w przypadku wycieku bazy danych serwisu – atakujący może spokojnie zalogować się używając poprawnego logowania. Sytuacja mało prawdopodobna, ale nie można wykluczyć np. inside-job (kradzieży danych przez pracownika serwisu).
Jak wygląda aktywacja i działanie GA.
Podczas aktywacji otrzymujemy z serwisu klucz prywatny* w formie tekstu oraz kodu QR. Po wprowadzeniu kodo go GA otrzymujemy ciąg liczb który wprowadzamy w serwisie jako potwierdzenie, że nasze urządzenie działa prawidłowo.
- Klucz prywatny z serwisu TRZEBA sobie gdzieś bezpiecznie ZAPISAĆ (choćby na kartce). Proces dezaktywacji GA trwa (w zależności od serwisu) od kliku godzin do nawet 2 tygodni i często wymaga pełnej weryfikacji konta z podaniem danych dowodu itd.
Warunkiem poprawnego działania GA jest dokładne ustawienie dat/godziny/czasu i strefy czasowej w urządzeniu na którym GA działa. Odchyłka ponad 10s powoduje trudności a czasem wręcz uniemożliwia zalogowanie się do serwisu.
Niejako rozwinięciem GA jest U2F.
Universal Two Factor jest protokołem opracowanym przez grupę FIDO ("Fast IDentity Online") zrzeszającą ponad 260 firm. U2F wykorzystuje kryptografię kluczy asymetrycznych, więc proces aktywacji i używania jest nieco odmienny od GA.
Podczas aktywacji U2F podajemy serwisowi nasz klucz publiczny. Podczas logowania, serwis podaje nam pewną informację (np. nazwę serwisu, datę/godzinę czy po prostu losowy ciąg znaków) którą podpisujemy naszym kluczem prywatnym. Podpis odsyłamy do serwisu który będąc w posiadaniu klucza publicznego może zweryfikować poprawność podpisu.
Unikamy więc potencjalnej pułapki inside-job, która nie znajduje tu zastosowania.
Niestety, serwisów używających U2F jest nadal znikoma ilość.
Podsumowanie umieszczone jest na początku, nie będę się więc powtarzał :)
Dodam tylko, że bardzo wygodnym zamiennikiem GA jest opensourcowy FreeOTP. Dla mnie – wygodniejszy.
A, byłbym zapomniał.
Mając GA w telefonie NIE DA SIĘ bez ROOTA zrobić kopii bazy danych kluczy. Pamiętajcie o zapisaniu klucza podczas aktywacji GA :) To samo dotyczy FreeOTP.
No i kilka linków:
https://pl.wikipedia.org/wiki/Uwierzytelnianie_wielopoziomowe
https://pl.wikipedia.org/wiki/Google_Authenticator
https://en.wikipedia.org/wiki/Universal_2nd_Factor
https://en.wikipedia.org/wiki/FIDO_Alliance
https://haveibeenpwned.com/ ← tu możemy sprawdzić, czy nasz e-mail kiedyś nie „wyciekł” z innych serwisów. Jeżeli jesteś na choć jednej liście, a dawno nie zmieniałeś haseł – zrób to TERAZ.
Plusik za napisanie prawdy o 2FA i U2F
Dobry materiał.
Pozdrawiam.
Bardzo ciekawy artykuł. Niestety masa osób nie uzywa dobrych haseł i dodatkowych zabezpieczeń.. a potem zdziwienie. Do tego dochodzi nikła szkołą odnośnie IT i bezpieczeństwa.
Artykuł niezgodny z tytułem. Czytającego tytuł wprowadza w błąd co do treści artykułu. Nie podoba mi się ta praktyka.
Nie rozumiem, w którym miejscu mówię o czymś innym niż bezpieczeństwo i nie niebezpieczeństwa jakie mogą wiązać się z używaniem danego sposobu?
Faktycznie, przy biometrii zapomniałem dodać taki sposób obejścia: http://bgr.com/2016/12/26/touch-id-iphone-fingerprint-unlock/