我听说过这个理论。地址空间位置随机化获取库并将它们加载到虚拟地址空间中的随机位置,这样如果黑客在您的程序中发现漏洞,他就没有预先知道的地址来执行返回 libc 攻击反对,例如。但想了几秒,作为防御手段,也没什么意义。
假设我们假设的 TargetLib(libc 或黑客正在寻找的其他任何东西)加载到一个随机地址而不是确定性地址。现在黑客并不提前知道 TargetLib 和其中的例程在哪里,但应用程序代码也不知道。它需要在二进制文件的某个地方有某种查找表,以便在 TargetLib 中找到例程,并且必须位于确定的位置。(或者在一个随机的位置,由其他东西指向。你可以添加任意数量的间接,但最终你必须从一个已知的位置开始。)
这意味着黑客不需要将攻击代码指向 TargetLib 的已知位置,只需将攻击代码指向应用程序查找表中 TargetLib 的条目,并取消引用指向目标例程的指针,攻击就会畅通无阻。
ASLR 的工作方式有什么我不明白的地方吗?因为如上所述,我看不出它只不过是一个减速带,提供了安全的形象,但没有实际的实质。我错过了什么吗?