Wszystkie wpisy

2FA, MFA, weryfikacja dwuetapowa - prawie każdy o tym słyszał, większość ludzi używa tego przynajmniej w jednej aplikacji. Bank, Gmail, Facebook, panel admina firmowego CRM. Jeśli ktoś próbuje się tam zalogować, nie wystarczy hasło - potrzebny jest jeszcze kod z aplikacji, SMS albo dotknięcie klucza fizycznego.

2FA blokuje większość ataków na konta. Ma jednak granice i w niektórych sytuacjach nie zmienia praktycznie nic. W tym artykule chcę pokazać jedno i drugie - bo widzę, że to rozróżnienie często gubi się w komunikacji bezpieczeństwa. Włączyłeś 2FA i czujesz, że konto jest bezpieczne, a złośliwe oprogramowanie potrafi obejść tę warstwę bez problemu, jeśli ma dostęp do twojej aktywnej sesji.

Czym dokładnie jest drugi czynnik

2FA to skrót od two-factor authentication. Logowanie wymaga dwóch niezależnych dowodów tożsamości zamiast jednego. MFA (multi-factor authentication) to ta sama idea, ale dla dwóch lub więcej czynników. W polskich serwisach najczęściej spotkasz nazwę „weryfikacja dwuetapowa" - tej formy używa Google, większość banków i polskie aplikacje konsumenckie. Czasem zobaczysz też „uwierzytelnianie dwuskładnikowe" - to dosłowne tłumaczenie 2FA, technicznie precyzyjniejsze, ale w praktyce rzadsze. Wszystkie te nazwy znaczą to samo.

Czynniki dzieli się na trzy kategorie:

Coś, co wiesz - hasło, PIN, odpowiedź na pytanie zabezpieczające. Można to powiedzieć, można zapomnieć, można wykraść phishingiem.

Coś, co masz - telefon z aplikacją, klucz sprzętowy, smartcard. Atakujący musi fizycznie zdobyć przedmiot.

Coś, czym jesteś - odcisk palca, twarz, tęczówka. Trudne do podrobienia, ale w razie kompromitacji nie można ich zmienić tak jak hasła - palca ani twarzy nie zresetujesz.

Prawdziwe 2FA wymaga dwóch różnych kategorii. Hasło + PIN to nie 2FA - oba są w kategorii „coś, co wiesz". Hasło + kod z aplikacji w telefonie - to jest 2FA. To rozróżnienie ma znaczenie, bo przypadek „dwa hasła" wciąż się zdarza w firmach i nie daje praktycznie nic ponad samo hasło.

Kiedy 2FA chroni, a kiedy nie

2FA działa w jednym konkretnym momencie - gdy ktoś próbuje się zalogować od zera. Wpisuje login, hasło, system pyta o drugi czynnik. Jeśli atak idzie tym kanałem - 2FA może go zablokować. Jeśli atak omija etap logowania - 2FA jest poza grą.

Ten podział na poziomie abstrakcji wygląda banalnie, ale w praktyce łatwo go pomylić. Zobaczmy, jak wygląda na konkretnych typach ataków:

