【发布时间】:2010-08-31 00:30:27
【问题描述】:
可能重复:
Memory randomization as application security enhancement?
你好,
能否解释一下地址空间布局随机化是什么以及它是如何实现的。这种技术如何影响堆栈、堆和静态数据。我也对任何解释地址空间布局随机化的论文感兴趣。
感谢和问候,
鼠标。
【问题讨论】:
标签: c operating-system
可能重复:
Memory randomization as application security enhancement?
你好,
能否解释一下地址空间布局随机化是什么以及它是如何实现的。这种技术如何影响堆栈、堆和静态数据。我也对任何解释地址空间布局随机化的论文感兴趣。
感谢和问候,
鼠标。
【问题讨论】:
标签: c operating-system
ASLR 是一种旨在通过稍微移动段来使各种类型的缓冲区溢出更难以利用的技术。堆栈可以移动几个字节(或页面),程序的各个部分(甚至代码使用的库)可以加载到不同的地址,等等。
缓冲区溢出通常通过诱使 CPU 在某个地址(通常在堆栈上)运行代码来起作用。 ASLR 使地址更难预测,从而使问题复杂化,因为它可以在程序每次运行时更改。通常,程序不会运行任意代码,而是会崩溃。这显然是一件坏事,但还不如允许某个随机的小丑控制您的服务器那么糟糕。
一种非常简单、粗略的 ASLR 形式实际上可以在没有操作系统帮助的情况下实现,只需从堆栈指针中减去少量即可。 (在高级语言中这有点棘手,但在 C 语言中稍微简单一些——而在 ASM 中则非常简单。)不过,这只能防止使用堆栈的溢出。操作系统更有帮助;如果感觉像,它可以改变各种各样的东西。不过,这取决于您的操作系统。
【讨论】: