Un desbordamiento del búfer se produce cuando un programa que escribe datos en un búfer sobrecarga la capacidad de ese búfer. Es como echar 300 ml de leche en un vaso de con 200 ml de capacidad.
Después de leer este artículo podrás:
Contenido relacionado
¿Seguridad de aplicaciones web?
Scraping de datos
Falsificación de solicitud entre sitios
Ataque por fuerza bruta
¿Por qué usar HTTPS?
Suscríbase a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.
Copiar enlace del artículo
El desbordamiento del búfer es una anomalía que se produce cuando el software que escribe datos en un búfer desborda la capacidad del búfer, lo que provoca que se sobrescriban las ubicaciones de memoria adyacentes. En otras palabras, se pasa demasiada información a un contenedor que no cuenta con el espacio suficiente, y esa información acaba sustituyendo a los datos de los contenedores adyacentes.
Los atacantes pueden aprovecharse de los desbordamientos del búfer con el objetivo de modificar la memoria de un ordenador para socavar o tomar el control de la ejecución del programa.
Un búfer, o búfer de datos, es un área de almacenamiento de memoria física que se utiliza para almacenar temporalmente los datos mientras se trasladan de un lugar a otro. Estos búferes suelen estar en la memoria RAM. COn frecuencia, los ordenadores utilizan los búferes para ayudar a mejorar el rendimiento; la mayoría de los discos duros modernos aprovechan el búfer para acceder a los datos de forma eficiente, y muchos servicios en línea también utilizan búferes. Por ejemplo, los búferes se utilizan con frecuencia en la transmisión de vídeo en línea para evitar interrupciones. Cuando se transmite un vídeo, el reproductor de vídeo descarga y almacena quizás un 20 % del vídeo a la vez en un búfer y luego transmite desde ese búfer. De esta manera, las breves reducciones de la velocidad de la conexión o las interrupciones rápidas del servicio no afectarán al rendimiento de la transmisión de vídeo.
Los búferes están diseñados para contener cantidades específicas de datos. A menos que el programa que utilice el búfer tenga instrucciones incorporadas para descartar datos cuando se envíen demasiados al búfer, el programa sobrescribirá los datos de la memoria adyacente en el búfer.
Los atacantes pueden aprovecharse de los desbordamientos del búfer para corromper el software. A pesar de ser bien conocidos, los ataques de desbordamiento de búfer siguen siendo un importante problema de seguridad que atormenta a los equipos de ciberseguridad. En 2014, una amenaza conocida como "heartbleed" expuso a cientos de millones de usuarios a un ataque debido a una vulnerabilidad de desbordamiento del búfer en el software SSL .
Un atacante puede introducir deliberadamente una entrada cuidadosamente elaborada en un programa que provocará que este intente almacenar esa entrada en un búfer que no sea lo suficientemente grande, sobrescribiendo partes de la memoria conectadas al espacio del búfer. Si la disposición de la memoria del programa está bien definida, el atacante puede sobrescribir deliberadamente áreas que se sabe que contienen código ejecutable. Entonces, el atacante puede sustituir este código por su propio código ejecutable, lo cual puede cambiar de forma drástica el funcionamiento del programa.
Por ejemplo, si la parte sobrescrita en la memoria contiene un indicador (un objeto que apunta a otro lugar de la memoria), el código del atacante podría sustituirlo por otro indicador que apunte a una carga útil de la vulnerabilidad. Esto puede transferir el control de todo el programa al código del atacante.
Algunos lenguajes de codificación son más susceptibles al desbordamiento del búfer que otros. C y C++ son dos lenguajes populares que son muy vulnerables a ello, ya que no contienen protecciones integradas contra el acceso o la sobrescritura de datos en su memoria. Windows, Mac OSX y Linux contienen código escrito en uno o ambos lenguajes.
Los lenguajes más modernos, como Java, PERL y C#, tienen funciones incorporadas que ayudan a reducir las posibilidades de desbordamiento del búfer, pero no pueden evitarlo completamente.
Por suerte, los sistemas operativos modernos tienen protecciones en tiempo de ejecución que ayudan a mitigar los ataques de desbordamiento del búfer. Exploremos dos protecciones habituales que ayudan a mitigar el riesgo de que se aprovechen de tales vulnerabilidades:
Los desarrolladores de software también pueden tomar precauciones contra las vulnerabilidades de desbordamiento del búfer si escriben en lenguajes con protecciones incorporadas o si usan procedimientos especiales de seguridad en su código.
A pesar de las precauciones, los desarrolladores siguen descubriendo nuevas vulnerabilidades de desbordamiento del búfer, a veces después de que se haya aprovechado de una de ellas con éxito. Cuando se descubren nuevas vulnerabilidades, los ingenieros tienen que parchear el software afectado y asegurarse de que los usuarios del software tengan acceso al parche.
Hay una serie de ataques de desbordamiento del búfer que emplean diferentes estrategias y tienen como objetivo diferentes fragmentos de código. A continuación, presentamos algunos de los más conocidos.
*Los ordenadores se basan en dos modelos diferentes de asignación de memoria, conocidos como la pila y el montón; ambos están situados en la memoria RAM del ordenador. La pila está bien organizada y mantiene los datos en un modelo de "último en entrar, primero en salir". Cualquier dato que se haya colocado más recientemente en la pila será el primero en salir, de forma similar a como la última bala introducida en un cargador de munición será la primera en ser disparada. El montón es un conjunto desorganizado de memoria extra, los datos no entran ni salen del montón en ningún orden concreto. Ya que el acceso a la memoria desde la pila es mucho más rápido que el acceso desde el montón, el montón suele reservarse para los datos más grandes o para los datos que el programador quiere gestionar explícitamente.