什么是地址空间布局随机化

可能重复:
内存随机化作为应用程序安全增强?

有些人可以解释一下我的地址空间布局随机化是什么以及它是如何实现的。 这种技术如何影响堆栈,堆和静态数据。 此外,我对任何解释地址空间布局随机化的论文感兴趣。

感谢和问候,

像老鼠。

ASLR是一种旨在通过稍微移动段来使各种类型的缓冲区溢出更难以利用的技术。 堆栈可以移动几个字节(或页面),程序的各个部分(甚至代码使用的库)可以加载到不同的地址等。

缓冲区溢出通常通过欺骗CPU在某个地址(通常在堆栈上)运行代码来起作用。 ASLR使地址难以预测变得复杂,因为它可以在程序运行的每一次都改变。 通常情况下,程序不会运行任意代码,而是会崩溃。 这显然是一件坏事,但并不像一些随机小丑被允许控制你的服务器那么糟糕。

一个非常简单,原始forms的ASLR实际上可以在没有操作系统任何帮助的情况下实现,只需从堆栈指针中减去一些少量数据即可。 (这在高级语言中有点棘手,但在C语言中有点简单 – 而在ASM中则非常简单。)但这只能防止使用堆栈的溢出。 操作系统更有帮助; 它可以改变各种各样的东西,如果感觉像。 但是,它取决于你的操作系统有多少。