Zachęcanie użytkownika do kliknięcia na dany przycisk to poważne zagrożenie dla bezpieczeństwa online. W dzisiejszym artykule opiszemy formę takiego ataku nazywaną „clickjackingiem”. Omówimy i pokażemy, jak działa oraz jakie są praktyczne metody obrony przed tym niebezpiecznym zjawiskiem, a także jak sprawdzić, czy Twoja strona jest narażona na ten atak.
Co to jest clickjacking?
Clickjacking to technika ataku, w której użytkownik jest nakłaniany do kliknięcia w element strony internetowej, np. przycisk, który jest niewidoczny lub zamaskowany jako inny element. Choć może wydawać się niewinna, stanowi poważne zagrożenie dla bezpieczeństwa online. Może spowodować, że użytkownicy nieświadomie pobiorą złośliwe oprogramowanie, odwiedzą złośliwe strony internetowe, podadzą dane uwierzytelniające lub poufne informacje, prześlą pieniądze lub kupią produkty online.
Zazwyczaj przechwytywanie kliknięć polega na wyświetleniu niewidocznej strony lub elementu HTML wewnątrz ramki „iframe” na górze strony widzianej przez użytkownika.
Poniżej przedstawiamy taki przykład z wykorzystaniem naszej strony Kapitana. Wyświetliliśmy ją z zupełnie innego serwera (testowy IIS) i dodatkowo dodaliśmy nad nią przycisk „Refresh”. Portal jest w całości prezentowany z oryginalnego serwera, z którego pochodzi.
Użytkownik myśli, że klika widoczną stronę, a tak naprawdę klika niewidoczny element na dodatkowej stronie umieszczonej na niej (w naszym przypadku jest to dodana dodatkowa warstwa).
Już na tym etapie zauważyć można, jakie możliwości mają przestępcy do wykorzystywania tego typu ataku. Niewidoczna strona może być złośliwą lub legalną stroną, której użytkownik nie miał zamiaru odwiedzać – na przykład w witrynie bankowej użytkownika, która autoryzuje przelew pieniędzy.
Warto też wspomnieć, że istnieje kilka odmian ataku typu clickjacking, takich jak:
- Likejacking – technika polegająca na manipulacji przyciskiem „Lubię to” na Facebooku, powodująca, że użytkownicy „polubią” stronę, której w rzeczywistości nie mieli zamiaru polubić.
- Cursorjacking – technika poprawiania interfejsu użytkownika, która zmienia kursor w pozycji postrzeganej przez użytkownika na inną pozycję. Cursorjacking opiera się na lukach we Flashu i przeglądarce Firefox, które zostały już naprawione.
Jak przestępcy wykorzystują clickjacking do okradania użytkowników?
Powyższy przykład ze stroną Kapitana to tylko prosta prezentacja możliwości. Ale jak w rzeczywistości korzystają z niej przestępcy? Posłużmy się przykładem zaczerpniętym z życia.
Osoba atakująca tworzy atrakcyjną stronę, która obiecuje użytkownikowi wycieczkę na Filipiny po bardzo zaniżonej cenie. W tym celu rejestruje ciekawą domenę i buduje na niej portal do skorzystania z takiej promocji. Podczas rejestracji użytkownika w tle atakujący sprawdza, czy użytkownik jest zalogowany na swojej stronie bankowej i jeśli tak, ładuje ekran umożliwiający transfer środków, wykorzystując parametry zapytania do wprowadzenia do formularza danych bankowych atakującego.
Strona przelewu bankowego jest wyświetlana w niewidocznej ramce „iframe” nad stroną z darmowymi prezentami, z przyciskiem „Potwierdź przelew” dokładnie ustawionym nad przyciskiem „Odbierz prezent” widocznym dla użytkownika.
Użytkownik wchodzi na stronę i klika przycisk „Zarezerwuj moją podróż”.
W rzeczywistości użytkownik klika niewidoczną ramkę iframe i przycisk „Potwierdź transfer”. Fundusze są przekazywane atakującemu. Użytkownik zostaje przekierowany na stronę z informacją o wycieczce (nie wiedząc, co się dzieje w tle).
Powyższy przykład ilustruje, że w przypadku ataku typu clickjacking złośliwego działania (w tym przypadku na stronie banku) nie można powiązać z osobą atakującą, ponieważ użytkownik wykonał je, będąc legalnie zalogowanym na swoje konto.
Czy Twoja witryna jest podatna na ataki clickjacking?
Podstawowym sposobem sprawdzenia, czy witryna jest podatna na ataki typu clickjacking jest utworzenie strony HTML i próba umieszczenia wrażliwej strony z witryny w ramce iframe. Ważne, aby wykonać kod testowy na innym serwerze internetowym, ponieważ jest to typowe zachowanie w przypadku ataku typu clickjacking.
Poniżej prezentujemy prosty kod strony w HTML, który pozwoli przetestować podatność w konfiguracji X-Frame dla sprawdzanej przez Ciebie witryny:
Jak możemy się chronić przed clickjackingiem?
Istnieją trzy ogólne sposoby obrony przed clickjackingiem:
- Metody po stronie klienta – najczęstsza nazywa się Frame Busting. Metody po stronie klienta mogą być skuteczne w niektórych przypadkach, ale nie są uważane za najlepszą praktykę, ponieważ można je łatwo ominąć.
- Metody po stronie serwera – najczęstsze to opcje „X-Frame”. Eksperci ds. bezpieczeństwa zalecają metody po stronie serwera jako skuteczną linię obrony przed przechwytywaniem kliknięć.
- Stosowanie komercyjnego oprogramowania do ochrony bezpieczeństwa stron www i aplikacji klasy WAF
W przypadku tej drugiej metody ograniczanie kliknięć osiągniemy za pomocą nagłówka odpowiedzi X-Frame-Options.
Opcje X-Frame umożliwiają wydawcom treści zapobieganie wykorzystywaniu ich własnych treści w niewidocznej ramce przez osoby atakujące.
Nagłówek odpowiedzi X-Frame-Options jest przekazywany jako część odpowiedzi HTTP strony internetowej, wskazując, czy przeglądarka powinna mieć możliwość renderowania strony wewnątrz znacznika <FRAME> lub <IFRAME>.
W nagłówku X-Frame-Options dozwolone są trzy wartości:
- DENY – nie pozwala żadnej domenie na wyświetlanie tej strony w ramce
- SAMEORIGIN – umożliwia wyświetlenie bieżącej strony w ramce na innej stronie, ale tylko w obrębie bieżącej domeny
- ALLOW-FROM URI – pozwala na wyświetlenie bieżącej strony w ramce, ale tylko pod określonym URI – np. www.strona.com/frame-page
Przykład dla konfiguracji strony na IIS w pliku konfiguracyjnym „Web.config” wz wykorzystaniem SAMEORIGIN:
<system.webServer>
…
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
…
</system.webServer>
Opcja DENY jest najbezpieczniejsza i uniemożliwia wykorzystanie bieżącej strony w ramce. Częściej używany jest SAMEORIGIN, ponieważ umożliwia użycie ramek, ale ogranicza je do bieżącej domeny.
Jednak stosowanie X-Frame ma też swoje ograniczenia:
- Aby włączyć opcję SAMEORIGIN w całej witrynie, nagłówek X-Frame-Options musi zostać zwrócony jako część odpowiedzi HTTP dla każdej strony (nie można go zastosować między witrynami).
- X-Frame-Options nie obsługuje białej listy dozwolonych domen, więc nie działa z witrynami wielodomenowymi, które muszą wyświetlać między sobą treść w ramkach.
- Na jednej stronie można zastosować tylko jedną opcję, więc np. nie jest możliwe, aby ta sama strona wyświetlała się w ramce zarówno na bieżącym serwisie, jak i na serwisie zewnętrznym.
- Opcja ALLOW-FROM nie jest obsługiwana przez wszystkie przeglądarki.
- Opcje X-Frame to przestarzała opcja w większości przeglądarek.