在操作系统安全特性的分析中,常常用到“利用漏洞”这一术语。这些年来,在很多操作系统中都发现了漏洞。但是,这些漏洞逐渐得到了修补,而且对可能出现薄弱点的部位的知识体系也扩大了。
1.已知的漏洞
本节将讨论操作系统中已经发现的典型漏洞。讨论的目的是说明有必要在操作系统的设计和测试中进行仔细分析。
I/O处理成为操作系统最大的薄弱点,主要有以下几个原因:
●I/O是通过独立的智能硬件子系统来完成的(智能设备能够自主操作,如重排磁盘请求队列以优化磁头的运动,或者异步执行一系列I/O操作)。这些自主部件常常位于操作系统的安全内核和安全限制之外。
●执行I/O的代码比系统其他部件的代码复杂得多,并且更依赖于特定的硬件设备。由于这些原因,检查I/O设备驱动程序、访问代码,以及服务程序的正确性就比较困难,更不用说是形式化地验证它们。
●为了快速地传递数据,I/O活动有时会绕过操作系统的其他功能,如页面地址和段地址的转换。因此,它有可能避开与这些功能相关的保护特性。
●I/O操作通常是面向字符的。同样,为了能够快速传递数据,操作系统设计者在数据传输期间限制系统执行的指令数目。有时被省略的指令正是在传输字符的过程中实施安全策略的指令。
操作系统安全方面的第二个薄弱点是访问策略的二义性。一方面,对各用户进行分离,保护他们各自的资源;另一方面,用户需要共享库文件、实用程序、公共数据及系统表格。在策略上,隔离和共享之间的区别并不总是很明确。因此,在实现的过程中,也不能够严格区分。(www.xing528.com)
第三个薄弱点是不完全检查。Saltzer推荐了一个操作系统设计,其中每一次的访问请求都要经过权限检查。然而,某些系统对每次I/O操作、进程执行、机器周期间隔只做一次访问权限检查。这种机制可用来实现完全保护,但关于何时调用该机制的决策并不完善。因此,在没有明确要求的情况下,系统设计者采用了“最有效”机制,即使用最少的机器资源。
第四个薄弱点是通用性,特别是在大型计算系统的商业性操作系统中。操作系统实现者允许用户自定义操作系统的安装,并且允许安装其他公司编写的软件包。作为操作系统的一部分,一些软件包必须拥有和操作系统一样的访问权限才能被执行。例如,和现有的操作系统的标准控制相比,有的程序提供更加严格的访问控制。通过“钩”(Hook)来安装软件包,然而,这些“钩”也成为任何想要入侵操作系统的用户的陷门。
2.漏洞利用的例子
如上所述,用户接口是许多主流操作系统的薄弱点。某些操作系统只在用户操作开始时进行访问权限检查,这就导致了典型的检查时刻到使用时刻的缺陷。对每一个要传输的字符都进行权限检查会增加系统的开销。命令通常驻留在用户内存中。在操作正式开始后,任何用户都可以修改该命令的源地址或目标地址。因为访问权限已被检查,所以即使使用新的地址,都不再对数据传输进行检查。利用这一缺陷,用户能向他们希望的任何地址传送或接收数据。
利用漏洞进行攻击也涉及程序上的纰漏。某些操作系统为一些安全性软件包的安装保留了一种特殊的管理功能。执行安装时,这个管理调用以特权方式将控制权返回给用户。由于在这种方式下所允许的操作并不受到严格的监控,因此,管理调用可以用于访问控制或者其他高安全性的系统访问。尽管执行这种特殊的管理调用比较烦琐,但在操作系统中,这种调用是完全可以得到的。因此,还应该使用附加的检查来认证执行管理请求的程序。一种替代办法是:在管理请求下进入的任何主体的访问权限,仅局限于那些用于执行附加程序功能的对象。
检查时刻到使用时刻的不匹配也会引发安全问题。在基于此漏洞进行攻击的过程中,一个用户访问一个对象,如缓存,要经过访问权限检查。但是在访问获得批准到访问正式开始之间的这段时间,用户可以改变对象的指定,因此,用户没有访问该访问的对象,而是访问了一个不该访问的对象。
当然,还有其他利用多种漏洞的更复杂组合的入侵。总的来说,安全操作系统的安全缺陷是由于对复杂情形(如用户接口)的错误分析造成的,或者是由于安全策略中的二义性或疏忽造成的。利用简单的安全机制实现清楚而完善的安全策略,入侵的数量就会显著减少。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。