lunes, 16 de marzo de 2015

No me mires el User-Agent que te meto un XSS {o un SQL Injection}

Es un hecho que el método más común y utilizado por las aplicaciones web para conocer el tipo de navegador usado por cada cliente se basa en el valor de la cabecera HTTP User-Agent que se envía desde el propio web browser. Como este es un campo que cualquiera puede modificar, desde hace muchos años se estudian diferentes formas de averiguar el navegador exacto que es mediante las técnicas de web browsing fingerprinting de las que desde hace ya más de siete años se les comenzó a dedicar algún artículo en este mismo blog.


Figura 1: No me mires el User-Agent que te meto un XSS {o un SQL Injection}

A pesar de que en la navegación web del día a día, la información de esta cabecera pase desapercibida para el usuario medio, el navegador está constantemente enviando información sobre sí mismo como la versión exacta del software, el motor de renderizado, etcétera, algo que no siempre gusta a la gente de seguridad, ya que también se filtra información sobre el propio sistema operativo, como la versión y la arquitectura del mismo.
Figura 2: Cabecera HTTP User-Agent enviada por defecto desde un Firefox en Windows

El valor de User-Agent y la seguridad informática


Este exceso de información en el valor del User-Agent tiene muchas connotaciones desde el punto de vista de la seguridad, ya que para un Kit de Explotación es fácil identificar el exploit concreto que se debe ejecutar, o qué tipo de ataque client-side se puede lanzar a un determinado usuario, sobre todo si hablamos de dispositivos móviles.

Debido a estas posibilidades, muchos navegadores de Internet cuentan con extensiones y complementos que permiten hacer spoofing de la cabecera User-Agent y establecer un valor personalizado, que puede usarse desde para pretender ser otro navegador, simular ser el bot de Google y ver menos publicidad en los periódicos, detectar infecciones de BlackSEO haciendo cloaking o auditar el código de una web mostrado a los distintos motores de renderizado.

Además, para las aplicaciones web, esta cabecera aporta gran cantidad de información sobre el cliente, por lo que es habitual almacenarla permanente para posteriormente obtener estadísticas de los navegadores más utilizados, sistemas operativos de los usuarios, dispositivos, versiones de software, etcétera. Por lo tanto, se puede considerar a la cabecera User-Agent como un parámetro más de entrada, al igual que lo es un parámetro querystring, y como tal se debería validar en caso de utilizarlo, ya que como dijo Michael Howard:
 "All input is Evil until it proves otherwise"
Ya hemos visto en el pasado exploits de Time-Based Blind SQL Injection ejecutados a través de valores User-Agent, y una manera sencilla de comprobar si el programador de una web está capturando esta cabecera y validándolo correctamente, es instalarse un complemento para modificar la cabecera User-Agenty establecer un valor que debería filtrarse.
Figura 3: Complementos para spoofear el valor de User-Agent

Un test de XSS con inyecciones en la cabecera User-Agent

Para esta demostración he instalado en Mozilla Firefox - se escoge Firefox por no tener filtro Anti XSS - un complemento que permita cambiar el User-Agent. Este complemento queda accesible desde el menú Herramientas y permite elegir unUser-Agent entre algunos configurados por defecto, o añadir uno personalizado. Para el caso a tratar, hay que añadir uno nuevo, accediendo al menú ‘Edit User Agent’.

En la nueva ventana se muestran los diferentes valores de User-Agent configurados en el complemento. Desde aquí se pueden añadir nuevos, borrar los existentes o editar cada uno de ellos. Pulsando el botón ‘New’ aparece una ventana, donde hay que definir el nuevo User-Agent. Lo único necesario es establecer en el campo ‘Description’, el nombre que se desee que tenga el nuevo User-Agent. Dicho nombre aparecerá en el menú del complemento para seleccionarlo cuando se quiera utilizar. Para esta demostración se establece el nombre ‘XSS Alert’ y en el campo ‘User Agent’ se introduce el valor que se desea enviar en la cabecera. Como la demostración trata de comprobar si las webs validan entradas maliciosas, se introduce el valor <script>alert('User Agent XSS')</script>
Figura 4: Creando un valor de User-Agent con inyección de un XSS clásico

Lo único que queda es acceder al menú Herramientas, y seleccionar el User-Agent recién creado. Ahora hay que buscar una página web que interprete el script que se ha indicado en la cabecera. Para ello, desde el navegador he realizado una búsqueda con las palabras "What Is My User Agent" y he ido accediendo a las páginas webs que se han encontrado en los primeros resultados. Los primeros que aparecen son webs dedicadas simplemente a mostrar el valor de User-Agent con el que se ha realizado la petición.
Figura 5: Búsqueda de sitios web que muestran el valor del User-Agent

