Pora na kolejny eksperyment. Tym razem jest on związany z bankowością internetową i tematem autoryzacji transakcji. Eksperyment jest podwójny ponieważ symuluję w nim dwie metody autoryzacji transakcji. Pierwsza jego część związana jest z autoryzacją transakcji przy użyciu kodów jednorazowych dostarczanych poprzez SMS. W drugiej części w ograniczonym stopniu symuluję autoryzację transakcji przy użyciu tokena challenge/response. Zadanie polega na wykonaniu przelewu tak, jak w normalnym banku, który korzysta z tych metod autoryzacji transakcji. Po prostu zrób kilka przelewów i nie daj się okraść.
Zrób kilka przelewów i nie daj się okraść
Opis eksperymentu
Wykonanie przelewu składa się z kilku kroków:
- wpisanie danych przelewu,
- weryfikacja danych przelewu i autoryzacja przelewu,
- potwierdzenie przyjęcia przelewu przez system,
Właściwie we wszystkich znanych mi implementacjach bankowości internetowej realizacja przelewu (jednorazowego) wygląda dokładnie w ten sposób. To, co należy zrobić jest chyba oczywiste, ale mimo wszystko poniżej krótkie wyjaśnienie.
Krok pierwszy
W pierwszym kroku należy wybrać rachunek źródłowy z listy dostępnych rachunków, podać rachunek docelowy oraz określić kwotę przelewu. Poprawność rachunku docelowego jest w pewnym stopniu sprawdzana, więc dla ułatwienia do testów można wybrać rachunki z poniższej listy:
11743595768571836044835192 86838190504756051574591477 49263174307784557062425993 66535420617534122943881352 31747252965565379347649383 14816841773810322603736388 79338539747433924478129025 66730235229301259482034214 20867872805376479112518345 40648215398433556418928123 49285291257357701183774342 32289112522816385615972636 89009064457030143418607591 67917086100575810243989684 29716143087803837322023708 48927519529237728968333491 09379294686772428910953563 65948843172887022509851599 16694429447128447092522988 08269234550834239051317297
Powyższe numery rachunków zostały wygenerowane przy pomocy tego przyjemnego narzędzia: http://bogus.ovh.org/generatory/iban.html. Numery te są poprawne, przynajmniej w zakresie sumy kontrolnej, natomiast najprawdopodobniej nie reprezentują żadnego istniejącego w rzeczywistości numeru rachunku.
Krok drugi
W drugim kroku wykonywaną operację należy autoryzować. Sposób autoryzacji zależy od wersji zadania. W pierwszym przypadku "przysyłany jest SMS", który w tym przypadku jest symulowany przez treść wyświetlaną w ramce.

SMS jest specjalnie wyświetlany nieco z dołu i boku, by choć trochę zasymulować sięganie (wzrokiem) do telefonu. Na tym etapie transakcję można wysłać lub anulować. Swoją drogą gdybym był wyjątkowo złośliwy, pobawiłbym się trochę bardziej stylami tak, by czytelność tego "SMS" była równie niska, jak na przeciętnym telefonie komórkowym.
Nieco więcej wyobraźni wymaga druga wersja, która symuluje działanie tokenu challenge/response. W tym przypadku zwykle jest tak, że w celu autoryzacji operacji konieczne jest przepisanie kodu challenge do urządzenia, a następnie kodu response z urządzenia na stronę. W tym przypadku całe zadanie upraszczam tylko do jednego etapu - jako kod autoryzacyjny należy przepisać liczbę losową oraz dwie pierwsze i cztery ostatnie cyfry numeru rachunku docelowego. Oczywiście również w tym przypadku wykonywaną transakcję można anulować.
Dlaczego takie uproszczenie? W części implementacji tokenu C/R weryfikacja parametrów transakcji wykonywana jest w trakcie konstruowania przez użytkownika wartości do przepisania do tokenu. Samo przepisywanie danych do/z tokenu oraz proces wyliczania kodu nie jest w tym przypadku kluczowy. W normalnym przypadku odpowiedni response potwierdza, że:
- użytkownik posiada sekret umożliwiający przekształcenie challenge na response (czarną skrzynkę: token),
- użytkownik operuje na tym samym challenge co serwer,
W tym przypadku sprawdzam jedynie drugi element, tokenu nie ma. Co prawda mógłbym go "napisać", może wówczas cały eksperyment byłby bardziej sexy, ale ja leniwy z natury jestem :)
Krok trzeci
Jeśli transakcja zostaje wysłana, pojawia się potwierdzenie przyjęcia transakcji do realizacji. W przypadku anulowania transakcji następuje powrót do kroku pierwszego, w którym można ponownie rozpocząć wykonywanie przelewu.
Jak sprawdzić wyniki
Po wykonaniu co najmniej 10 transakcji pojawi się dodatkowo identyfikator użytkownika. Można sobie go gdzieś zapisać, bo za jakiś czas udostępnię możliwość sprawdzenia, czy i ile razy coś poszło nie tak :) Wyniki pojawią się nie wcześniej niż za dwa tygodnie, podobnie jak możliwość sprawdzenia swoich dokonań.
Identyfikator wygląda mniej więcej tak:

