11 sposobów na obejście uwierzytelniania dwuskładnikowego

Postanowiłem zastanowić się, w jaki sposób bym obchodził uwierzytelnianie dwuskładnikowe.

Zastanowiłem się, co bym mógł zrobić, jakbym był złym gościem i chciał złamać uwierzytelnianie dwuskładnikowe. Udało mi się wymyślić kilkanaście sposobów, za pomocą których obchodziłbym uwierzytelnianie 2FA, ale postanowiłem opisać technikalia w innym płatnym dokumencie, teraz tylko opiszę sposoby, jakie przyszły mi do głowy.

Jednocześnie jest jedna konkluzja, która mi się nasuwa. Otóż jeśli tylko mamy możliwość używania uwierzytelniania 2FA, to powinniśmy go używać, ale nie możemy całkowicie liczyć na ten typ uwierzytelniania.

Ja osobiście uwielbiam aplikacje, które posiadają uwierzytelnianie dwuskładnikowe i czuje się bezpieczniejszy, jeśli aplikacja jest zabezpieczona poprzez ten typ uwierzytelniania. Jednocześnie pamiętam czasy, kiedy uwierzytelnianie dwuskładnikowe było używane tylko w organizacjach rządowych oraz korporacjach o wysokim poziomie bezpieczeństwa. Dzisiaj bardzo się cieszę, kiedy zwykli ludzie używają 2FA do uwierzytelniania na różnych witrynach internetowych. Należy pamiętać, że uwierzytelnianie dwuskładnikowe zdecydowanie pomaa zmniejszyć ryzyko włamania.

Jednocześnie zbyt wiele osób jest całkowicie pewnych bezpieczeństwa oferowanego przez 2FA, ponieważ uważają, że 2FA jest nie do złamania i nie do pokonania przez przestępców, co oczywiście nie jest prawdą. O dziwo nawet wykształceni ludzie, którzy siedzą w branży bezpieczeństwa uważają, że 2FA powstrzyma zagrożenia płynące z APT, wyłudzanie informacji, socjotechnikę oraz inne zagrożenia, do których powstrzymywania nie stworzono 2FA. Okazuje się, że z biegiem czasu przypisujemy 2FA coraz więcej zasług, w tym te nie prawdziwe. Samo 2FA jest często obchodzone na różne sposoby, w tym te, wymienione w tym wpisie.

Ataki man-in-the-middle

Jeśli dowolna osoba atakująca przeprowadzi atak typu man-in-the-middle (MitM) to może spokojnie skłonić użytkownika końcowego do odwiedzenia fałszywej witryny WWW, która będzie zbierać odpowiednie dane uwierzytelniające. Jeśli już użytkownik poda dane, to gra jest skończona.

W sumie myślę, że atak man-in-the-middle jest w całym tym artykule najistotniejszą rzeczą, ponieważ najszybciej może doprowadzić do przejęcia danych uwierzytelniających. W tym przypadku wystarczy za pomocą jednego z dostępnych narzędzi sfałszować daną stronę internetową, a następnie wygenerować odpowiedni monit, który sprawi, że użytkownik poda odpowiednie elementy uwierzytelniania dwuskładnikowego, który posłuży następnie do przeprowadzenia niepożądanych działań.

Do tego większość ludzi nie rozumie, że po właściwym uwierzytelnieniu się w systemie za pomocą 2FA, to nieważne, czy użyjemy biometryki, tokena sprzętowego, czy karty inteligentnej, to i tak nasz system przeszedł już autoryzację i jeśli system nie prosi o nowe tokeny, to użyje już wygenerowanych tokenów programowych. Ten token można na przykład ukraść i ponownie wykorzystać.

Bardzo dobrym sposobem takiego wykorzystania jest uwierzytelnianie biometryczne. Na przykład, Twój laptop albo telefon może wymagać podania odcisku palca, aby się zalogować lub uwierzytelnić. Kiedy już się uwierzytelnisz, to system Windows używa tokenów NT Lan Manager lub Kerberos. Oczywiście sposób uwierzytelniania może mieć niewielki wpływ na to, w jaki sposób ktoś jest upoważniony do dostępu do pewnych obiektów. Jednocześnie jeśli ktoś chce być dobrym specjalistą od bezpieczeństwa komputerowego, to musi rozumieć w jaki sposób to działa i jak można to obejść.

Ataki typu man-in-the-endpoint

