Una de las cosas que mas preocupa a los usuarios de internet de hoy en día es el phishing. Existen centenares de páginas web que imitan la portada de paypal, ebay, páginas de banca electrónica etc.
Históricamente este tipo de páginas han hecho uso de todos los mecanismos posibles para engañar al usuario y hacerle creer que está en una página legitima y que debe introducir sus credenciales. Una técnica habitual hoy en día es el tabnabing, que consiste en cargar una página normal y corriente, con un blog por ejemplo, y cuando la página pierde el foco, reemplazarla por una página idéntica a gmail, con favicon incluido.
La carrera por el phishing ha llegado a tal punto, que los timadores han desarrollado todo un arsenal de trucos sucios y rebuscados para hacerte creer que estás en gmail.com y no en una web que lo suplanta.
Una manera habitual utilizada por los usuarios (y casi la única para un usuario de a pie) de comprobar que están interactuando con gmail.com y no con una web que lo suplanta, es comprobar la barra de direcciones (URL).
Comprobar la URL para ver que el dominio coincide antes de introducir los credenciales suele ser una buena idea, sin emargo, durante la investigación de un bug muy extraño en una página web (no relacionado con todo esto) se me ha ocurrido una manera curiosa e ingeniosa de engañar al usuario, incluso si este comprueba la URL.
El truco se apoya en una funcionalidad “poco” conocida de HTML. En HTML es posible enlazar a una página en otro dominio y forzar a que se abra en una ventana/pestaña nueva. Cuando el usuario hace click en el enlace, se abre una nueva ventana o pestaña (depende de la configuración) con la web enlazada.
Los enlaces en HTML se hacen usando la etiqueta anchor, que tiene la forma típica:
<a href=”http://gmail.com”>go to gmail!</a>
Sin embargo, anchor tiene un atributo llamado target que sirve para especificar de que forma se va a abrir este enlace, en una nueva ventana, en la misma, etc.
Si utilizamos un valor arbitrario para target, como por ejemplo “lol”, y creamos un enlace del tipo:
<a href=”http://gmail.com” target=”lol”>go to gmail!</a>
El enlace se abre en una nueva ventana. Pero si se hace click en otro enlace que tenga también definido target al mismo valor, en lugar de abrirse otra nueva ventana/pestaña, se redirecciona la pestaña abierta originalmente.
Esto abre las puertas a un ataque en el cual el usuario hace click en un enlace que le lleva a gmail.com, el usuario comprueba la URL y es efectivamente gmail.com. Sin embargo, al hacer click en el enlace y abrirse gmail.com, la página original desde la que el usuario ha llegado a gmail.com, se ha quedado abierta en otra pestaña/ventana. Entonces, se activa un temporizador que en X segundos redirecciona gmail.com a otra web, con el aspecto de gmail, pero que le dice que la sesión ha expirado.
Esta redirección puede llegar a ser MUY rápida e invisible para el usuario, que volvería a introducir los credenciales ya que ya comprobó la url.
La explicación es un poco compleja, así que un ejemplo vale mas que mil palabras:
Si hacéis click en el ejemplo, veréis un enlace a gmail, al presionarlo se abrirá gmail.com en una nueva ventana/pestaña. Si os quedáis mirando gmail durante unos segundos (8 segundos) veréis que de pronto y sin tocar nada la página que estáis viendo (gmail.com) es sustituida por php.net, sin previo aviso ni interacción por parte del usuario.
El cambio de gmail.com a php.net es MUY obvio, pero el cambio de gmail.com a un dominio malicioso con apariencia de gmail no es tan obvio, y puede suceder en milisegundos.
El problema de este tipo de tricks es que es muy difícil evitarlos sin comprometer la usabilidad del navegador.
Debido a que esto no es un error de seguridad al uso, he decidido publicarlo para abrir debate sobre si esto es realmente peligroso usado malintencionadamente, o si por el contrario pensáis que es inofensivo: aunque creo que cualquiera que vea un ejemplo mas arriesgado con un gmail y una web que imita gmail y que carga en 100ms, estará bastante convencido de que es arriesgado.
Con la web cada vez mas rica en funcionalidades y navegadores cada vez mas potentes, empieza a ser muy difícil mantener protegido y aislado al usuario, especialmente contra ataques phishing.
Hola.
Realmente interesante. Evidentemente es peligroso aunque es una funcionalidad. Creo que es fácil solucionar el problema por parte de los navegadores. Sólo tienen que indicar que ha cambiado la URL de forma automática para que sea validada por parte del usuario. Es decir, que salga algún tipo de indicación visual cuando sucede. ¿crees que es una buena idea?
saludos.
A mi, Firefox me previene la apertura automática, sin yo pulsar, de ventanas emergentes, mientras que TabMixPlus me abre los enlaces a ventanas emergentes que pulso en pestañas nuevas, con lo que el engaño no funciona
Muy buena esta!
Lo peor de este tipo de ataques es que tu no puedes hacer practicamente nada para proteger tu sistema, si el usuario pica ya tienen su login y tu ni te enteras.
Yo personalmente soy de la opinion de que si una funcionalidad puede ser explotada como agujero de seguridad (aunque sea engañando al usuario rollo pishing) debe ser revisada y quizas hasta retirada.
Al final creo que la cosa se reduce en poner en una balanza, por un lado, lo que te aporta la funcionalidad, por otro, el riesgo que supone al poder ser usada para engañar al usuario.
Es un hueco de seguridad que lleva a la discusión de la validación mediante contraseñas.
User y pass es de lo mejor que tenemos y es fácil de configurar o crear. Pero es un pobre método de validación.
Este problema de las páginas fake puede resolverse con un un administrador de contraseñas que valide el dominio (por ejemplo, lastpass.com es el que uso)
En una página fake la contraseña no será enviada, ni siquiera escrita. Pero esto es una delegación del problema.
Además, un ataque en serio puede implicar varios frentes.
Un dominio fake de gmail es una trampa simple pero combinado con un ataque DNS (o una sobreescritura del archivo host) ya es crítico.
El problema radica en que la autenticación mediante contraseña es insuficiente, hay que encontrar otra cosa.
Excelente aporte
Suerte que el Javascript lo tengo prohibido.
Usando Opera no funciona tu truco. De hecho Opera me avisa del intento de redireccionamiento y me lo bloquea.
No todos los navegadores son iguales
buenas,
buen artículo… he ido a probarlo en Opera… y, oh sorpresa, el bloqueador de popups me bloquea la 2ª redirección, la que lleva a php.net… es posible q ignore el target del link…
Mil gracias por hacer público lo que probablemente muchos hhdp (hijos de…) lleven tiempo aprovechando. Personalmente doy gracias a mi instinto, que me hace abrir todos los enlaces con clic derecho-abrir en nueva pestaña; actuando así, tu ejemplo disparó un aviso de Firefox que evitó que se abriera la hipotética pagina fraudulenta.
Tengo un sitio con muy pocas visitas que vigilo diariamente con un analizador de logs que me hice yo mismo. Siempre me ha llamado la atención que determinadas visitas se han descargado el sitio web completito (los he clasiicado como “Piratas”); empiezo a entender porqué.
Opino que es prioritario que tomemos conciencia de que el momento histórico actual de las TIC es algo así como el Salvaje Oeste de los vaqueros: no hay ley, así que de momento impera la del mas fuerte (léase la del que tenga menos escrúpulos).
No funciona en todos, Opera lo bloquea y te avisa de ello, de hecho hasta que no he pinchado en el aviso de bloqueo, no me ha redireccionado a php net.
En Opera no ha funcionado, ha bloqueado el cambio de página como si fuera un pop-up o así, avisándome de ello eso sí.
No conozco el mecanismo usado, pero después de cargar gmail, al de 8 segundos, el navegador (Firefox 7.01 en mi caso) avisa al usuario (la primera vez, en sucesivas no me ha avisado) con la confirmación de “abandonar” de la página web.
Por otro lado, veo que la única contramedida es teclear directamente la URL para accesos a sitios en los que se ha de proporcionar identidad… Venir desde otro sitio web mediante enlaces siempre puede provocar que dicho enlace esté manipulado.
Mi opera bloqueó php.net como ventana emergente, pero mi firefox la reemplazó en lugar de gmail.com sin previo aviso. Si uno no está 100% atento durante toda la navegación, no es difícil cometer un error de este tipo e ingresar contraseñas donde no se debe.
Hey Joca, ¿qué tal?
Yo veo una serie de problemas con tu planteamiento, en primer lugar el enlace debe de ser clickeado desde el navegador (así que nos cargamos de un plumazo la posibilidad de ser afectados por correos en algunos casos).
Por otro lado, al cambiar la web, al menos en firefox, la barra de historial dice algo muy revelador
Finalmente si has escrito algo en el tab antes del cambio por lo visto este no se aplica por lo que se necesita coordinar la transición para que ocurra después de leer la barra de direcciones y antes de escribir nada.
En cualquier cosa enhorabuena por el descubrimiento
Si hasta ahora no se ha usado, es porque en la barra del navegador verías igualmente una url rara. Además que esto es algo que no es un bug por si mismo. Es una característica del html.
Lo que está claro es que si quieres ir a gmail, escribelo en el navegador, no pulses enlaces por pulsar.
Increíble, cada vez más currado!
Es triste obviamente que se lleven a cabo estas actividades, pero siendo sincero, ya puestos a que te “atraquen” prefiero que lo haga un ingeniero o alguien que tiene conocimientos y se lo ha currado, que no un don nadie por la calle.
hAY QUE IR AL LOROOOO!!!
Usen Opera y adiós con este problema. Además, si van a ingresar a su mail o red social, tienen que hacerlo directamente sin clickear ningún enlace. A veces un poco de sentido común junto a la herramienta indicada puede evitarnos un disgusto.
Totalmente de acuerdo con Carola.
Solución a nivel del aplicativo web:
window.name=”;
Opera bloquea este ataque. De hecho ni siquiera llega a cargar la página php y muestra el aviso del bloqueador de ventanas emergentes.
En cambio Firefox 7.0 se come la substitución sin ningún aviso.
en hora buena que uso OPERA, me aviso al instante, pero probé en IE y el truco funciona …… si es que opera ignora el target… lo dudo, opera es muy fiable y estricto, no podria pasar por alto algo as, mas bien que opera esta mejor en su seguridad, y posiblemente los de opera ya saben de este truco y lo han marcado como popup, y obvio la bloquea, de hecho la slucion seria asi, todos los metodos de popups deberian ser bloqueados sin ecepcion alguna, asi como ha hecho opera para detectar que esa cadena del “onclick” segida de un “setTimeout(‘window.open” es una forma de phishing
Interesante, eso aplicado con el SET de Backtrack es mas que fatal xD
En firefox hay un plugin “noscript” que lo blockea