Typ ataku Czy 2FA pomoże? Dlaczego
Próba logowania ze skradzionym hasłem Tak Atakujący ma hasło, ale brakuje mu drugiego czynnika - logowanie nie przejdzie.
Hasło z wycieku w innym serwisie (credential stuffing) Tak Hasło z wycieku z 2018 jest w słowniku, ale 2FA blokuje wejście.
Brute force i atak słownikowy Tak Nawet jeśli hasło zostanie zgadnięte, drugi czynnik blokuje finalne wejście.
Phishing (fałszywa strona logowania) Częściowo Kody SMS i z aplikacji da się przepuścić w czasie rzeczywistym. Klucze sprzętowe i biometria w przeglądarce - nie.
Skradzione ciasteczka aktywnej sesji Nie Sesja jest już uwierzytelniona - atak omija etap logowania, więc i 2FA.
Wykradzione tokeny aplikacji (Discord, Slack) Nie Token to przepustka wystawiona po zalogowaniu - 2FA było tylko w momencie jego wystawienia.
SIM swapping (przejęcie numeru telefonu) Zależy od metody 2FA przez SMS - upada. Aplikacja, klucz fizyczny, biometria - są niezależne od numeru.
Wyciek bazy z hashami haseł Tak Hashe da się złamać i odzyskać hasło, ale do wejścia wciąż potrzebny drugi czynnik.
Malware działające w zalogowanej przeglądarce Nie Działa wewnątrz uwierzytelnionej sesji - 2FA zostało zatwierdzone wcześniej.
Podgląd hasła zapisanego na karteczce Tak Samo hasło nie wystarczy - drugi czynnik jest na innym urządzeniu.

Reguła sprowadza się do tego: jeśli atakujący ma tylko hasło i próbuje się zalogować jako ty, 2FA go zatrzyma. Jeśli ma już aktywną sesję albo jakąś inną przepustkę wystawioną po wcześniejszym logowaniu (ciasteczko, token), 2FA jest poza obrazem.

Przykład: malware kradnący hasła i ciasteczka

Pokażę to na scenariuszu, który widujemy regularnie. Ktoś w domu - ty, dziecko, partner, gość - otwiera plik z dziwnego źródła. Załącznik z maila, którego nikt się nie spodziewał. „Darmowa" wersja programu z reklamy w Google. Krakowana gra. Plik się otwiera albo nie, okno znika, niczego niepokojącego nie widać.

Pół godziny później na skrzynce pojawiają się maile. „Wykryto próbę logowania z Holandii". „Twoje hasło zostało zmienione". „Autoryzuj transakcję". Ktoś jest już w środku - na koncie pocztowym, na Allegro, na Discordzie.

To efekt działania infostealera - kategoria malware z jednym zadaniem: w kilkanaście sekund wyciąga z komputera wszystko, co pozwala zalogować się jako ofiara. Hasła zapisane w przeglądarce, aktywne ciasteczka sesji, tokeny aplikacji desktopowych (Discord, Slack, Steam), klucze portfeli kryptowalut, dane z autouzupełniania formularzy. Cała paczka leci na serwer atakującego.

Co w tym scenariuszu daje 2FA?

Dla wykradzionych haseł - tak, działa. Atakujący próbuje zalogować się do banku, Gmaila, na Allegro. Ma login i hasło, ale nie ma twojego telefonu z aplikacją autoryzującą ani klucza fizycznego. Logowanie zatrzymuje się na ekranie z prośbą o kod. Zwykle dostajesz wtedy maila „próba logowania z nowego urządzenia" - sygnał, że trzeba szybko zmienić hasło.

Dla wykradzionych ciasteczek - nie, nie działa. Ciasteczko sesyjne to dowód dla serwera, że logowanie i 2FA już się odbyły. Atakujący wkleja je do własnej przeglądarki i serwer traktuje go jak ciebie. Brak ekranu logowania, brak żądania kodu, brak 2FA. Po prostu wchodzi.

W praktyce po infekcji infostealerem nie wystarczy zmienić hasła. Trzeba wymusić wylogowanie wszystkich aktywnych sesji - opcja „wyloguj ze wszystkich urządzeń" w ustawieniach konta. Dopiero to unieważnia skradzione ciasteczka i wyrzuca atakującego z systemu.

Gdzie 2FA naprawdę robi różnicę

Mimo ograniczeń przy kradzieży sesji, 2FA jest jedną z najlepszych pojedynczych warstw ochrony, jakie można włączyć w 30 sekund. W raportach bezpieczeństwa Microsoftu pojawia się liczba „ponad 99% zautomatyzowanych prób logowania zablokowanych po włączeniu 2FA". Można dyskutować z metodologią, ale rząd wielkości powtarza się w innych raportach. Konkretne sytuacje, w których 2FA daje realną wartość:

To samo hasło w wielu miejscach. Pracownik używa służbowego adresu e-mail w prywatnym serwisie, który kilka lat później doświadcza wycieku. Hasło trafia do publicznej bazy, a atakujący próbuje je wpisać w 50 popularnych aplikacjach - credential stuffing. Bez 2FA wpuszczą go te serwisy, w których używana była ta sama para login-hasło. Z 2FA logowanie zatrzymuje się na ekranie z prośbą o drugi czynnik.

Słabe hasła pracowników. „Imie123!", „Wiosna2025", „Firma2024" - to nie żart, to realne hasła z realnych firm. Atakujący nie musi nic zgadywać, tylko przepuszcza znane wzorce (imię + rok, nazwa firmy + cyfra, sezon + rok) przez automat. 2FA odcina ten wektor w całości.

Niezabezpieczone wifi. Publiczna sieć w hotelu, na lotnisku, w kawiarni. Ktoś podsłuchuje ruch i przechwytuje hasło. Z samym hasłem atakujący ma już otwartą drogę. Z 2FA potrzebuje jeszcze fizycznego dostępu do twojego telefonu lub klucza.

Zgubiony lub ukradziony laptop. Komputer z hasłami zapisanymi w przeglądarce trafia w obce ręce. Niezależnie czy to Windows, macOS czy Linux, po obejściu zabezpieczeń systemu menedżer haseł w przeglądarce zwykle odda zapisane dane. Bez 2FA atakujący wchodzi do kont, do których ma hasła. Z 2FA hasła są bez wartości, dopóki nie ma dodatkowo drugiego czynnika.

Wyciek po stronie dostawcy. Serwis, w którym masz konto, traci bazę użytkowników. Hasło staje się publicznie znane. Bez 2FA trzeba pilnie zmieniać hasło i sprawdzać, gdzie jeszcze go używałeś. Z 2FA samo hasło nie wystarczy nikomu do zalogowania, więc mamy więcej czasu, żeby na spokojnie je zmienić.

Metody 2FA - od najsłabszej do najmocniejszej

Pod hasłem „2FA" kryje się kilka różnych technologii o drastycznie różnych profilach bezpieczeństwa. Nie są wymienne i nie warto traktować ich jednakowo.

SMS

Najpopularniejsza forma w aplikacjach konsumenckich. Logujesz się hasłem, dostajesz SMS-a z 6-cyfrowym kodem, wpisujesz, wchodzisz. Działa na każdym telefonie i nie wymaga aplikacji - dlatego jest tak rozpowszechniony.

Problemy są jednak realne. SIM swapping - atakujący dzwoni do operatora, podaje się za ciebie i prosi o przepisanie numeru na nową kartę SIM. Operatorzy potrafią to zrobić przy minimalnej weryfikacji. Efekt: SMS-y zaczynają lecieć na obcy telefon. Ataki na sieć SS7 - protokół SS7 to stare zaplecze sygnalizacyjne sieci komórkowych. Operatorzy stopniowo migrują na nowsze rozwiązania (Diameter, 5G), ale SS7 wciąż jest aktywny u wielu operatorów na świecie i regularnie pojawiają się raporty o jego wykorzystaniu do przechwytywania SMS-ów. Dla 2FA opartego na wiadomości tekstowej to realne ryzyko, szczególnie w roamingu i przy operatorach o słabszej higienie bezpieczeństwa. Phishing - fałszywa strona prosi o hasło i kod, atakujący w czasie rzeczywistym przepuszcza je przez prawdziwą bramkę banku.

NIST, amerykańska instytucja ustalająca standardy cyberbezpieczeństwa, od 2016 roku odradza SMS jako metodę 2FA. Mimo to słabe 2FA jest lepsze niż żadne, więc jeśli serwis daje tylko taką opcję, włącz ją.

