[摘要]
今天,Linux的内核中已经有一个功能强大、灵活的强制访问控制子系统。这个系统强制隔离有机密和完整性要求的数据,因此任何潜在的破坏,即时是由超级用户进程所造成的,都被Linux系统限制起来了。
Linux v2.6还提供了对加密安全的支持,包括了IPSec使用的加密API。这样,在网络和存储加密时就可以使用多种算法(例如:SHA-1、DES、三重DES、MD4、HMAC、EDE...
今天,Linux的内核中已经有一个功能强大、灵活的强制访问控制子系统。这个系统强制隔离有机密和完整性要求的数据,因此任何潜在的破坏,即时是由超级用户进程所造成的,都被Linux系统限制起来了。
Linux v2.6还提供了对加密安全的支持,包括了IPSec使用的加密API。这样,在网络和存储加密时就可以使用多种算法(例如:SHA-1、DES、三重DES、MD4、HMAC、EDE、和Blowfish)。Linux对IPSec IPv4和IPv6协议的支持是一个很大的进步。由于安全抽象到了协议层,用户程序对潜在攻击程序的脆弱性有所降低。密码加密模块目前还不是Linux内核的一部分,如果Linux真的实现了这样的特性,就可以阻止未签名的模块被内核访问。
现在仍然困扰Windows用户的一个问题就是缓冲区溢出。Linux用户从2.6内核开始就会收益于exec-shield补丁。exec-shield可以阻止许多漏洞攻击程序覆盖数据结构并向这些结构中插入代码的企图。由于不需要重新编译应用程序就能使exec-shield补丁奏效,实现起来很方便。
另外,2.6内核中的抢占式内核,也减少了延迟,使得Linux不但可以应用到数据中心,甚至可以在有软实时要求的应用程序使用。许多Linux用户使用的是硬件厂商和系统提供商的不开源的驱动程序(二进制模块)。问题在于:虽然添加这些驱动和模块有用,对于Linux系统并不一定有益。例如,一个未开源的驱动模块有可能控制系统调用并修改系统调用表。2.6的内核提供了特殊的保护措施,可以对限制未开源驱动或者模块对内核的访问。这一特性增加了稳定性,但从安全角度并没有增加新的限制,也不能阻止黑客编写恶意模块。
许多Linux用户来说,最有创造性的特性就是用户模式Linux了(UML),UML是Linux内核的一个补丁,可以允许可执行二进制文件在Linux宿主主机上编译并运行。使用UML有很多好处,最有用的特性就是虚拟机。由于对UML的操作不会影响宿主主机,可以把它作为测试软件、运行不稳定发行版、检查有威胁活动的平台。UML最终会创建一个安全架构上完全虚拟的环境。
Linux与Windows安全性能的重要结论
对操作系统的安全性进行定性分析,很容易包含主观意见,得到的结论会由于过去和现在的经验而有很大的不同。本文的目标是给用户提供一个框架,让他们更多的理解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都不能胜任。微软的可信计算与数字权力管理有关,而开源社区目前没有可信计算的项目。