La idea de que los errores pueden ser algo bueno no es natural para la mayoría de los programadores, o no debería serlo. Pero la idea que se tiene de los bugs podría cambiar, ya que también pueden ser una forma de evitar que cibercriminales afecten un sistema.
Este nuevo enfoque es desarrollado por Zhenghao Hu y sus colegas en la Universidad de Nueva York, Estados Unidos. Que plantea una sencilla pregunta: ¿Por qué no llenamos un código ordinario con errores benignos para engañar a los posibles atacantes?
La idea clave es la de un bug no explotable. Después de todo, no habría muchas ventajas al insertar errores que un cibercriminal podría utilizar. El problema es que el error todavía tiene que parecer un error potencialmente explotable para mantener el interés del hacker.
Sin embargo, distinguir estos fallos no siempre es sencillo. Cuando los hackers encuentren estas brechas, no deberían poder diferenciar los que son peligrosos para el sistema de aquellos relativamente benignos, y ese proceso generalmente resulta difícil y lleva mucho tiempo.
Se hipotetiza que el flujo de trabajo del hacker típico es encontrar errores y luego pasar mucho tiempo trabajando si un error es explotable antes de dedicar aún más tiempo a construir un exploit.
Si puede hacer que un error no explotable se vea como si fuera explotable, entonces puede mantener ocupado al hacker durante tanto tiempo que se rinda.
Los investigadores, Zhenghao Hu, Yu Hu y Brendan Dolan-Gavitt, trabajaron con LAVA, un programa que escanea códigos de C / C ++ y encuentra lugares para inyectar errores de desbordamiento.
“Los errores inyectados en el código eran errores de desbordamiento, que generalmente se consideran la ruta principal hacia un exploit de programa. El problema de hacer que los errores no sean explotables no fue fácil de descifrar. Una de las ideas principales era hacer que el desbordamiento del búfer solo sobrescribiera variables que el programa no utiliza realmente. Esto significaba controlar el diseño de la pila y el montón o simplemente hacer uso de cómo el compilador particular distribuía la memoria”, explican los investigadores.
Resulta que añadir errores no es nada fácil. Los cambios aleatorios en el código suelen convertirlo en inservible, en vez de introducir anomalías interesantes. En cambio, el proceso implica ejecutar el código con diferentes entradas de datos y supervisar lo que ocurre con ellos a medida que el código avanza.
Pero existe un gran potencial por delante. La idea de añadir los errores en lugar de eliminarlos es un enfoque atractivo contra los delitos cibernéticos, y que generará algunas interesantes posibilidades para futuras investigaciones.