TOTP - kody z aplikacji

TOTP (Time-based One-Time Password) to otwarty standard opisany w dokumencie RFC 6238 - czyli specyfikacji publikowanej przez IETT, organizacji ustalającą techniczne standardy internetu. To te 6-cyfrowe kody generowane przez Google Authenticator, Authy, 1Password, Bitwarden i wiele innych aplikacji.

Mechanizm: przy konfiguracji aplikacja i serwer dzielą wspólny sekret. Najczęściej przekazujesz go skanując kod QR, ale można go też wpisać ręcznie - wszystko zależy od serwisu. Kod widoczny w aplikacji to wynik funkcji HMAC(sekret, aktualny_czas) liczonej lokalnie - gdzie HMAC to algorytm kryptograficzny, który łączy sekret z drugim parametrem (tu: zegarem) i zwraca wartość, której nie da się odwrócić bez znajomości sekretu. Aplikacja i serwer wykonują tę samą operację równolegle. Jeśli wyniki się zgadzają, logowanie przechodzi.

Sekret nigdy nie wychodzi z urządzenia po pierwszej konfiguracji. To duża różnica wobec SMS, gdzie kod zawsze przechodzi przez sieć operatora i potencjalnie przez kilka pośredników po drodze.

Zalety: nie wymaga internetu w aplikacji generującej kod. Eliminuje SS7 i SIM swapping z równania. Wady: phishing wciąż działa. Strona udająca bank prosi o kod TOTP, atakujący w czasie rzeczywistym używa go na prawdziwej stronie. Kod ważny 30 sekund to dużo dla zautomatyzowanego skryptu. Druga wada: utrata telefonu bez backupu sekretu = utrata dostępu do wszystkich kont chronionych TOTP.

Push - kliknięcie w aplikacji

Push to ewolucja TOTP. Zamiast przepisywać kod, dostajesz powiadomienie w aplikacji: „Logowanie z Warszawa, Chrome - akceptujesz?" i klikasz „Tak" albo „Nie". Stosują to Microsoft Authenticator, Duo Security, Okta Verify.

UX jest wyraźnie lepszy niż przy TOTP, a do tego widzisz kontekst próby (lokalizacja, urządzenie, aplikacja), więc łatwiej wychwycić podejrzane logowanie. Wada: MFA fatigue, czyli push bombing. Atakujący zna hasło i spamuje próbami logowania, wysyłając dziesiątki pushy. Użytkownik w pewnym momencie odruchowo klika „Tak", żeby się odczepić. Tak włamano się do Ubera w 2022.

Lepsze implementacje (number matching w Microsoft Authenticator, Verified Push w Duo) zamiast „Akceptuj/Odrzuć" pokazują dwucyfrową liczbę z ekranu logowania, którą trzeba przepisać w aplikacji. Atakujący tę liczbę widzi, ale nie ma jak jej przekazać ofierze - odruchowy klik przestaje wystarczać i push bombing traci skuteczność. Nie pomoże jednak, gdy ofiara sama bierze udział w ataku (phishing real-time, telefon „z banku z prośbą o kod").

FIDO2 i WebAuthn - klucze sprzętowe

FIDO2/WebAuthn to nowoczesny standard 2FA odporny na phishing. Realizują go fizyczne klucze (YubiKey, Google Titan, SoloKeys) lub mechanizmy wbudowane w urządzenie (Touch ID, Windows Hello, Android Fingerprint).

Najważniejsza cecha: klucz wie, do której domeny się loguje. Przeglądarka przekazuje kluczowi adres strony przy próbie autoryzacji. Jeśli domena nie zgadza się z tą, na której się rejestrowałeś - klucz odmawia złożenia podpisu. Atakujący prowadzący stronę fake-bank.com nie zmusi twojego YubiKey do podpisania, bo dla klucza adres tej strony to inna domena niż prawdziwy bank. Phishing przestaje działać na poziomie sprzętowym - nie zależy od tego, czy użytkownik zauważy fałszywy adres URL.

