Unix系统的安全等级标准达到C2级,它具有以下安全特征:
1、访问控制
系统通过访问控制表ACL使得用户可以自行改变文件的安全级别和访问权限 。
如: -rwxr-xr-- 1 john test 4月9日17:50 cm
上面的例子表示文件cm对于用户john来说可读、可写、可执行,对test这个组的其他用户只有读和执行的权限,而对除此以外的所有用户只有读的权限。系统管理员可用umask命令为每个用户设置默认的权限值,用户可用chmod命令来修改自己拥有的文件或目录的权限。
2、对象的可用性
当一个对象不再使用时,在它回到自由对象之前,TCB (Trusted Computing Base) 将要清除它,以备下次需要时使用。
3、个人身份标识与认证
其目的是为了确定用户的真实身份, 在用户登录时它采用扩展的DES算法对输入的口令进行加密,然后把口令的密文与存放在/etc/password中的数据进行比较,如果二者的值完全相同则允许用户登录到系统中,否则禁止用户的登录。
4、审计记录
Unix系统能够对很多事件进行记录,比如:文件的创建和修改以及系统管理的所有操作和其他有关的安全事件(登录失败,以root身份进行登录的情况),通过这些记录系统管理员就可以对安全问题进行跟踪。
5、操作的可靠性
操作的可靠性是指Unix系统用于保证系统的完整性的能力。Unix系统通过对用户的分级管理,通过对运行级别的划分,以及前面提到的访问控制加之自带的一些工具,能够很好地保证系统操作的可靠性。
Unix的安全体系结构
Unix的安全体系结构可以按照ISO/OSI网络模型的层次结构将它分成七层,如下表所示:
层次 名称 含义
7 Policy 安全策略定义、指导
6 Personnel 使用设备和数据的人员
5 LAN 计算机设备和数据
4 Internal Demark 内部区分
3 Gateway OSI中第7、6、5、4层的功能
2 Packet-Filter OSI中第3、2、1层的功能
1 External Demark 外部连接
1、Policy(策略层)
在这一层中,主要定义了一个组织的安全策略,包括安全策略的需求分析、安全方针的制定,也包括了高层次定义的允许的安全风险以及下层的如何配置设备及过程。
2、Personnel (用户层)
本层定义了Unix的安装、操作、维护和使用以及通过其他方法访问网络的人员。从广义上讲, 对Unix多用户环境下的应用进程也应算在其中。此层的安全策略应该反映出用户对总体系统安全的期望值。
3、LAN(局域网层)
它定义用户的安全程序要保护的设备和数据,包括计算机互联的设备。如:路由器、单一的Unix主机等。
4、Internal Demark (内部区分层)
这一层定义了用户如何将局域网连接到广域网以及如何将局域网连接到防火墙上。
5、Gateway (嵌入的Unix网关层)
本层定义了整体平台包括第四层的网络接口以及第三层的路由器。它用于为广域网提供防火墙服务。
6、Packet-Filter (包过滤层)
它对应于OSI的第一层到第三层,本层不仅提供第一层的物理连接,更主要的是根据安全策略, 通过用户层的进程和包过滤规则对网络层中的IP包进行过滤。一般的包过滤算法是采用查规则表来实现的,它根据“条件/动作”这样的规则序列来判断是前向路由还是扔包。
7、External Demark (外部连接层)
它定义用户系统如何与设备、电话线路或其他用户不能直接控制的媒介进行连接。完整的用户安全策略应包括这一部分,因线路本身可能允许非授权访问。
Unix系统不安全的因素
尽管Unix系统有比较完整的安全体系结构,但它仍然存在很多不安全的因素,主要表现在以下几个方面:
1、 特权软件的安全漏洞
程序员在编写特权代码或suid代码时,如果没能确保用户对程序执行环境的完全控制,或者对所有返回的错误状态没能给予适当的处理,导致入侵者控制程序的运行环境,使得用户的程序出现不可预期的结果,从而威胁系统的安全。
2、研究源代码的漏洞
由于一些程序本身存在着安全漏洞(如缓冲区溢出),入侵者往往通过这些漏洞来对系统进行攻击。
3、特洛伊木马
特洛伊木马与用户一般要执行的程序从表面上(如文件名等)看很相似,实际上却完成其他的操作,如删除文件、窃取密码和格式化磁盘等,到用户发现时,为时已晚。
4、网络监听及数据截取
计算机安全面临的另一个重要威胁是计算机之间传输的数据可以很容易地被截取。由于异种机的互连,敏感数据传输处于系统的控制之外,有许多现成的软件可以监视网络上传输的数据。
5、软件之间相互作用和设置
由于大型系统软件通常由很多人共同协作完成因此无法准确预测系统内每个部分之间的相互作用。例如/bin/login, 它可接收其他一些程序的非法参数,从而可使普通用户成为超级用户。另一方面,系统软件配置的复杂性,以至简单的配置错误可能导致不易觉察的安全问题。
安全管理
Unix系统安全包括物理安全和逻辑安全,因此与其相对应有物理安全的管理和逻辑安全的管理,下面只针对Unix逻辑安全的管理,从三个方面对此进行论述。
1、防止未授权存取
防止未授权的人进入系统,这是Unix安全管理最重要的问题。新版Unix提供了专门的鉴别系统,如SUN Solaris使用DES密码机构和公共关键字密码,该系统极大地提高了网络环境的安全性。要使Unix鉴别机制更充分地发挥作用,必需加强用户的安全意识和良好的口令管理,进行用户和网络活动的周期检查。
2、防止泄密
就是防止已授权或未授权用户间相互存取或交换对方的重要信息,如用户文件及各种日志文件(如各种log文件)。为此,必须加强对重要文件的访问控制和管理,对系统文件和其他重要文件(如用户root的文件)的属性一定要作安全设置。
3、防止用户拒绝系统的管理
Unix系统不应被一个有意试图使用过多资源的用户损坏。由于Unix不能很好地限制用户对资源的使用,因此,系统管理员需要用ps、df和du命令周期性地检查系统,以便能够查出过多占用CPU资源的进程和大量占用磁盘空间的文件和用户。
保障Unix安全的具体措施
针对比较突出的安全问题,提出了下面一些具体的措施。
1、防止缓冲区溢出
据统计,约90%的安全问题来自缓冲区溢出。攻击者通过写一个超过缓冲区长度的字符串,然后植入到缓冲区,可能会出现两个结果,一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另有一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。一些版本的Unix系统(如Solaris 2.6和Solaris 7)具备把用户堆栈设成不可执行的功能,以使这种攻击不能得逞。以下是让这个功能生效的步骤:
1)变成root
2)对/etc/system文件做个拷贝 cp /etc/system /etc/system.BACKUP
3)用编辑器编辑/etc/system文件
4)到文件的最后,插入以下几行:
set noexec_user_stack=1
set noexec_user_stack_log=15
5)保存文件,退出编辑器后,重启机器,以使这些改变生效。可能有些合法使用可执行堆栈的程序在做如上改变后不能正常运行,不过这样的程序并不多。
2、在inetd.conf中关闭不用的服务
Unix系统中有许多用不着的服务自动处于激活状态。它们中可能存在的安全漏洞使攻击者甚至不需要账户就能控制机器。为了系统的安全,应把该关的功能关闭,该限制的文件限制访问权限。可以用如下方法来关闭:
1)变成root
2)备份inetd的配置文件/etc/inetd.conf
cp /etc/inetd.conf /etc/inetd.conf.BACKUP
3)编辑/etc/inetd.conf文件
以“#”符号注释掉不需要的服务,使其处于不激活的状态。在确实需要很高安全的机器上,最好注释掉telnet和ftp,即使要使用此两项服务,也要对使用情况进行限制,如用TCP Wrapper对使用telnet或ftp的IP地址进行限制。
4)在改变/etc/inetd.conf后,找到inetd进程的id号,用kill向它发送HUP信号来刷新它。一定要确保kill了inetd进程后,它还在运行。
3 、给系统打补丁
Unix系统被发现的漏洞,几乎都有了相应的补丁程序。因此,系统管理员需对系统漏洞做及时的修补。软件公司都会定期提供补丁。
4、重要主机单独设立网段
从安全角度考虑,经常做telnet、ftp等需要传送口令的重要机密信息应用的主机应该单独设立一个网段, 以避免某一台个人机被攻破,被攻击者装上sniffer, 造成整个网段通信全部暴露。
5、定期检查
定期检查系统日志文件,在备份设备上及时备份。定期检查关键配置文件(最长不超过一个月)。
重要用户的口令应该定期修改(不长于三个月),不同主机使用不同的口令。