SOMBRERO NEGRO Conferencia de Estados Unidos. Botnet de un millón de navegadores. Parte 1Matt Johansson: Ahora te mostraré cómo ingresar este código. Hay muchas redes publicitarias, pero elegimos esta porque nos permite hacer lo que queremos.

Puede seleccionar una imagen de banner de un tamaño suficientemente grande, insertarla aquí y asignarle una URL, de modo que después de hacer clic en el banner, el usuario vaya al sitio deseado. Los propietarios de esta red publicitaria proporcionan la opción HTML JavaScript, suena muy bien.
Comenzamos con lo que se muestra en la parte superior de la diapositiva y tuvimos que pasar por todo el proceso de aprobación, que probablemente fue el más difícil en nuestro estudio. Esto no sucedió por las razones que pensó, sino porque no representan JavaScript muy bien y realmente no les importa. De hecho, se aseguraron de que el anuncio se viera hermoso y funcionara como un anuncio, para que no pudiera seguir nuestro camino invisible y simplemente marcar nuestro código JavaScript místico en algún lugar en segundo plano.
Insertamos el script de ejecución de código que Jeremy desarrolló, lo ves en el cuadro de texto en la ventana inferior, y fue aprobado por los anunciantes sin ningún problema. Sin embargo, queríamos poder reconfigurarlo en cualquier momento para diversificar nuestra investigación, porque cosas como las URL a menudo cambian. Pero si quisiéramos probar algo nuevo, tendríamos que revivir el proceso de aprobación. No lleva mucho tiempo, pero es molesto, porque a veces lo aprobaron, y a veces no les gustó algo al respecto y tuvimos que hacer cambios.

Por ejemplo, una vez que una aplicación de correo abrió etiquetas de script, todo el código JavaScript desapareció y tuve que moverlo. Tuve que explicarles por qué es necesario poner menos de 1 signo aquí, y hay 1 signo más, después de lo cual dijeron que los anuncios no se mostraban correctamente, en general, fue divertido.
Entonces, colocamos el código directamente en el banner publicitario, ingresando solo el script de origen donde se encontraba nuestro archivo, que podríamos cambiar en cualquier momento sin la aprobación de los propietarios de la red publicitaria. De esa manera, incluso si de alguna manera contrataran personas que conocieran el análisis estático del código JavaScript, podríamos cambiar nuestro archivo a un JavaScript completamente benigno. Por lo tanto, sería muy difícil detectar nuestro fraude con este método de introducción de código malicioso.
La siguiente diapositiva muestra nuestro banner publicitario.

