许多实时操作系统本身就有不安全性和不可靠性,这些不安全因素就给黑客的入侵和*的攻击留下了可趁之机。操作系统是基本的系统软件,它是对硬件系统的次扩充,同时给用户提供一个更容易理解和进行程序设计的接口,它是设备安全的,它的安全性不仅直接影响上层网络通信及应用软件的安全,而且还会造成整个信息系统的瘫痪,基于此,本文对嵌入式实时多任务操作系统安全性进行分析与探讨。
1 调度策略的改进
在多任务的实时操作系统中,调度是一个十分重要的功能,用来确定多任务下执行的顺序和在获得CPU资源后能够执行的时间长度,若调度不当,可能引起死锁,死锁就是死机,死机在嵌入式系统中是不允许的。绝大多数实时多任务操作系统RTOS(RealTime multi-tasking Operation System)采用基于优先级的抢先式调度方式;在这种机制下,系统中优先级进程总是占用处理器。如果多个进程具有同等优先级,这些进程一般通过时间片轮转调度方式实现对处理器的平均分配,但在给定的优先级条件下,时间片轮转调度方式并不能保证处理器时间被关键进程占用。假定系统包含两个具有同等优先级的进程。进程A是不重要的后台进程,而进程B则是至少需要40%处理器时间才能运行完成的关键进程。由于进程A和进程B分配了同等优先级,典型的调度程序将时间片分割,以保证每个进程都能获得50%的处理器的时间。此时,进程B能顺利完成。若进程A创建了一个具有同等优先级的新进程,则这3个进程将共享处理器,进程B只获得33%的处理时间,因而无法完成关键进程。在这种情况下,如果进程A的代码本身存在缺陷或受到*的影响,进程A可能会创建更多的进程,使进程B只能占用很少的运行时间。
在系统的调度策略中,在特定优先级条件下为进程增加一个“权重”参数,可以解决这个问题。当一个进程创建另一个具有同等优先级的进程时,该进程必须转让自身的部分权重给新创建的进程。在上例中,假定系统设计时预先分配进程的权重,进程A占用60%的时间,进程B占用40%的时间,当进程A创建新的进程时,必须转让部分权重,在此为设30%,则进程A和新的进程均占用30%处理器的时间,而进程B则不受影响仍为40%,这样就可以保证关键进程顺利进行,阻止了有缺陷的进程无限度地占用CPU,从而提高了系统的安全性。
2 软件分层防御
在以前的嵌入式实时操作系统中,为了确保实时性,通常采用函数调用的方式实现应用程序访问操作系统的服务,一旦应用程序出现错误往往会引起操作系统崩溃。为了解决操作系统数据安全性,使得应用程序、系统程序的错误不会引起蔓延,目前国际上在安全性实时操作系统中提出安全分层防御体系,其思想是根据应用任务的时间特性与空间特性,确保系统资源的可用性,终实现系统的安全性。就是为每个任务都有自己的指定时间域和一个确定是存储空间域,该时间域和空间域是该任务所独有的,其他任务的破坏不会导致该任务的破坏,也就是说一个任务的破坏不会导致整个系统的其他任务的时间和存储空间的耗尽,从而导致整个系统的崩溃。采用软件分层结构来保护软件不受变化的影响,其实时操作系统的3层结构如图1所示。
应用层 包括所有应用软件的功能模块。
操作系统层 提供实时操作系统的一般服务,主要包括调度、通信、同步和异步操作、存储器管理、中断处理服务等。
模块支持层 主要实现硬件与操作系统间的隔离。
各层之间均有个接口,使各层的更新相互不影响,提高了系统的安全性。
3 Linux操作系统的安全性分析
Linux操作系统是一个开放源代码的、可以使用和自由传播的类Unix操作系统。Linux是一个开放式系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入Linux系统,或者盗取Linux系统上的重要信息。因此,要加强安全观念,限度的确保信息安全。
3.1 控制超级用户的权限
系统管理员拥有其他用户所没有的特权,一旦获得超级管理员的权限,就获得对计算机系统的完全控制。因此,有必要对权限进行分割,将原有ROOT具有的特权按其功能的不同划分不同的类型,单独加以控制。按特权安全策略,对系统的用户权限和进程权限进行控制,将ROOT用户具有的特权细化,使系统中没有一个用户的权限是“超级”的。将Linux操作系统的系统调用分为受控与非受空2类,既满足控制特权又方便用户使用。由特权控制管理程序管理用户特权和文件特权,系统进程特权在执行程序后有进程特权计算公式计算它的新特权。
3.2 加强身份技术
身份是对系统的主体进行验证,目的是防止数据被非法用户访问。除了口令外,采用数字签名技术可大大提高访问控制的力度,采用生理特征技术可获得的验证效果。如生物识别技术,即基于指纹、声音、视网膜等的特征验证。
3.3 备份
在完成Linux系统的安装以后应该对整个系统进行备份,以后可以根据这个备份来验证系统的完整性,当然也可以用tripwire对照一个数据库来检查文件,这样就可以发现系统是否被非法篡改过。例如,tripwire可以很容易地确定入侵者是否已经把/bin/login的副本替换成了一个把口令记录在秘密文件中的程序。根据篡改过的文件可以判断系统哪些文件存在安全隐患就可以加强这方面的管理,不断完善系统的安全性。同时,一旦系统文件被破坏也可使用系统备份来恢复到正常状态。
3.4 改进系统内部的安全机制
在编程时经常要考虑溢出问题,同样的Linux操作系统也要考虑此问题。Linux内核没有对存储在ISO9660文件系统上的符号进行正确长度检查,本地攻击者可利用这个漏洞获得root用户权限。通过改进Linux操作系统内部功能来防止Linux操作系统缓冲区溢出攻击这种破坏力极强却有难预防的攻击方式,虽然这样的改进需要管理员具有相当丰富的经验和技巧,但对许多安全性级别要求高的Linux系统来讲是很有必要的。
缓冲区溢出实施起来很困难,因为入侵者必须能够判断潜在的缓冲区溢出何时会出现以及它在内存中的什么位置出现,同时缓冲区溢出预防起来也十分困难,系统管理员必须完全去掉缓冲区逸出存在的条件才能防止这种方式的攻击。现在已经有使用SafeGuard的Linux版本,虽然使用SafeGuard会导致系统的性能下降,也可能会导致对执行栈的某些程序和库的依赖问题。但它能够防止整个缓冲区溢出这一类的攻击。
4 结语
一个实时操作系统的安全性所包含的范围很广,如文件系统的安全性、死锁、进程的调度等。限于篇幅,本文只对其中的几个进行了讨论分析。由于操作系统在整个计算机系统的重要性,尤其是在涉密网络中,要特别注意其安全性,因此,必须加强以安全操作系统为基础的整体安全保障设施的建设。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。