¿Por qué las páginas de la memoria de códigos deben ser legibles?

3

Entiendo que cada instrucción debe leerse en la CPU para su ejecución, lo que probablemente es la razón por la que las páginas de códigos deben ser "r-x".

Pero mi observación es que el comportamiento de leer el código en la CPU para su ejecución es normal, mientras que leer el código en otro espacio de memoria (por ejemplo, copiar el código en un registro de propósito genérico) es bastante sospechoso. Un ejemplo es el beneficio de "Reutilización de código justo a tiempo para omitir ASLR" ( enlace ), y creo que los atacantes pueden utilizarlo de muchas otras formas.

Entonces, mi pregunta es ¿por qué no eliminar el permiso "r" de las páginas de códigos, es decir, por qué no diseñamos la CPU de manera que el código solo pueda leerse en la CPU para su ejecución?

    
pregunta Infinite 30.11.2016 - 21:36
fuente

1 respuesta

3

Estamos lidiando con las consecuencias de la arquitectura de Von Neumann, el espacio de memoria compartida para datos y códigos. Tiene ventajas, pero como usted señala, también tiene problemas de seguridad, incluida la metodología de ataque.

Si empezáramos de cero, creo que no hay razón para que no se pueda construir una CPU de este tipo, pero muchos programas, desde antivirus a DRM a videojuegos que realizan extrañas optimizaciones a depuradores y quién sabe qué más. No trabajaría con tales restricciones. Sería difícil llevar esa CPU al mercado actual, que espera una compatibilidad retroactiva; algunas personas todavía quieren que los programas de DOS se ejecuten en las computadoras de hoy. Este tipo de cosas dificultan los cambios arquitectónicos importantes.

    
respondido por el crovers 30.11.2016 - 21:43
fuente

Lea otras preguntas en las etiquetas