Ubuntu Linux:打开Exec-Shield缓冲区溢出保护

时间:2020-01-09 10:45:33  来源:igfitidea点击:

我试图按此处所述在Linux上设置exec-shield保护,但是在Ubuntu Linux服务器版本12.04 LTS上出现以下错误:

sysctl -w kernel.exec-shield=1  error: kernel.exec-shield is an unknown key
sysctl -w kernel.exec-shield = 1错误:kernel.exec-shield是未知密钥

如何解决此问题并确保Ubuntu Linux上具有exec-shield缓冲区溢出保护安全功能?

Linux内核(或者内核补丁)提供ExecShield功能来防止缓冲区溢出,例如:

  • 堆栈的随机放置
  • 随机放置存储区
  • 防止仅包含数据的内存执行
  • 小心处理文本缓冲区等。

Ubuntu内核具有"不执行(NX)"或者"不执行(XD)"支持。
这样做完全相同,可以防止每个内存页面执行代码。
如果您使用的是英特尔处理器,则系统启动时应该会看到以下消息:

dmesg | grep --color '[NX|DX]*protection'

在Ubuntu内核上启用缓冲区溢出的Intel CPU NX保护

这等效于CentOS或者SL或者RHEL(Red Hat)Exec Shield内核安全功能。
如果没有看到此消息,请重新引导服务器并使用BIOS设置程序设置XD/NX保护。

确保启用kernel.randomize_va_space

执行以下命令:

sysctl -w kernel.randomize_va_space=1

或者,编辑文件/etc/sysctl.conf并按如下所示追加/修改:

kernel.randomize_va_space = 1

randomize_va_space可以具有以下任一值:

  • 0不要随机化堆栈和vdso页面。
  • 1打开保护并随机化堆栈,vdso页面和mmap。
  • 2打开保护并随机化堆栈,vdso页面和mmap +随机化brk基址。