假设我从另一个进程派生进程。在具有ASLR设置的OS中是否应用地址空间布局随机化(ASLR)?
请注意,我说的是在执行fork之后我没有调用execve函数的情况。
答案 0 :(得分:10)
是
但请注意,fork
之后,父母和孩子都应用相同的随机化(毕竟它们是彼此的副本!)。
如果孩子和家长打电话给mmap(NULL, ...)
,那么他们的地址地图就会开始分歧。
更新
你的陈述不矛盾吗?
完全没有。在fork
之后,父地址和子地址空间立即相同(这是fork
所做的定义)。但ASLR对父母和孩子仍然有效。随机化不能“回溯到时间”并随机化已经做出的决定,但任何未来的决定(例如下一个mmap
)的位置将被随机化,并且可能会导致父母和孩子的结果不同。
是否与基本的mmap或OS编写器有关,在mmap中引入随机性以及安全性?
也许你不明白ASLR是什么?
简而言之,在启用ASLR的情况下,操作系统将为andomize placement of main stack, and placement of any non-MAP_FIXED
mmaps。
到fork
时,主堆栈的位置早已确定,因此父级和子级将具有相同的位置。未来mmap
是ASLR未来可以(并且将会)受到影响的唯一事物。