Manera fácil de ganar dinero en Bug Bounty

Figura 2


Seguramente ya has escuchado la expresión "inquietante" más de una vez, y estoy seguro de que no te negarás a ganar un par de cientos (o incluso miles) de dólares si encuentras una vulnerabilidad potencial en el programa de otra persona. En este artículo, hablaré sobre un truco que ayudará a investigar proyectos de código abierto para tales vulnerabilidades.

Recompensas de errores en software libre y de código abierto: ¿qué es?


Bug Bounty es un nombre genérico para varios programas en los que los desarrolladores de sitios web y software ofrecen recompensas en efectivo por encontrar errores y vulnerabilidades. Además de los muy conocidos programas Bug Bounty de grandes corporaciones como Apple o Microsoft, también hay programas para encontrar vulnerabilidades en proyectos de código abierto.

Muchos de ellos se pueden encontrar en HackerOne, pero quizás el más grande es FOSSA - Auditoría de software libre y de código abierto. Este es un programa de investigación de vulnerabilidad patrocinado por la Unión Europea para varios proyectos de código abierto. El premio total es una cantidad impresionante: ¡hasta 850,000 euros!

¿Cómo participar?


Primero debes registrarte en HackerOne . Necesitaremos exactamente aquellos proyectos que sean de código abierto. HackerOne tiene una lista completa .

Si desea participar en Bug Bounty de la Unión Europea, puede encontrar una lista de proyectos que participan en este programa aquí . Para la mayoría de los proyectos, será suficiente estar registrado en HackerOne, pero muchos de los programas enumerados en esa lista están en intigriti.com.

Para participar, debe elegir un proyecto adecuado para usted y luego leer cuidadosamente las condiciones de participación. Si te satisfacen, entonces es hora de practicar.

Para encontrar la vulnerabilidad y obtener su dinero, solo necesita descargar el proyecto (o clonarlo desde GitHub) y analizar cuidadosamente cada línea de código, examinando cada expresión en busca de posibles errores. Si encuentra algo que pueda afectar la seguridad del programa, escríbalo en un informe y envíelo a los desarrolladores. Si evalúan su hallazgo como si valiera la promoción, su dinero está en su bolsillo :).

Espera, ¿dónde está la ligereza?


Y la facilidad es que no es necesario analizar el código exclusivamente de forma manual. Existen herramientas para buscar errores en el código en modo automático. Por ejemplo, analizadores de código estático. Prefiero usar nuestro desarrollo: PVS-Studio . El analizador PVS-Studio puede encontrar errores en el código escrito en C ++, C # y Java, y también tiene una interfaz conveniente. Además, hay varias opciones para su uso gratuito. También hay muchos otros analizadores de código .

Por supuesto, los analizadores estáticos pueden detectar lejos de todos los errores. ¡Sí, y que Dios los bendiga! Después de todo, nuestro objetivo es encontrar los errores de forma rápida y fácil, y no encontrarlos a todos.

Una vez descargado y ensamblado el proyecto, bastará con hacer un par de clics para comenzar el análisis. El resultado será un informe con una cantidad (generalmente considerable) de advertencias generadas por el analizador. En PVS-Studio se clasifican en tres niveles de confianza. Debe comenzar con las advertencias de primer nivel, para que los niveles naranja y amarillo se puedan filtrar del resultado del análisis.

Figura 1


Un ejemplo de filtrado de resultados de análisis.

Por lo tanto, solo queda revisar las advertencias restantes y seleccionar de ellas aquellos lugares que pueden constituir el mayor peligro. Es necesario verificar si es posible reproducir alguno de ellos directamente durante la operación del programa. Si logra hacerlo, no solo aumentará las posibilidades de que los desarrolladores acepten el informe, sino que también aumentará la cantidad de pago. En este asunto, la visibilidad es tu mejor amigo.

También vale la pena considerar si el error encontrado afecta la seguridad del programa. De hecho, en este caso, la cantidad pagada a usted será varias veces mayor :)

La captura de pantalla muestra la interfaz de Visual Studio. Sin embargo, no se deje engañar por esto. El analizador se puede usar no solo como un complemento para Visual Studio, sino también de forma independiente, incluso en Linux y macOS .

Pros de este enfoque


En primer lugar, usar un analizador estático es una de las formas más fáciles de encontrar errores. Para usar analizadores de código, no es necesario tener ningún conocimiento especial: solo necesita comprender el idioma en el que está escrito el código probado.

