Ten wpis powstał w ramach zbierania myśli przy przygotowaniu prezentacji, którą ostatnio prowadziłem naForum Bankowości Elektronicznej. Całość dość ogólna, bez technicznego “mięsa”, ale taka jest specyfika tego typu imprez i chyba nie pozostaje nic innego, jak pogodzenie się z nią. Zresztą ankiety oceniające prezentacje pokazują, że uczestnicy takich imprez właśnie takiego przekazu oczekują.
Całość wypada zacząć znanym powiedzeniem:
Kto stoi w miejscu, ten się cofa, bo cały świat idzie do przodu.
Tak samo jest w przypadku bankowości. Funkcjonowanie banków, oferowane produkty i sposób ich oferowania, zmienia się. Często wykorzystywane są najnowsze technologie. Wszystko po to, by klienta obsługiwać w sposób bardziej efektywny, bardziej nowoczesny, zgodny z jego oczekiwaniami.
Postępu nie można ignorować, jeśli ktoś nie chce utracić swojej pozycji, musi wprowadzać do swojej oferty nowe produkty i oferować je w sposób oczekiwany przez klientów. Musi korzystać z nowych technologii. Ale co z bezpieczeństwem?
W tym zakresie tematów jest wiele, tym razem chcę poruszyć tylko te:
Jedną z podstawowych definicji/wymagań odnośnie bezpieczeństwa w kryptografii jest semantic security. Chodzi w niej o to, że atakujący dysponujący wiedzą o algorytmie szyfrowania i zaszyfrowanymi wiadomościami nie może powiedzieć na ich temat nic innego, poza określeniem ich długości.
Tak, pisałem już o tym wielokrotnie. Ale napiszę jeszcze raz. Drogi X. Pamiętaj, że świat jest pełen złych ludzi. Ludzi, którzy zastanawiają się jak wykorzystać każdą rzecz, którą zrobisz dla swojej korzyści. To dobrze, że w trosce o wygodę swoich użytkowników wprowadzasz coraz to nowe, bardziej zaawansowane, nowatorskie funkcje. Spróbuj jednak za każdym razem gdy żądasz/proponujesz/implementujesz kolejną ociekającą fajnością funkcję zastanowić się przez chwilę jak ta funkcja może zostać wykorzystana przez złych ludzi do ich złych celów. Uwierz mi, oni są pomysłowi i gotowi na wiele...
Podam Ci taki obrazowy przykład. To miło, że Twój klient lubi psy. Takie prawdziwe, duże psy. Nie takie nie wiadomo co, które można przypadkiem nadepnąć, przysiąść na kanapie, albo które w trakcie spaceru mogą niespodziewanie odfrunąć do krainy wiecznej szczęśliwości w szponach przypadkiem przelatującego ptaka drapieżnego. To dobrze dla Ciebie, że zdecydował się kupić drzwi Twojej produkcji. Wzmacniane, ze skomplikowanym systemem zamków i blokad. Takie drzwi, dzięki którym ich posiadacz może być pewien, że żaden nieproszony gość nie zjawi się u niego w domu. Ale pomyśl, czy na pewno dobrym pomysłem było dodanie do tych drzwi uchylnej klapki, przez którą pupilek Twojego klienta, wielkości średnio wyrośniętego cielaka, może swobodnie wchodzić/wychodzić do/z domu bez angażowania swojego właściciela do otwarcia drzwi? Ja wiem, my homo sapiens jesteśmy potomkami homo erectus. Ale obawiam się, że osoba, która chce się dostać do środka, niekoniecznie w cnych zamiarach, będzie skłonna do chwilowego schowania dumy do kieszeni i wykorzysta to uchylane udogodnienie do swoich celów. Na czworakach.
I nawet nie są wymagane takie zdolności:[Squeeze](http://en.wikipedia.org/wiki/Squeeze(TheX-Files)). A to, że ten odcinek jest więcej niż pełnoletni, to...
Zacznijmy od końca. Jest coś takiego jak principle of good enough. W wielu przypadkach rzeczywiście wystarczające jest zastosowanie rozwiązania, które jest wystarczająco dobre. A skoro temat ten pojawia się u mnie, można przypuszczać, że będzie o aplikacjach internetowych i bezpieczeństwie. I tak rzeczywiście będzie.
Mam wrażenie, że czasami jest pewien problem ze zrozumieniem tego, czym jest ten XSS i co daje on atakującemu. Podejrzewam, że dla większości osób w jakiś sposób zorientowanych w temacie bezpieczeństwa stwierdzenie możliwość wykonania koduw kontekście atakowanej aplikacji mówi wszystko. Z drugiej strony są osoby, dla których to zdanie brzmi mniej więcej tak: bla bla bla, bla bla bla, bla bla. Postaram się w prosty sposób to zagadnienie wyjaśnić.
Czasami ktoś się coś o mnie pyta. Tym razem dostałem od Mateusza następujące pytanie (fragment):
Podłaczając się do sieci wi-fi (budżetowy, domowy routerek np. D-Link, Linksys). Czy jest możliwe podsłuchanie ruchu https? Rozumiem, że można przeprowadzić atak ARP Spoofing, ale w takim przypadky przy wejściu na stronę zabezpieczoną https, otrzymam komunikat o 'problemie' z certyfikatem. A czy istnieją sztuczki, które pozwolą taki ruch (https) przechwycić i odczytać zawartość, bez powiadamiania użytkownika o problemie z certyfikatem?
Tu są co najmniej dwa tematy. Bezpieczeństwo wifi i bezpieczeństwo HTTPS.
Właśnie przygotowuję się do kolejnej edycji szkolenia z bezpieczeństwa aplikacji internetowych. W tak zwanym międzyczasie miało miejsce kilka spektakularnych wycieków haseł i hashy haseł.
Tak w ramach ciekawostki polecam zapoznanie się z artykułem Our password hashing has no clothes. Troy Hunt pokazuje w nim eksperymentalnie jak efektywne może być łamanie hashy haseł z wykorzystaniem kart graficznych (w tym wypadku: AMD Radeon HD 7970). W tym wypadku atakowane były hashe SHA1, wykorzystany był salt. Jest to o tyle istotne, że ten sposób przechowywania haseł jest domyślny w ASP.NET jeśli korzysta się z domyślnego providera (choć to się zmienia: Stronger password hashing in .NET with Microsoft’s universal providers).
Dla porządku napiszę to jeszcze raz – jeśli masz przechowywać hasła, korzystaj z czegoś w rodzaju bcrypt, scrypt czy PBKDF2. Pamiętaj, że nawet wówczas hashe haseł nie są nieśmiertelne. Kupujesz im tylko trochę więcej czasu.
I ponownie porada dla użytkowników:
używaj długich, złożonych haseł,
używaj różnych haseł w różnych serwisach,
korzystaj z narzędzi do zarządzania/przechowywania haseł (np. KeePass),
OWASP ASVS jest fajny, ale są takie punkty na tej liście, które są dyskusyjne i trochę zależą od interpretacji, albo nie zawsze pasują do wykorzystanego w danym przypadku środowiska. Dziś trochę na temat jednego z takich punktów dotyczącego zarządzania sesją:
V3.2 Verify that sessions are invalidated when the user logs out.
Gynvael już wspomniał o konferencji Security BSIDEs Polska, umieścił również agendę, z której jasno wynika, że pojawię się na niej. Konkretnie będę mówił o aplikacjach mobilnych, dokładniej o mechanizmach uwierzytelnienia w tych aplikacjach i o tym, jak mechanizm ten można spektakularnie zepsuć...
Ciekawy przypadek: Jak zostać słupem? Czyli fałszywe oferty pracy “testera bankowości”. Nie pozostaje nic innego, jak z dużą dozą nieufności realizować jakikolwiek przelew. Bo w końcu skąd mamy wiedzieć, że ten rachunek sprzedawcy na allegro to rzeczywiście jego rachunek, a nie rachunek “techniczny” do aktywacji konta w innym banku? Skąd dane osobowe? Adres dostawy, dane do faktury... Znajdzie się kilka pomysłów.
Mnie pomysł z potwierdzaniem tożsamości przy pomocy przelewu podoba się umiarkowanie. Podejście to zakłada, że:
posiadacz konta ma nad nim przez cały czas wyłączną kontrolę,
posiadacz konta wie, co robi,
W ogólności spełnienie tych dwóch powyższych warunków wcale nie jest takie oczywiste. Opisywany atak wykorzystywał social engineering (często najłatwiejszy sposób ataku), ale warto też pamiętać, że przelewy na niewielkie kwoty w części banków nie wymagają autoryzacji (mechanizm heurystyczny decydujący, czy dana transakcja powinna być autoryzowana, czy nie).
Zanim ktoś zacznie tyradę typu “ale głupi ci rzymianie” przypominam, że banki działają zgodnie z prawem, co wspominał dokładnie w komentarzu Piotrek Konieczny. Szczerze mówiąc ciekawy jestem, jak sprawa się rozwinie. Podpisywanie umowy z klientem przez internet jest dla banków wygodne. Te banki, które chcą szybko zbudować sobie bazę klientów z tego typu rozwiązań chętnie korzystają i mam wątpliwości, czy będą z nich chciały zrezygnować. Ciekawy jestem również tego, jak zakończą się ewentualne spory między bankami a ich nie do końca(?) klientami.