24 marzo 2009

Mentalismo 2.0 (la solución)

En el post anterior presentábamos, a modo de broma, un problema que en muchos casos es desconocido y que tiene implicaciones bastante mas serias de las que parece.

Para empezar, el 'truco' que usábamos en nuestra Maquina Zoltar es un fallo que viene de antiguo (2006-2007) con respecto al uso de hojas de estilo CSS, que permite interrogar a un navegador por las webs donde ha estado previamente.

El fallo fue inicialmente reportado por Jeremiah Grossman que hacía uso de Javascript para interrogar al navegador por los sitios web visitados, posteriormente (malas noticias para los amigos de NoScript), la gente de ha.ckers.org perfeccionó el ataque sin necesidad de hacer uso de Javascript (en este último trabajo es en el que se basa nuestra maquina Zoltar).

El ataque supone una merma considerable de la privacidad ya que, si bien no se puede obtener el historial de navegación integro, si que se puede averiguar 'preguntándole' al navegador web.

¿Que supone esto? bueno, pongamos escenarios: tu puedes ir, por ejemplo, a la web de www.empresa.com con idea de entregar tu CV en su sección de RRHH y ellos, mientras introduces tu CV, averiguar si eres asiduo de webs eróticas, deportivas o de la competencia.
Imaginemos una intranet en la que los empleados realizan tramites administrativos, una empresa podría averiguar si ese trabajador se ha conectado, por ejemplo, a infojobs.

Ni que decir tiene del valor que puede tener para una compañía que venda sus productos online poder saber si tu eres usuario de la competencia, incluso para ofrecerte descuentos especiales

Pero el tema es realmente mas peligroso, cuando tu buscas algo en google, google formatea las URLs de una forma conocida (por ejemplo: http://www.google.com/search?hl=es&q=securitybydefault&btnG=Buscar+con+Google&lr=) y sabiendo esto, se puede averiguar si, por ejemplo, tu has preguntado a google por 'pornografia infantil' o 'matar a mi jefe'.

¿Inquietante, verdad? Las soluciones, aparte de tener activado en tu navegador el borrado del historial de navegación en cada sesión, poco mas se puede hacer. En firefox hay dos extensiones orientadas al tema, pero ambas están desactualizadas y no funcionan en Firefox 3.x: SafeHistory SafeCache

anieto2k referenció hace tiempo una peculiar forma de explotar este bug.

16 comments :

Anónimo dijo...

¿no es el navegador el que interpreta el css, mira si la dirección del link ya la has visitado y visualiza el resultado adecuado?
¿cómo es posible que el servidor obtenga esa información?

Yago Jesus dijo...

En el caso del primer ataque, usando JavaScript queda claro que puedes 'programar' acciones en funcion del estado que aparezca el tag CSS. En el caso del metodo 2 (sin javascript) lo que hace es crear un tag background: que apunta al CGI del servidor, y que se lanza en caso de que la web se haya visitado, pudiendo de esta forma, logear la IP y la web que se ha visitado

sefirotsama dijo...

Pues en mi caso no funcionó, usando iceweasel (el fierafox de debian lenny) ni tampoco usando konqueror.

El primer caso siempre me decia as.com y el blog de enrique dans (webs en las que creo que nunca he entrado, además que no me aparecia google que abro a menudo). Pensé que era cachondeo la entrada porqué en el segundo link que era un archivo de texto plano me aparecia vacio.

¿Seguro que eso funciona para todos los navegadores? ¿Será que la gente de debian se lo ha currado más parcheando el software? Tendré que probarlo en otro ordenador porqué no me acabo de creer la história esta.

Grácias por la respuesta

Yago Jesus dijo...

@sefirotsama Hombre, lo publicado aqui no es algo que se haya descubierto ahora y que esté en fase especulativa, es algo que ha sido publicado y presentado en la Black Hat (por ejemplo) y del que existe abundante información en Internet. Yo lo he probado con Explorer 6-7, Firefox 3 y Opera 9.

Lo que si es posible es que ese navegador tenga activado el modo 'navegación privada', que, segun me apuntó Enrique hacia que los datos fueran erraticos. Pruebalo en un Firefox normal y me cuentas.

Anónimo dijo...

Con Opera averiguó que web había visitado, pero no tuvo acceso al historial de páginas, salía vacío.

>> s E t H << dijo...

la solución seria hacer que el navegado ignore los a:visited de css. si supiera hacer addons de firefox lo haría.
capaz que se puede adaptar el que ya existe para que funcione en ff3

http://ha.ckers.org/weird/CSS-history.cgi

sefirotsama dijo...

Des de un firefox 3.07 me da los mismos resultados y las opciones son por defecto (probado en un gentoo).

por cierto la lista errónea es siempre la misma (absurda en mi caso y en el de la persona a la cual pertenece este ordenador):

www.as.com
www.marca.com
www.elpais.com
www.elmundo.es
www.meneame.net
www.barrapunto.com
www.microsiervos.com
www.enriquedans.com
www.hazteoir.org

(si consulto el CGI en cambio, la lista está en blanco)

Es curioso que no aparece ni google ni propiamente securitybydefault que son las dos ultimas que he visitado (y algunas de esa lista no se han visitado nunca en éste equipo).

Seguro que a los que os ha afectado tenéis el equipo actualizado??

Yago Jesus dijo...

@sefirotsama creo que no lo has entendido bien, la idea no es obtener todo tu historial de navegación, la idea es averiguar si has visitado esas webs que hemos puesto; es decir, tu si no has visitado ninguna, te sale en blanco, si visitas barrapunto, deberia aparecer barrapunto como visitado y asi, con todas. Pruebalo y nos cuentas

sefirotsama dijo...

No es por decepcionar... pero en un windows XP con SP1 y internet explorer 6, tampoco funciona la cosa...

Ah y con firefox 3.07 en este entorno tampoco. El resultado es el mismo, la lista que posteé antes y en el caso de mirar el cgi aparece en blanco...

Eh y no miento (lo prometo).

Bueno, si a alguien le funcionó que diga las características de su sistema...

Lo que me parece raro es que siempre aparezca esa lista...

Yago Jesus dijo...

@sefirotsama, lee mi comentario anterior, que esto va camino de convertirse en un dialogo de Gila ;-)

