¿Qué es un desbordamiento de búfer?

7

Estoy aprendiendo C en un tutorial y he llegado al punto donde el término "búfer" se menciona regularmente.

También ha mencionado cómo ciertas malas prácticas de programación relacionadas con la memoria pueden ser "vulnerables al desbordamiento de búfer". Define el buffer como:

  

Una pequeña cantidad de memoria reservada para la fuente de entrada

y aunque he oído hablar de ataques de desbordamiento de búfer en relación con el malware, nunca he entendido qué es o cómo funciona realmente , en particular desde la perspectiva de la programación.

Idealmente, esto podría explicarse en términos de "laicos" ya que tengo muy poco conocimiento de teoría de la computación.

    
pregunta Confuseduser 25.06.2013 - 08:22
fuente

3 respuestas

6

Un búfer es un área de memoria asignada previamente donde almacena sus datos mientras los procesa. Básicamente, solo se dice que desde una determinada dirección en la memoria hasta la dirección de la memoria + x Bytes se reserva para asignar datos. En C, esto suele denominarse array .

Se produce un desbordamiento de búfer cuando asigna más datos de los que pueden caber en el búfer y sobrescribe el código más allá de la dirección de memoria + x. Es posible que haya hecho esto antes y notará que su programa se bloquea. Ahora el problema es que en algún lugar más allá de su búfer está la dirección de retorno (esto apunta a la siguiente instrucción que se ejecutará después de asignar el búfer y cargar los datos) y si lo sobrescribe con datos aleatorios, su programa se bloqueará. Sin embargo, si logra cargar código de bytes (este es un programa compilado que la CPU puede ejecutar directamente) y realmente puede hacer que apunte a su programa, entonces puede ejecutar el código en esa máquina.

Ahora puede pensar que esto no es realmente un problema si lo está ejecutando localmente, pero imagine programas como los servidores SSH o FTP que se ejecutan en Internet o imagine un entorno restringido donde ciertos programas se ejecutan con privilegios elevados. Si pudo ejecutar código dentro del contexto y los privilegios del otro programa, podría salir de sus restricciones o tomar el control de un servidor remoto.

Si desea obtener más información sobre el ensamblaje, los flujos de desbordamiento de búfer y el código de shell, sugiero comprar el Manual de Shellcoder. Es el libro EL para aprender esto.

    
respondido por el Lucas Kauffman 25.06.2013 - 10:39
fuente
0

A medida que escribe un búfer en una pequeña cantidad de memoria (por ejemplo, 16 bytes). Cuando ahora escribo más bytes en el búfer (por ejemplo, 20 bytes) que su capacidad, esto se denomina desbordamiento de búfer.

Si los datos en el búfer vienen del exterior, esto es un defecto de seguridad, ya que los nuevos bytes se escriben en un área de memoria que se usa para otros propósitos.

Cuando el otro propósito de los bytes sobrescritos era contener el código del programa, imagina lo que sucede entonces.

    
respondido por el Uwe Plonus 25.06.2013 - 08:31
fuente
0

En C, los desbordamientos de búfer ocurren con mayor frecuencia cuando los datos copiados en una matriz (búfer) exceden su tamaño definido. Esto lo explica perfectamente. Simplemente lea el código C allí si no está familiarizado con el ensamblaje

    
respondido por el SidNoob 25.06.2013 - 08:51
fuente

Lea otras preguntas en las etiquetas