
Seguramente has escuchado la expresión "caza de errores" muchas veces. Me atrevo a suponer que no te importará ganar mil doscientos (o incluso mil) dólares al encontrar una vulnerabilidad potencial en el programa de alguien. En este artículo, le contaré sobre un truco que ayudará a analizar proyectos de código abierto para encontrar tales vulnerabilidades.
Recompensas de errores en software libre y de código abierto: ¿qué es?
Bug Bounty es un nombre común para varios programas, donde los desarrolladores de sitios web y software ofrecen recompensas en efectivo por encontrar errores y vulnerabilidades. Además de los conocidos programas Bug Bounty de corporaciones tan grandes, como Apple o Microsoft, también hay programas para buscar 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. Es un programa de búsqueda de vulnerabilidades en varios proyectos de código abierto, patrocinado por la Unión Europea. El fondo total de premios es una suma impresionante: ¡hasta 850,000 euros!
¿Cómo participar?
Primero, debe registrarse en
HackerOne . Solo necesitaremos proyectos de código abierto. Hay una
lista completa en HackerOne.
Si desea participar en Bug Bounty de la Unión Europea, puede encontrar la 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 también se encuentran en el sitio web intigriti.com.
Para participar, debe elegir un proyecto apropiado para usted y luego leer cuidadosamente los términos de participación. Si está de acuerdo con ellos, vaya a una parte práctica.
Para encontrar una vulnerabilidad y obtener su dinero, solo tendrá que descargar un 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, eso puede afectar la seguridad del programa: haga un informe y envíelo a los desarrolladores. Si califican su hallazgo como digno de ser recompensado, tiene su dinero en su bolsillo :).
¿Pero dónde está la simplicidad?
La parte simple es que no tiene que analizar el código solo manualmente. Existen herramientas que le permiten buscar errores en el código automáticamente. Por ejemplo, analizadores de código estático. Prefiero usar nuestra herramienta:
PVS-Studio . El analizador PVS-Studio puede encontrar errores en el código, escrito en C ++, C # y Java, así como también tiene una interfaz fácil de usar. Además, hay varias opciones de uso gratuito. De todos modos, hay otros diversos
analizadores de código .
Por supuesto, los analizadores estáticos pueden revelar no todos los errores. ¡No importa! Después de todo, tenemos el propósito de encontrar errores rápida y fácilmente, y no encontrarlos a todos.
Una vez que el proyecto se haya descargado y creado, solo tomará un par de clics para comenzar el análisis. El resultado será un informe con un número (generalmente significativo) de advertencias generadas por el analizador. En PVS-Studio, se clasifican en tres niveles de certeza. Debe comenzar con el primer nivel de advertencias, de modo que los niveles naranja y amarillo puedan eliminarse del resultado del análisis.
Un ejemplo de filtrado de los resultados del análisis.
Por lo tanto, solo tendrá que mirar las advertencias de descanso y elegir los lugares que pueden representar el mayor peligro. Vale la pena verificar si es posible reproducir alguno de ellos directamente al ejecutar el 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 caso, la visibilidad es tu mejor amigo.
También vale la pena considerar si el error que encontró afecta la seguridad del programa. Después de todo, en este caso, la cantidad pagada será varias veces más :)
La captura de pantalla muestra la interfaz de Visual Studio. Sin embargo, no dejes que te engañe. El analizador se puede usar no solo como un complemento para Visual Studio, sino también solo, incluidos los
entornos Linux y macOS .
Ventajas de este enfoque
Primero, usar un analizador estático es una de las formas más fáciles de encontrar errores. No necesita tener ningún conocimiento especial para usar analizadores de código: solo necesita comprender el idioma en el que está escrito el código.
En segundo lugar, los analizadores están atentos. No se cansan y no pierden la vigilancia, a diferencia de un ser humano. Por lo tanto, se pueden usar para analizar bases de código tan grandes como desee con un costo casi mínimo.
Tercero, los analizadores a menudo tienen más conocimiento que los humanos. Que significa Permítanme explicar mis pensamientos con el ejemplo del código del kernel de Android:
static void FwdLockGlue_InitializeRoundKeys() { unsigned char keyEncryptionKey[KEY_SIZE]; .... memset(keyEncryptionKey, 0, KEY_SIZE);
Parece, ¿dónde hay un error aquí?
Resulta que un compilador, al ver que una matriz no se usa en ningún otro lugar, puede optimizar el código y eliminar la llamada de la función
memset . Y lo hará solo cuando construya la configuración de lanzamiento. Todo estaría bien, pero solo la clave de encriptación permanecerá en la RAM sin borrar por algún tiempo, de esta manera puede ser obtenida por un intruso. ¡Una verdadera brecha de seguridad!
Además, apenas puede encontrarlo usted mismo: en el modo de depuración, la llamada de
memset funciona bien. Las pruebas tampoco serán de ayuda ... Lo único que queda es conocer y recordar esta característica usted mismo.
¿Qué sucede si los desarrolladores del proyecto no conocen esta característica? ¿Qué sucede si no conoce esta función cuando busca errores? En cuanto al analizador, tiene el diagnóstico
V597 , por lo que definitivamente descubrirá esta característica cuando vea el informe.
Finalmente, el cuarto punto. Una de las ventajas más útiles de usar el análisis estático cuando se busca Bug Bounty es la velocidad. Es cierto que puede verificar dos, tres, cuatro proyectos en una noche, pero eso no es todo.
Lo principal es que puedes ser el primero. Si bien el premio se ofrece por encontrar errores en cualquier proyecto, el proyecto continúa siendo refinado y desarrollado. Los desarrolladores envían nuevas versiones y nuevas características junto con un nuevo código y un nuevo espacio para errores. Cuando utilice el enfoque que describí, podrá considerar de manera específica nuevos errores y vulnerabilidades potenciales desde el primer día en que se lanzan.
Posibles vulnerabilidades
Un lector atento puede estar perplejo:
¡Espera, espera! Por un lado, estás diciendo sobre la búsqueda de errores en el código en los programas, por otro lado, estás mencionando posibles vulnerabilidades. Las vulnerabilidades son más interesantes en términos de Bug Bounty. ¡Por favor aclara lo que quieres decir!El hecho es que los errores y las vulnerabilidades potenciales son básicamente lo mismo. Claro, solo unos pocos errores / vulnerabilidades potenciales demuestran ser vulnerabilidades reales en futuras investigaciones. Sin embargo, un error inofensivo y una vulnerabilidad crucial pueden verse exactamente igual en el código. El artículo "
¿Cómo puede PVS-Studio ayudar en la detección de vulnerabilidades? " Da varios errores aparentemente comunes 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 se relacionan con errores de software, no con problemas directamente relacionados con la seguridad.
¡Así que agarre la ortiga, obtenga PVS-Studio y comience a buscar errores y fallas de seguridad! La clasificación según el
CWE será de gran ayuda aquí.
Conclusión
Con suerte, ayudé a un lector en su búsqueda de esos errores que le traerán honores y recompensas monetarias. ¡Estoy seguro de que el análisis estático ayudará en esto! Recuerde que los desarrolladores generalmente no tienen tiempo para analizar errores en detalle, por lo que tendrá que demostrar que su hallazgo puede afectar el programa. La mejor manera es reproducirlo visualmente. Y recuerde: cuanto más destruya el error la seguridad, más le pagarán por ello.
Bueno, ya está. ¡Buena suerte en la búsqueda de una recompensa!