El mundo digital es un lugar emocionante lleno de oportunidades, pero también es un lugar donde los ciberdelincuentes buscan explotar cualquier vulnerabilidad. Una de estas vulnerabilidades es el clickjacking, una técnica de ataque que puede engañar a los usuarios para que realicen acciones no deseadas en un sitio web sin su conocimiento o consentimiento. En esta publicación, vamos a explorar qué es el clickjacking, cómo podemos probar nuestra página web para detectar esta vulnerabilidad y, lo más importante, cómo podemos protegernos contra ella.
¿Qué es el Clickjacking?
El clickjacking, también conocido como «secuestro de clics», es un ataque de ingeniería social donde un atacante engaña a un usuario para que realice una acción en una página web, cuando en realidad están realizando una acción completamente diferente en otra página web. Esto se logra superponiendo elementos de la interfaz de usuario de una página web legítima con una página web maliciosa, de tal manera que cuando el usuario interactúa con lo que cree que es un elemento legítimo, en realidad está interactuando con un elemento malicioso.
Prueba de Concepto
Para realizar una prueba de concepto de un ataque de clickjacking, puedes utilizar la herramienta Jack de SensePost, que está disponible en GitHub. Jack es una herramienta basada en web que te permite diseñar y probar ataques de clickjacking en un entorno controlado.
Para empezar a usar Jack, necesitas clonar el repositorio de Jack en tu sistema local:
git clone https://github.com/sensepost/jack.git
Una vez clonado el repositorio, encontrarás un archivo index.html
en la carpeta principal. Este archivo contiene la interfaz de usuario de Jack que puedes utilizar para diseñar y probar ataques de clickjacking.
Para usar Jack, abre el archivo index.html
en tu navegador web. Verás un campo de entrada donde puedes introducir la URL de la página web que deseas probar para detectar vulnerabilidades de clickjacking.
Después de introducir la URL, pulsando sobre «Load» Jack intentará cargar esa página en un iframe.
Se puede observar cómo ha cargado un formulario de login sencillo. Para la prueba, he creado un formulario muy sencillo de login y lo he guardado en un fichero login.html que después he cargado en la herramienta Jack.
Lo siguiente sería arrastrar los componentes de Email, Password y Login para superponerlos al formulario real.
Una vez tenemos realizado este paso, podemos darle a «View» para visualizar el resultado. En la siguiente imagen se puede ver cómo están superpuestos (lo he desajustado un poco para que se pueda apreciar).
Como podemos ver, nuestra página web legítima está insertada en un iframe con nuestros campos maliciosos superpuestos. Cuando un usuario introdujera sus credenciales y pinchara sobre el botón «Sign In», la página maliciosa capturaría las credenciales sin que el usuario fuera consciente.
Cómo Prevenir el Clickjacking
La prevención del clickjacking implica una combinación de medidas de seguridad tanto del lado del cliente como del servidor. Aquí hay algunas técnicas que puedes utilizar:
-
Utilizar la cabecera X-Frame-Options: Esta es una de las formas más efectivas de prevenir el clickjacking. Esta cabecera HTTP puede tener tres valores: «DENY», «SAMEORIGIN» o «ALLOW-FROM». «DENY» prohíbe que tu página se muestre en un iframe, «SAMEORIGIN» sólo permite que tu página se muestre en un iframe en el mismo origen, y «ALLOW-FROM» permite que tu página se muestre en un iframe en un origen específico.
-
Implementar la Política de Seguridad del Contenido (CSP): La CSP es una cabecera HTTP que permite controlar cómo se carga y se ejecuta el contenido en una página web. Puedes usar la directiva
frame-ancestors
en la CSP para controlar qué sitios pueden incrustar tu página en un iframe. Aquí tienes un ejemplo de cómo configurar la CSP para prevenir que tu página sea incrustada en iframes en sitios de terceros:cssContent-Security-Policy: frame-ancestors 'self'
Esta política permite que tu página se muestre en iframes sólo en el mismo origen.
-
Utilizar JavaScript para detectar el framing: Si bien no es una solución completamente segura, puedes utilizar JavaScript para detectar si tu página se está mostrando dentro de un iframe y, si es así, redirigir la página a la versión principal. Aquí tienes un ejemplo de cómo hacer esto con javascript:
if (top !== self) {
top.location = self.location;
}Ten en cuenta que esta solución puede ser burlada por atacantes sofisticados, pero podría funcionar como una capa adicional de protección.
-
Diseño y estilo adecuado: Asegúrate de que los elementos de la interfaz de usuario de tu página web estén diseñados de tal manera que sea difícil para un atacante superponer elementos maliciosos sobre ellos sin que el usuario se dé cuenta. Por ejemplo, evita el uso de botones y enlaces que sean muy grandes o que no tengan un borde claramente definido.
-
Educación y concienciación: Asegúrate de que los usuarios de tu sitio web estén al tanto de los riesgos asociados con el clickjacking y conozcan las mejores prácticas de seguridad en línea, como no hacer clic en enlaces sospechosos y mantener sus navegadores actualizados.