ExecShield 旨在防止为爬行而编写的软件程序导致的安全漏洞
通过 Internet 寻找具有常见漏洞(例如蠕虫和病毒)的系统。
它在内核中启用,并以不干扰用户的方式工作。
它的目标不是防御闯入我们本地网络的专家黑客或者已经可以访问部分网络的内部员工。
它的目标是防止入侵者使用脚本查找以 root 权限运行的程序编写方式中的漏洞。
ExecShield 的工作原理
ExecShield 内存管理技术之一是每次启动程序时使用随机内存位置。
使用随机内存位置可以防止蠕虫或者病毒知道要使用破坏系统安全性的可执行文件覆盖内存的哪些部分。
例如,如果程序每次运行时都使用相同的内存位置,黑客可以编写病毒,等待程序写入内存,然后覆盖该部分内存。
当程序稍后执行内存中的指令时,病毒已经覆盖了它,而是执行来自病毒的代码。
病毒代码以程序拥有的任何权限执行。
如果程序以 root 用户身份运行,可能会对系统造成重大损害,或者系统上存储的机密数据可能会通过 Internet 上的网络发送到另一台计算机。
ExecShield 通过两个功能来解决这个问题:
Ascii 区
地址空间随机化
确定 ExecShield 的状态
ExecShield 在 Red Hat Enterprise Linux 内核中默认启用。 要验证 ExecShield 是否已启用,请执行以下命令:
# cat /proc/sys/kernel/exec-shield
如果它返回值 1,则启用 ExecShield。 值 0 表示已禁用。 您也可以通过执行以下命令来确定 ExecShield 的状态,但此命令必须以 root 用户身份运行:
# sysctl -a | grep exec-shield
如果返回以下内容,则 ExecShield 已启用, 如果值为 0 表示 ExecShield 已禁用。
kernel.exec-shield = 1
禁用 ExecShield
可以通过使用 sysctl 或者修改引导加载程序配置文件将 exec-shield 内核参数设置为 0 来禁用 ExecShield。
要使用 sysctl 禁用 ExecShield,请执行以下命令:
# sysctl -w kernel.exec-shield=0
ExecShield 将立即被禁用。
但是,单独执行此命令不会在后续重新启动时禁用 ExecShield。
要为所有重新启动禁用 ExecShield,请将以下行添加到 /etc/sysctl.conf(以 root 用户身份):
kernel.exec-shield = 0
在重新启动之前不会启用对此文件所做的更改,因为该文件在系统启动期间仅读取一次。
要立即启用更改,仍需要执行 sysctl -w kernel.exec-shield=0 命令。
在引导时禁用 ExecShield 的另一种方法是将引导参数和值添加到引导加载程序配置文件中。
对于使用 GRUB 作为引导加载程序的 x86 和 x86_64 系统,将以 root 身份将以下行添加到 /etc/grub.conf 中的内核行:
exec-shield=0
注意:如果在 /etc/grub.conf 和 /etc/sysctl.conf 中设置了相同的引导参数,则 sysctl.conf 中的值优先。
如果将引导参数添加到 GRUB 配置文件,请确保 /etc/sysctl.conf 中没有任何冲突设置。