Ubuntu Linux:打开Exec-Shield缓冲区溢出保护
时间:2020-01-09 10:45:35 来源: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基址。