Zalety: odporność na phishing. Brak współdzielonego sekretu na serwerze - wyciek bazy nic nie daje atakującemu, bo serwer trzyma tylko klucze publiczne. Bardzo szybki UX - dotknięcie i koniec.

Wady są praktyczne, nie kryptograficzne. YubiKey 5 to ponad 200 zł za sztukę, a lepiej kupić od razu dwa (zapasowy do sejfu). Logistyka w firmie wymaga przemyślenia: dystrybucja, onboarding zdalny, procedura zgubienia. Po stronie wsparcia - duże platformy (Google, Microsoft, GitHub, AWS) obsługują WebAuthn natywnie, ale długi ogon mniejszych SaaS-ów wciąż siedzi na TOTP.

Passkeys

Passkeys to ten sam standard FIDO2/WebAuthn, ale w wersji bez fizycznego klucza. Klucz prywatny generuje się na twoim telefonie lub laptopie i jest synchronizowany przez chmurę (iCloud Keychain, Google Password Manager). Logujesz się dotykiem palca albo skanem twarzy.

To rozwiązuje dwa problemy FIDO2. Po pierwsze - „co jeśli stracę klucz", bo passkey trafi na nowy telefon przy synchronizacji. Po drugie - koszt, bo nie kupujesz dodatkowego sprzętu, telefon i tak to obsługuje.

Koszt jest gdzie indziej: bezpieczeństwo passkeysów zależy teraz od bezpieczeństwa konta chmurowego (Apple ID, Google), w którym są synchronizowane. Jeśli ktoś przejmie to konto, przejmie też passkeysy. Dlatego 2FA na samym koncie chmurowym jest tu krytyczne. Apple, Google i Microsoft wspólnie pchają passkeys od 2022 - branżowo nazywa się to passwordless.

Porównanie wszystkich metod

Metoda Phishing SIM swap UX Koszt
SMS Podatny Podatny Średni (czeka się na SMS) Niski (koszt SMS-ów)
TOTP (aplikacja) Podatny Odporny Średni (przepisywanie kodu) Zerowy
Push (Authenticator/Duo) Częściowo podatny (push bombing) Odporny Dobry Niski (licencja na IdP)
FIDO2 (klucz fizyczny) Odporny Odporny Bardzo dobry (dotknięcie) Ponad 200 zł/klucz
Passkeys Odporny Odporny Świetny (biometria) Zerowy
Biometria (FaceID/fingerprint) Odporna (lokalna) N/A Świetny Zerowy (jeśli urządzenie wspiera)

Kody recovery - co z nimi zrobić

Wiele serwisów przy włączaniu 2FA generuje listę 8-10 kodów jednorazowych (recovery codes, backup codes). To wyjścia awaryjne, gdy stracisz urządzenie z drugim czynnikiem - zgubisz telefon, połamiesz klucz, zostaniesz okradziony z plecaka.

Kody recovery są tak samo cenne jak hasło - każdy pozwala obejść 2FA przy logowaniu, każdy działa raz. Powinny być przechowywane z taką samą uwagą, jak hasła do najważniejszych kont. Sensowne lokalizacje: szyfrowany dział „secure notes" w menedżerze haseł (1Password, Bitwarden) lub wydruk schowany w fizycznym sejfie.

Czego nie robić: nie wysyłaj sobie kodów mailem. Skrzynka pocztowa to często główny cel ataku - jeśli atakujący tam wejdzie, ma kody recovery i wchodzi wszędzie.

Jak to działa pod spodem - architektura w prostych słowach

Idea 2FA jest prosta: serwis chce mieć pewność, że to ty się logujesz, więc każe ci to udowodnić dwa razy, dwoma różnymi kanałami.

