Security – ostatnie różności (zabezpieczenia moBILETu ponownie).

Wczorajszy dzień jakoś tak obfitował w wydarzenia związane z bezpieczeństwem, że postanowiłem to podsumować.

Po pierwsze, po dyskusji z netu na ten temat, postanowiłem się przyjrzeć moBILTowi. W sumie po raz kolejny bo i na zabezpieczenia patrzyłem (i to dwa razy). Przy dyskusji zeszło oczywiście na temat jak oni to sprawdzają (jak pisałem, sprawdzają źle) oraz jak mogą sprawdzać. Oczywiście najdoskonalsza wersja, to sprawdzenie online (odpytanie bazy o fakt skasowania danego biletu). Ponieważ twierdziłem, że jakby napisanie fake’owej aplikacji było proste (grafiki są – jak pisałem – dostępne, cudów tam nie ma, zwykła Java ME i trzy semi statyczne ekrany), to na pewno studenci (taki gatunek człowieka, co to nigdy kasy nie ma, dostęp do wiedzy i czas ma (chyba, że akurat pije, co mimo braku kasy zdarza się często, albo sesja), więc do skutecznego kombinowania pierwszy) by to zrobili. I że pewnie jest algorytm, który na podstawie cyfr/kodu z biletu pozwala zweryfikować prawdziwość biletu offline.

Nie ukrywam, że pozazdrościłem Niebezpiecznikowi opisu hackowania karty IKEI w celu dostania kawy, więc był czas, kawa, motywacja…

Bliższe przyjrzenie się ujawniło, że to, co brałem za QR code, to raczej Aztec code. Na dodatek odwrócone kolory ma (nie doczytałem, czy oryginalny Aztec na to pozwala, na wiki wszystkie są odwrotne). Ale Neoreader czyta to. Po przeczytaniu okazuje się, że twórcy nie ułatwili kontrolerom pracy – nie ma żadnego unikatowego ID zaszytego w tym kodzie. Jest tylko dokładny timestamp kasowania biletu. Opieram się wyłącznie na screenach dołączonych do instrukcji na stronie (dead link) – wyglądają na prawdziwe.

Niestety, inaczej niż w przypadku Niebezpiecznika, ludzie zawiedli. Apel na blipie pozostał może nie tyle bez odpowiedzi (odezwały się 2 osoby, z czego tylko jedna mogłaby pomóc), co bez danych. Pozostali znajomi nie odezwali się jak na razie z danymi, więc zostałem tylko ze swoimi danymi. Szybka analiza wykazuje, że są tak naprawdę 3 dane brane pod uwagę. Dokładny czas kasowania, numer ze strony pierwszej, bieżący numer ze strony drugiej i… tyle. Przy czym numer ze strony pierwszej jest stały (być może dla danego użytkownika, typu usługi, regionu) w trakcie jednego dnia. Natomiast bieżacy numer to po prostu inkrementowane ID w bazie (też nie wiem, czy dla danego typu usługi i regionu, czy transakcji globalnie, ale wiem, ile przyrasta dobowo).

Szybkie odświeżenie wiadomości z pracy magisterskiej i naklepanie prostego AG (algorytmu genetycznego) w Perlu nie przyniosło rezultatu w postaci znalezienia korelacji między datą danego dnia, a numerem ze strony pierwszej, choć na oko wygląda, że taka może istnieć (Perl i algorytm wolne i nie do końca przemyślane). Tak naprawdę czekam na więcej danych, w szczególności chcę porównać, czy dany numer jest stały dla wszystkich użytkowników (i usługi) w danym dniu. Jeśli jest, to ewidentny błąd twórców moBILETu – nawet jeśli nie ma algorytmu, to wystarczy, że jeden student skasuje bilet w danym dniu i przekaże numer innym. I nie da się zweryfikować offline, na podstawie sumy kontrolnej czy czegoś takiego, czy to autentyczny bilet…

Po drugie, za sprawą wpisu u Marcina Kasperskiego dowiedziałem się, że wbrew temu, co mówili sceptycy, słynną Nokię 1100 da się wykorzystać do przechwytywania SMSów z kodami jednorazowymi do transakcji. Czarny scenariusz się sprawdza – kody SMS nie są bezpieczne, istnieje metoda na oszukanie czytnika kart chipowych… Nadchodzą niedobre dni dla banków internetowych?

