¿La prevención de ataques de desbordamiento de búfer evitaría los ataques de Programación Orientada por Devolución (ROP)?
ROP consiste en aprovechar un secuestro de subprocesos de ejecución inicial en la ejecución de código arbitrario incluso en situaciones en las que el sistema operativo intenta evitar eso (con DEP y ASLR ).
Por "secuestro del hilo de ejecución" quiero decir que el atacante logra hacer que la ejecución salte a un lugar imprevisto, normalmente sobrescribiendo una ranura de memoria que el código de la aplicación interpretará más adelante como un puntero al código. Tradicionalmente , esa ranura es la dirección de retorno de la función actual (en la pila, utilizada al salir de la función) o un puntero a la función (normalmente desde un vtable en código C ++), y la sobrescritura se realiza mediante un desbordamiento de búfer. Sin embargo, cualquier otro tipo de sobrescritura puede usarse conceptualmente; por ejemplo, un use-after-free a veces puede convertirse en un salto arbitrario.
En cualquier caso, ROP no se trata de cómo se desvía el sistema de destino, sino de lo que se hace a partir de ese momento. En ese sentido, no existe tal cosa como un "ataque ROP".
Una búsqueda rápida en Google dice "no". El documento original de la presentación original (Sección 4.2) dice que aunque el Desbordamiento de búfer es más fácil, es no es necesario.
Sin embargo, un desbordamiento de pila no es necesario. La carga útil que contiene el programa orientado al retorno podría estar en el montón, y el atacante podría desencadenar su ejecución sobrescribiendo un puntero de función con el Dirección de un fragmento de código que establece% esp a la dirección de la primera gadget y ejecuta una devolución.
Lea otras preguntas en las etiquetas attacks programming buffer-overflow