Aprobaron una de estas opciones de diseño. Era demasiado vago para buscar otras imágenes, así que tomé esta idea del sitio web corporativo de WhiteHat. El texto es muy simple: "Obtenga un período de prueba gratuito de 30 días, ¡solicítelo ahora!". Haga clic en el banner, ¡es completamente gratis!
Jeremy Grossman: dentro del código del banner había una etiqueta de script para la ubicación de nuestro archivo campaign.js en:
ec2-23-20-141-160.compute-1.amazonaws.com/campaign.js , que se veía así:
for (var i = 0; i < 10000; i++) { var img = new Image(); var url = 'http:
Podríamos cambiarlo en cualquier momento y en cualquier momento sin ninguna aprobación. No sabíamos cuánto tiempo tuvieron estos navegadores para ver nuestros anuncios en esta red publicitaria en particular, por lo que en lugar de 100, 200 o 300 visitas, detuvimos inmediatamente a 10,000, esperando lo mejor.
Matt Johansson: comenzando con algo pequeño, queríamos ver si podíamos lograr que los usuarios se contactaran con nosotros. Pudimos ver esto en nuestro extremo de la red, vimos a todas las personas que siguieron nuestro enlace porque las solicitudes provenían de sus navegadores y pudimos determinar sus direcciones IP. Primero, queríamos ver cómo implementamos esto y cómo funciona el código, porque no era el servicio donde pagaba por los clics, pagamos el tiempo de visualización garantizado.
Jeremy Grossman: aquí hay otra captura de pantalla, esta es una demostración "fácil" que preparamos especialmente para BlackHat.

Abajo a la izquierda, verá el servidor Amazon AWS, que continúa funcionando en este momento. La métrica inicial se muestra a continuación: el tiempo de trabajo del servidor en la red de anuncios de Matt es de 8 minutos, el número total de accesos es 4130, este no es el número de visitantes únicos al sitio, pero las solicitudes web reales con un volumen de tráfico total de 1.9 MB, el número de solicitudes simultáneas es 5. Vemos el protocolo para registrar métricas, registros del servidor web, así como la cantidad de minutos en tiempo real de visitas al sitio que pagamos.
Matt Johanson: si miras la siguiente diapositiva, puedes ver un salto que ocurrió entre 8 y 10 minutos: el número total de accesos aumentó a 15 mil.

Todo esto solo se puede hacer con 1 anuncio colocado en la red publicitaria. Si solo puede agregar más fondos a la red publicitaria, se verá como un "pico en el valle". Quiero decir que todo esto fue posible gracias a los minutos comprados del navegador, y dentro de los 10 minutos del servidor trabajando con la red publicitaria, recibimos alrededor de 15 mil solicitudes.
Entonces notamos algo interesante. Permítame recordarle que no teníamos una red publicitaria tradicional, pagamos los minutos del navegador, es decir, alguien nos proporcionó su navegador para formar parte de esta red mágica, de hecho, nos vendieron la hora de su navegador y la hora de su procesador. Decidimos ver qué está sucediendo en el fondo de esta red, qué navegadores se usan allí, queríamos jugar un poco con Firefox y similares.
Y luego descubrimos que muchas llamadas de PhantomJS ingresan a nuestra red. ¿Quién está familiarizado con PhantomJS? Solo veo unas pocas personas.

PhantomJS es un navegador sin cabeza, es decir, un navegador que se puede ejecutar en dispositivos sin pantalla, como un servidor. Es decir, no se trata de alguien sentado en Internet y haciendo clic en las pestañas del navegador en su escritorio, sino de un robot. Se puede usar para pruebas unitarias y se inicia desde la línea de comandos. Es decir, alguien lideró su juego en nuestro sistema, tratando de obtener minutos. Así que otras personas abusan de él de varias maneras, y fue divertido verlo. Nos aseguramos de que los minutos no sean personas reales haciendo clic en su navegador, sino bots PhantomJS.
Jeremy Grossman: las siguientes diapositivas muestran la dinámica del proceso: en 15 minutos recibimos 28,000 solicitudes, en 20 minutos casi 44,000 solicitudes, en 22 minutos el número de solicitudes llegó a 61500.
Matt Johansson: Puede notar que el tráfico total es muy pequeño, simplemente les enviamos una URL que no existe, por lo que 8.5 MB en 20 minutos significa que los usuarios acaban de recibir un error 404.
Jeremy Grossman: casi 26 minutos, y obtenemos 82 mil visitas, luego 35 minutos, 9 solicitudes simultáneas y casi 102 mil accesos.
Matt Johanson: ahorramos nuestro dinero hasta el final para dar un golpe decisivo con nuestras "impresiones", que cuestan casi $ 20, después de que la red publicitaria funcionó durante 30 a 45 minutos en modo normal. En realidad, tenía la intención de gastar un máximo de $ 10 por día en este estudio. Entonces, después de 43 minutos, tuvimos 255 solicitudes, 133.5 mil accesos, y nuestra red alcanzó el pico de tráfico en 54 minutos: 256 solicitudes y 244425 visitas.

Mire las solicitudes simultáneas a las que nos dirigimos: 255, el servidor Apache no funcionará más rápido, luego las capturas de pantalla muestran que el servidor no desea reiniciar para actualizar los datos métricos. Después de que el número de visitas alcanzó 130 mil, y el tráfico ascendió a 36 MB, decidimos aumentar un poco el rendimiento del servidor y les indicamos que descarguen la aplicación "Especialista en Seguridad de Aplicación (ASS)", por lo que ahora tenemos aún más "asnos" certificados en el campo de la seguridad. Después de eso, el volumen de tráfico aumentó bruscamente a 117 MB. Después de 55 minutos, tuvimos 256 mil visitas con 253 MB de tráfico.
Jeremy Grossman: finalmente, después de 59 minutos y 48 segundos, es decir, una hora después de que el servidor comenzó a funcionar y 20 minutos después de que se descargó la imagen, la cantidad de tráfico alcanzó 1 GB. Después de eso, decidimos dejarlo por un tiempo, por ejemplo, durante siete horas, dejarlo funcionar.
En la siguiente diapositiva verá el resultado de nuestro sistema en 8 horas: más de 4 millones de visitas, 114.7 GB de tráfico.
Matt Johansson: cometimos el mismo error que la primera vez que fuimos a cenar. Entonces, antes de comenzar a reproducir la red publicitaria, ya sabes, teníamos, por ejemplo, 30,000 visitas en un montón de horas, y todavía estábamos jugando con nuestro código, por lo que pensamos que obtendríamos otras diez mil visitas durante la hora del almuerzo. Cuando volvimos, miramos, sí, bien, un poco más de 30 mil, pero luego nos dimos cuenta, no 30 mil, sino un orden de magnitud más, ¡300 000 vistas!
Si gastara más dinero, obtendría muchas más "impresiones" mucho más rápido, pero en nuestro caso después de 18 horas y 42 minutos del servidor, tuvimos casi un millón de visitas y 240 GB de tráfico, por lo que el alojamiento de Amazon nos costó más que piratear una publicidad. red
Jeremy Grossman: finalmente, después de 1 día y 6 horas con 241 GB de tráfico, tuvimos casi un millón y medio de visitas. Como puede ver en esta diapositiva, en ese momento utilizamos casi todos nuestros minutos en el sistema y decidimos que no necesitábamos más minutos. Sin embargo, no sabíamos cómo irían las cosas allí y lo que sucedería en el medio de la noche, así que entramos al comercio electrónico por BlackHat y compramos otro minuto.
Matt Johansson: No te recomiendo esto, porque tuve que romper mi regla de no gastar más de $ 10 por día.

Jeremy Grossman: Ahora teníamos casi 250 GB de tráfico. Verá que las líneas se ejecutan rápidamente en la pantalla, estos son los registros del servidor Apache, luego verá la captura de pantalla "Esta página no está disponible", porque el servidor no pudo hacer frente a la carga y murió con éxito. Podríamos pasar por todos los registros hasta el final, pero llevará demasiado tiempo. Entonces, para todo el placer, pagamos solo $ 20 y al final obtuvimos una falla clásica del servicio DoS, expresada en el rechazo de la solicitud de carga de imágenes. Después de eso, simplemente apagué la carga de imágenes simplemente restableciendo la configuración. Podría habilitarlo nuevamente, pero no quiero mostrarle mi contraseña de root.
Matt Johansson: Tenga en cuenta que deshabilitamos la imagen porque notamos que las visitas reales se ralentizaron cuando proporcionamos la imagen. Ni siquiera hemos agotado todo el límite de conexión. No usamos Firefox para este hack, solo teníamos 6 conexiones simultáneas al navegador. Estábamos muy nerviosos, por lo que no presionamos este gran botón rojo para iniciar el rastreo de FTP, porque no sabíamos qué podía pasar. Nos decidimos por métodos legales, pero incluso el uso de métodos legales nos impresionó bastante.

Por lo tanto, sin siquiera probar métodos de piratas informáticos y sin gastar mucho dinero, puede lograr resultados decentes. La diapositiva muestra que después de 1 día, 20 horas y 40 minutos, se gastaron 243 GB de tráfico en vistas, es decir, su volumen permaneció prácticamente sin cambios, ya que las imágenes ya no se cargaban. Cuando nos reunimos aquí esta mañana antes de la conferencia, pensé que tendríamos unos 15 millones, por lo que ahora, después de unas horas, obtuvimos 20 millones de visitas a la página con un error 404.
Jeremy Grossman: la única razón por la que no pudimos "bombear" más tráfico es el rendimiento del servidor. Podríamos usar una plataforma más potente y alcanzar 100 millones o mil millones de visitas, pero para un servidor Apache relativamente lento, esta es una tarea imposible.
Matt Johansson: por lo tanto, nuestros resultados no son particularmente impresionantes, pero ustedes pueden tener una idea del proceso de escala, por lo que dañar sitios normales no requerirá mucho dinero.
Jeremy Grossman: Bueno, ahora que hemos logrado este resultado, intentaremos eludir las restricciones del navegador sobre la cantidad de conexiones que usan FTP, ejecutar nuestro script y ver qué sucede.
Matt Johansson: Sí, mucha gente viene a Las Vegas para gastar su dinero en máquinas tragamonedas, y aquí gastamos nuestro dinero en redes publicitarias.
Jeremy Grossman: Entonces, hemos conectado más de 400 conexiones FTP al servidor de Amazon, entonces, ¿quién sabe qué pasará ahora?
Obtuvimos la métrica del servidor, luego desaparecimos nuevamente, la página web es inaccesible nuevamente, pero puede ver qué tan rápido parpadean las líneas de registro. Simplemente reiniciemos, porque el servidor está realmente muerto y el navegador toma un tiempo de espera.
Matt Johansson: no sabemos cómo se comporta FTP en relación con las redes publicitarias y no sabemos qué sucedería si no utilizara bots, sino navegadores de usuarios reales. Espero que comprendan que no pirateamos a nadie, sino que simplemente descubrimos cómo funciona la red, para lo cual alquilamos servidores especialmente. Cumplimos plenamente con el aspecto legal del problema, y usted tuvo ideas sobre cómo divertirse en las redes publicitarias.
Ni siquiera intentamos infringir la ley, pasamos por este proceso de aprobación, teníamos JavaScript relativamente benigno y no malicioso, ni siquiera tocamos las redes publicitarias "para adultos", aunque viste que a menudo no les importaba lo que sucedía con los anuncios publicitarios.
Jeremy Grossman: Escuché una buena pregunta: ¿de dónde vienen los registros de Apache?
De hecho, por defecto en Apache no hay registros. Quizás hablaré sobre esto más tarde. Tenemos Austin Apache, acabo de descargarlo e instalarlo. Déjame ejecutarlo. Verás, no hay registros aquí, es un servidor local. En el servidor de Amazon, ve el error 408: el servidor no responde porque se ha excedido el tiempo de espera para esperar una respuesta a la solicitud de página. El envío HTTP no se usa aquí, pero el puerto 80 todavía está abierto y tiene muchas conexiones. Volvamos a nuestras diapositivas: aquí todo está bien, puedes cerrarlas.
Entonces, viste lo que hicimos mientras estábamos del lado derecho de la ley. Obviamente, como dijo Matt, podríamos ir mucho más lejos, como suele ser el caso en el mundo de la seguridad de la información. Las redes publicitarias que conoces tienen muchos desarrolladores de software. Pero créanos, en realidad no son desarrolladores de software, simplemente gestionan sus redes publicitarias en sus plataformas publicitarias.

Una de las herramientas que utilizan ampliamente es OpenX, un servidor de anuncios o motor de anuncios. Este es un software de código abierto.
Es utilizado por muchas redes publicitarias y, como suele suceder, hace unas semanas alguien descubrió serias vulnerabilidades que ponen en riesgo a millones de usuarios de plataformas publicitarias. Este servidor de anuncios puede ser pirateado ejecutando código PHP aleatorio, que crea las condiciones para un ataque de scripting entre sitios XSS.
Entonces, si no desea pagarles su dinero, pero solo quiere usar la red publicitaria, puede hacerlo simplemente pirateando y descargando el exploit allí, para que pueda controlar a todos los que comienzan a ver sus anuncios.
Matt Johansson: En realidad, acabamos de invertir en la máquina tragamonedas que colocó nuestro anuncio, y es muy difícil averiguar quién hizo este anuncio, que es un iframe. Investigamos cómo los iframes rompen el código y nos ocupamos de hackear el navegador, pero el objetivo de nuestro estudio fue que intentamos usar el navegador para que otras personas pudieran hackearse con sus propias manos.
Jeremy Grossman: esta investigación continuará, usamos nuestro servidor de Amazon e intentamos reunir a algunos de nuestros socios para intentar atacar sitios con protección DDoS y ver cuánto tráfico podemos dirigirles a ellos, porque no estamos defendiendo, sino atacando. Esta es la esencia de nuestra investigación.
Matt Johansson: Intentaremos analizar cómo descifrar el hash de la red publicitaria, por lo que tenemos métricas que dan una buena idea de que JavaScript puede hacer esto tan rápido como queramos. Podemos correlacionar esto con la cantidad en dólares para averiguar cuántos hash MD5 se pueden descifrar por 50 centavos.
Jeremy Grossman: Lo repetiré nuevamente: podemos movilizar un millón de navegadores, tal vez no al mismo tiempo, pero puede obtener este millón de navegadores por alrededor de $ 500 y crear una poderosa red de bots.
He trabajado lo suficiente en el campo de la seguridad web, y recuerdo que durante mucho tiempo he dicho que debemos piratear Internet para garantizar su seguridad, piratear los modelos comerciales existentes en Internet para saber de qué y cómo protegerlos. Dan Kaminsky me dijo el 21 de diciembre de 2010: “Nadie puede piratear Internet, hombre. Ahora no, nunca. Hasta ahora, tenía razón.
Pero ahora vemos el problema. No sé de quién es el problema: las redes publicitarias, o el problema de los proveedores de navegadores, o el problema de los propietarios de sitios, pero realmente existe. Y no sabemos de quién es la responsabilidad y quién debe arreglarlo.
Matt Johansson: le mostramos lo que puede hacer simplemente cargando una imagen en la red publicitaria, pero no fuimos más allá, no hicimos daño a las personas, aunque tuvimos todas las oportunidades para hacerlo. Y no sabemos cómo protegernos de esto, solo le mostramos un mecanismo que los atacantes pueden aprovechar.
Jeremy Grossman: entonces, como puede ver, hay una razón por la cual los navegadores ofrecen usar un bloqueador de anuncios. Active el bloqueador de anuncios y su navegador no será vulnerable a este tipo de ataque.
Matt Johanson: O, alternativamente, desconectarse de Internet por completo.
Jeremy Grossman: Escucho la pregunta, ¿cuánto nos cuesta el servidor de Amazon? Ahora, probablemente, alrededor de $ 100.
Matt Johanson: Hoy, cuando realmente depositamos dinero en la red de publicidad, antes de nuestro desempeño, pagamos $ 75, y traté de exprimir todo lo que es posible de ellos.
Y responderé la última pregunta sobre la dirección IP: cuando recibimos la aprobación de nuestro banner, vimos la dirección IP de la persona que hizo esta aprobación, pero no pudo ver nuestra dirección IP y no pudo saber nada sobre nosotros excepto la dirección de correo electrónico correo.
¡Gracias a todos los que vinieron a escucharnos!
Gracias por quedarte con nosotros. ¿Te gustan nuestros artículos? ¿Quieres ver más materiales interesantes?
Apóyenos haciendo un pedido o recomendándolo a sus amigos, un
descuento del 30% para los usuarios de Habr en un análogo único de servidores de nivel de entrada que inventamos para usted: toda la verdad sobre VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps de $ 20 o cómo dividir el servidor? (las opciones están disponibles con RAID1 y RAID10, hasta 24 núcleos y hasta 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps hasta diciembre de forma gratuita al pagar por un período de seis meses, puede ordenar
aquí .
Dell R730xd 2 veces más barato? ¡Solo tenemos
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV desde $ 249 en los Países Bajos y los Estados Unidos! Lea sobre
Cómo construir un edificio de infraestructura. clase utilizando servidores Dell R730xd E5-2650 v4 que cuestan 9,000 euros por un centavo?