Anónimo dijo...

Soy el primer anónimo.
En el ataque sin javascript, ¿a qué te refieres con un tag background? Perdona mi ignorancia

sefirotsama dijo...

Mira que soy tozudo.

Sí que funciona (he repasado el comentario como digistes).

Me marca las que he visitado de la lista tal y como dices.

Sin embargo en el caso del CGI sigue sin funcionar (almenos uno de dos).

Disculpa las moléstias.

Por cierto, esto en konqueror.

Yago Jesus dijo...

@Anonimo-del-javascript: Si te fijas, en el código fuente de la aplicación que colgue en security-projects, puedes ver cosas como esto:
#menu a:visited span.span0 {
display:block;
background: url(Zoltar.cgi?80.32.56.1.94080617616-0);
position:absolute;
top:0;
left:22em;
width:5.5em;
font-size:0.9em;
color:#c00;
border:1px solid #c00;
}
Si te fijas, puedes ver como al fijar el tag background, lo que hace es llamar al CGI dandole la IP y el link que has vistado, por eso se registra en el servidor.

@sefirotsama No te preocupes, no es molestia ninguna, lo del CGI, intenta conectarte a la web, pulsar F5 para que se re-cargue y llamar al CGI, si no te sale prometo dedicarte un Post de Expedientes X :)

sefirotsama dijo...

Nada, en konqueror no hay manera posible para el CGI, en cambio en Iceweasel (fierafox de debian) sí que funcionan tanto el CGI como el otro listado.

No hace falta que publiques una entrada con mi expediente X, sencillamente puede ser konqueror o khtml (por lo que si alguien tiene safari que diga).

En todo caso veo interesante reportar alguna solución a los developers para prevenir éste agujero.

Anónimo dijo...

El anónimo le da las gracias por la aclaración :)
La próxima vez leeré el código antes de preguntar.
Elegante, simple y funcional la técnica del tag background, como a mí me gustan :)

Anónimo dijo...

Si navegas sin imágenes no se registra en el servidor ;).