Diseñan un sistema que repara bugs automáticamente insertando la funcionalidad de otros programas - y sin necesidad del código fuente

En la conferencia de la Asociación para el Diseño de Lenguajes de Programación de Equipamiento Informático, investigadores del MIT presentaron un nuevo sistema que repara bugs peligrosos en el software importando la funcionalidad desde otras aplicaciones más seguras.

Cabe destacar que el sistema, bautizado como CodePhage, no requiere acceso al código fuente de las aplicaciones cuya funcionalidad coge prestada. En vez de eso, analiza la ejecución de las aplicaciones y clasifica los tipos de controles de seguridad que realizan. Como consecuencia, puede importar chequeos de aplicaciones escritos en lenguajes de programación distintos al del programa que está reparando y proporciona una capa adicional de análisis que garantiza que el error ha sido reparado.

"Tenemos un montón de código fuente disponible en los repositorios de código abierto, millones de proyectos, y muchos de estos proyectos implementan especificaciones similares", dice Stelios Sidiroglou-Douskos, científico investigador del laboratorio de Ciencias de la Computación e Inteligencia Artificial (CSAIL) del MIT que ha liderado el desarrollo de CodePhage. "Aunque podría no ser la funcionalidad principal del programa, con frecuencia existen subcomponentes que comparten funcionalidad a través de un gran número de proyectos".

Con CodePhage, el dice, "con el tiempo, lo que estaríamos haciendo es construir un sistema híbrido que toma los mejores elementos de todas estas implementaciones".


Funcionamiento general

Sidiroglou-Douskos y sus co-autores se refieren al programa que CodePhage repara como "receptor" y al programa del que se toma la funcionalidad como "donante".

Para comenzar su análisis, CodePhage requiere dos entradas de ejemplo: una que haga que el receptor se bloquee (crash) y otra que no. Se puede usar un buscador de bugs que el mismo grupo publicó en marzo, llamado DIODE, que genera automáticamente las entradas que hacen que el programa falle (crash) o simplemente un bug que un usuario podría haber identificado al intentar abrir un archivo en particular, por ejemplo.

Primero CodePhage introduce en el programa donante una entrada segura (safe) y otra que provoca un fallo (bug). Hace un seguimiento de cada una de las secuencias de operaciones que ejecuta el donante y graba cada una utilizando una expresión simbólica. Cuando la nueva expresión simbólica (bug) diverge de la antigua (safe), sin embargo, CodePhage interrumpe el proceso. La divergencia representa una limitación que la entrada segura encontró pero que la entrada que provoca un error no lo hace. Como tal, podría ser un control de seguridad que falta en el receptor.

CodePhage entonces analiza el receptor para encontrar lugares en los que la entrada se encuentra con la mayoría, aunque no todas, de las limitaciones descritas por la nueva expresión simbólica. El receptor puede realizar diferentes operaciones en un orden diferente que el donante hace, y puede almacenar datos en diferentes formas. Pero la expresión simbólica describe el estado de los datos después de haber sido procesado, no el procesamiento.

En cada uno de los lugares que identifica, CodePhage puede prescindir de la mayoría de las limitaciones descritas por las expresiones simbólicas de las limitaciones que el receptor, también, impone. Comenzando con la primera ubicación, traduce las pocas restricciones que quedan a la lengua del destinatario y los inserta en el código fuente. Luego se ejecuta el destinatario de nuevo, utilizando la entrada que provoca el crash.

Si el programa sigue funcionando, el nuevo código ha resuelto el problema. Si no lo hace, CodePhage mueve a la siguiente ubicación candidata en el receptor. Si el programa todavía está fallando, incluso después de CodePhage haya intentado reparaciones en todos los lugares candidatos, vuelve al programa del donante y continúa la construcción de su expresión simbólica, hasta que llega a otro punto de divergencia.

Futuro automatizado

Los investigadores probaron CodePhage en siete programas de código abierto en las que DIODE había encontrado errores, importando entre dos y cuatro reparaciones en cada uno. En todos los casos, CodePhage fue capaz de arreglar el código vulnerable, y por lo general tomó entre 2 y 10 minutos en arreglarlos.

Como explican los investigadores, en el software comercial moderno, los controles de seguridad pueden ocupar hasta 80 por ciento del código, o incluso más. Una de sus esperanzas es que las futuras versiones de CodePhage puedan reducir drásticamente el tiempo que los desarrolladores de software gastan en trabajo pesado, mediante la automatización de la inserción de esas comprobaciones.

"La visión a largo plazo es que nunca tengas que escribir una pieza de código que alguien más haya escrito antes", dice Rinard. "El sistema encuentra ese trozo de código y automáticamente lo pone junto con cualquier pieza de código que necesita para hacer que su programa funcione".

"La técnica de usar código de otro programa que tiene una funcionalidad similar, y ser capaz de corregir un programa que falla solucionándolo de esa manera, es un resultado bastante bueno", dice Emery Berger, profesor de ciencias informáticas en la Universidad de Massachusetts en Amherst. "Para ser honesto, me sorprendió que funcionó totalmente".

"El programa de los donantes no fue escrito por la misma gente", explica Berger. "Ellos tienen diferentes estándares de programación, renombran las variables de forma diferente, utilizan todo tipo de diferentes variables, las variables pueden ser locales o podrían estar más arriba en la pila. Y CodePhage es capaz de identificar estas conexiones y decir: 'Estas variables correlan a estas variables '. Hablando en términos de la donación de órganos, transforma ese código para que sea un injerto perfecto, como si hubiera sido escrito de esa manera en el principio. El hecho de que funcione tan bien como lo hace es sorprendente y fresco".
 

Fuente: http://newsoffice.mit.edu/2015/automatic-code-bug-repair-0629

Comentarios

  1. Paja y humo, todo automatismo es inversamente proporcional a la seguridad.

    Luego y si el código está ofuscado también va a funcionar la mierda esta? Lo dicho, interesante pero paja y humo.

    deadlock.


    ResponderEliminar

Publicar un comentario