Uwierzytelnienie, drugi składnik oraz kradzież sesji

Autor Autor:
Zespół Innokrea
Data publikacji: 2023-10-19
Kategorie: Bezpieczeństwo

Dzisiaj chcielibyśmy Wam przedstawić trochę merytorycznej wiedzy odnośnie tego czym jest uwierzytelnienie, czym drugi składnik i jakie mamy możliwości co do potwierdzenia tożsamości użytkownika. Na końcu opowiemy Wam na czym polega kradzież sesji. Jeśli jesteście zainteresowani, to zapraszamy do lektury!

 

Obiekty i tożsamość użytkownika

Zastanówmy się na początku jak duże firmy zarządzają tożsamością użytkowników oraz czym ona właściwie jest. Zarządzanie tożsamością użytkowników jest bardzo ważnym elementem bezpieczeństwa całej firmy. Przy dużej skali, gdzie mamy tysiące lub setki tysięcy kont użytkowników używamy najczęściej specjalistycznego oprogramowania np. Windows Server AD lub po prostu mamy dedykowany komponent w naszej aplikacji przeprowadzający proces uwierzytelnienia.

Ale czym tak właściwie jest tożsamość użytkownika? Jest to zbiór pewnych cech o danym obiekcie. Obiektami w tym przypadku mogą być zarówno pracujący ludzie jak i urządzenia, których firma używa.  Najczęściej pojęcie tożsamości używane jest w kontekście ludzi, a cechy to po prostu cechy danego człowieka jak jego imię, nazwisko, wiek czy rodzaj wykonywanej pracy. Cechy te można także rozróżniać na zmienne lub niezmienne np. kolor oczu, czy odcisk palca są niezmienne, ale nazwisko czy praca już jak najbardziej. Podsumowując, warto jednak wiedzieć, że zarówno pojęcie tożsamości jak i obiektu mogą zostać uogólnione i nie odnosić się do człowieka.

 

Uwierzytelnienie kontra autoryzacja

Jeśli udało nam się już wyjaśnić czym jest tożsamość oraz obiekt, to jest do dobry moment by pójść krok dalej i powiedzieć sobie czym jest uwierzytelnienie. 

Uwierzytelnienie to proces polegający na potwierdzeniu/walidacji tożsamości danego obiektu przed umożliwieniem mu dostępu do zasobów. Zasobami  w tym przypadku mogą być części infrastruktury sieciowej, pliki czy choćby drukarka. Autoryzacja natomiast to proces udostępnienia danego zasobu użytkownikowi, który się uwierzytelnił w naszej aplikacji czy systemie.

W najbardziej powszechnym scenariuszu użytkownik używa pewnej wiedzy, cechy lub rzeczy, aby udowodnić swoją tożsamość w procesie uwierzytelnienia. Podstawowe czynniki którymi użytkownicy mogą się uwierzytelniać dzielą się na trzy kategorie:

  • coś co użytkownik wie – najbardziej klasyczna forma uwierzytelnienia, jest to na przykład hasło czy pin, który użytkownik zapamiętał
  • coś co użytkownik posiada – jest to pewien przedmiot np. z certyfikatem i jego kluczem, który pozwala mu udowodnić swoją tożsamość. Jeśli posiada zaufany certyfikat np. w smartcardzie lub klucz U2F dedykowany specjalnie dla niego z personalnymi kluczami, to udowadnia on poprzez posiadanie swoją tożsamość
  • coś czym użytkownik jest – na przykład odciski palców, rozpoznawanie rysów twarzy, głosu czy siatkówki. Takie rodzaje uwierzytelnienia (poza siatkówką) często stosujemy w urządzeniach mobilnych.

Dodatkowe czynniki uwierzytelnienia mogą opierać się np. o zachowanie, prędkość pisania na klawiaturze, lokalizację. Należy zwrócić uwagę, że większość o ile nie wszystkie z wymienionych kategorii i czynników uwierzytelnienia mogą zostać podrobione. Ktoś może wyłudzić od użytkownika hasło poprzez choćby atak phishingowy, smartcard może zostać skradziony, głos podrobiony z użyciem sztucznej inteligencji. Można nawet wykorzystać algorytmy sztucznej inteligencji w celu generowania głosu mającego za zadanie przeprowadzić atak phishingowy na pracownika przez telefon.

 

