Las vulnerabilidades de desbordamiento de búfer existen desde los primeros ordenadores, y siguen existiendo hoy en día. La mayoría de los gusanos de Internet usan estas vulnerabilidades para propagarse.
C es un lenguaje de programación de alto nivel, pero asume que el programador es el responsable de la integridad de los datos.
Este tipo de errores son fáciles de cometer y difíciles de detectar.
Si esta responsabilidad fuera del compilador, los binarios resultantes serían muchos más lentos, debido a las comprobaciones de integridad que habría que hacer en cada variable. Además, esto eliminaría en gran parte el control de programador y complicaría el lenguaje.
Aunque la simplicidad de C aumenta el control del programado y la eficiencia de los programas resultantes, también puede hacer que los programas resultantes sean vilnerables a desbordamientos de bufer y pérdidas de memoria si el programador no tiene cuidado.
Esto significa que cada vez que se asigna un espacio en memoria para una variable, no hay protecciones integradas que se aseguren de que el contenido de una variable puede entrar en el espacio de memoria asignado.
Explicación de Desbordamiento de Búfer
Si un programador quiere colocar 10 bytes de datos en un búfer que sólo tiene asignado un espacio de 8 bytes, se permitirá este tipo de acción, aunque probablemente haga que el programa se cuelgue.
Esto recibe el nombre de desbordamiento de bufer, ya que los dos bytes de datos adicionales rebosarán e inundarán la memoria asignada, sobre escribiendo lo que haya a continuación. Si se sobrescribe un fragmento de datos importante, el programa se colgará.
Este tipo de fallos del programa son bastante comunes. El error del programador es por omisión (debería haber una comprobación de longitud o una restricción en los datos introducidos por el usuario). Este tipo de errores son fáciles de cometer y difíciles de detectar.
Fuente | Hacking – Técnicas fundamentales por Jon Erickson
0 comentarios