Es un tipo de ataque en el cual se engaña al usuario a hacer click en un contenido invisible o escondido del sitio web, como por ejemplo un botón invisible sobre otro que dispare la acción maliciosa, esto difiere de CSRF ya que en este ataque se forja el request y en clickjacking depende de una acción del usuario.
Clickjacking no es protegido por tokens CSRF ya que el contenido es cargado por el mismo sitio web y todas las peticiones ocurren dentro del mismo dominio, estos ataques usan CSS e IFrames para crear y manipular capas sobre la interfaz gráfica.
<head>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
...
<body>
<div id="decoy_website">
...decoy web content here...
</div>
<iframe id="target_website" src="https://vulnerable-website.com">
</iframe>
</body>
Como construir un ataque clickjacking
El IFrame se construye para que quede sobre el objetivo de manera precisa con los valores adecuados de alto, ancho y z-offset, la opacidad se coloca cerca de 0.0 para que quede transparente, algunos navegadores tienen protección contra esto como Chrome así que se debe ajustar la opacidad para que no levante alarmas.
Si se identifica una vulnerabilidad DOM XSS se puede disparar usando clickjacking.
Prevenir Clickjacking
A nivel del servidor la protección contra este ataque se basa en definir y restringir el uso de componentes como los IFrame, sin embargo, esto depende del navegador, existen dos mecanismos para para proteger del lado del servidor como X-Frame-Options y Content Security Policy.
X-Frame-Options
Esta cabecera provee control sobre los IFrames y otros objetos con lo cual se prohíbe su inclusión con la directiva deny.
X-Frame-Options: deny
Si se coloca la directiva sameorigin solo permite desde el mismo origen, si se requiere permitir un sitio externo se puede colocar allow-from
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://normal-website.com
Content Security Policy (CSP)
Es un mecanismo de detección y prevención que provee mitigación contra ataques XSS y Clickjacking, es usualmente implementado en el header de retorno:
Content-Security-Policy: “//policy//”
Esto provee al cliente con información sobre fuentes permitidas que el navegador puede usar para detectar e interceptar comportamientos maliciosos.
Para protegerse de clickjacking se debe incorporar la directiva frame-ancestors
Content-Security-Policy: frame-ancestors 'self'; esto es similar a X-Frame-Options sameorigin
De manera alternativa IFrames pueden ser restringidos con:
Content-Security-Policy: frame-ancestors normal-website.com;