Clickjacking
Bei einem Clickjacking-Angriff wird der Benutzer dazu gebracht, mit einer Zielseite auf eine Weise zu interagieren, die er nicht beabsichtigt hat.
Um dies zu erreichen, erstellt der Angreifer eine Lockvogel-Seite, die die Zielseite des Benutzers innerhalb eines <iframe>
-Elements einbettet. Die Seite des Angreifers verbirgt das <iframe>
und richtet einige Lockvogel-Elemente so aus, dass sie an derselben Stelle erscheinen wie die Elemente auf der Zielseite, die sensible Aktionen auslösen. Wenn der Benutzer versucht, mit diesen Lockvogel-Elementen zu interagieren, interagiert er tatsächlich mit der Zielseite und kann dazu gebracht werden, dort Aktionen durchzuführen, die er nicht beabsichtigt hat.
Ein Clickjacking-Beispiel
Nehmen wir an, die Website der Bank des Benutzers ist https://my-bank.example.com
. Der Benutzer bleibt in der Regel auf dieser Seite angemeldet. Zur Vereinfachung sagen wir, dass die Seite über eine Schaltfläche verfügt, die alle Gelder des Benutzers an den Angreifer überträgt — obwohl dies offensichtlich unrealistisch ist, ist es plausibel, dass die Seite einige interaktive Elemente hat, die eine sensible Operation durchführen.
Der Angreifer erstellt eine Webseite, die enthält:
- ein
<button>
-Element, dessen Inhalt den Benutzer ermutigt, darauf zu klicken - ein
<iframe>
-Element, das die Bank-Seite einbettet.
<button id="fake-button">Click here for a free kitten!</button>
<iframe width="800" height="200" src="https://my-bank.example.com"></iframe>
Im CSS der Seite sorgt der Angreifer dafür, dass:
- das
<iframe>
versteckt wird, zum Beispiel durch Setzen deropacity
auf null - der Button so platziert wird, dass er an derselben Stelle wie der Button "Transfer all your money?" ist.
iframe {
opacity: 0;
}
#fake-button {
position: absolute;
top: 185px;
left: 90px;
}
Das Ergebnis sieht folgendermaßen aus (wir haben die <iframe>
-Transparenz auf 0.1
gesetzt, damit Sie die Überlagerung sehen können):
Wenn der Benutzer versucht, auf "Click here for a free kitten!" zu klicken, klickt er tatsächlich auf den unsichtbaren "Transfer all your money?"-Button auf der Bank-Website. Wenn der Benutzer bereits angemeldet ist, wird die Anforderung, die an den Server der Bank gesendet wird, die echten Anmeldedaten des Benutzers enthalten und die Anforderung wird erfolgreich ausgeführt.
Clickjacking-Abwehrmaßnahmen
Clickjacking hängt von der Tatsache ab, dass die Zielwebsite in der Lockvogel-Seite des Angreifers innerhalb eines <iframe>
eingebettet ist. Die Hauptabwehrmaßnahme besteht darin, diese Möglichkeit zu verbieten oder zumindest zu kontrollieren.
Hierfür gibt es zwei relevante Werkzeuge:
- Die
frame-ancestors
-Direktive in einer Content-Security-Policy - Der
X-Frame-Options
-Antwortheader.
Die frame-ancestors
-Direktive ist ein Ersatz für X-Frame-Options
. Durch das Setzen von X-Frame-Options
und frame-ancestors
kann das Einbetten in Browsern verhindert werden, die frame-ancestors
nicht unterstützen. Da die Unterstützung für frame-ancestors
in Browsern sehr gut ist, ist dies kein großes Problem.
Wenn frame-ancestors
und X-Frame-Options
beide gesetzt sind, ignorieren Browser, die frame-ancestors
unterstützen, X-Frame-Options
.
Als zusätzliche partielle Gegenmaßnahme sollten Websites das SameSite
-Cookie-Attribut für Sitzungs-Cookies auf Lax
oder Strict
setzen. Anfragen aus eingebetteten Kontexte wie <iframe>
-Elementen, die nicht same-site mit dem obersten Dokument sind, werden diese Cookies nicht enthalten, und der Server wird die Anfrage daher nicht als von einem angemeldeten Benutzer kommend behandeln.