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

时间:2010-08-31 00:30:27

标签: c operating-system

  

可能重复:
  Memory randomization as application security enhancement?

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

谢谢&的问候,

mouseY的。

1 个答案:

答案 0 :(得分:1)

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

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

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