Hace
unos días Google lanzó una extensión open source para Google Chrome,
"Password Alert", que busca principalmente mitigar
los ataques de phishing dirigidos a
obtener cuentas de Google.
Además de comprobar si cada
página visitada "parece" un
phishing de cuentas de Google (comprobando el código HTML en busca de
patrones), compara lo que escribes en ésta con tu contraseña de Google, que la extensión
almacena localmente de forma segura. Concretamente, guarda parte (37 bits) del
SHA1 salteado, lo que evita recuperar la contraseña original en un ataque de
fuerza bruta. Ya que se almacenan pocos bits del hash, habría muchas entradas
de la función hash cuya salida coincidiese con el hash parcial que se almacena,
evitando
la fácil recuperación de la contraseña original.
Esto último tendría relevancia en
el caso de que el atacante pudiese obtener el hash parcial almacenado
localmente, lo que sería una grave vulnerabilidad. Pero no se conoce que sea
posible realizar un ataque de estas características. Lo que sí es posible es
evitar que la extensión sea completamente efectiva. Tan pronto como publican un
parche que corrige una forma de evasión, se publica otra. Y en el momento de
publicación de esta noticia, vuelve a
ser posible evitar que funcione correctamente la extensión.
Paul Moore, un consultor de
seguridad informática publicó en menos de 24 horas tras la publicación de la
extensión, la primera forma de evitar el aviso que genera la extensión cuando
se detecta un phishing de Google. El problema residía en que el aviso se
ejecutaba en el mismo contexto que el código JavaScript de la página, y bastaba
con ejecutar cada 5 milisegundos una función que buscase el aviso por 'id' y lo eliminase. Ésta era la prueba
de concepto, a incluir en cualquier parte del HTML de la página que quisiese
evadir la extensión:
****
**** CÓDIGO:
<!-- BYPASS GOOGLE'S PASSWORD ALERT "PROTECTION" --> <script type="text/javascript"> setInterval(function() { if(document.getElementById("warning_banner")) { document.getElementById("warning_banner").remove(); } }, 5); <script>
****
La respuesta de Google no se hizo esperar. El mismo día (30 de abril) se publicó un parche que corregía esta forma de evasión, trasladando el aviso a una nueva pestaña, evitando así que fuese eliminado por el código JavaScript de la web sospechosa al estar en un contexto distinto. La versión 1.4 de la extensión veía la luz.
El día siguiente (1 de mayo),
Moore desarrolló otra prueba de prueba de concepto que evitaba que se detectase
el tecleo de la contraseña. Esta vez lo consiguió registrando una función para
el evento 'keypress', que refrescase
la página cada vez que se registrase una pulsación de teclado. Este método no
es tan estable como el anterior, ya que requiere que el usuario teclee la
contraseña a una velocidad moderada o alta, para que no le dé tiempo a la
extensión a ejecutarse entre actualizaciones de la página. En cualquier caso,
Moore afirma que funciona la mayoría de las veces. Pero se publica la versión
1.6 de la extensión y deja de hacerlo.
Tal y como hemos podido comprobar
desde Hispasec, la última versión de la extensión disponible en la Chrome Web
Store en el momento de escribir esta publicación (la 1.6) sigue siendo
evadible. Basta con incluir la página que se quiere disimular en un 'iframe' con el atributo 'sandbox="allow-forms"'.
Esto hará que se desactive JavaScript para ese 'iframe' (entre otras cosas) y por ese atributo, permitirá
formularios, que es lo que usan típicamente los phishings para robar
credenciales. Y si además se quiere evitar el aviso inicial consecuencia de la
búsqueda de patrones en la página web, se puede aprovechar que la extensión
sólo comprueba los primeros 100 kilobytes de la página. Repetir cualquier
etiqueta 'meta' al principio para rellenar,
por ejemplo, es suficiente.
A pesar de que esta extensión
está cubierta por el programa de Google que recompensa por encontrar vulnerabilidades
en sus productos, lo cierto es que Google nunca se ha pillado los dedos con
esta extensión. Antes de anunciarse ésta públicamente, ya especificaron en el SECURITY.md
en GitHub que ninguna forma de evitar la detección de phishings iba a estar
cubierta por el programa. Y que de hecho esperaban tener que jugar al gato y al
ratón según los atacantes fuesen desarrollando formas de evasión. Y que si los
atacantes se esforzasen con ahínco en ello, se pensarían el meter la
funcionalidad directamente en Chrome, para complicarlo aún más.
Más información:
Protect your Google Account with Password Alert
(Anuncio oficial)
Código fuente relacionado con
guardar la contraseña
Behold: the drop-dead simple exploit that nukes
Google’s Password
Alert (Primeraprueba de concepto)
Google’s new version of Password Alert blocking
bypass is bypassed
(Segunda prueba de concepto)
Conversación en Twitter sobre la
última prueba de concepto para la versión 1.6
Elemento HTML 'iframe'
Carlos Ledesma