Prosta sytuacja - operacja wymaga jednorazowego kodu. Korzystając z PSD2 powiedzmy, że jest to operacja logowania do banku. Załóżmy, że atakujący zna hasło, a kod OTP jest generowany po prawidłowym podaniu loginu i hasła. Co może pójść nie tak?
Z czasem zdarzenie staje się pewne
Proste pytanie - czy konto blokuje się po (wielokrotnym) podaniu nieprawidłowego kodu OTP? Jeśli nie, drugi składnik jest bezużyteczny. Wcześniej czy później zostanie odgadnięty. To, że za każdym razem generowany jest nowy kod OTP nie pomaga. Właściwie można odwrócić sytuację - to nie my zgadujemy kod, to system zgaduje wybrane przez nas wartości. Jak? Bardzo prosto, jeśli system pozwala na trzykrotne podanie kodu przed przerwaniem procesu (koniecznością wygenerowania nowego kodu) możemy wybrać sobie trzy losowe możliwe wartości kodu OTP i je powtarzać przy każdej próbie logowania. Wcześniej lub później (to już jest kwestia statystyki) system wygeneruje kod OTP zgodny z jedną z naszych wybranych wartości. Koniec. To, że wartość zostanie "odgadnięta" jest pewne.
Oczywiście wszystko sprowadza się do tego jak wygląda kod OTP. Czas ataku zależy wprost od możliwych wartości kodu OTP. Oczywiście im więcej wymaganych prób, tym atak jest bardziej "hałaśliwy" i łatwiejszy do wykrycia. W pewnej chwili to "(…) lub później" powoduje, że cały atak staje się niepraktyczny.
BTW brak zabezpieczeń na ilość w ww. wariancie miałby jeszcze inny aspekt - możliwy byłby atak ekonomiczny na bank. Te SMSy tak całkiem za darmo chyba nie są...
Ciekawym scenariuszem byłoby "zatkanie" możliwości wysyłania kodów SMS (kod byłby generowany, wysłanie SMS byłoby kolejkowane). Wówczas ofiara teoretycznie mogłaby być nieświadoma ataku.
Całość jest jednak dość hałaśliwa i powinna być trywialna do wykrycia przez monitoring.