why ASLR doesn't randomize text, bss and data regions of the process?
Lo fa. L' indirizzo di base del modulo è randomizzato, e quindi l'indirizzo virtuale di tutte le sezioni sarà randomizzato. Tuttavia, l'indirizzo virtuale relativo delle sezioni dalla base deve rimanere statico, poiché la maggior parte delle istruzioni di accesso alla memoria funzionano con offset relativi. Altrimenti dovresti generare correzioni per ogni mov
che attraversa i limiti di sezione (ad esempio un'istruzione in .text
che legge da .data
).
Non porterebbe alcun beneficio reale, causerebbe molti problemi e potrebbe essere facilmente aggirato leggendo le istruzioni note nella sezione corrente (le correzioni sono applicate in memoria).
Also in the newer version of kernels (such as Linux kernel version 3.x) along with process base, libraries and stack addresses, are the heap addresses also randomized?
Sì. L'indirizzo di base virtuale di ciascun heap è casuale e le allocazioni dell'heap vengono eseguite all'interno di tale heap normalmente.