W tym przypadku atakujący nie musi tworzyć złośliwych witryn internetowych, ale powinien spróbować dołożyć złośliwe oprogramowanie na komputer swojej ofiary. Dzięki złośliwemu oprogramowaniu można zmodyfikować oprogramowanie używane w procesie 2FA i wykraść sekrety, które są chronione przez proces 2FA lub użyć zatwierdzonego już żądania, aby uzyskać dostęp do sekretów, które ma chronić 2FA.

O dziwo trojany bankowe robią to już od bardzo dawna, a mianowicie od prawie dwudziestu lat. Większość trojanów bankowych czeka na Twoje pomyślne uwierzytelnianie, a następnie rozpoczyna w tle ukryte, nieuczciwe sesje. Możesz myśleć, że po prostu opłacasz rachunki, a trojan bankowy przesyła Twoje pieniądze na inne konto.

Oczywiście banki przez jakiś czas uważały, że pokonały tego typu trojany, generując dodatkowy kod 2FA, który powinien pozostawać unikalny dla danej transakcji. Jako że nic nie znosi próżni, a praca w branży bezpieczeństwa przypomina niekończącą się wojnę, to twórcy wirusów komputerowych zareagowali na to od razu, przechwytując pierwotną transakcję, generując znacznie większą własną i przesyłając ją do banku. Niczego nieświadomy bank wysyłał kod 2FA, który był wpisywany przez klienta banku i następowała nieuczciwa transakcja, która kradła wszystkie pieniądze danej osoby.

Banki zareagowały oczywiście na te nowe rodzaje ataku, wysyłając użytkownikom kwotę transakcji oraz inne szczegóły w wiadomości sms z kodem 2FA. Ale ku zaskoczeniu wszystkich pieniądze nadal giną, ponieważ niewielu klientów zwraca uwagę na szczegóły transakcji i wystarczy im wpisanie kodu. A więc trojany bankowe cały czas kradną pieniądze.

Podobnie to wygląda w przypadku urządzeń. Nawet jeśli uwierzytelniasz się podając kod 2FA, to po uwierzytelnieniu złośliwe oprogramowanie może robić co chce. Wystarczy, że zaczeka aż uśniesz i zostawisz włączony komputer albo włączy się wygaszacz ekranu. Przecież wtedy większość tokenów jest wciąż aktywne i można ich użyć ponownie.

Przejęcie specjalistycznego oprogramowania 2FA

Przejęcie oprogramowania do uwierzytelnia 2FA to tak naprawdę specjalistyczny atak hakerski. Na przykład, aby przestępca mógł użyć karty inteligentnej na urządzeniu, to musi najpierw posiadać oprogramowanie, które jest w stanie obsłużyć i zrozumieć kartę inteligentną. Oczywiście dostawca może udostępniać oprogramowanie, które pozwala zainstalować w systemie operacyjnym lub na używanym urządzeniu jakiś ogólny sterownik. Ale to dopiero początek problemów.

Jeśli już hakerowi uda zainstalować fałszywe oprogramowanie, to tak naprawdę może on manipulować całym procesem związanym z 2FA lub go całkowicie zastąpić. W przypadku kilku scenariuszy oprogramowanie karty inteligentnej mogłoby pozwolić innej karcie inteligentnej udostępniać swoje oprogramowanie i instalować złośliwe komponenty do wykorzystania przy następnym użyciu karty. Dodatkowo można by także przechowywać w pamięci tokeny wskazujące na prawidłowe uwierzytelnianie poprzez znacznie wydłużony czas przechowywania. Wszystkie te elementy pozwoliłyby hakerowi na kradzież danych lub powtórzenie ataku. W niektórych scenariuszach można zastąpić kartę inteligentną lub użyć podrobionego urządzenia.

Kradzież i skopiowanie generatora kodów dostępu

Istnieje wiele sprzętowych oraz programowych sposobów generowania jednorazowych kodów, używanych przy uwierzytelnianiu 2FA. Większość z nich jest unikalna nie tylko dla użytkownika, ale także dla urządzenia. Jednocześnie zarówno oprogramowanie uwierzytelniające, jak i urządzenia fizyczne, mogą generować jednorazowy kod w tym samym czasie, a następnie porównywać przesłany kod 2FA z własną kopią, wygenerowaną przez system uwierzytelniania, aby sprawdzić ich spójność.

