Todos los ataques de desbordamiento de búfer son un poco diferentes, y un atacante necesita usar distintos métodos según dónde ocurrió el derrame de datos. Mientras algunos son fáciles de realizar, otros requieren verdadera habilidad técnica.
Desbordamiento de búfer basado en pila
Un desbordamiento de búfer de pila ocurre en una parte de la memoria de la computadora que usa un enfoque “último en entrar, primero en salir” para organizar el código. Esta parte rápida y gestionada automáticamente del almacenamiento es la pila.
Piensa en la pila como una pila de bandejas. En la parte inferior de cada bandeja hay una dirección de retorno. En términos informáticos, esta es una nota que le indica a la computadora adónde ir después de terminar una tarea. En un desbordamiento de búfer de pila, un hacker envía suficientes datos para sobrescribir esa nota. Entonces, en lugar de volver al trabajo normal, la computadora sigue las instrucciones nuevas y maliciosas para ejecutar el shellcode del hacker.
Los expertos en ciberseguridad crearon herramientas para bloquear esto, pero los actores de amenazas simplemente se adaptaron. Ahora usan trucos como la programación orientada al retorno (ROP) o la programación orientada al salto (JOP) para infiltrarse. En lugar de traer su propio malware, encadenan pequeños fragmentos de código legítimo que ya existen en tu sistema. Cuando está listo, el código se reutiliza para hacer el trabajo sucio del atacante.
Este tipo de desbordamiento se usó en la explotación EternalBlue, que luego alimentó el ataque de ransomware WannaCry.
Desbordamiento de búfer basado en heap
Un ataque de desbordamiento de heap apunta al área grande y dinámica de memoria usada para datos de largo plazo. Esta parte flexible del almacenamiento es el heap.
A diferencia de la pila, no hay una dirección de retorno simple en un ataque de heap. En cambio, los atacantes necesitan corromper las estructuras de memoria subyacentes o los metadatos que el sistema usa para su organización. Si se hace correctamente, los actores de amenazas obtienen control total o escalan sus privilegios en tu sistema.
Desbordamiento off-by-one
Los actores de amenazas no siempre necesitan una inundación masiva de datos para aprovechar una vulnerabilidad de desbordamiento de búfer. A veces, solo necesitan un único carácter adicional.
Un desbordamiento off-by-one ocurre cuando un programador comete un pequeño error matemático, como olvidar el terminador nulo al final de una cadena en C. Aunque suene trivial, esa sobrescritura de un solo byte puede infiltrarse en los datos de control y redirigir la ejecución.
A diferencia de los desbordamientos basados en pila o en heap, este tipo de error es un recordatorio de que la seguridad del software no siempre se trata de vulnerabilidades de día cero llamativas o cadenas de explotación complejas: pequeños errores off-by-one pueden ser igual de peligrosos. Por ejemplo, hemos visto problemas críticos del mundo real, como las vulnerabilidades de WS_FTP, que surgen de fallas sutiles en el manejo de entradas.