Uncategorized ¿Qué es un Desbordamiento de búfer?

¿Qué es un Desbordamiento de búfer?

¿Qué es un Desbordamiento de búfer? post thumbnail image

En seguridad informática y programación segun wikipedia: Es un error de software que se produce cuando un programa no controla adecuadamente la cantidad de datos que se copian sobre un área de memoria reservada a tal efecto (buffer).

Si dicha cantidad de datos es superior a la capacidad preasignada, los bytes sobrantes se almacenan en zonas de memoria adyacentes, sobrescribiendo su contenido original, que probablemente pertenecían a datos o código almacenados en memoria, causando ralentización sobre el software.

Representación de un desbordamiento de búfer

En las arquitecturas comunes de computadoras no existe separación entre las zonas de memoria dedicadas a datos y las dedicadas a programa, por lo que los bytes que desbordan el buffer podrían grabarse donde antes había instrucciones, lo que implicaría la posibilidad de alterar el flujo del programa, llevándole a realizar operaciones imprevistas por el programador original.

«Básicamente este tipo problemas se presenta cuando un pirata informático ataca una vulnerabilidad del software»

jlcalva6

En el siguiente ejemplo se presenta un código fuente en C con un error de programación. Una vez compilado, el programa generará un desbordamiento de buffer si se lo invoca desde la línea de comandos con un argumento lo suficientemente grande, pues este argumento se usa para llenar un buffer, sin validar previamente su longitud.

/* overflow.c - demuestra un desbordamiento de buffer */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char buffer[10];
  if (argc < 2)
  {
    fprintf(stderr, "MODO DE USO: %s string\n", argv[0]);
    return 1;
  }
  strcpy(buffer, argv[1]);
  return 0;
}
Strings de 9 caracteres o menos no provocarán desbordamiento de buffer. Por el contrario, strings de 10 caracteres o más, sí: Esto siempre es incorrecto, aunque no siempre resultará en un error del programa o segmentation fault.

Este programa puede reescribirse en forma más segura usando la función strncpy de la siguiente manera:1​

/* mejor.c - demuestra un método de resolver el problema */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char buffer[10];
  if (argc < 2)
  {
    fprintf(stderr, "MODO DE USO: %s string\n", argv[0]);
    return 1;
  }
  strncpy(buffer, argv[1], sizeof(buffer));
  buffer[sizeof(buffer) - 1] = '\0';
  return 0;
}
FUENTES: 
Articulo de wikipedia.org 
Imagen de cdn.ttgtmedia.com
Editado por jlcalva6

2 comentarios sobre «¿Qué es un Desbordamiento de búfer?»

  1. I seriously love your site.. Very nice colors & theme.
    Did you develop this amazing site yourself? Please reply
    back as I’m planning to create my very own blog and want to know
    where you got this from or exactly what the theme is named.
    Cheers!

Deja un comentario

Related Post