W większości przypadków kody jednorazowe są generowane w nieskończoność z jednej wspólnej, losowej wartości, która jest unikalna dla każdego urządzenia 2FA oraz użytkownika, a następnie przechodzą przez mieszanie z seedem w ustalonych odstępach czasu przy użyciu wspólnego algorytmu. W tym przypadku użytkownik jest proszony o podanie jednorazowego kodu i ma tylko 30 sekund, aby go wprowadzić. Ale może zdarzyć się tak, że nawet po wprowadzeniu kodu należy odczekać kilka minut, zanim będziemy mogli wygenerować nowy kod. Pierwszymi urządzeniami, które to obsługiwały, były urządzenia SecureId firmy RSA.

Tak na marginesie całej dyskusji, wersje tokenów 2FA, które są oparte na samym oprogramowaniu, nigdy nie będą tak bezpieczne jak wersje sprzętowe, ponieważ tokeny sprzętowe wymagają zwykle fizycznego dostępu, aby mogły zostać przejęte.

W przypadku tokenów 2FA jest jedna rzecz, o której się zwykle zapomina. Mianowicie hakerzy już dawno nauczyli się, że jeśli potrafią wychwycić wartość początkową i poznać algorytm generujący synchronizację czasową, to mogą wygenerować i dopasować ten sam jednokierunkowy kod tak samo szybko i dokładnie, jak robią to rzeczywiste systemy i urządzenia do generowania 2FA. Niektóre systemy oraz urządzenia wykorzystują tak słabe generatory kodów 2FA, że atakujący może przechwycić dowolne jednorazowe wartości oraz wygenerować n kolejnych przyszłych wartości. Jeśli taka sytuacja może się wydarzyć i haker jest w stanie wygenerować kod 2FA bez znajomości wartości początkowych, to oznacza, że użyty algorytm nie jest poprawny. Nigdy nie powinno być możliwości przechwycenia losowych wartości i wykorzystania ich do wygenerowania kolejnych losowych wartości.

Powszechnie używane narzędzia hakerskie pozwalają generować różne wartości dla ciągów znaków, więc jeśli atakujący zna wartość początkową, to bez problemu może stworzyć fałszywe żądanie. Tak się wydarzyło podczas ataku na Lockheed Martin, kiedy chińscy hakerzy najpierw skompromitowali RSA, a następnie system generowania tokenów i włamali się do sieci Lockheeda Martina.

Uwierzytelnianie 2FA nie jest wymagane

Istnieje wiele usług, w tym niektóre witryny internetowe, które mają zaimplementowane 2FA, ale nie wymagają podwójnego uwierzytelniania. Jeśli nie wymagamy od naszych użytkownik 2FA, to całe jego wdrożenie mija się z celem. Wiecie, że większość użytkowników uważa, że skoro raz zostało włączone 2FA, to już zawsze z niego korzystamy? Nie jest to do końca prawdą. Większość witryn pozwala użytkownikom na odpowiedzi na pytania dotyczące resetowania hasła lub po prostu można skontaktować się z obsługą techniczną w celu obejścia blokady, jaką wprowadza 2FA.

W witrynach, które pozwalają użytkownikom na logowanie się za pomocą wielu metod, w tym 2FA, bardzo często dochodzi do ataków socjotechnicznych. Można powiedzieć, że hakerzy stali się bardzo biegli w atakach związanych z inżynierią społeczną, szczególnie jeśli chodzi o resetowanie hasła za pomocą osób z obsługi technicznej lub wymuszania samych odpowiedzi na pytania dotyczące przypomnienia hasła.

Ogólnie rzecz biorąc, pytania dotyczące resetowania hasła są plagą całej branży komputerowej. Tak naprawdę przed niczym nie chronią i są milion razy łatwiejsze do odgadnięcia niż samo hasło, które rzekomo chronią. Dajmy na to, że haker zna osobę, którą atakuje, lub przeprowadził wywiad na temat danej osoby. Nagle ten sam haker dostaje pytanie typu: Jaka jest rasa mojego psa? A w mediach społecznościowych mamy zdjęcie z jamnikiem.

Tym samym sposobem można także zabrać użytkownikowi jego konto do danej witryny lub użyć danych uwierzytelniających, aby w ogóle wyłączyć 2FA. Dobrym przykładem jest tutaj Facebook. Po zalogowaniu się do Facebooka mamy do czynienia z sesją długotrwałą, to oznacza, że nie musimy za każdym razem wpisywać hasła oraz kodu 2FA. Kiedy witryna obsługująca 2FA nie wymaga logowania 2FA za każdym razem, to po co w ogóle wdrażać 2FA?

