Desbordamiento de Buffer (Buffer Overflow)
Eduardo Miércoles 14 de Marzo del 2007
Algunos quizá hayan escuchado éste término, sin embargo probablemente no muchos sepan realmente en que consiste, asi que en éste post explicaré más o menos de que se trata.
El desbordamiento de buffer es una posible vulnerabilidad en programas hechos en lenguajes como C o C++, que puede llegar a ser tan grave como darle privilegios completos a alguien sobre un sistema operativo, es de los métodos de hackeo, uno en donde se puede aprovechar al máximo la vulnerabilidad de algun programa, y donde puede llegar a ser más crítico el problema.
Qué pasa por ejemplo cuando en un río sube el nivel del agua a un grado que no cabe el agua, pues el río se desborda y se lleva con él arboles, casas, etc. Totalmente un desastre natural, bueno en computación pasa algo parecido, pero imaginemos que el espacio en donde esta el río o sea el canal de tierra por donde pasa el río es el espacio en memoria que esta disponible para guardar algún dato, y el agua del rio es la información con la que intentaremos llenar ese espacio, si le damos más información de la que debe ser ocurrirá un desbordamiento de buffer.
O sea que cuando una variable se intenta llenar con más datos de lo que cabe en ella, se desborda!, y muchos pensarían ¿qué no cuando intento llenar una variable con más de la cuenta simplemente se trunca lo que no quepa?, y la respuesta es NO, sino sigue escribiendo lo que no cupo de la variable, en lo que sigue de la memoria, o sea sobreescribe otros datos del programa.
Ahora que ya entendieron como es que sucede esto, viene la pregunta, ¿porqué es tan peligroso?, y bueno imaginemos que tenemos un conjunto de instrucciones que al abrir un programa se ejecutan, entonces éstas instrucciones se quedan en la memoria RAM, y siempre después de cada conjunto de instrucciones (que en programación las llamamos funciones y metodos), llega a una dirección en memoria que se llama “RET” o sea return address, y la cual va a ejecutar sin lugar a dudas, quiere decir que si logramos que la parte que se esta desbordando llegue a esa dirección todo lo que sigue de ahi se ejecutará, entonces ahi es donde viene lo interesante, ya hay programas hechos para justamente lanzar el prompt (o sea si estamos el linux el prompt es $ o #, en windows lo podríamos pensar como que el prompt es C:\ o sea el mismo que vemos al iniciar la ventana de MS DOS), y al darnos el prompt, si el programa tiene privilegios de administrador o de root, pues en pocas palabras podríamos hacer lo que quisieramos en el sistema en donde alguien logre hacer un ataque como éste.
Para que entiendan mejor el ataque pongamos un ejemplo retomando el río, imaginemos que el río:
Para más información:
http://www.l0t3k.net/biblio/b0f/en/bofs4kids.txt
http://www.l0t3k.net/biblio/b0f/en/bofs4kids2.txt







[...] Después del post pasado que hablé sobre el desbordamiento de buffer (buffer overflow), ahora les diré que ya hay algunas soluciones a esos ataques. [...]