堆栈执行禁用保护

保证计算机系统安全形成了随需应变业务的重要方面。 在当今高度互联的网络环境中,阻挡来自各种来源的攻击已成为极端的挑战。

计算机系统受到复杂完善的攻击的可能性正在增加,这些攻击会中断企业与政府机构的日常运作。 虽然没有任何一种安全性措施可以提供绝对安全的攻击防御,但是您应部署多种安全性机制来阻止安全性攻击。 本节介绍AIX®中用于挫败基于缓冲区溢出执行的攻击的安全机制。

安全违规的发生有许多种形式,但最常见的一种方法是监视系统提供的管理工具,查找并利用缓冲区溢出。 当由于未正确验证数据(例如命令行、环境变量、磁盘或终端 I/O) 而覆盖内部程序缓冲区时,就会发生缓冲区溢出攻击。 通过缓冲区溢出将攻击代码插入正在运行的进程,更改运行进程的执行路径。 返回地址将被覆盖并重定向到插入代码的位置。 常见的违规起因包括错误或不存在的边界检查,或对数据源有效性的错误假设。 例如,如果数据对象的大小足以容纳 1 KB 的数据,但程序并未检查输入边界,并因此可能将大于 1 KB 的数据复制到该数据对象,就会发生缓冲区溢出。

入侵者的目的是攻击可以将 root 用户权限提供给常规用户的命令和/或工具。 将在启用了所有权限的情况下获得对该程序的控制(允许缓冲区溢出)。 攻击通常关注 root 用户所拥有的 UID 设置,或导致执行 shell 的程序,因此获得对系统的基于 root 的 shell 访问权。

可以通过阻塞通过缓冲区溢出进入的攻击代码的执行,来防止这些攻击。 禁止发生在进程内存区中的执行,因为该位置通常不会执行命令(堆栈和堆内存区)。