Załóżmy, że większość zasobów w waszej firmie jest zabezpieczona za pomocą 2FA, ale 2FA nie jest wymagane we wszystkich witrynach oraz usługach firmowych. A więc okazuje się, że tak naprawdę do końca nie korzystamy z 2FA.

Kradzież tożsamości

Jest jeden mały sekret, o którym nie powiedzą wam wasi dostawcy kart inteligentnych. Po prostu nie chcą, żebyście o tym wiedzieli. Każde urządzenie lub oprogramowanie, używające 2FA jest powiązane z tożsamością danego użytkownika lub urządzenia. Ta tożsamość powinna być unikalna w każdym systemie uwierzytelniania. W wielu systemach 2FA, szczególnie tych, które używają kart elektronicznych, jest możliwość zmiany tożsamości danej osoby. Jest to ogromny błąd bezpieczeństwa. Jeśli ktokolwiek w dowolnym systemie używającym uwierzytelniania 2FA jest w stanie zmienić choćby na chwilę tożsamość jakieś osoby, to oznacza, że może użyć dowolnego urządzenia 2FA do przejęcia konta innej osoby i użyć go do uwierzytelnienia jako docelowy użytkownik. Pokazać Wam przykład?

Załóżmy, że masz firmę i używasz bankowości korporacyjnej, ale zatrudniasz nieuczciwą księgową, której dajesz osobną kartę do weryfikacji przelewów. Oczywiście jak większość szefów zostawiasz swój login do systemu oraz pin przypięte do monitora. Zastanów się, co się stanie, jeśli Twoja księga włoży swoją kartę inteligentną do czytnika, zaloguje się na Twoje konto, a następnie przeleje sobie Twoje pieniądze na Kajmany. Jak się będziesz czuć? Albo co się stanie, jeśli nieuczciwy pracownik z kartą wykorzysta poświadczenia Twojej księgowej?

To nie jest tak, że ta podatność nie istnieje. Tak naprawdę dotyczy ona bardzo wielu urządzeń do generowania tokenów 2FA. Jednocześnie logicznym wydaje się, że jeśli cokolwiek jest używane do jednoznacznej identyfikacji użytkownika lub urządzenia, powinno na stałe wiązać tożsamość użytkownika lub urządzenie z podwójnym uwierzytelnianiem, które kontroluje. Powinno się kontrolować wszystkie zmiany atrybutów tożsamości, na których się opieramy, aby uwierzytelniać się w danym systemie.

Kradzież klucza biometrycznego

Biometryczne atrybuty tożsamości (odcisk palca lub skan siatkówki) mogą także zostać skradzione i ponownie użyte przez atakującego. W tym przypadku najgorsze jest to, że jeśli ktoś ukradnie biometrię, to nie można jej zmienić. Dodatkowo istnieje wiele innych problemów z tożsamościami biometrycznymi, na przykład ogromna liczba fałszywie negatywnych i fałszywie pozytywnych weryfikacji. Ale to nie jest największym problemem. Jeśli dane biometryczne zostaną skradzione, to zostaną skradzione na zawsze. Hasło można zmienić, ale nie można zmienić odciska palca, czy skanu siatkówki.

Współdzielone i zintegrowane uwierzytelnianie

Oczywiście zgadzam się z tym, że każdy programista oraz użytkownik jest wielkim fanem współdzielonych i zintegrowanych schematów uwierzytelniania w całym łańcuchu usług. Przykładem takiego rozwiązania jest OAuth, które pozwala użytkownikowi zalogować się raz, a następnie po prostu używać tego samego poświadczenia, aby zalogować się do większej liczby usług i stron internetowych. Jednocześnie zauważcie, że komponent 2FA, który był używany do zalogowania się do usługi macierzystej, nie jest już ponownie wymagany w innych usługach, które używają zintegrowanego uwierzytelniania współdzielonego.

Inżynieria społeczna

Żyjemy w świecie, gdzie coraz więcej witryn umożliwia lub bezpośredni wymaga weryfikacji za pomocą 2FA, a więc hakerzy także musi odnaleźć sposób, aby bardzo szybko łamać tego typu zabezpieczenia. Jest jedna rzecz, która zasadniczo może zdecydowanie ułatwić ataki na 2FA, a mianowicie atak za pomocą inżynierii społecznej. Ataki tego typu są bardzo podobne do ataków typu man-in-the-middle lub man-in-the-endpoint, czy man-in-the-browser, które zostały omówione już w tym artykule, ale mogą być o wiele bardziej złożone i obejmować nawet dostawcę oprogramowania 2FA. A więc pamiętaj, że to, że używasz 2FA, to nie oznacza wcale, że nie da się Cię oszukać.

