Desbordamiento

Desbordamiento

Fuente: Pixabay / CC0 public domain

En 1988, cuando Internet todavía estaba en su infancia, el malware conocido como Morris Worm infectó casi el 10 por ciento de Internet en dos días, y eventualmente causó daños de entre 100 y 10 millones de dólares, según la Oficina de Responsabilidad del Gobierno. El gusano Morris eventualmente se llamaría el «Big Daddy» de un ciberataque específico común hasta el día de hoy: desbordamiento de búfer.

En pocas palabras, un desbordamiento de búfer típico ocurre cuando se solicita a un programa de computadora que procese más datos de los que su memoria física puede manejar simultáneamente, y coloca el exceso en un «búfer». El búfer en sí tiene una capacidad finita, por lo que si el búfer no puede manejar el exceso, se «desborda» o se bloquea. Imagina que viertes tres galones de agua en un balde de dos litros; se hace un lío.

«El objetivo es encontrar automáticamente errores de memoria que conduzcan a vulnerabilidades de seguridad en las bibliotecas de Rust», dice Jia. «Comprobar estos errores manualmente es ineficaz y requiere mucho tiempo».

Su herramienta se ejecuta en bibliotecas de software escritas en el cada vez más popular lenguaje de programación Rust, que es seguro y eficiente.

«Es un lenguaje excelente, pero solo funciona cuando escribes en modismos estrictos de Rust», dice Jia.

Los desarrolladores de Rust a menudo necesitan estructuras de datos complejas para su software. Pero estas estructuras de datos complejas y sus operaciones generalmente se escriben usando Rust «inseguro», que el compilador de Rust no verifica para detectar errores de seguridad de la memoria. Aquí es donde entra SyRust; la herramienta puede generar automáticamente pruebas unitarias para las API de la biblioteca y probar esas implementaciones de la biblioteca para detectar errores de memoria.

«Aplicamos SyRust a 30 bibliotecas populares y encontramos cuatro errores nuevos», dice Jia. «Dado que estas bibliotecas ya estaban escritas en Rust y probadas, lo que significa que los programas en sí eran muy robustos para empezar, esperamos ver una pequeña cantidad de errores».

Si bien la herramienta aún no es perfecta, dice Jia, es un paso en la dirección correcta. Por ejemplo, la herramienta no genera suficientes pruebas para activar todos los comportamientos posibles para garantizar que el programa esté libre de errores.

«Si hubiera sabido que había enumerado todos los comportamientos posibles y no encontré fallas, entonces estoy feliz», dice Jia. «Eso significaría que la biblioteca realmente no tiene errores, pero en este momento no sé cuánto probé y no sé cuánto más debería probar.

Continuando, Jia dice que el equipo está tratando de mejorar su método de lo que ellos llaman «mejorar el coraje» de las pruebas. Esta «mejora en el coraje» aseguraría que se tomara más espacio en el proceso de prueba, dando al usuario más confianza en que se encontraron la mayoría, si no todos, los errores.


Informe: la mayoría de los errores de seguridad de Chrome se deben a un código de memoria incorrecto

Más información:
Yoshiki Takashima et al., SyRust: prueba automatizada de bibliotecas Rust con síntesis de programas teniendo en cuenta la semántica, Materiales de la 42a Conferencia Internacional ACM SIGPLAN sobre el diseño e implementación del lenguaje de programación Programming (2021). DOI: 10.1145 / 3453483.3454084

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *