对操作系统的安全性进行定性分析,很容易包含主观意见,得到的结论会由于过去和现在的经验而有很大的不同。本文的目标是给用户提供一个框架,让他们更多的理解Windows和Linux的安全性能。下面的分析并不全面,只是终端用户进行评估的起点。Linux和Windows在技术上不断进步,究竟哪个系统更安全的结论也会不断变化。本文分析的结果:Linux提供了比Windows更好的安全特性。
基本安全
微软和Linux都提供了对验证、访问控制、记帐/日至、受控的访问保护实体、加密的支持。不过Linux的表现更好一些,因为Linux还提供了Linux安全模块、SELinux和winbind。Linux用户不需对内核打补丁就能增加额外的安全机制。
Linux在LSM之上构建了多种访问控制机制,例如:为应用程序建立了单独的空间,使它们之间相互分离,也与基本的操作系统隔离,这样即使应用程序出现了安全问题也不会影响操作系统。Linux的基本安全也可以通过应用程序增强,比如Tripwire(可以定期对系统进行关键文件的完整性检查,如果文件的内容或者属性有变化就通知系统管理员)。
Windows的限制在于基本安全是依靠MSCAPI的,在代码签名时信任多个密钥。微软的模型重点在于可以同时对一个产品使用弱加密或者强加密。尽管模块不是以相同的密钥进行签名,MSCAPI却信任许多根验证机构,代码签名也信任多个密钥。因此只要有一个密钥被泄露就会使整个系统异常脆弱。密钥泄漏的情况:授权的代码签名者不小心纰漏了自己的私钥,或者签名机构错误的签发了一个证书。这些情况曾经发生,有一次Verisign错误的以微软的名义签发了两个证书,并将这些证书的控制权交给了未授权的个人。
网络安全与协议
Linux与Windows对网络安全和协议的支持都很不错。两者都支持IPSec,这是一个运行于IP层的开放的基于加密的保护方式。IPSec能够识别终端主机,同时能够对网络传输数据和加密数据的过程中的修改作出判断。Linux下使用OpenSSH、OpenSSL和OpenLDAP,分别对应微软系统下闭合源码的SSH、SSL和LDAP。
应用安全
由于微软IIS和Exchange/Outlook不断出现的安全问题,Linux显得更胜一筹。Apache和Postfix都是跨平台的应用程序,比微软的相应产品更加安全。由于Linux有内建的防火墙使得其安全性有所增强,Snort也是一个优秀的入侵检测系统。关于基于x86系统的Linux内核,一个很重要的特性就是IngoMolnar的exec-shield,可以保护系统不受缓冲区或者函数指针溢出的攻击,从而对那些通过覆盖数据结果或者插入代码的攻击程序有所防护。exec-shield补丁使攻击者很难实现基于shell-code的攻击程序,因为exec-shield的实现对于应用程序是透明的,因此不需要应用程序的重新编译。
微软正在大刀阔斧的重新设计产品的安全架构,并为已安装的系统提供补丁。不过旧版本的Windows产品仍然存在安全问题,这使得任务变得复杂。许多微软用户正面临安全威胁,而补丁在发布之前必须做好文档。另外,微软倾向于将应用程序的数据和程序代码混合在一起,比如ActiveX,这使得系统外的不可信数据也能被使用,甚至是利用不可信数据执行任意代码。某些情况下,Windows甚至允许外部系统提供数据签名的代码,这就意味着本地的系统管理员也不能审查代码,不过他仍然知道是谁对代码签的名。
在.NET框架下,微软应用程序的安全性有所改进。当然,对于那些异构平台,例如Linux、Windows、Unix尤其是建立在Java平台下的应用程序,微软的产品是有很大局限性的。
分发和操作
关于分发和操作,Linux与微软的侧重点不同,Linux下大部分的管理都通过命令行接口。Linux的发行商也提供了各种安装和配置工具,例如:up2date、YaST2和Webmin。Bastille Linux是一个支持Red Hat、Debian、Mandrake、SUSE和Turbolinux的加固工具。相比之下,Windows的系统管理员使用简单易用的GUI工具,配置的时候也很容易出错误。尽管一些人认为,一个周之内将任何人都可能成为Windows的系统管理员,问题是他们到底对管理了解多少?微软的安全问题,绝大多数都是由于发布与操作时的拙劣配置。Windows自带安装和配置工具,微软也为加固域控制器、架构服务器、文件服务器、打印服务器、IAS服务器、证书服务器和堡垒主机提供了向导,不过加固架构与加固操作系统还是有区别的。
确信度
定义操作系统确信度的标准是公共标准(CC),这是ISO标准(ISO 15408)。关于确信度的等级有一个层次结构 ―― 从EAL1到EAL7。只有在特定的软件、硬件和系统配置下,公共标准的评估才是有效的。Windows的EAL比Linux要高,达到了EAL4,而Linux目前只达到了EAL3。SUSE正计划在年底达到EAL4。政府机构大部分都需要CC的确信度。即使只有政府客户(甚至特指美国国防部)才需要确信度,商业产品满足这一要求也是一件好事。不过大部分的用户都不需要达到国防部的标准。
可信计算
可信计算是一种架构,可以避免对应用程序的修改,与厂商的通信也是安全的。许多厂商,比如Intel、微软和IBM,都在欢迎这项新兴的技术。目前,这一功能只供展示,现实中并没有可用的系统,因此Linux和Windows都不能胜任。微软的可信计算与数字权力管理有关,而开源社区目前没有可信计算的项目。
开放标准
Linux要优于Windows,因为它支持所有的开放标准(尽管Windows也支持许多相同的开放便准,如IPSec、IKE和IPv6,也乐意扩展标准)。对于使用异构系统并有互操作需求的公司,"标准"如果代有私有代码,就使得对缺陷的检测和错误的修正更困难、耗费的时间也更多。一个例子就是微软对Kerberos标准协议的扩展。微软提供了对Kerberos票据的授权功能,尽管Kerberos一开始也是按照这个目的设计的,这一功能却一直没有使用。微软扩展了Kerberos标准,在处理过程中也期望其它程序共享票据的授权数据字段。因此,微软的Kerberos版本与标准不能完全交互。IT经理会发现:在一个异构的IT环境中,使用微软Kerberos会使得整个环境难以管理,它们需要完全的Windows IT架构。
开源
如果安全操作系统的标准就是开源,那么Linux显然要优于Windows。微软的共享源代码计划就是为了满足用户对源代码的需要。不过,该计划的大部分内容都是"可看但不可修改"的情况。俄罗斯、英国、中国和北约参与了微软的政府安全计划。尽管该计划的目标是增加透明度和加强合作,如果某组织需要访问微软的源代码,需要遵守各种各样的要求。例如:并不是所有的Windows源代码都可以在线查看,因此如果用户需要编译并测试应用程序,必须亲自访问微软的总部。
推荐
Linux和Windows的安全性必定会引起持续的争论,到底是开源的操作系统好,还是封闭源代码的操作系统好?业界的逻辑是:基于开放标准与开放源代码的操作系统,能提供更好的互用性,更好的错误发现和修正机制,这要比通过隐藏来达到安全的模型优秀。开源也促使Linux的发行提供商对生产过程完全透明。每一步对于用户来说都是可再现的,因此能够逐渐的增强安全。而Windows的源代码并不易获得,因此不能提供等价的透明。
Linux提供了至少不逊于Windows的安全性能。Linux系统的安全取决于对Linux发行版的选择、使用的内核版本、实现与支持系统的IT员工的水平。一旦你选定了产品,实现并维护操作系统的安全就完全依靠IT员工了,你需要对他们进行培训,让他们掌握足够的专业技能,完成分发、管理和故障排除的任务。要让IT经理和系统管理员明白如何应用这些惯例。
我们推荐各种机构首先了解自己的功能需要,然后熟悉一下操作系统关键性的安全性能,这样就能减少使用操作系统的风险,确保一致性。
如果你正考虑移植到另一个操作系统或者是升级目前的产品,你需要按照安全性能的要求来选择操作系统的环境。把你的商业需要与对操作系统安全性的理解相结合,就能在实现功能的同时,兼顾一致性与风险最小化。