Atak typu brute-force

Nierzadko zdarza się, że hakerzy starają się na siłę pozyskać tokeny 2FA. Jeśli dana witryna lub usługa rzeczywiście korzysta z 2FA i nie posiada wystarczających mechanizmów kontroli prób logowania, to osoba atakująca może odgadnąć token 2FA. Dzieje się to bardzo często, wtedy kiedy dana witryna pozwala w kółko wpisywać jeden wymagany kod, dopóki robot nie uzyska prawidłowego wyniku. Większość witryn posiada blokowanie prób wpisania tokenu 2FA, ale nie wszystkie.

Nieprawidłowa implementacja mechanizmu 2FA

Można by pomyśleć, że jeśli ktoś już decyduje się na wdrożenie logowania 2FA, to zrobi to dobrze. Jednak w realnym świecie istnieje o wiele więcej witryn, które zawierają błędy w oprogramowaniu pozwalające na ominięcie 2FA, niż witryn, w których jest to zupełnie bezpieczne.

No dobrze, to w jaki sposób można chronić się przed atakami 2FA

Jak widać, logowanie 2FA może zostać zaatakowane na wiele sposobów i ten atak może zakończyć się powodzeniem. Ale to wcale nie oznacza, że nie można tego utrudnić. Oto kilka zaleceń, które rzeczywiście są w stanie utrudnić życie napastnikom:

  • Po pierwsze poinformuj swoich administratorów oraz użytkowników o zagrożeniach mogących wpłynąć na bezpieczeństwo rozwiązania 2FA.
  • Po drugie koniecznie zapytaj swojego dostawcę, jak dobrze sobie radzi z każdym z powyższych scenariuszy ataków, o ile mają one zastosowanie w Twoim przypadku.
  • Po trzecie, upewnij się, że systemy w Twojej firmie lub Twoich użytkowników mają zawsze aktualne oprogramowanie antywirusowe, które powinno wykrywać i zapobiegać rozprzestrzenianiu się złośliwego oprogramowania oraz działań hakerskich, których celem może być obejście lub kradzież tokenów używanych w procesie 2FA.
  • Po czwarte, upewnij się, że Twoi użytkownicy rozumieją i są przeszkoleni w zakresie scenariuszy ataków inżynierii społecznej na tokeny 2FA. Na pewno nie powinni oni podawać swoich pinów lub używać urządzeń i oprogramowania na każdej witrynie WWW, czy wiadomości email, która o to poprosi.
  • Po piąte, jeśli dana witryna lub usługa pozwala na użycie 2FA, to po prostu użyj 2FA. Jeśli można włączyć użycie 2FA na każdej witrynie do każdego logowania, to należy to zrobić.
  • Po szóste koniecznie sprawdź, czy Twój dostawca umożliwia współdzielenie uwierzytelniania 2FA. Jeśli jego technologia to umożliwia, to zmień dostawcę.
  • Po siódme poproś swojego dostawcę o odpowiedź na pytanie, czy podczas rozwoju sprzętu i oprogramowania korzystał z najlepszych praktyk rozwoju oprogramowania.
  • Po ósme chroń i kontroluj wszystkie atrybuty tożsamości używane przez 2FA do unikalnej identyfikacji logowań 2FA.
  • Po dziewiąte nigdy nie odpowiadaj na pytania dotyczące resetu hasła poprzez używanie szczerych odpowiedzi.
  • Po dziesiąte, zachęcaj witryny i usługi do korzystania z dynamicznego uwierzytelniania, które zwiększa liczbę czynników wymaganych do logowania, kiedy żądanie pochodzi z nowego urządzenia lub posiada inny nienaturalny atrybut (np. obca lokalizacja lub nietypowy czas) i wykorzystaj je.

Zarówno zrozumienie jak i sceptycyzm w kwestii używania logowania 2FA mogą chronić samo logowanie 2FA i z pewnością nie zaszkodzą żadnej usłudze. Dodatkowa warstwa zabezpieczeń jest lepsza niż jej brak, ale 2FA nie jest panaceum na wszystko. 2FA jest oczywiście lepsze niż uwierzytelnianie jednoskładnikowe, ale można je zhakować. Oczywiście co do rozwiązań 2FA można mu ufać, ale bez nadmiernego optymizmu.