Po trzecie, atak phishingowy na Lucas Bank (dead link). Tu lekka lipa ze strony banku, bo korzystajac z formularza kontaktowego na stronie nie możemy wprost zgłosić takiego zdarzenia. Co więcej, wymagane jest podanie adresu email. A korzystając z tego formularza wyrażamy zgodę na przysyłanie spamu przez bank. Słowo kretyn w stosunku do osoby, która to wymyśliła nie oddaje w pełni tego, co chcę wyrazić…

UPDATE: Szybkie sprawdzenie z mobiletem kumpla pokazuje, że numer ze strony pierwszej jest stały w obrębie danego dnia dla wszystkich użytkowników (danej usługi, w danym regionie, kupujących dany typ biletu).

Adres IP jako dane osobowe.

W ostatnich dniach GIODO zaszalał nieco i przyczepił sie do blox.pl w sprawie publikowanych adresów IP, że niby są to dane osobowe. Szerzej pisał o tym Dziennik Internautów. Zdania na ten temat są oczywiście podzielone. Przeczytać można wypowiedź prawnika, który twierdzi, że IP to nie dane osobowe. Tymczasem prawda leży – jak to często bywa – pośrodku.

Z jednej strony oczywistym jest, że adres IP to żadna dana osobowa (i – moim zdaniem – GIODO się wygłupił, jeśli z pełną powagą postawił taki zarzut). Tak samo daną osobową nie jest pozycja geograficzna (niebawem również wysyłana przeglądarką), kod pocztowy, samo imię, numer telefonu. Niemniej, w określonych okolicznościach, każda z tych danych może jednoznacznie określać osobę. Wystarczy mieszkać w odpowiednio odludnym miejscu czy mieć wystarczająco mało popularne imię, by można było na ich podstawie jednoznacznie określić osobę.

Jednak co innego wymagania prawne, a co innego dobre praktyki. W jakim celu pokazywać cały adres IP niezalogowanego komentującego wszystkim (także niezalogowanym)? Po co ułatwiać określenie tożsamości osoby, jeśli ta wyraźnie tego nie chce? Tym bardziej, że nie są w tym przypadku równo traktowani wszyscy. Użytkownicy Neostrady są – z racji wymuszanej co 24h zmiany IP – znacznie bardziej anonimowi, niż użytkownicy kablówek o względnie stałych (tygodnie, miesiące) IP.

Rozumiem, że administrator serwisu czy ew. właściciel bloga mogą mieć dostęp do tych danych (a nawet powinni – choćby do celów moderacyjnych, poza tym właściciel łatwo może wstawić odpowiednie narzędzia pokazujące adres IP, albo i znacznie więcej na stronę), ale jakie znaczenie dla pozostałych ludzi ma to, czy ktoś podpisujący się Anonim łączy się z adresu 100.101.102.103, czy z 100.101.102.*. a nawet z 100.101.*.*? Żadne, dopóki nie chce się go namierzyć. A namierza się zwykle w dwóch przypadkach: aby zrobić kuku nielegalnie (wszelkie kwestie plotkarsko-mobbingowo-przestępcze), lub zrobić kuku legalnie (np. komentujący złamał swoim komentarzem prawo). Przy czym w tym drugim przypadku powinna robić to policja/prokuratura i im adres IP na widoku nie jest potrzebny.

Dlatego uważam, że świetnie sprawa adresów IP jest potraktowana w serwisie Hattrick. Dla reszty użytkowników widoczne są jedynie pierwsze dwa oktety adresu IP (czyli widać 100.101.*.*) adresu IP. Resztę widzą (zapewne) administratorzy i moderatorzy.

Świadomość mechanizmów działania internetu i pozostawianych śladów o sobie jest w społeczeństwie nikła (mam wrażenie, że na szczęście dla wielu moderatorów). Lekkomyślne podejście do anonimowości (tej małej, pozornej, na potrzeby ukrycia się przed sąsiadem/współpracownikiem, bo dla policji/prokuratury anonimowi nie są) użytkowników owocować będzie raczej wzrostem popularności narzędzi typu tor, które ułatwiają ukrycie tożsamości na znacznie większą skalę.

Administratorzy blox.pl powinni pamiętać o przytoczonym numerze telefonu (który też daną osobową tak po prostu nie jest, choć może pozwalać na jednoznaczne zidentyfikowanie danej osoby). Praktycznie każdy operator pozwala na jego niepokazywanie innym użytkownikom, przy zachowaniu pełnej informacji o numerze dla siebie. Wydaje mi się, że byłoby dobrze, gdyby adresy IP były traktowane podobnie. Poza warstwą techniczną nie muszą być publicznie widoczne.