
Ya se ha dicho mucho sobre Bug Bounty, y la necesidad de tales programas para las empresas parece obvia. Durante la existencia de nuestro propio programa, Mail.ru Mail pagó más de $ 250,000, el pago promedio es de $ 379, ya
escribimos un poco más sobre esto. Y hoy, utilizando el ejemplo de la reciente conferencia de seguridad de la información ZeroNights, hablaremos sobre cómo puede atraer a los hackers para que participen en la búsqueda de errores y vulnerabilidades a través de eventos especializados.
Este año, la conferencia ZeroNights se celebró en el A2 Green Concert Club en San Petersburgo. A pesar de haberse mudado de Moscú, la conferencia reunió a más de 1000 participantes en 2 días. Durante la conferencia, se escucharon informes de muchos especialistas interesantes. Si necesita hardcore, eche un vistazo a NUClear explotion, From Graphic Mode To God Mode, Discovery Vulnerabilities of GPU Virtualization, Research Marvell Avastar Wi-Fi: de cero conocimiento a RCE inalámbrico de contacto directo. Este año también hubo muchos informes interesantes sobre la Web, puede ver diapositivas y WebVillage y no solo. Personalmente, el informe de Ilya Nesterov y Sergey Shekyan fue importante para mí. Distinguir un bot de un usuario real es cada vez más difícil. Lea más sobre los informes
aquí .
Nuestras tareas
Nos propusimos las siguientes tareas:
- Promoción de la marca y el programa Bug Bounty en la comunidad.
- Reclutar especialistas inteligentes que superen con éxito la tarea.
Idea
El desafío más difícil en tales proyectos: desarrollar tareas interesantes que, en primer lugar, atraerán a los participantes y, en segundo lugar, nos permitirán probar sus habilidades reales.
Este año nuestro stand fue un edificio de oficinas equipado con correo neumático. La esencia de la tarea: el jefe del correo aéreo envía cartas al contador, y la tarea del pirata informático es cambiar el camino e interceptar la carta con amortiguadores especiales.
El stand se veía así:

En lugar del correo en sí, utilizamos pelotas de tenis, que iban de arriba a abajo en las unidades necesarias, por defecto en "contabilidad". Era necesario activar las puertas, que se controlaban con Arduino + RPi3, y redirigir el "correo" a otras unidades.
Esquema de acción:
- Estamos conectados a la red Wi-Fi del trabajo.
- Lo encontramos en la red Raspberry Pi, que está conectada al Arduino, que controla los amortiguadores.
- El RPi está girando un servidor web. Deben completarse dos tareas: explotar las vulnerabilidades y al final le dieron botones para activar los amortiguadores, lo que permitió redirigir el "correo"

La pelota simboliza la letra neumática:

Ideas para tareas que tomamos de los informes de nuestros investigadores.
Misiones
En la primera tarea, los participantes tenían que encontrar el host RPi3 y encontrar allí una vulnerabilidad de configuración típica para el servidor web Apache: la página / server-status, que muestra todas las solicitudes HTTP entrantes. Entre otros, una solicitud con un valor secreto en los parámetros GET llegó a esta página, lo que permitió pasar el primer nivel. Para esta asignación, los visitantes recibieron un código promocional de $ 100 por participar en nuestro programa Bug Bounty.
SoluciónLas herramientas comunes como dirbuster buscan una vulnerabilidad de configuración de Apache, la línea de estado del servidor está en todos los diccionarios actuales. Además, dejamos algunos consejos para que la tarea pueda resolverse sin scripts y programas, incluso desde un teléfono normal.
Para completar la segunda tarea fue necesario estudiar cuidadosamente el contenido de la página de monitoreo ya conocida. En el código de la aplicación del cliente, era necesario encontrar un método oculto que no se llamaba desde la interfaz, pero que contenía una vulnerabilidad: una inyección NoSQL "ciega" en Mongodb.
SoluciónPara automatizar la inyección ciega, se deben abordar dos tareas:
Escriba un script que pueda recibir 1 bit de información en una solicitud. En la salida, debe poder insertar la expresión lógica de interés en la solicitud y, de acuerdo con la respuesta del servidor, comprender si es verdadero o falso.
Para descubrir cómo obtener información de interés de la base de datos poco a poco (por ejemplo, si desea conocer el valor del campo secret = 'some_secret', puede usar expresiones regulares. Primero descubrimos el primer carácter secreto ~ '^ a', secreto ~ '^ b' ... secreto ~ '^ s' ... Después de eso, el segundo secreto ~ '^ sa', secreto ~ '^ sb' ... Del mismo modo, obtenemos toda la ficha secreta).
Esta no es la única implementación ni la más eficiente; puede ver mejores opciones en el código sqlmap.
La principal dificultad era una pila de tecnología atípica: MeteorJS, que utiliza activamente Websockets, así como MongoDB y Pubsub en lugar de las solicitudes y respuestas HTTP habituales, no permitía el uso de herramientas existentes y requería que los participantes pudieran automatizar los ataques ellos mismos. Muchos participantes buscaron vulnerabilidades en la funcionalidad de la plataforma MeteorJS, confundiéndola con un código de trabajo. Además, para algunos participantes hubo dificultades para automatizar las solicitudes a través de Websockets.

Los participantes recibieron una sudadera Mail.ru Bug Hunter como premio para este concurso.
Resultados
En solo dos días de la conferencia, más de 200 personas participaron en nuestra competencia. 100 participantes completaron la primera tarea, 45 personas completaron la segunda tarea.
Por supuesto, después de completar con éxito la tarea, entrevistamos en el acto. Las tarjetas generadas por $ 100 tienen un efecto retardado, pero varias de ellas ya se han activado y obtuvimos buenos errores en H1. Alientan a los piratas informáticos a buscar nuevos errores, nos ayudan a mejorar nuestros sistemas y mejorar la seguridad. Una tarjeta pequeña: excelentes resultados. Y cien dólares son cien dólares.
