Clickjacking
Clickjacking is een aanval waarbij een kwaadaardige pagina een onzichtbaar iframe over de lokinhoud heen legt. De gebruiker denkt dat hij op een verleidelijke knop klikt; ze klikken feitelijk in een verborgen frame met een andere site. Het klassieke geval zorgde ervoor dat gebruikers Facebook-pagina's "likten" die ze nooit hadden gezien. Moderne varianten stelen betalingen en rekeningwijzigingen.
De volledige artikeltekst vindt u hieronder in het Engels.
Clickjacking (ook wel UI-redress of framing-aanval genoemd) verleidt gebruikers om op iets anders te klikken dan wat ze waarnemen. De aanvaller laadt de doelsite in een onzichtbaar iframe, plaatst deze op een lokinterface en wacht. De gebruiker klikt op de zichtbare aanvalsman; de klik komt terecht op het verborgen iframe; de doelsite ziet een normale interactie van de gebruiker.
Het klassieke voorbeeld
2008: Onderzoekers demonstreerden het overlappen van onzichtbare Facebook "Vind ik leuk"-knoppen op aantrekkelijke aasinhoud ("Klik hier om een iPad te winnen!"). Gebruikers klikten op het aas; hun browser vond stilletjes de Facebook-pagina van de aanvaller leuk. Likes waren authentiek: de gebruiker was ingelogd op Facebook, de browser stuurde normale cookies, Facebook zag een echte geverifieerde klik.
Hetzelfde patroon werkt voor elke UI-actie: instellingen wijzigen, OAuth-machtigingen verlenen, geld overboeken, aankopen bevestigen. Overal waar een ingelogde gebruiker iets kan doen met één klik, kan clickjacking ervoor zorgen dat hij of zij dit doet zonder het te beseffen.
De mechanica
De klassieke implementatie:
iframe { opacity: 0; position: absolute; top: 100px; left: 100px; }
Het iframe wordt precies boven de verleidelijke knopafbeelding geplaatst, maar weergegeven zonder dekking. De gebruiker ziet de afbeelding; de klik gaat door naar het iframe. Met CSS-positionering kan de aanvaller de coördinaten verfijnen, zodat de klik op een specifieke knop op de ingelijste pagina terechtkomt.
Defenses
Ttwee hoofdmechanismen:
- X-Frame-Options header. Oudere HTTP-header die browsers vertelt of de pagina in iframes kan worden ingesloten. Waarden: DENY (nooit framen), SAMEORIGIN (alleen framing op dezelfde site), ALLOW-FROM
(verouderd). Breed ondersteund, eenvoudig te implementeren. - Contentbeveiligingsbeleid: frame-ancestors richtlijn. De moderne vervanging.
Content-Security-Policy: frame-voorouders 'geen'of'self'of specifieke oorsprong. Flexibeler dan X-Frame-Options.
Een van beide headers (of beide) is de standaardverdediging. Sites zonder deze zijn kwetsbaar voor framing.
Varianten en complicaties
- Cursorjacking. CSS-trucs die de zichtbare cursor verkeerd uitlijnen met het daadwerkelijke klikdoel. Grotendeels opgelost door moderne browsers, maar historisch reëel.
- Keystroke jacking. Een soortgelijk concept voor toetsenbordinvoer: de focus ligt op een onzichtbaar iframe.
- Drag-and-drop framing. De gebruiker wordt ertoe aangezet inhoud naar een verborgen frame te slepen, waarbij mogelijk inloggegevens worden overgedragen of data.
- Multi-klik-instellingen. Bij sommige aanvallen moet de gebruiker op meerdere specifieke punten klikken; een reeks lokvogels lokt de gebruiker door de hele stroom.
- Touch-gebaseerde clickjacking op mobiel. Tikdoelen zijn groter en gemakkelijker te verbergen; mobiele browsers hebben een gelaagde verdediging, maar de oppervlakte blijft bestaan.
Wat clickjacking kan bereiken
- LSociale accounts leuk vinden/volgen
- OAuth-machtigingen autoriseren (aanvaller-apps toegang verlenen tot uw gegevens)
- Accountinstellingen wijzigen (e-mail, wachtwoord herstel)
- Aankopen of overdrachten bevestigen
- Camera-/microfoontoestemming verlenen op webapps
- Deep-linked acties inschakelen op verbonden services
De aanval is afhankelijk van het feit dat de gebruiker is ingelogd op de doelsite en wordt misleid om te klikken. De schade schaalt op met de impact die één klik op het doelwit kan hebben.
Sandboxed iframes en het moderne web
Moderne webplatforms bevatten verschillende functies die clickjacking compliceren:
- Cross-Origin-Opener-Policy isoleert browsen contexts
- Permissies API vereist expliciete aanwijzingen voor gevoelige handelingen (camera, microfoon, etc.)
- Vereist gebruikersgebaar - veel API's met hoge impact (schrijven op klembord, volledig scherm, pop-ups) werken alleen als reactie op klikken van gebruikers, waardoor de stille overlay
Gecombineerd met breed inzetbare X-Frame-Options en CSP-frame-voorouders, is klassiek clickjacking tegen goed geconfigureerde sites veel moeilijker dan tien jaar geleden. De categorie is zeldzamer maar niet uitgestorven.
Voor ontwikkelaars
- Stel frame-voorouders of X-Frame-opties in op elke geauthenticeerde pagina
- Voor insluitvriendelijke pagina's (video's, widgets), wees specifiek over toegestane ouders
- Vereist een stapsgewijze bevestiging van kritieke acties (wachtwoord, MFA), zelfs van geverifieerde sessies
- Gebruik de Origin-header om de framingbron te verifiëren voor acties die legitiem werken vanuit embeds
Voor gebruikers
Je kunt clickjacking aan de clientzijde niet eenvoudig detecteren — dat is het punt. De verdediging vindt plaats aan de serverzijde. De algemene hygiëne helpt: blijf niet ingelogd op accounts waar je niet op hoeft te zijn, meld je af bij gevoelige services als je klaar bent, wees op je hoede voor onbekende pagina's met aanbiedingen die te mooi zijn om waar te zijn.
Veelgestelde vragen
- Helpt adblocker tegen clickjacking?
- Gedeeltelijk: sommige advertentieblokkers verwijderen iframes uit verdachte bronnen. Clickjacking op een legitieme, gecompromitteerde site wordt niet geblokkeerd. De betrouwbare verdediging vindt plaats aan de serverzijde (frame-voorouders), en niet aan de clientzijde.
- Zijn mobiele apps kwetsbaar voor clickjacking?
- In mindere mate dan op internet, omdat de mobiele gebruikersinterface niet dezelfde overlay-mechanismen heeft. Mobiele equivalenten ("tapjacking" op Android via overlay-machtigingen) bestaan, maar zijn geleidelijk vergrendeld door het besturingssysteem. Modern Android vereist expliciete gebruikerstoestemming voor SYSTEM_ALERT_WINDOW overlay-toestemming.
- Waarom wordt de aanval ‘jacking’ genoemd?
- De samenvoeging "click-jacking" werd in 2008 bedacht door Jeremiah Grossman en Robert Hansen. Het legt het kapen van legitieme klikken door aanvallers vast.
- Hoe controleer ik of een site zich laat framen?
- Probeer het in een iframe te laden via ontwikkelaarstools of een eenvoudige HTML-pagina. Als de pagina binnen het iframe wordt geladen, ontbreken er headers voor framebescherming en is deze mogelijk kwetsbaar voor clickjacking. Veel beveiligingsscanners controleren dit automatisch.
- Heeft clickjacking de laatste tijd tot grote incidenten geleid?
- Minder dan tijdens de piek van 2008-2015, maar bugbounty-platforms zien nog steeds clickjacking-rapporten op kleinere sites. Grote sites hebben over het algemeen de juiste headers. Minder onderhouden beheerdersinterfaces, interne tools en oudere SaaS zijn de plekken waar clickjacking-oppervlakken verschijnen.