Menú
Juan-Mariano de Goyeneche

¿Qué es un desbordamiento de búfer?

Llevamos varios días con noticias inquietantes sobre el virus Blaster. Tímidamente se apunta que esta vez no es un virus de correo electrónico sino de "desbordamiento de búfer". Pero, ¿qué es un desbordamiento de búfer?

El palabro –búfer, del inglés, buffer– se las trae (seguramente será aceptado alegremente en breve por la Academia, como cederrón), si bien suena algo mejor que la traducción ayuna de neologismos que algunos proponen: "memoria tampón". En cualquier caso, para nuestra discusión baste considerar que un buffer es una zona de memoria acotada: empieza y termina en unos sitios concretos dentro de un programa.

El desbordamiento de un buffer es un error de programación típico: el programa guarda datos en esa zona de memoria sin comprobar previamente si van a caber en ella, y cuando efectivamente no caben continúa escribiendo de forma inadvertida más allá del espacio que tenía reservado para ellos, más allá del límite del buffer.

Habitualmente esto trae como resultado cosas malas (el programa se muere, aparece la pantalla azul, el ordenador se cuelga...) aunque con un poco de suerte ocurren cosas peores. Como en el caso que nos ocupa.

Un ordenador ejecuta instrucciones de forma consecutiva. Cada vez que tiene que ejecutar algo que está en otra dirección de memoria no consecutiva y volver luego a donde estaba se apunta la dirección a la que tiene que retornar. El viejo truco del marcapáginas "aquí dejé mi lectura" de los libros: uno apunta dónde se ha quedado, hace otra cosa, y cuando puede vuelve y continúa con el libro.

En este caso, el virus se conecta a través de Internet a un programa de nuestro ordenador que espera datos y los mete en un buffer. Le da más de los que le caben y el programa, erróneamente escrito, los guarda alegremente sobrescribiendo todo lo que encuentra a su paso al final del buffer. Suministrándole los datos cuidadosamente acaba sobrescribiendo también la dirección de retorno que el programa tenía apuntada. Como los datos con los que sobrescribe son los que le suministra el propio virus, éste se asegura de que al sobrescribir la dirección de retorno se haga con otra dirección muy concreta: la que el virus quiere que se ejecute.

Por lo general, el programa que explota un desbordamiento de buffer llena éste y el espacio que le sigue con sus propias instrucciones y hace que la dirección de retorno apunte al comienzo del buffer, donde ahora está su propio código.

Así que, finalmente, cuando el programa se pregunta "¿dónde dejé mi lectura?", ya le han cambiado el marcapáginas e inadvertidamente pasa a ejecutar el código del virus, que inmediatamente toma el control del ordenador con todos los privilegios –por ejemplo, privilegios de administrador– del programa anfitrión que se estaba ejecutando. Voilà!


En Tecnociencia

    0
    comentarios