Jednym z popularniejszych sposobów zabezpieczenia dostępu do formularzy i innych danych jest CAPTCHA. Zwykle polega na przepisaniu tekstu zapisanego jako obrazek lub plik dźwiękowy, jednak nie są to jedyne sposoby. Ich skuteczność rzadko kiedy jest wystarczająca.
CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart) umieszcza się na stronie po to, aby ułatwić moderację forów, blogów i formularzy pozwalających dodać użytkownikom własną treść. Aby odróżnić prawdziwych internautów od programów spamujących, administratorzy stosują różne sposoby – najpopularniejszy z nich polega na przepisaniu tekstu z obrazka.
Przed czym chroni CAPTCHA?
Dobre CAPTCHA powinno być niezauważalne lub łatwe do odczytania przez człowieka i możliwie niewykonalne przez komputer. Niestety, nawet kilkuprocentowa skuteczność programu potrafiącego je obejść jest wystarczająca, żeby uzyskać dostęp do chronionych zasobów. Programy mogą bowiem niskim kosztem i w krótkim czasie wysłać setki zapytań do serwera. Nawet jeśli tyko kilka z nich ominie zabezpieczenia, będzie to wystarczająca ilość.
Dużo większą niedogodnością jest jednak utrudnianie życia zwykłym czytelnikom. Często zdarza się, że źle zaprojektowane CAPTCHA jest trudnym zadaniem dla internautów, a programy radzą sobie z nimi bez problemów.
Przeciwnikami CAPTCHA nie zawsze są spamerzy. Każde dodatkowe zabezpieczenie jest czasem straconym przez prawdziwych czytelników. Problemy mogą mieć osoby niewidome, korzystające z przeglądarek tekstowych lub nieznające języka, w którym wypowiadane są dźwiękowe CAPTCHA.
Nie utrudniaj życia czytelnikom
Projektując „obrazkowe” CAPTCHA, warto zwrócić uwagę na szczegóły, które na pierwszy rzut oka wydają się utrudnieniem dla komputerów, a w rzeczywistości tylko ułatwiają im pracę.
- rozmycie – programy typu OCR i tak rozmywają tekst, więc tylko przyśpieszy to ich pracę,
- kolorystyka – jeśli tło ma inne kolory niż tekst (np. zawsze czarny), programowi łatwiej będzie je oddzielić,
- niski kontrast – komputer go powiększy rozszerzając histogram, człowiek nie,
- mały tekst – dla programu oznacza jedynie mniej obliczeń, ludzie z wadami wzroku mogą mieć problem,
- odstępy między znakami – duże pozwolą na łatwe oddzielenie znaków, małe utrudnią odczytanie tekstu (także użytkownikom),
- szum, cienkie linie – do wyeliminowania prostym filtrem,
- grube linie – mogą zmylić programy, ale przeszkodzą głównie czytelnikom,
- użycie jednego kroju pisma – pozwoli na łatwe i szybkie dopasowanie do wzorca,
- wstawianie wyrazów zamiast losowych znaków – program znajdzie odpowiednie przyporządkowanie w słowniku,
- użycie znaków takich jak 0 (zero) i O (duże o), 1 (jeden) i l (małe L) itp. – mimo że powstrzyma komputery, to przeszkadza przede wszystkim użytkownikom.
Jak widać, większość popularnych filtrów nie daje prawie nic albo szkodzi jednocześnie użytkownikom i programom. Dość skuteczne sposoby to:
- przekształcenia takie jak uwypuklenie fragmentów tekstu, wiry, fale itp. – wymagające zastosowania nieliniowych filtrów o dużej złożoności,
- ucinanie fragmentów znaków – użytkownik domyśli się jak wygląda np. ucięty dół cyfry 6, komputer nie ma szans.
Nie tylko tekst
Proste odczytywanie tekstów nie jest jedynym sposobem na zabezpieczenie formularza. Jednym z ciekawszych pomysłów na nietypowe CAPTCHA była usługa hotcaptcha.com (aktualnie niedostępna). Z dziewięciu dostarczonych zdjęć należało wybrać osoby, które wyglądają na atrakcyjne. Dostępna była wersja zarówno ze zdjęciami kobiet jak i mężczyzn. Serwis korzystał z bazy witryny hotornot.com, na której użytkownicy oceniają atrakcyjność osób, które umieściły w nim swoje zdjęcia. Mimo że zdecydowanie ciekawszy od nudnego przepisywania liter, system został szybko złamany.
Ciekawym pomysłem jest wygenerowanie zadania matematycznego, którego wynik trzeba podać w wybranym polu. System taki wdrożono np. na stronie http://random.irb.hr/signup.php. Mimo że przykłady nie są trudne, można łatwo się w nich pomylić. Niestety, po pomyłce spotka nas mały problem – stopień skomplikowania zadań drastycznie rośnie. Sparsowanie i obliczenie pierwszego przykładu przez komputer nie stanowi najmniejszego problemu, więc CAPTCHA chroni jedynie przed użytkownikami niepotrafiącymi rozwiązać równań trygonometrycznych i różniczkowych. Ale może o to chodziło?
Podobnie działają wszelkie skrypty proszące o wskazanie zdjęć przedstawiających koty, podanie zależności między przedmiotami („na czym leży książka?”) itp. Ich autorzy liczą na to, że komputery nie będą w stanie rozwiązać abstrakcyjnych problemów, jednak systemy łamane są w inny sposób – poprzez atak na bazę, znalezienie luk w skryptach czy użycie żywych użytkowników do masowego odgadywania haseł.
I tak to złamią
Niestety każde CAPTCHA zostanie w ten lub inny sposób złamane (a pamiętać należy, że wystarczy trafić raz na kilkadziesiąt prób, żeby uznać program za skuteczny). Jeśli tylko chronione dane staną się na tyle popularne, że komuś będzie opłacało się obejść CAPTCHA, pojawią się osoby, które je złamią. Ratunkiem może być stosowanie autorskich rozwiązań chroniących niewiele stron i w razie potrzeby zmiana algorytmów.
Nie zawsze opłaca się inwestować w programistę, który napisze odpowiedni program łamiący. Jeśli CAPTCHA jest trudne, tańszym wyjściem może okazać się zapłacenie wynajętym internatuom za odczytywanie tekstu z obrazków. Jeszcze sprytniejsze jest skopiowanie obrazka i zaserwowanie go użytkownikom własnego serwisu. Domyślenie się, że CAPTCHA nie chroni formularza, ale służy do łamania innych zabezpieczeń jest praktycznie niemożliwe.
Czasem okazuje się, że zabezpieczenia chronią jedynie przed prawdziwymi czytelnikami. Witryna polskiej ambasady na Ukrainie miała swego czasu formularz zabezpieczony standardowym CAPTCHA z kilkoma cyframi do przepisania z obrazków. Mimo że były one generowane losowo, to liczba składała się z oddzielnych plików o nazwach 1.gif, 2.gif itd. Program nie musiał nawet pobierać grafik – wystarczyła odpowiednia manipulacja źródłem strony.
Projektując CAPTCHA, warto zastanowić się nad jego skutecznością i sposobem działania programów odczytujących tekst. Może warto postawić na proste rozwiązania, które nie utrudnią życia użytkownikom, a zatrzymają proste programy spamujące? W końcu złamanie każdego zabezpieczenia to tylko kwestia opłacalności.