Uwierzytelnienie dwuskładnikowe

Aby zwiększyć bezpieczeństwo systemów komputerowych lub aplikacji często stosuje się uwierzytelnienie dwuskładnikowe lub wieloskładnikowe. Ważne jednak, aby każdy składnik był dobrany z innej przedstawionej wyżej kategorii np.:

  • użytkownik banku po podaniu hasła musi podać dodatkowo kod który otrzymał SMS’em (coś co użytkownik wie oraz coś co posiada)
  • użytkownik komunikatora po zalogowaniu się za pomocą hasła musi dodatkowo podać kod otrzymany w aplikacji Google Authenticator ze swojego telefonu tzw. Time-based One-time Password  (coś użytkownik co wie oraz coś co posiada)
  • pracownik przy wejściu do biura musi przyłożyć kartę do czytnika, a także zostać zweryfikowany przez system rozpoznawania twarzy lub pracującego tam ochroniarza (coś co użytkownik posiada oraz coś czym jest)

Oczywiście każdy z wymienionych tutaj sposobów dwuskładnikowego uwierzytelnienia może zostać w jakiś sposób zaatakowany, choć jedne sposoby uznaje się za znacznie bezpieczniejsze od innych.

 

Przykładowy scenariusz ataku

Scenariusz przedstawiony jako pierwszy tj. hasło plus drugi składnik z pomocą SMS jest mimo wszystko nie do końca bezpieczny. Znane są ataki typu SIM Swap, których działanie wygląda następująco:

  • haker korzystając z bazy danych haseł, która wyciekła bądź ataku słownikowego czy bruteforce pozyskuje hasło użytkownika
  • jeśli wyciek hasła związany jest także z wyciekiem innych danych, a często tak jest, to problem jest poważniejszy. Haker podszywa się wtedy pod daną osobę podczas dzwonienia na infolinię operatora telefonii komórkowej i prosi o wyrobienie duplikatu karty SIM (czasem infolinia nie wystarcza i wymagana jest wizyta w salonie)
  • karta użytkownika wygasa w ciągu kilku minut, haker przejmuje jego numer
  • haker loguje się do banku używając skradzionego wcześniej hasła, a drugi składnik przychodzi na numer użytkownika, który przejął w skutek ataku SIM swap
  • ofiara traci swoje oszczędności, ponieważ haker jest w stanie autoryzować przelewy i nie jest w stanie dodzwonić się z własnego telefonu do banku (jej karta SIM wygasła i telefon jest w stanie wykonywać połączenia jedynie na numery alarmowe)


W temacie SIM Swap polecamy artykuł niebezpiecznika.

Rysunek 1 – Atak typu SIM swap, źródło: DHS CSRB


Jakie składniki są najbezpieczniejsze?

Odpowiedź na to pytanie nie jest jednoznaczna, ponieważ zależy to od konkretnych potrzeb danej organizacji. Można natomiast powiedzieć, które ze składników są najmniej bezpieczne. Niektóre ze składników np. hasła, TOTP, kody SMS są podatne na ataki phishingowe. Najprościej mówić jeśli użytkownik wejdzie na fałszywą stronę, która przypomina jego bank, tam się zaloguje i poda drugi składnik otrzymany z aplikacji uwierzytelniającej lub SMS’a, to haker otrzymał wszystko co potrzebuje do przejęcia konta.

Dla klasycznego użytkownika Internetu najlepszą formą drugiego składnika jest klucz U2F, który chroni przed atakami phishingowymi. Jeśli dana aplikacja nie wspiera U2F (np. większość banków z wyjątkiem ING (brawa dla nich) na ten moment (sierpień 2023) w Polsce nie wspiera tej formy drugiego składnika) warto korzystać z aplikacji uwierzytelniających jak Google Authenticator. Takie aplikacje korzystają z nowoczesnych, bezpiecznych protokołów i zapewniają dobry poziom bezpieczeństwa dla użytkownika. Mniej bezpieczną formą 2FA (ang. 2 Factor authentication) jest natomiast SMS/Połączenie telefoniczne. Ze względu na to, że protokoły działające w telefonii są stare i podatne na pewne ataki.

