Quiero comprender la diferencia exacta entre estos dos tipos de ataque. De lo que he leído:Diferencia entre - desbordamiento de búfer y regreso al ataque de libc
Desbordamiento de búfer: sobrescribe la dirección ret en la pila para apuntar a otra sección del código donde se inserta el código malicioso. De manera efectiva, aquí tenemos que modificar el código fuente del programa para realmente llevar a cabo el ataque.
Volver a Libc Aquí, en lugar de modificar el código fuente, se utilizan las llamadas a la función de tiempo de ejecución proporcionadas por la biblioteca C (por ejemplo, abrir un shell). Aquí los parámetros usados para la llamada de función también se pasan en el búfer de sobrescritura, terminando después de la parte ret de la pila.
¿Es la anterior una descripción precisa?
Y otra pregunta relacionada: ¿sería posible tener un ataque de desbordamiento del búfer sin modificar realmente el código fuente del programa original? Probablemente si escribimos un nuevo programa y permitimos que modifique ciertas secciones de la memoria (que es la nueva dirección ret en la pila corrupta del programa original). Por otra parte, creo que esto podría no ser posible debido a la protección de la memoria ofrecida entre los procesos en el kernel.
¿Podría explicar a qué se refiere con hacer que la memoria sea ejecutable (o no ejecutable). Y la otra duda (parte de mi pregunta original) es: creo que un código C no tendría acceso a todas las partes de la memoria principal. Entonces, ¿cómo se determina dónde se coloca el código de ensamblaje malicioso en la memoria? Porque creo que para la mayoría de las regiones de la memoria, solo marcaría un error de segmentación cuando regrese allí. – Hari
El núcleo del código de exploit que insertaba normalmente estaba usando y la función de estilo familiar de exec(). Esto significa que, al alimentarlo con los parámetros adecuados, podría tenerlo, por ejemplo, generar un shell/bin/sh como el usuario raíz. Esto es * ejecutar * un programa, y ya no puedes. Hay muchas medidas de seguridad diferentes, pero esta sería descrita, por ejemplo, en – gnometorule
http://en.wikipedia.org/wiki/NX_bit – gnometorule