Wat is clickjacking?

Clickjacking, soms ook wel “UI redressing” genoemd, is een manier om een gebruiker onbedoeld een actie uit te laten voeren waar een hacker voordeel bij heeft, zoals een wachtwoord veranderen. Clickjacking gaat meestal gepaard met social engineering en (kleine) security fouten.

Een voorbeeld van clickjacking

Andries de Vries* is een bekende blogger op superblog.com. Omdat het account van Andries zo succesvol is wil een hacker het account stelen. Als superblog.com kwetsbaar is voor clickjacking, dan kan een hacker een nep-domein aanmaken die bijvoorbeeld het wachtwoord van Andries veranderd. De hacker maakt in dit voorbeeld de website wineengratisvakantie.nl aan waarop er alleen maar 2x een mail adres ingevoerd hoeft te worden en vervolgens op de button “Nu winnen” geklikt moet worden.

* Deze naam is willekeurig gekozen

ClickJacking voorbeeld

Wat Andries niet ziet, is dat superblog.com op de achtergrond is ingeladen. De hacker doet dit door superblog in te laden met een iframe. Een iframe is een html instructie die de browser vertelt dat een andere website in de pagina ingeladen moet worden. De iframe wordt vervolgens onzichtbaar gemaakt, zodat je niet ziet dat je eigenlijk op de pagina van superblog bezig bent. In feite heeft de hacker nu een lege witte pagina: superblog is nu namelijk onzichtbaar (maar aanwezig) en voor de rest is er nog niets. Nu maakt de hacker een formulier wat precies past op het wachtwoord veranderen formulier van superblog. De “Nu winnen” button valt precies op de “change password” button. Hierdoor lijkt het alsof er mee wordt gedaan om een vakantie te winnen, maar in feite wordt het wachtwoord bij superblog gewijzigt.

De hacker stuurt Andries een mail met de website, dit wordt phising genoemd of ook wel social engineering. Andries dénkt dat hij een vakantie wint, maar in werkelijkheid veranderd hij zijn wachtwoord op superblog.com naar zijn e-mail adres. Omdat de hacker het e-mail adres van Andries weet, kan hij hierna inloggen op het account van Andries. Andries is nu slachtoffer van clickjacking.

Clickjacking voorkomen

In het bovenstaande voorbeeld gaan verschillende dingen mis. Allereerst, Andries klikt op een link uit de phishing-mail. Vervolgens staat superblog.com toe dat deze pagina ingeladen wordt middels een iframe. Daarbovenop is Andries altijd ingelogd, en wordt er niet gevraagd om het oude wachtwoord eerst in te voeren.

Tegelijkertijd is de oplossing heel simpel. Met een Content Security Policy (CSP) kan worden voorkomen dat superblog ingeladen kan worden door een andere website. De CSP header vervangt de x-frame-options header die vroeger gebruikt werd om clickjacking te voorkomen. De header die superblog hiervoor moet meesturen is als volgt:

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

Daarnaast kan superblog natuurlijk ook vragen om een wachtwoord voor gevoelige acties zoals het wijzigen van een wachtwoord, maar dit lost het probleem niet helemaal op, omdat er ook andere acties mogelijk zijn, zoals bijvoorbeeld het verwijderen van een blog bijvoorbeeld.

Meer informatie over het voorkomen van clickjacking staat op de website van OWASP: https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html

Samenvatting

Als een website niet goed geconfigureerd is kunnen andere websites deze inladen. Als gebruikers op een website in kunnen loggen, en ingelogd zijn, dan kunnen ze slachtoffer worden van clickjacking. Om dit te voorkomen:

  • De CSP header meesturen
  • Voorkomen dat gebruikers lang ingelogd zijn, log ze bijvoorbeeld automatisch uit na 2 uur inactiviteit
  • Gevoelige functies zoals het wijzigen van een wachtwoord extra beschermen, bijvoorbeeld door het huidige wachtwoord te vragen

Testen of een website kwetsbaar is voor clickjacking? De Quickscan checkt of de website kwetsbaar is voor clickjacking.

clickjacking