El resultado del experimento ha sido bastante curioso, pues de una primera página con sitios devueltos desde Google con 10 URLs, en 3 de ellas aparecerá una bonita ventana de alerta con el texto 'User Agent XSS', un claro reflejo de que a día de hoy queda mucho camino por recorrer en materia de concienciación de seguridad.
Figura 6: Uno de los sitios que se come el XSS en el campo User-Agent

Viendo esto, si tienes una aplicación web que captura estadísticas y las mete en una base de datos o las muestra por un portal web de administración, comprueba muy bien el valor que te pueda llegar, no te vayas a comer un XSS o algo peor.

Autor: Ioseba Palop
Ingeniero Faast (Eleven Paths)

lunes, 9 de marzo de 2015

I, Robot: Cómo leer el periódico online sin tanto anuncio

Supongo que como muchos, la publicidad exagerada en los portales de noticias no os gustan demasiado. Parece que la web ha vuelto a los años 80 o 90 con tanto bannery tanto anuncio de políticas de cookies - que no tienen mucho sentido cuando es evidente -, pero hay que entender que ése el modelo de negocio para muchos sitios. Viendo todo esto, me pregunté si le estarían entregando toda esa publicidad también a los bots de los buscadores cuando les indexan, ya que el entregar una web tan pesada y con recargas después de la publicidad, suele ser malo par el SEO, así que decidí echarle un ojo a los principales periódicos y resulta... que Google no ve tanta publicidad.


Figura 1: I, Robot o "cómo leer el periódico online sin tanto anuncio"

Para entender lo que sucede, hay que hablar de las técnicas de cloaking, que se utilizan para mostrar distinta información a los bots que utiliza Google para indexar que al usuario final que se conecta.

Navegando con el User-Agent de GoogleBot

Esto, como ya he dicho, se suele utilizar como forma de dirigir mejor el SEO de una web, y algunas veces Google ha penalizado cuando se hace intentando manipular la indexación de resultados de manera descarada cambiando radicalmente el contenido que se muestra al usuario con el que se muestra al bot.

Figura 2: User-Agents utilizados por los bots de Google

Este filtrado de contenido en función del cliente no siempre se hace para engañar aGoogle en campañas de BlackSEO sino que a veces se hace por otros motivos que tienen que ver con la eficiencia, el mejor ajuste de contenido o directamente porque hay impacto en el negocio del sitio. En cualquier caso, sea el motivo que sea, una web puede hacer un filtrado por dirección IP de origen, por el valor de HTTP Refererdel que venga o por el campo User-Agent que muestre el navegador, y mostrar una página web diferente en cada caso.
Figura 3: Cambiar el User-Agent en Mozilla Firefox para simular ser GoogleBot

Yo quería ver si al GoogleBot le estaban mostrando tanta publicidad, así que me fui a la página de Google a buscar cuáles era los últimos valores de User-Agent que estaba utilizando, y me configuré varios utilizando las herramientas de Mozilla Firefox para configuración del campo User-Agent que permiten hacer un spoofingdel auténtico navegador.
Figura 4: Página de El Pais mostrada si se navega con el User-Agent por defecto de Mozilla Firefox

Una vez hecho esto, fui a navegar a la misma página del periódico, y me sorprendió - en positivo - que no me aparecía tanta publicidad en la web, solo porque estaba navegando con el User-Agent de GoogleBot.

Figura 5: Página de El País si se navega con el User-Agent de GoogleBot

Esta misma prueba la realicé en varios periódicos, y el resultado fue más o menos similar. Como se puede ver en esta primera captura, aparece un banner superior en la portada y otro banner en la misma página.

Figura 6: Página de El Mundo si se navega con el User-Agent por defecto de Mozilla Firefox

Mientras que navegando con el User-Agent de GoogleBot ya no hay tanta publicidad en la página, y la navegación es mucho más cómoda. Todo, sin hacer uso de ningúnadblock o similares.

Figura 7: Página de El Mundo si se navega con el User-Agent de Google Bot

Cambiar el USER-Agent en los dispositivos móviles

Este truco de cambiar el User-Agent se puede utilizar también en los dispositivos móviles. En el caso de iPhone o iPad, es necesario hacerse con un navegador que permita utilizar otro valor de User-Agent, como por ejemplo Sleipnir, que tiene una opción de personalización. Yo he configurado el valor del User-Agent de GoogleBot, tal y como se ve en estas imágenes.
Figura 8: Configuración de un User-Agent de GoogleBot en Sleipnir para iPhone

Después, se puede comparar la misma web de el periódico El Mundo vista con elUser-Agent normal de Safari Mobile en iOS y vista con el User-Agent de GoogleBoten el navegador Sleipnir.