Dobre praktyki dotyczące drugiego składnika opisujemy w naszym artykule dotyczącym bezpieczeństwa w Internecie.

 

Problem kradzieży sesji

Ostatnim z aspektów uwierzytelnienia, który warto poruszyć jest kradzież sesji. O ile duża część ataków np. ataki na hasła (bruteforce, phishing) czy na drugi składnik w postaci SMS (SIM swap) skupia się na tym by samemu uzyskać możliwość uwierzytelnia po stronie hakera, o tyle istnieją ataki wykorzystujące sam mechanizm ciasteczek czy tokenów. Większość aplikacji Internetowych korzysta z mechanizmu sesji tj. po zalogowaniu się użytkownik otrzymuje pewien token (przechowywany w pamięci przeglądarki), a następnie z każdym kolejnym wysłanym komunikatem do serwera dołącza otrzymany token. Dzieje się tak ze względu na to, że protokołów sieciowych, w tym protokół HTTP używany w aplikacjach internetowych, zaprojektowano jako bezstanowe. Oznacza to, że każde żądanie klienta skierowane do serwera traktuje się jako niezależna, samodzielna interakcja. Serwer z natury nie przechowuje żadnej wiedzy o poprzednich żądaniach ani kontekście klienta, więc potrzebuje tokenów lub ciasteczek, aby rozróżniać użytkowników.  


Rysunek 2 – działanie sesji, źródło:thesslstore.com

 

Jeśli atakujący jest w stanie pozyskać dane dotyczące sesji z przeglądarki np. poprzez atak MITM (ang. man-in-the-middle), instalację malware, wykonane makro czy nawet podpięcie zatrutego urządzenia do fizycznego komputera, to omija proces uwierzytelnienia. W takim przypadku uwierzytelnienie dwuskładnikowe jest bezskuteczne. Nie oznacza to jednak, że należy z niego rezygnować. Ataki przejęcia sesji wymagają dużo większych umiejętności technicznych i występują dużo rzadziej niż opisane wcześniej metody oszustwa.


Rysunek 3 – Atak session hijacking, źródło cyberhoot.com

 

Aby przedstawić analogię, wyobraź sobie, że kupiłeś bilet na festiwal. Kiedy przybywasz do punktu rejestracji, możesz być poproszony o okazanie dowodu tożsamości oraz dowodu zapłacenia za bilet. Przechodzisz więc przez proces uwierzytelniania. Po zarejestrowaniu twojej obecności, osoba obsługująca wręcza ci identyfikator, który zakładasz na rękę na czas trwania koncertów. Od tego momentu każdy pracownik ochrony może rzucić okiem na twój identyfikator i wiedzieć, że zostałeś już uwierzytelniony i masz dostęp do poszczególnych scen. Jeśli jednak ktoś ukradnie twój identyfikator, ma teraz taki sam dostęp do festiwalu jak Ty.

Pliki cookie działają w ten sam sposób. Są to po prostu cyfrowe wersje identyfikatorów.

 

Podsumowanie

Mamy nadzieję, że udało nam się przybliżyć pojęcia związane z uwierzytelnianiem i jak powinno się używać drugiego składnika. Pamiętajmy o tym, że klucze U2F są najbezpieczniejszą formą realizacji uwierzytelnienia dwuskładnikowego. Jeśli chcecie bardziej zadbać o swoje bezpieczeństwo zachęcamy do kontaktu z ekspertami lub dalszej lektury na naszym blogu. Szczególnie polecamy serię dotyczącą porad bezpieczeństwa. Do usłyszenia za tydzień!

 

 

Źródła:

Zobacz więcej na naszym blogu:

Wzorce projektowe – część 2

Wzorce projektowe – część 2

Hej, hej... Programisto, to kolejny artykuł dla Ciebie! Druga część artykułu na temat wzorców projektowych. Poznaj Adapter oraz Memento.

Programowanie

Wzorce projektowe – część 1

Wzorce projektowe – część 1

Programisto, to artykuł dla Ciebie! Łap garść przydatnych informacji na temat wzorców projektowych.

Programowanie

Blockchain – płatności w świecie kryptowalut

Blockchain – płatności w świecie kryptowalut

Blockchainie - poznaj świat transakcji, kryptowalut i elektronicznych płatności.

BezpieczeństwoFinanse