Ataques por desbordamiento de búfer

Mayo 2017

Introducción al ataque por desbordamiento de búfer

"Los ataques por desbordamiento de búfer" (también denominado saturación de búfer) están diseñados para activar la ejecución de un código arbitrario en un programa al enviar un caudal de datos mayor que el que puede recibir.

Los programas que admiten datos de entrada con parámetros, los almacenan temporalmente en una zona de la memoria denominada búfer. Pero algunas funciones de lectura, como las strcpy() del lenguaje C, no admiten este tipo de desbordamiento y causan el bloqueo de la aplicación, lo que puede provocar la ejecución del código arbitrario y permitir el acceso al sistema.

La implementación de este tipo de ataques es extremadamente complicada ya que requiere un conocimiento exhaustivo de la arquitectura del programa y del procesador. Sin embargo, existen varios puntos vulnerables capaces de automatizar este tipo de ataques y de hacerlos accesibles para aquellos que son casi inexpertos.

Funcionamiento básico

El principio operativo de un desbordamiento de búfer guarda una relación muy estrecha con la arquitectura del procesador en la que se ejecuta una aplicación vulnerable.

Los datos ingresados en una aplicación se almacenan en la memoria de acceso aleatorio en una zona que se conoce como búfer. Un programa con un diseño correcto debería estipular un tamaño máximo para los datos de entrada y garantizar que no superen ese valor.

Las instrucciones y los datos de un programa en ejecución se almacenan temporalmente en forma adyacente en la memoria, en una zona llamada pila. Los datos ubicados después del búfer contienen una dirección de retorno (que se denomina puntero de instrucción) que le permite al programa continuar su tiempo de ejecución. Si el tamaño de los datos es mayor que el del búfer, la dirección de retorno se sobrescribe y el programa leerá una dirección de memoria no válida generando una violación de segmento en la aplicación.

Un pirata informático con un sólido conocimiento técnico puede asegurarse de que la dirección de memoria sobrescrita corresponda a una real, por ejemplo, una que esté ubicada en el mismo búfer. Como tal, al ingresar las instrucciones en el búfer (el código arbitrario), es fácil para él ejecutar este procedimiento.

Por lo tanto, es posible incluir instrucciones en el búfer que permitan abrir un intérprete de comandos (shell) permitiendo que el pirata tome control del sistema. Este código arbitrario que posibilita la ejecución del intérprete de comandos se conoce como código de shell o shellcode.

Protección contra el desbordamiento de búfer

Para protegerse contra este tipo de ataques, es importante desarrollar aplicaciones que utilicen lenguajes de programación avanzados que garanticen una administración precisa de la memoria asignada o que usen un lenguaje de bajo nivel con bibliotecas de función seguras (por ejemplo, las funciones strncpy()).

Los boletines de alerta se publican con frecuencia y advierten sobre la vulnerabilidad de ciertas aplicaciones a los ataques por desbordamiento de búfer. Después de su publicación, los editores de software afectados por la vulnerabilidad generalmente publican revisiones (patch) para corregir el problema. Es recomendable que todos los administradores de sistema y red se mantengan informados acerca de las alertas de seguridad y que apliquen las revisiones lo antes posible.

Más información

Consulta también


Buffer overflow attacks
Buffer overflow attacks
Angriffe durch Pufferüberlauf (buffer overflow)
Angriffe durch Pufferüberlauf (buffer overflow)
Attaques par débordement de tampon (buffer overflow)
Attaques par débordement de tampon (buffer overflow)
Attacchi buffer overflow
Attacchi buffer overflow
Ataques por profusão de tampão  (buffer overflow)
Ataques por profusão de tampão (buffer overflow)
Última actualización: 16 de octubre de 2008 a las 15:43 por Jeff.
El documento «Ataques por desbordamiento de búfer» se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo libremente. No olvides citar a CCM (es.ccm.net) como tu fuente de información.