Ubuntu使用像DEP和ASLR这样的安全功能吗?

我经常读到在Windows上提供了一些特性,例如DEP(数据执行预防)和ASLR(地址空间布局随机化)。在Windows上,您可以对32位程序打开DEP进行一些控制。
  • 这些特性是否在Ubuntu上可用?
  • 我们需要做些什么来启用这些特性吗?
3个回答

是的,两者都是默认开启的;您不需要做任何操作来启用它们。下面是更详细的解释...

在Ubuntu中,默认使用DEP。如果CPU支持,通过NX位实现;如果CPU不支持,则通过内存分段进行模拟。更多详情,请参阅非可执行内存特性项目

在Ubuntu中,默认使用ASLR对可以重定位的内存段(堆栈、库、映射内存)进行保护。唯一不能默认重定位的部分是程序的主代码区域("text"段)。要启用此功能,程序需要特殊编译为PIE(位置无关可执行文件)。许多敏感程序已经以这种方式构建。更多详情,请参阅列表

在Ubuntu中,默认提供了许多其他安全功能。请查看Ubuntu安全功能文档获取完整列表。


Linux内核默认确实使用类似的技术,但它们与Windows版本不同。如果您的处理器具有设置NX位的功能(大多数现代CPU),则内核将利用它。内核中还有一个ASLR的弱实现,可以安装更强的实现,但在Ubuntu上默认情况下未安装。

3我目前找不到参考资料(维基百科的文章http://en.wikipedia.org/wiki/ASLR没有熵比较的部分),但我的理解是Windows的ASLR比Linux要弱。如果你想要比Linux默认更强大的ASLR,你可以构建自己的内核,使用PaX补丁集,这样可以以较小的兼容性代价提供更高的熵值。 - Kees Cook
一篇很好的文章分析了https://www.cert.org/blogs/certcc/post.cfm?EntryID=191的差异,当然,这样的文章如果没有对细节进行一些辩论就不完整了 :D http://www.reddit.com/r/netsec/comments/1xjwde/differences_between_aslr_on_windows_and_linux - Univ426

一般来说,你需要一个支持PAE的内核版本。关于这个主题的详细信息,请参阅this summary

3PAE只有在硬件支持NX的情况下才需要。64位系统已经具备了PAE功能,因此在32位系统上,如果你没有运行一个PAE内核或者你的硬件缺乏NX位,Ubuntu会通过内存分段来模拟NX功能。 - Kees Cook
@Kees Cook:谢谢你提供的信息。OP问到的是32位系统。在我的系统(ubuntu 10.10 32位)上,dmesg显示“无法启用NX(执行禁用)保护:非PAE内核”。另一方面,当我从http://bazaar.launchpad.net/~ubuntu-bugcontrol/qa-regression-testing/master/files/head%3A/scripts/kernel-security/nx/运行测试时,似乎强制执行了nx,但对于`-pie`和`-rie`测试则不是。所以这对我来说有点令人困惑。 - arrange
2不幸的是,10.10及以后版本的dmesg报告存在一个错误,即在具有NX但没有PAE内核的硬件上没有显示启用NX仿真的信息:http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-maverick.git;a=blob;f=arch/x86/mm/setup_nx.c;h=f0686769a0ada41eba88caf4e4285f6c3ec15454;hb=HEAD#l69 - Kees Cook
1现在已经将此报告为错误:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/745181 - Kees Cook