你知道我已经写这个专栏有五年的时间了吗?在这五年之中都发生了些什么呢,我们看到Linux的竞争者已经接受了它,而其Linux已经可以作为一个桌面平台。
在Linux安全领域,也有值得注意的进展,Linux的防火墙现在已经非常成熟,大量的嵌入式防火墙设备都基于它,与安全无关的设备也大量地采用了Linux,Linux支持令人吃惊的数量众多的安全工具,使得它称为安全审计员和安全顾问最喜爱的系统,此外,Linux已经形成了基于角色的访问控制操作系统,最著名的就是NSA的SELinux。
但是Linux安全的未来是怎么样的呢?我已经写了许多有关Linux安全的现状和过去,但是还没有写过有关未来的东西,这个月,我将我想到的Linux安全将走向何方以及它应该走向何方做一下总结。
现在有什么错误吗?
近来显示大量的人开始关注Linux的安全并没有比微软的Windows操作系统安全得多,在开始交火讨论之前,让我们先解释一下这个观点,首先,作为个人来说,我认为Linux是比Windows更安全的,我已经在这个专栏的文章中反复重复过,用户在Linux下比在Windows下更容易控制他们的系统。
问题是Linux用户,与Windows用户类似,倾向于将他们的精力集中在让系统做他们想让系统做的事情上,他们太信任系统内置或默认的安全设置,那么,当不可避免的软件bug出现时,那些bug的影响趋于更广泛,比起预防来说要做的工作就更多了。
例如:如果我们运行BINDv9提供名称解析服务,将花一些工作和研究才能使其工作起来,要将其放在一个chroot环境中需要更多的努力,chroot可以将named进程放在文件系统的一个子集中运行,因此,当一个BIND漏洞被发现,大多数BIND用户可能都经历过没有放在chroot环境的痛苦,如果运行的是微软的名称解析服务—它没有BIND那么多的安全特征,那可能痛苦指数是一样的。
所有这一切都是要简单地告诉你大部分Linux安全特征和功能并没有让Linux用户受益,结果是,至少按照我朋友所说的进行专业的渗透测试,攻破你普通的Redhat企业版并不比普通的Windows 2003系统困难。
这是不幸的也是让人非常吃惊的,它的代码是完全透明的,Linux仍然有类似的软件bug,一般来说和Windows的数量和频率几乎一样。和Windows一样,Linux是由成百上千的人开发出来的一大堆复杂的代码,代码越多,bug可能就会越多,不是吗?
我最近接受SearchSecurity.com采访时谈到了一篇关于微软研究基金指导的安全革新文章,研究结果表明Windows比 Linux更安全,结论主要基于常见安全bug和发行补丁的平均时间,我相信我是正确地评论了研究结果,不考虑Linux的其他安全优势,如定制能力和软件包的选择,换句话说,我感觉这个研究更多的是比较默认安装情景,而不考虑每个操作系统被它的用户进行安全加固的因素。
但是我考虑得更多,我更担心或许一个平台的安全隐患是不能统计的,除非大多数系统运行的平台实际上触发了隐患,严格来说这不是一个终端用户行为的作用,我也不会指责系统管理员,因为我在后面会详述,我想Linux开发人员和发行商必需继续想出让安全特征更普通、透明和更容易配置和使用的方法,顺便说一下,因为我正在比较Linux和windows,公平起见我应该指出Windows也有许多安全特征,但用户也很少使用它们。
好,Linux和Windwos在默认情况下它们都不安全,在软件bug和安全补丁两个都不相上下。
两个操作系统都是使用简单的任意访问控制模式来进行安全设置,在这个模式下,一个超级用户账号—在Linux下是root,在windows下是Administrator—拥有控制全部系统的权力,包括其他用户的文件,在这两个操作系统中,组成员可以被用来创建不同等级的访问,比如说, root可以进行多种授权,实际上,在大多数系统上你不得不作为特权用户登陆或临时变成那个用户为了完成重要的事情。
结果,任何用特权用户运行的进程能完全控制Linux或windwos系统,但是,我是作为非特权用户登陆配置我重要的后台进程的,这些后台进程出现了bug是不会影响到整个系统的。但是其他软件的bug可能使得它从一个非root进程升级它的权限,例如:假设你已经获得了一个运行Apache 的web服务器,一天一个攻击者控制攻击程序攻击一个没打补丁的Apache缓冲区溢出漏洞,结果是攻击者在你的服务器上获得了一个shell会话,从这一点来说,攻击者正作为www运行,因为Apache是作为www运行的,假设这个系统还有一个未打补丁的内核漏洞,那将导致本地权限提升。
系统管理员可能已经知道了这个漏洞,但是补丁还没有出来,毕竟,严格地说是一个本地漏洞,除你之外没有人在这个系统上有shell权限,谁想在给内核打补丁后不得不重新启动呢?但是现在一个远程攻击者有了一个本地shell访问权限,如果他成功地利用了这个内核漏洞,他就是root了,这就是常见的入侵场景,但是使用了root-takes-all安全模块后不用再担心这个了。
这就是Linux安全的现状,保护Linux需要我们花费相当多的努力利用复杂的安全特征,这些复杂的特征默认情况下往往没有启用,要保持所有补丁都是最新的。我们在一个好的公司里:大多数使用现代操作系统它们拥有相同的局限和挑战。
强制访问控制
我已经提到在Linux、UNIX和windows上的访问控制或文件权限是任意的,这就是一个弱的安全模块,那么,SELinux怎么养呢? 它使用基于角色的访问控制(RBAC)和类型增强(TE),它们两个都是强制访问控制的实例,是的,的确,它就是这样。但是我担心这或许不是Linux安全的未来,原因是SELinux不是当前Linux安全的重要组成部分。
RBAC限制用户的行为和对系统资源的访问,基于仔细定义的规则,这些规则比常见的UNIX组机制相似但更深远,类似地,类型增强限制进程的活动,基于它们预先定义的操作域,RBAC和TE对网络的影响是创建将用户和进程操作分开的竖井(我的术语),严格地限制竖井之间的交互。
这是一个非常优雅的有效的安全模型,但是,对于大多数人们来说,RBAC、TE和其他强制访问控制太复杂,很难管理。大多数人看来, SELinux和类似的操作系统命中注定只能用于某些特定领域:操作系统对于需要它的人来说非常有用但注定不能被广泛接受。不管是赞美SELinux的安全架构还是对RBAC原理的迷恋,我认为强制访问控制本身并不是Linux安全的革命。