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 je alleen maar 2x je mail adres hoeft in te voeren en op de knop te drukken.
* Deze naam is willekeurig gekozen
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” knopt valt precies op de “change password” knop. Hierdoor lijkt het alsof je meedoet om een vakantie te winnen, maar in feite wijzig je je wachtwoord bij superblog.
De hacker stuurt Andries een mail met de website, dit noemen we phising 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 staat 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 je website niet goed geconfigureerd is kunnen andere websites deze inladen. Als gebruikers op je website in kunnen loggen, en ingelogd zijn, dan kunnen ze slachtoffer worden van clickjacking. Om dit te voorkomen kun je:
- 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
Wilt u testen of uw website kwetsbaar is voor clickjacking? Onze Quickscan checkt of uw website kwetsbaar is voor clickjacking.