Tak, przyznaję. Wyświetlając identyfikator klienta dopiero po 10 przelewach chcę skłonić uczestników eksperymentu do wykonania co najmniej 10 prób :) I co gorsza chodzi o 10 prób zarówno w pierwszym, jak i w drugim przypadku, a nie łącznie.
Zapraszam do zabawy i z góry dziękuję wszystkim za udział. Przykład:
- wersja z kodami SMS - http://bootcamp.threats.pl/e/test02.php,
- wersja z "tokenem" C/R - http://bootcamp.threats.pl/e/test03.php,
Do poprawnego(?) działania przykładów wymagany jest JavaScript. Nie jest on wykorzystywany w jakiś kluczowy sposób, ale jest. Piszę o tym tylko dlatego, że mimo wszystko przynajmniej część czytelników tego bloga jest dość "specyficzna" i swoje przeglądarki w różne dodatkowe zabezpieczenia dozbraja. A potem "coś nie działa" :)
Powodzenia!
Warto popatrzeć jak to wygląda w różnych sytuacjach. Na przykład zamknięcie programu z niezapisanym dokumentem domyślnie ustawia focus na przycisku powodującym jednak zapisanie zmian. Ale jeśli chce się zapisać plik pod nazwą, która już istnieje, wówczas domyślna akcja to "nie".
Swoją drogą też mi się za pierwszym razem wcisnęło anuluj zamiast wyślij, choć intuicyjnie dalej jest z prawej strony:)
Raz dałem się zrobić i zauważyłem po fakcie, a później mój awareness wzrósł i już nie było tak łatwo.
Poza tym spodziewałem się podstępu, a i tak zawaliłem.
Sprytne z tą zmianą kwoty.
Poza tym wydaje mi się, że scenariusz w tych moich przykładach będzie mocno podobny na przykład do kupowania rzeczy na Allegro.
Podmieniasz w locie SMSa i nikt nie zwraca uwagi co podpisuje?
Z rachunku
76 2002 6798 0640 9869 9399 0269
Na rachunek
08 5021 8077 3642 1757 3365 9043
Kwota
250,00 PLN
Operacja nr 4 Przelew z rach.: ..33659043 na rach.: 0850..659043 kwota 250,00 PLN, hasło: 547585
Kick, puszczę Twój komentarz jak skończę zbierać dane
na stronie http://bootcamp.threats.pl/e/test02.php (wersja z SMS) mamy jakiś banalny skrypcik który coś robi (potwierdza)...
O co tu w ogóle chodzi???
Myślałem, że jest tu pokazane jakieś niebezpieczeństwo w zabezpieczeniach przy internetowych przelewach, a tu jakieś zwykłe podmienianie danych przez skrypt i ktoś uważa, że coś takiego może mieć miejsce w rzeczywistości? Z pewnego pkt'u widzenia może, ale bez jaj... panowie...
http://archive.mroczna-zaloga.org/archives/997-jak-i-z-jakim-skutkiem-atakowalem-kody-sms.html