¿Por qué ASLR no aleatoriza las regiones de texto, bss y datos del proceso?
Lo hace. La dirección base del módulo es aleatoria, y por lo tanto, la dirección virtual de todas las secciones será aleatoria. Sin embargo, la dirección virtual relativa de las secciones desde la base debe permanecer estática, ya que la mayoría de las instrucciones de acceso a la memoria funcionan mediante compensaciones relativas. De lo contrario, tendría que generar correcciones para cada mov
que cruza los límites de la sección (por ejemplo, una instrucción en .text
que se lee desde .data
).
Simplemente no traería ningún beneficio real, causaría muchos problemas y podría evitarse fácilmente leyendo las instrucciones conocidas en la sección actual (las correcciones se aplican en la memoria).
También en la versión más reciente de kernels (como la versión 3.x del kernel de Linux), junto con la base de procesos, las bibliotecas y las direcciones de pila, ¿las direcciones del montón también son aleatorias?
Sí. La dirección de la base virtual de cada montón es aleatoria, y las asignaciones de montón se realizan dentro de ese montón de manera normal.