Figura 9: A la izquierda navegación con User-Agent GoogleBot en Sleipnir.
A la derecha navegación con el User-Agent normal de Safari Mobile en iOS.

La misma prueba, pero con el periódico de El País, donde también desaparecen algunos anunciones con solo simular ser un GoogleBot.

Figura 10: A la izquierda navegación con User-Agent GoogleBot en Sleipnir.
A la derecha navegación con el User-Agent normal de Safari Mobile en iOS

En Android esto se puede hacer de igual forma con cualquier web browser que permita editar el valor de User-Agent, pero ten cuidado a la hora de elegir el navegador, ya que en Android hay muchos navegadores que son inseguros a ataques de man in the middle.
Aligerando tráfico para ganar velocidad con GoogleBot SmartPhone

Puede que los anuncios no se muestren porque las casas de publicidad no quieren contabilizar y pagar las impresiones automatizadas, así que los Ad Servers pueden filtrar estos User-Agent y no enviarlos. Pero lo cierto es que es una ayuda y puedeahorrar tráfico tanto en conexiones de pago como hacer que vaya más ligero el contenido en conexiones de poca velocidad.

Figura 11: Valor de User-Agent usado por Bot de Google Smartphone

Recordad que el truco de cambiar el User-Agent por el de Google, se puede hacer también por el User-Agent de la versión móvil, es decir, del smartphone, para lograr que ahorra tráfico en conexiones muy lentas.

Figura 12: Pagína de El País en versión móvil vista con el User-Agent de GoogleBot SmartPhone

Por ejemplo, la versión móvil de El País con el User-Agent de GoogleBot Smartphone va superligera y con muy poca publicidad. Así que puede ser una muy buen alternativa para utilizar tanto en el dispositivo móvil como en el equipo de escritorio. Esto, por supuesto funcionará mientras no apliquen técnicas avanzadas de Web Browsing Fingerprinting.

Saludos!

lunes, 2 de marzo de 2015

WhatsSpy-Public: Cómo te pueden espiar las conexiones de WhatsApp

No es la primera vez que sale una prueba de concepto similar a WhatsSpy-Public e incluso salieron servicios online que podían hacer algo como esto. La idea de esta herramienta es monitorizar tres parámetros de cualquier número de teléfono que tenga cuenta de WhatsApp, que son "Foto de Perfil", "Última Conexión" y "Mensaje de estado", permitiendo que alguien haga un seguimiento completo de tu actividad en WhtasApp - eso sí, sin poder acceder a ninguna de tus conversaciones -.

Figura 1: WhatsSpy-Public: Cómo te pueden espíar las conexiones de WhatsApp

No es la primera vez que se hacen este tipo de servicios, y hace mucho tiempoAlejandro Ramos (@aramosf) - escritor del premiado libro Hacker Épico - monitorizó los mensajes de estado de todos los teléfonos de WhatsApp de España, para sacar datos curiosos. Sacar fotos del perfil de una cuenta de WhatsApp se ha podido hacer públicamente antaño, y desde la publicación de un par de fallos de privacidad en WhatsApp Web se puede volver a hacer.


Figura 2: Bug de Privacidad de foto descubierto en WhatsApp Web

En el último de los casos, la última conexión es algo más de diseño del sistema de chat en sí, que de la implementación de WhatsApp. Lo que permite una monitorización constante de ese valor, es decir, de si está online o no y cuál fue la última vez que se vio conectado a alguien es que se haga una linea temporal de cuándo se conecta una persona.

Figura 3: WhatsSpy-Public. Foto, time-line de conexión y estado

Esto es lo mismo que yo os publiqué hace no mucho tiempo en Telegram, ya que el sistema se basa en el mismo concepto. WhatsApp está baneando todas las cuentas que usaban los servicios que monitorizan los estados de conexión, pero si utilizas una cuenta personal, a WhatsApp se le hace más difícil bloquear esto, y esto es lo que hace WhatsSpy-Public.

Figura 4: Monitorización de horas de conexión en Telegram

Al final, la pregunta de cómo espiar WhatsApp es de lo que más recibo, y lo que la gente hace con estas lineas temporales de conexión es compararlas. Se ponen dos juntas y se mira si hay patrones de conexión a las mismas horas. Normalmente esto es algo enfermizo, pero por desgracia la gente puede llegar a estas cosas. 

Figura 5: Petición de "piratear" el WhatsApp de una persona recibida

Seguramente WhatsApp arreglará pronto los problemas del estado y de la foto de perfil, mientras se pueda consultar la fecha de conexión, el last-seen puede ser calculado. Mientras tanto, estas avisado de estas cosas.

Saludos Malignos!