¿Qué es un desbordamiento de búfer?

En un programa de computadora, las variables se asignan con bloques de memoria de tamaño fijo. Una vez asignada esta memoria, el programa puede almacenar y recuperar datos de estas ubicaciones. Los desbordamientos de búfer ocurren cuando la cantidad de datos escritos en uno de estos bloques de memoria excede su tamaño. Como resultado, la memoria asignada para otros fines se sobrescribe, lo que puede tener varios efectos en el programa.

Download the eBook Solicite una demostración

¿Qué es un desbordamiento de búfer?

Un ataque de desbordamiento de búfer

Un ataque de desbordamiento de búfer es un ciberataque común que explota deliberadamente una vulnerabilidad de desbordamiento de búfer donde los datos controlados por el usuario se escriben en la memoria. Al enviar más datos de los que caben en el bloque de memoria asignado, el atacante puede sobrescribir datos en otras partes de la memoria.

Los atacantes pueden realizar ataques de desbordamiento de búfer por varias razones, como sobrescribir código crítico o datos para que se bloquee el programa, inyectar código malicioso para ejecutarlo en el programa o modificar valores críticos, cambiar el flujo de ejecución del programa.

Amenaza de desbordamiento de búfer

Los ataques de desbordamiento de búfer se pueden utilizar para lograr varios objetivos, incluyendo:

  • Denial of Service (DoS) Attacks: Dentro del espacio de memoria de una aplicación hay punteros, código y otros datos que son críticos para la capacidad de ejecución del programa. Sobrescribir estos datos podría causar que el programa se bloquee, lo que resultaría en un ataque DoS.
  • Ejecución de código: un objetivo común de las vulnerabilidades de desbordamiento del búfer es forzar a la aplicación vulnerable a ejecutar código proporcionado por el atacante. Esto permite al atacante ejecutar código en el sistema afectado con el mismo acceso y permisos que la aplicación explotada.
  • Bypass de control de acceso: La explotación de desbordamientos de búfer para ejecutar código puede elevar el acceso de un atacante a un sistema de destino. Este acceso ampliado se puede utilizar para realizar ataques de seguimiento.

Tipos de ataques de desbordamiento de búfer

Un ataque de desbordamiento de búfer se puede realizar de diferentes maneras, pero algunos de los ejemplos más comunes incluyen:

  • Desbordamiento de búfer basado en pila: la pila de programas contiene datos de flujo de control críticos para una aplicación, como punteros de retorno de funciones, y es un objetivo común de los ataques de desbordamiento de búfer. Sobrescribir un puntero de retorno puede hacer que el programa salte a datos controlados por el atacante y los ejecute como código, lo que permite al atacante ejecutar código con los mismos permisos que la aplicación.
  • Desbordamiento de búfer basado en pila: El montón de programas se utiliza para asignar memoria dinámicamente a variables cuyo tamaño no está definido cuando el programa compila. Al explotar una vulnerabilidad de desbordamiento del búfer e inundar el montón del sistema, un atacante puede sobrescribir datos críticos de la aplicación.
  • Ataques de cadena de formato: Las funciones de la familia printf en C/C++ pueden usar cadenas de formato, que permiten leer y escribir la memoria. Si los datos proporcionados por el usuario se interpretan como una cadena de formato, se pueden usar para filtrar o modificar valores confidenciales.

Ejemplos de ataques de desbordamiento de búfer

La vulnerabilidad de desbordamiento del búfer es común en C/C++ y ocurre cuando un programa asigna una porción de memoria de tamaño fijo y luego copia datos de manera insegura en ella. El siguiente ejemplo de código contiene una vulnerabilidad de desbordamiento del búfer:

char buf [BUFSIZE];

obtiene (pero);

En este ejemplo de código, la variable buf tiene un tamaño fijo de BUFSIZE. Sin embargo, la función gets leerá los datos y los almacenará dentro de buf hasta que alcance un terminador nulo (0x00). Un atacante puede explotar esto para sobrescribir datos más allá del final del error .

Los ataques de cadena de formato son un caso especial de desbordamientos de búfer. El siguiente ejemplo de código contiene una vulnerabilidad de cadena de formato.

#include <stdio.h>

void main (int argc, char **argv)

{

 printf (argv [1]);

}

En este ejemplo, el programa toma la entrada proporcionada por el usuario de argv [1] y la imprime en el terminal. Sin embargo, si la entrada del usuario contiene una cadena de formato, esto podría permitir que un atacante lea o edite la memoria en el sistema.

Cómo prevenir desbordamientos de búfer

La vulnerabilidad de desbordamiento del búfer se puede prevenir mediante:

  • Realizar la validación de entradas: la vulnerabilidad de desbordamiento del búfer ocurre cuando un programa hace suposiciones sobre las entradas proporcionadas por el usuario sin validar estas suposiciones. Comprobar la longitud de los datos o solo copiar un cierto número de bytes a una ubicación de memoria puede ayudar a evitar desbordamientos de búfer.
  • Habilitar la protección de memoria en tiempo de ejecución: La mayoría de los equipos tienen protecciones integradas contra desbordamientos de búfer, como la aleatorización del diseño del espacio de direcciones (ASLR), la prevención de ejecución de datos (DEP) y la protección de sobrescritura con manejo de excepciones estructuradas. Habilitar estas protecciones hace que los ataques de desbordamiento de búfer sean mucho más difíciles de realizar.
  • Evitar funciones vulnerables: Los desbordamientos de búfer son posibles gracias a funciones vulnerables como gets, scanf y strcpy en C/C ++. La vulnerabilidad de desbordamiento del búfer se puede evitar utilizando correctamente las versiones seguras de estas funciones.
  • Uso de lenguajes seguros para memoria: Los desbordamientos de búfer ocurren en lenguajes de programación con variables de tamaño fijo y sin protecciones de memoria. El uso de otros lenguajes de programación como Python, Java o C# hace que los desbordamientos de búfer sean difíciles o imposibles.
  • Prevención de la explotación de la vulnerabilidad: Las soluciones firewall de aplicaciones web (WAF) y aplicación web y API Protection (WAAP) pueden identificar y bloquear los intentos de explotación de la vulnerabilidad de desbordamiento del búfer. Esto reduce el riesgo que los ataques de desbordamiento de búfer representan para la seguridad de las aplicaciones corporativas (AppSec).

Protección contra desbordamiento de búfer con CloudGuard AppSec

La explotación de la vulnerabilidad de desbordamiento del búfer puede causar fallas en el programa, fugas de datos o ejecución de código malicioso en los sistemas de una organización. Descubra cómo CloudGuard AppSec puede ayudar a proteger contra ataques de desbordamiento de búfer y otras amenazas en este libro electrónico. Luego, regístrese para una demostración gratuita y vea usted mismo cómo CloudGuard AppSec puede mejorar la seguridad de su aplicación en la nube.

x
  Comentarios
Este sitio web emplea cookies para su funcionalidad y con fines analíticos y de marketing. Al continuar empleando este sitio web, usted acepta el uso de cookies. Para más información, lea nuestro Aviso sobre cookies.