En segundo lugar, los analizadores son cuidadosos. No se cansan y no pierden la vigilancia, a diferencia de una persona. Por lo tanto, al usarlos puede analizar bases de código arbitrariamente grandes con un costo casi mínimo.

En tercer lugar, los analizadores a menudo tienen más conocimiento que una persona. ¿Qué significa esto? Permítanme explicar mi idea sobre el ejemplo de código del kernel de Android:

static void FwdLockGlue_InitializeRoundKeys() { unsigned char keyEncryptionKey[KEY_SIZE]; .... memset(keyEncryptionKey, 0, KEY_SIZE); // Zero out key data. } 

Parecería donde podría haber un error?

Resulta que el compilador, al ver que la matriz keyEncryptionKey no se usa en ningún otro lugar, puede optimizar el código y eliminar la llamada a la función memset . Y lo hará solo durante el ensamblaje en la configuración de lanzamiento. Todo estaría bien, pero solo la clave de cifrado permanecerá desbloqueada en la RAM durante algún tiempo, por lo que puede ser obtenida por un atacante. Un verdadero agujero de seguridad!

Y después de todo, encontrar este error usted mismo es casi imposible: en modo de depuración, la llamada de memset funciona bien. Y no escribirás ninguna prueba para esto ... Solo queda conocer esta función y recordarla tú mismo.

Pero, ¿qué pasa si los desarrolladores del proyecto no conocen esta característica? ¿Qué sucede si no conoce esta función cuando busca errores? Esto no es importante para el analizador, ya que tiene el diagnóstico V597 , por lo tanto, al ver un informe, definitivamente lo sabrá.

Finalmente, cuarto. Uno de los beneficios más útiles del uso del análisis estático al perseguir un Bug Bounty es la velocidad. Sí, con él puedes revisar dos, tres, cuatro proyectos por la noche, pero eso no es todo.

Lo más importante, puedes ser el primero. Si bien se ofrece una recompensa por encontrar errores en cualquier proyecto, el proyecto continúa siendo finalizado y desarrollado. Los desarrolladores lanzan nuevas versiones y nuevas características, y con ellas vienen nuevos códigos y nuevos espacios abiertos para errores. Usando el enfoque descrito por mí, será posible examinar con precisión nuevos errores y vulnerabilidades potenciales desde el primer día de su publicación.

Figura 4


Posibles vulnerabilidades


El lector atento puede estar perplejo:

¡Para, para! Por un lado, se refiere a una búsqueda en el código de errores en los programas, por otro lado, se mencionan vulnerabilidades potenciales. Además, las vulnerabilidades son más interesantes desde el punto de vista de Bug Bounty. Por favor aclarar!

El hecho es que los errores y las vulnerabilidades potenciales son esencialmente lo mismo. Por supuesto, solo unos pocos errores / vulnerabilidades potenciales en futuras investigaciones pueden resultar ser vulnerabilidades reales. Sin embargo, un error inofensivo y una vulnerabilidad grave pueden verse exactamente igual en el código. El artículo " ¿Cómo puede PVS-Studio ayudar en la búsqueda de vulnerabilidades? " Presenta varios de estos errores (a primera vista ordinarios) que ahora se sabe que son vulnerabilidades.

Por cierto, según el informe del Instituto Nacional de Estándares y Tecnología (NIST), aproximadamente el 64% de las vulnerabilidades en las aplicaciones están asociadas con errores de software y no con deficiencias de seguridad (no una falta de características de seguridad).

¡Entonces, con confianza, tome PVS-Studio y comience a buscar errores y defectos de seguridad! Por cierto, la clasificación de advertencias según CWE lo ayudará con esto.

Conclusión


Espero haber ayudado al lector a encontrar el error que le brindaría un poco de reconocimiento y recompensa monetaria. ¡Estoy seguro de que el análisis estático los ayudará con esto! Recuerde que los desarrolladores, por regla general, no tienen tiempo para un análisis detallado de los errores encontrados, por lo que aún debe demostrar que su hallazgo realmente puede afectar el programa. La mejor manera sería visualizarlo. Y recuerde: cuanto más fuerte sea el error en el código puede violar la seguridad, más pagarán por ello.

Eso es probablemente todo. ¡Buena suerte encontrando tu recompensa!



Si desea compartir este artículo con una audiencia de habla inglesa, utilice el enlace a la traducción: George Gribkov. Una manera fácil de ganar dinero con Bug Bounty .

Source: https://habr.com/ru/post/464555/


All Articles