Pierwszy kanał - hasło. Wpisujesz je w pole logowania, idzie do serwera, serwer porównuje hash z tym, co ma w bazie. Wszystko jednym łańcuchem - klawiatura, sieć, baza danych. Jeden punkt podatności.

Drugi kanał - drugi czynnik. Każda metoda chodzi inną drogą.

SMS idzie przez infrastrukturę operatora telefonii. Serwer mówi „wyślij temu numerowi taki kod", operator dostarcza, ty wpisujesz. Inna sieć, inna firma, inny zestaw ryzyk.

TOTP nie potrzebuje pośrednika. Przy konfiguracji serwer i twoja aplikacja dzielą wspólny sekret (zaszyfrowany w kodzie QR). Potem oboje, niezależnie, liczą tę samą funkcję matematyczną z aktualnego czasu i sekretu. Wartości się zgadzają - jesteś w środku. Sekret nigdy nie wychodzi z urządzenia.

Push i FIDO2 używają kryptografii asymetrycznej. Twoje urządzenie trzyma klucz prywatny, którego serwer nigdy nie widzi - serwer ma tylko klucz publiczny. Przy logowaniu serwer wysyła wyzwanie (losowy ciąg), urządzenie podpisuje je swoim kluczem prywatnym, a serwer weryfikuje podpis kluczem publicznym. Jeśli pasuje - to ty.

FIDO2 dorzuca jeszcze jedno: klucz przy podpisywaniu sprawdza, do której domeny się logujesz. Jeśli adres strony nie pasuje do tego, na którym był rejestrowany - sprzęt odmawia. Stąd odporność na phishing.

Konsekwencja architektury: żeby ominąć 2FA, atakujący musi skompromitować oba kanały jednocześnie. Hasło i twój telefon. Hasło i twój klucz fizyczny. Nie jest to niemożliwe, ale wymaga ukierunkowanej operacji, a nie zautomatyzowanego skanu - i właśnie dlatego skuteczność 2FA przeciwko atakom masowym jest tak wysoka.

Z tego płynie zasada, o której wielu zapomina: drugi czynnik powinien być na innym urządzeniu niż to, na którym się logujesz. Aplikacja TOTP na tym samym laptopie, na którym wpisujesz hasło, to dalej 2FA - ale słabsze. Zainfekowany komputer widzi oba czynniki naraz i z perspektywy malware wracamy do jednego punktu kompromitacji.

Podsumowanie

2FA nie jest uniwersalną tarczą. Chroni przed konkretną klasą ataków - tych, w których ktoś mając samo hasło próbuje zalogować się jako ty. Nie chroni przed sytuacjami, w których atakujący ma już aktywną sesję albo przepustkę wystawioną po wcześniejszym logowaniu (ciasteczka, tokeny).

To jednak wciąż jedna z najlepszych pojedynczych warstw ochrony, jakie można włączyć w kilkadziesiąt sekund. Blokuje credential stuffing, brute force, ataki ze słabymi hasłami i skutki wycieków u innych dostawców - czyli większość tego, czym żyją zautomatyzowane ataki. W wersji FIDO2 lub passkeys eliminuje też phishing, który dla SMS i TOTP wciąż jest otwartą dziurą.

Praktycznie sprowadza się to do dwóch ruchów: włącz 2FA wszędzie, gdzie się da, i wybieraj najmocniejszą metodę, jaką serwis oferuje. Dla najważniejszych kont (poczta, bank, konto firmowe, repozytoria) warto pomyśleć o kluczu fizycznym jako dodatkowej warstwie. Dla aplikacji, którą budujesz - planuj passkeys jako kierunek, nie SMS.

Wdrażasz 2FA w swojej firmie? Zastanawiasz się, czy klucze mają sens w twoim zespole? Audytujesz istniejącą konfigurację bezpieczeństwa? Odezwij się do nas - pomożemy zaprojektować i wdrożyć właściwy poziom uwierzytelniania bez psucia produktywności użytkowników.