Co to jest Clickjacking?

Autor: Opublikowano

W skrócie: Clickjacking, nazywany też UI redress attack, polega na nakłonieniu użytkownika do kliknięcia w inny element niż ten, który widzi. Atakujący może na przykład umieścić niewidoczną stronę z przyciskiem nad pozornie niewinnym przyciskiem gry. Właściciel witryny ogranicza takie ataki przede wszystkim przez kontrolę tego, kto może osadzać jej strony, a użytkownik — przez ostrożność wobec podejrzanych interakcji.

Jak działa przechwytywanie kliknięć

Przeglądarka może wyświetlać jedną stronę wewnątrz drugiej za pomocą elementu iframe, czyli osadzonej ramki. To normalna funkcja używana choćby do prezentowania filmów czy map. W ataku clickjacking przestępca wykorzystuje ją do ukrycia prawdziwego celu kliknięcia pod przygotowanym interfejsem lub nad nim.

Typowy scenariusz wygląda tak: użytkownik otwiera stronę kontrolowaną przez atakującego, a ta ładuje w ramce inną witrynę. Ramka jest przezroczysta lub odpowiednio przycięta i ustawiona tak, aby jej przycisk znalazł się dokładnie tam, gdzie użytkownik spodziewa się kliknąć. Użytkownik widzi jedno polecenie, ale przeglądarka rejestruje interakcję z innym elementem.

Atakujący nie musi przy tym odczytywać zawartości obcej strony. Przeglądarkowe ograniczenia dostępu między różnymi witrynami nie wykluczają samego osadzania i kierowania kliknięć. Dlatego ochrona danych przed odczytem oraz ochrona interfejsu przed osadzeniem to dwa odrębne zadania.

Przykład: nagroda, która uruchamia inną akcję

Wyobraź sobie stronę z prostą grą i przyciskiem „Odbierz nagrodę”. Nad tym przyciskiem znajduje się niewidoczna ramka z panelem innego serwisu. Jeśli serwis pozwala się osadzać, a sesja użytkownika działa w tej ramce, kliknięcie może trafić na przycisk wykonujący operację na jego koncie.

Nie oznacza to, że każde wejście na złośliwą stronę natychmiast przejmuje konto. Powodzenie zależy między innymi od zabezpieczeń docelowej witryny, dostępności zalogowanej sesji w ramce i tego, czy operacja wymaga dodatkowego potwierdzenia. Ustawienia plików cookie i ograniczenia przeglądarki mogą utrudnić taki scenariusz, ale nie zastępują ochrony przed osadzaniem.

Możliwe skutki obejmują niezamierzoną zmianę ustawień, wykonanie akcji w serwisie lub zatwierdzenie operacji. Dodatkowe potwierdzenie wymagające świadomego działania użytkownika ogranicza ryzyko, lecz sam kolejny przycisk nie gwarantuje ochrony — atak może próbować poprowadzić ofiarę przez kilka kliknięć.

Czym clickjacking różni się od phishingu i CSRF

W phishingu oszust zwykle podszywa się pod zaufany podmiot, aby wyłudzić dane lub skłonić do określonego działania. Przy clickjackingu użytkownik może natomiast kliknąć element prawdziwego serwisu, tyle że ukryty w mylącym otoczeniu. Obie techniki mogą występować razem, ale mechanizm oszustwa jest inny.

CSRF, czyli wymuszenie niechcianego żądania do serwisu, wykorzystuje uprawnienia zalogowanego użytkownika bez jego świadomej zgody. Clickjacking skupia się na przejęciu interakcji z interfejsem. Token chroniący przed CSRF nie wystarcza do ochrony przed clickjackingiem, ponieważ kliknięcie może uruchomić prawidłowy formularz wraz z jego prawidłowym tokenem.

Również HTTPS nie rozwiązuje tego problemu. Szyfruje połączenie z daną witryną, ale nie potwierdza uczciwości jej interfejsu ani intencji właściciela.

Jak zabezpieczyć własną witrynę

Podstawową ochroną jest nagłówek odpowiedzi HTTP Content-Security-Policy z dyrektywą frame-ancestors. Nagłówek HTTP to informacja wysyłana przez serwer do przeglądarki wraz ze stroną. Dyrektywa określa, które źródła mogą osadzać tę stronę w ramkach.

Jeśli witryna w ogóle nie powinna być osadzana, można zastosować:

Content-Security-Policy: frame-ancestors 'none'

Jeżeli osadzanie ma być dozwolone wyłącznie w obrębie tego samego źródła — tej samej kombinacji protokołu, hosta i portu — odpowiednia wartość to:

Content-Security-Policy: frame-ancestors 'self'

Starszym mechanizmem jest X-Frame-Options z wartością DENY lub SAMEORIGIN. Można go stosować jako zgodne uzupełnienie dla starszych klientów. Dyrektywa frame-ancestors daje bardziej elastyczną kontrolę, na przykład pozwala dopuścić konkretne źródło partnera. Musi być wysłana jako nagłówek odpowiedzi — umieszczenie jej w znaczniku meta nie zapewni tej ochrony.

Praktyczne wdrożenie obejmuje trzy kroki:

  1. Ustal, które strony rzeczywiście muszą działać w ramkach, na przykład jako element integracji z partnerem.
  2. Ustaw odpowiednią politykę na serwerze, w aplikacji lub usłudze pośredniczącej i sprawdź nagłówki w narzędziach deweloperskich przeglądarki.
  3. Przetestuj zarówno blokowanie niepożądanego osadzania, jak i działanie legalnych integracji.

Nie polegaj wyłącznie na skryptach JavaScript próbujących wyłamać stronę z ramki. Takie rozwiązania mają ograniczenia i mogą być obchodzone. Przy wrażliwych operacjach stosuj również ponowne uwierzytelnienie lub potwierdzenie jasno opisujące wykonywaną czynność.

Co może zrobić użytkownik

Unikaj stron, które wymagają serii niezrozumiałych kliknięć, zwłaszcza pod pretekstem odbioru nagrody, odblokowania filmu czy rzekomej weryfikacji. Aktualizuj przeglądarkę, ale pamiętaj, że aktualna wersja nie zastąpi zabezpieczeń po stronie odwiedzanego serwisu.

Jeśli podejrzewasz, że kliknięcie uruchomiło niechcianą akcję, otwórz właściwy serwis samodzielnie, zamiast korzystać z odnośnika na podejrzanej stronie. Sprawdź historię aktywności i zmienione ustawienia, a nieautoryzowaną operację zgłoś obsłudze. Właściciel witryny powinien zacząć od sprawdzenia nagłówka frame-ancestors na stronach konta i panelu administracyjnego.

Zobacz też: Co to jest Mass Assignment?

Przeczytaj także

Dowiedz się, jak PHP-FPM obsługuje żądania PHP, czym różni się od serwera WWW i jak dobrać ustawienia procesów do ruchu oraz zasobów hostingu.
Poznaj BIND, otwarte oprogramowanie serwera DNS: sprawdź, jak obsługuje domeny, czym różnią się jego role i kiedy warto samodzielnie go wdrożyć.
Poznaj najważniejsze Security Headers, ich rolę w ochronie strony oraz sposób sprawdzania i wdrażania nagłówków bez blokowania potrzebnych funkcji.