Vulnerabilidades de desbordamiento del búfer

Los atacantes utilizan las vulnerabilidades de desbordamiento del búfer para ejecutar un código que desborda los búferes de tamaño fijo reservados para procesos de entrada. Este código permite al atacante tomar el control del equipo de destino o poner en peligro sus datos.

Existen dos tipos de vulnerabilidades de desbordamiento del búfer:
  • Ataques basados en montón (heap): saturan el espacio de memoria reservado a un programa. Son difíciles de realizar y poco frecuentes.
  • Ataques basados en pila: utilizan los objetos de la memoria de la pila para almacenar entradas de usuario. Son los más comunes.
A continuación se describen los ataques por desbordamiento del búfer basados en pila:
  1. Proceso normal de memoria en pila: la memoria en pila, de tamaño fijo, se encuentra normalmente vacía a la espera de que el usuario realice una entrada. Cuando un programa recibe una entrada por parte del usuario (p. ej., su nombre), los datos se almacenan en la parte superior de la pila y se les asigna una dirección de memoria de retorno. Cuando se procesa la pila, la entrada del usuario se envía a la dirección de retorno especificada por el programa.
  2. Desbordamiento de la pila: cuando se escribe el programa, se reserva una cantidad específica de espacio de memoria para los datos. La pila se desborda si los datos escritos tienen un tamaño superior al espacio reservado para ellos en la pila. Esto sólo supone un problema si se combina con una entrada maliciosa.
  3. Vulneración del desbordamiento: si el programa está esperando a que un usuario introduzca su nombre y el atacante introduce un comando ejecutable que excede el tamaño de la pila, dicho comando se almacenará fuera del espacio reservado.
  4. Ejecución de código malicioso: el comando no se ejecuta automáticamente ya que excede el espacio de búfer de la pila. Sí se ejecuta si el atacante proporciona una dirección de retorno que apunte al comando malicioso. En un principio, el programa se bloquea debido al desbordamiento del búfer. Sin embargo, intenta recuperarse utilizando la dirección de retorno proporcionada por el atacante. Si la dirección de retorno es válida, el comando malicioso se ejecuta.
  5. Vulneración de permisos: debido a que los programas se ejecutan normalmente en modo kernel o con permisos heredados de una cuenta de servicio, el código malicioso puede ejecutarse con los mismos permisos de la aplicación que ha sido puesta en peligro. Esto significa que el atacante puede tomar el control total del sistema operativo.

Vulnerabilidades de desbordamiento del búfer