Seguridad web

Clickjacking

Se lee en aproximadamente 3 minutos

Qué es el clickjacking

El clickjacking es una técnica de ataque que utiliza iframes transparentes o invisibles para superponer una página web legítima en la pantalla del usuario, induciendo operaciones de clic no intencionadas. También se conoce como UI Redressing (suplantación de UI).

El atacante crea una página trampa y superpone el sitio objetivo como un iframe transparente. El usuario ve los botones y enlaces de la página trampa, pero lo que realmente está haciendo clic son los elementos del sitio objetivo dentro del iframe transparente. Esto permite ejecutar operaciones como pulsar "me gusta", cambiar configuraciones o aprobar transferencias sin que el usuario se dé cuenta.

Funcionamiento y métodos del ataque

El clickjacking se ejecuta siguiendo estos pasos.

  1. El atacante crea una página web trampa. Coloca contenido atractivo (botón de reproducción de video, juego, formulario de sorteo, etc.).
  2. Carga el sitio objetivo en un iframe y lo configura como opacity: 0 (completamente transparente) con CSS.
  3. Superpone el iframe transparente exactamente sobre los elementos clicables de la página trampa.
  4. Cuando el usuario hace clic en el botón de la página trampa, en realidad se hace clic en el botón del sitio objetivo dentro del iframe transparente.

Métodos avanzados

  • Abuso de arrastrar y soltar: Utilizar la operación de arrastre del usuario para introducir datos en formularios dentro del iframe transparente.
  • Cursorjacking: Desplazar la posición mostrada del cursor respecto a la posición real, haciendo que el usuario haga clic en un lugar no intencionado.
  • Ataque de múltiples pasos: Inducir múltiples clics, incluyendo hacer clic en el botón "Aceptar" de diálogos de confirmación.

Cuando se combina con XSS o CSRF, se pueden construir escenarios de ataque más complejos.

Implementación de medidas de defensa

El núcleo de la defensa contra clickjacking es prevenir que el propio sitio se incruste en iframes de otros sitios.

Directiva frame-ancestors de CSP

La directiva frame-ancestors de CSP controla los orígenes de las páginas padre que pueden incrustar el sitio en iframe. Es la medida más recomendada.

  • frame-ancestors 'none': No permite la incrustación en iframe desde ningún sitio.
  • frame-ancestors 'self': Solo permite la incrustación desde el mismo origen.
  • frame-ancestors https://trusted.example.com: Solo permite la incrustación desde un origen específico.

Encabezado X-Frame-Options

Medida utilizada desde antes de CSP y que sigue siendo ampliamente soportada.

  • X-Frame-Options: DENY: Rechaza toda incrustación en iframe.
  • X-Frame-Options: SAMEORIGIN: Solo permite la incrustación desde el mismo origen.

Configurar tanto CSP frame-ancestors como X-Frame-Options asegura la compatibilidad con navegadores antiguos mientras se aplica la protección más reciente.

Defensa con JavaScript (frame busting)

Un script como if (top !== self) { top.location = self.location; } que escapa al marco superior cuando se carga dentro de un iframe. Sin embargo, como el atacante puede restringir la ejecución de JavaScript con el atributo sandbox, solo debe usarse como complemento a las medidas con encabezados HTTP.

Lista de verificación práctica de medidas

Lista de verificación para implementar de forma segura las medidas contra clickjacking.

  • Verificación de configuración de encabezados de seguridad: Confirmar que todas las respuestas de página incluyen X-Frame-Options: DENY (o SAMEORIGIN) y CSP frame-ancestors.
  • Identificación de páginas que necesitan incrustación en iframe: Para páginas que necesitan permitir iframe por razones legítimas, como incrustación de formularios de pago, restringir estrictamente los orígenes permitidos.
  • Protección de operaciones importantes: Para operaciones importantes como cambio de contraseña, transferencias y eliminación de cuenta, requerir reautenticación (reingreso de contraseña) además del token CSRF.
  • Combinación con HSTS: Forzar HTTPS y prevenir la eliminación de encabezados de seguridad mediante ataques de intermediario.
  • Pruebas regulares: Probar regularmente si el sitio puede ser incrustado en iframe. Se puede verificar con las herramientas de desarrollo del navegador o escáneres de seguridad.

El clickjacking por sí solo puede no parecer causar un gran daño, pero combinado con ingeniería social, es una técnica de ataque poderosa que puede ejecutar operaciones importantes sin que el usuario se dé cuenta. Como se puede defender solo con la configuración de encabezados HTTP, es una medida de seguridad con una relación costo-efectividad muy alta.

Conceptos erróneos comunes

El clickjacking es una técnica de ataque antigua que ya no es una amenaza
Aunque fue reportada por primera vez en 2008, todavía hay muchos sitios que no configuran X-Frame-Options o CSP frame-ancestors, y los ataques siguen siendo efectivos. Se siguen reportando ataques dirigidos a botones de 'me gusta' de redes sociales y pantallas de autorización OAuth.
El frame busting con JavaScript es suficiente para defenderse
Los atacantes pueden restringir la ejecución de JavaScript con el atributo sandbox del iframe o impedir el escape del marco con el evento onbeforeunload. La defensa con encabezados HTTP (X-Frame-Options, CSP frame-ancestors) es obligatoria, y JavaScript es solo una medida complementaria.

Términos relacionados

Artículos relacionados