Bezpieczeństwo

Bezpieczeństwo kodów OTP — jak chronić klientów przed atakami

Piotr Kowalski — Security Engineer, SMSIK 11 min czytania

Kody OTP to fundament autoryzacji, ale są też celem ataków. W tym artykule omawiamy najczęstsze zagrożenia i sposoby ochrony.

Kody OTP (One-Time Password) są fundamentem autoryzacji dwuskładnikowej (2FA) dla miliardów użytkowników na świecie. Ale wraz z rosnącą popularnością rosną też ataki. W tym artykule omawiamy najczęstsze zagrożenia i sposoby ochrony.

Czym są kody OTP?

OTP to jednorazowy kod, który:

  • Jest generowany dla konkretnej sesji lub transakcji
  • Jest ważny przez krótki czas (typowo 5 minut)
  • Może być użyty tylko raz
  • Jest przekazywany kanałem, do którego dostęp ma tylko klient (SMS, aplikacja, email)

W SMS 2FA kod jest wysyłany SMS-em na zarejestrowany numer telefonu klienta.

Najczęstsze ataki na OTP

1. SIM swap attack

Jak działa: Przestępca przekonuje operatora telekomunikacyjnego, że jest ofiarą, i przenosi jej numer do własnej karty SIM. Następnie odbiera SMS-y z kodami OTP.

Skala: W 2024 roku w Polsce odnotowano około 3 000 przypadków prób SIM swap, z czego 15% zakończyło się sukcesem atakującego.

Obrona:

  • Weryfikacja behawioralna — porównanie wzorca logowania z historią
  • Powiadomienie o zmianie numeru — email + SMS do klienta
  • Opóźnienie krytycznych operacji — 24h po zmianie numeru
  • Alternatywne kanały — aplikacja mobilna jako backup

2. Phishing SMS (smishing)

Jak działa: Przestępca wysyła SMS podszywający się pod bank i prosi o kliknięcie w link do fałszywej strony, która prosi o kod OTP.

Przykład:

Od: INFO
Twoje konto zostalo zablokowane. Zweryfikuj tozsamosci: bit.ly/xyz123

Obrona:

  • Własna nazwa nadawcy (np. "TWOJABANK" zamiast "INFO")
  • Informacja o transakcji w treści SMS-a
  • Edukacja klientów — bank nigdy nie prosi o kod OTP przez telefon lub email
  • Kody "anty-phishingowe" — bank pokazuje klientowi unikalny znak przed autoryzacją

3. Malware na telefonie

Jak działa: Złośliwa aplikacja zainstalowana na telefonie klienta czyta SMS-y i przekazuje kody OTP do przestępcy.

Obrona:

  • Wykrywanie root/jailbreak w aplikacji banku
  • Szyfrowanie SMS-ów (niektóre systemy operacyjne to wspierają)
  • Alternatywne kanały (aplikacja mobilna z push)
  • Bezpieczne enclave (Secure Element) dla krytycznych operacji

4. Atak typu man-in-the-middle

Jak działa: Przestępca przechwytuje komunikację między aplikacją klienta a bankiem. Może przechwycić kod OTP w locie.

Obrona:

  • HTTPS/TLS dla wszystkich połączeń
  • Certificate pinning w aplikacjach mobilnych
  • Kody OTP powiązane z sesją (nie tylko z użytkownikiem)

5. Atak brute force

Jak działa: Przestępca próbuje wielu kodów OTP w krótkim czasie (np. 6-cyfrowy kod = 1 000 000 kombinacji).

Obrona:

  • Limit prób (typowo 3)
  • Blokada konta po przekroczeniu limitu
  • Rate limiting — nie więcej niż X kodów OTP na numer na godzinę
  • Dłuższe kody (8 znaków = 2 821 109 907 456 kombinacji dla alfanumerycznych)

6. Atak na bramkę SMS

Jak działa: Przestępca przejmuje konto klienta w bramce SMS lub przechwytuje komunikację między bankiem a bramką.

Obrona:

  • 2FA dla panelu bramki SMS
  • IP whitelist dla API
  • Monitoring nietypowych wzorców (nagłe skoki wolumenu)
  • Szyfrowanie komunikacji (HTTPS)
  • Idempotencja — ochrona przed duplikatami

Standardy bezpieczeństwa OTP

RFC 6238 — TOTP

Time-based One-Time Password, używany w Google Authenticator. Kod zmienia się co 30 sekund, oparty na współdzielonym sekrecie.

RFC 4226 — HOTP

HMAC-based One-Time Password, używany w tokenach sprzętowych. Kod zmienia się po każdym użyciu.

NIST SP 800-63B

Wytyczne NIST dla uwierzytelniania. Zalecenia:

  • Kody minimum 6 cyfr
  • Ważność maksymalnie 10 minut
  • Limit prób 10 (NIST) lub 3 (PSD2)
  • Kody jednorazowe (nie mogą być użyte ponownie)
  • Kody powiązane z sesją

PSD2 SCA — wymagania dla OTP

  • Dynamiczne powiązanie (kod powiązany z transakcją)
  • Poufność (kod nie może być widoczny dla osób trzecich)
  • Ochrona przed phishingiem
  • Audytowalność

Dobre praktyki dla banków i fintechów

1. Wielokanałowość

Nie polegaj tylko na SMS. Oferuj klientom:

  • Aplikacja mobilna (push notification + biometria)
  • SMS (backup)
  • Token sprzętowy (dla premium)
  • Email (dla niskiego ryzyka)

2. Analiza ryzyka transakcji (TRA)

Oceniaj ryzyko każdej transakcji na podstawie:

  • Kwota transakcji
  • Odbiorca (znany / nieznany)
  • Lokalizacja i urządzenie klienta
  • Historia klienta

Dla niskiego ryzyka — można pominąć SCA (wyłączenie PSD2).

3. Monitoring w czasie rzeczywistym

Wykrywaj anomalie:

  • Wiele logowań z różnych IP w krótkim czasie
  • Logowania z podejrzanych lokalizacji
  • Nietypowe wzorce transakcji
  • Próby brute force

4. Szyfrowanie i bezpieczne przechowywanie

  • Kody OTP przechowywane jako hash (nie plaintext)
  • Szyfrowanie bazy danych (encryption at rest)
  • Bezpieczne zarządzanie kluczami (KMS/HSM)
  • Audyt dostępu do danych

Podsumowanie

Bezpieczeństwo kodów OTP wymaga wielowarstwowego podejścia:

  • Właściwa konfiguracja OTP (długość, TTL, limit prób)
  • Ochrona przed phishingiem (własna nazwa nadawcy, dynamiczne powiązanie)
  • Ochrona przed SIM swap (weryfikacja behawioralna, opóźnienia)
  • Monitoring i alerty w czasie rzeczywistym
  • Wielokanałowość (SMS + aplikacja mobilna)
  • Zgodność ze standardami (RFC, NIST, PSD2)

W SMSIK oferujemy bezpieczną infrastrukturę SMS z idempotencją, rate limitingiem, monitoringiem i pełną zgodnością z PSD2 i RODO. Skontaktuj się z nami, aby omówić bezpieczeństwo Twojej aplikacji.

Wypróbuj SMSIK bezpłatnie

Rejestracja zajmuje 2 minuty. Otrzymasz 5 groszy na start.

Utwórz darmowe konto