开源与闭源软件的安全性比较

最近由于学习需要,接触了一阵子的Linux,作为长期与Windows为伍的大多数中的一位,刚接触Linux那个悲催的经历是一定的,不习惯用终端,不习惯用vim,不习惯没有盘符,不习惯去找软件……诸多不习惯之后自然得硬着头皮求助于搜索引擎, 经历一段适应期后,所有的都习惯了,反而倒觉得更加方便(我也相信如果花同样的精力去学习windows,操作windows也会更加方便,不过若windows加入好用的指令会更赞),确实相对于Windows,Linux的学习成本更高,即便你之前从没接触过Windows也是如此,这对大多数人来说尤其是接触过Windows后,就更是个巨大的障碍。然而,相比于开始对系统的不习惯,让我更加诧异的是网络上对开源和闭源软件的争议,本来这不关我什么事情,但是在接触Linux平台后感受到的无比富饶的创造力,才明白为毛这么多技术宅人喜欢泡在Linux下,才明白Java、python、Ruby…等等会最先出现在开源社区(不要跟我说这些windows下也可以…)确实开源的环境铸就了Linux下无比繁华的创造力市场,但是对于绝大多数人而言,转向开源是否是必须的们所面临的安全风险是否会更高其是在国内系统正在谋求借助新的机遇崛起,国外闭源系统遭到反垄断和信息安全的审核时,这种辩别已经不单单是网络上的口水仗了。
网络上众说纷云,个体之间要么相互掐架要么打群架,他们大多凭借一两点说事,所以有说服力的观点基本没有,至于媒体那些所谓的机构漏洞数据、测试数据,呵呵,得了吧,我又不是傻瓜。为了探讨开源与闭源的潜在风险,我会选择Linux和Windows两个平台分别进行一些对比,选择这两个平台完全是因为它们目前都有不错的用户基础,但所得出的结论则不限于这两个平台。首先,说明一下这种比较是中立的,我个人目前这两个平台都会使用,可预见的未来也会两者都用。此次比较是一种整体性的,不局限于特定领域(比如服务器端),此次比较基于开源软件和闭源软件,不针对自由软件平台(事实上一切没有前置语的free我都没有兴趣),但由于开源软件与自由软件有千丝万屡的联系,所以一些指标多少涉及到自由软件的一些特性,此次比较主要是对用户使用这两个平台后,潜在信息安全风险的比较,主体并不会涉及到其他方面。
对比指标:

开源与闭源软件的安全性比较

用户基数:这个很好理解,一个平台到底有多大的利益可以挖掘和其具备的用户规模往往是成正比的, 小众平台恶性行为显然会少很多。
审核基数:这里的审核基数特指那些可以接触到系统源码甚至内核源码并且会去挖掘漏洞以维护系统的人数,对于Linux而言,由于开源 ,理论上每个人都可以很大限度的接触到系统内核源码,但是真正会去审核源码和挖掘漏洞的人则是凤毛麟角,我们假设人群中这样的一部分人的比率是P,则对于Linux而言就是用户基数t*P,对于Windows而言,能接触到这些源码的人则少之又少,负责审核源码和漏洞的人基本上数量是一定的,故设为常数Z.
机制缺陷:这里是指安全机制,需要注意的是安全机制与系统本身源码质量没关系,它是一种安全逻辑,Windows由于更多的考虑易于使用以面向更大的人群以及兼容更多的应用程序,在安全机制上相对来说更松,虽然windows已经逐步在加强这点,但是整体而言这点确实弱于Linux。
源码缺陷:这点是指系统本身可能直接或者间接的造成漏洞的源码比率。这里假设完美源码是1,则相对于完美源码的比率的反值则为源码缺陷,比如假设Windows达到了完美源码的97%,则其源码缺陷则为3%,所有的漏洞都是直接或者间接的通过这3%造成的。事实上对于系统而言完美源码是不存在的,因为我们毕竟是人。但由于Windows的开发和测试不仅基于统一的标准、规范和流程还要商业责任的钳制,潜在的具有极低的源码缺陷,而Linux由于是开源,虽然有相应组织和社区负责开发系统本身,但总体来说在资金、流程管理机制、潜在的商业风险上均要弱一些。故认为Windows系统本身的源码缺陷要低于Linux,但这并不是说Linux系统的源码就很糟糕,实际上它也是很高质量的。
应用缺陷:特指应用的源码缺陷,指可以直接或者间接造成漏洞产生的源码比率,此处的应用不单单是指第三方基于系统开发的应用,也包括系统本身自带的应用,比如资源管理系统、UI等。由于在Windows上运行的大多为商业闭源程序,大多都会收集用户的使用回馈以便于发现错误和改进功能,而Linux上也有很多商业软件,这些自然可以做到windows应用软件那样的维护,但还有更多的个人或者小团体软件,而这些软件常常没有长期的使用跟踪和回馈,所以我认为应用缺陷的比率,Linux平台要大于Windows平台。但这并不代表Windows上就没有缺少维护的软件,事实上由于用户规模向来巨大,老的软件在Windows上也非常多,只不过由于windows上很多软件都会持续更新,所以可以通过更新避免潜在风险(至于你自己不愿更新没有继续维护的软件则另当别论,成本问题不属于此次讨论的范围)。
应用规模:一个平台的软件越多,那么潜在的风险则会越大,这就像一个水管连接的房间越多,漏水的几率则会越大。这里的水管是系统,房间则是应用。显然,Windows平台的应用数量由于用户规模的原因,会高于Linux。
漏洞规模:用于衡量整个平台的漏洞总数,这里不是指发现的漏洞总数之和,而是真实的漏洞总数之和,绝大多数漏洞都是在应用与系统之间产生的。我们这里仅考虑单一应用与系统+若干应用之间与系统这两种形式产生的漏洞。虽然Linux可能具有更高的系统和应用的源码缺陷,但由于安全机制更优,所以未必就会比Windows出现更大概率的威胁性漏洞,而且由于应用规模上Windows要大的多,故漏洞本身存在的数量应当大于Linux。但是漏洞规模并不能说明平台本身的优劣,实际上若Linux的用户规模和应用规模达到Windows这个程度,其漏洞规模也必将扩大很多。所以单纯比较两个平台间的漏洞数量是不公平的。
僵尸漏洞:是指那些长期不被维护方发现或者长期未得到修补的漏洞。这点在Linux平台上尤为明显,前不久声名远播的“心血”和此次的Shellshock均是这种情况。可以说这可能是Linux上最急迫的问题,因为自由是需要付出代价的,并不是每个人都会去审核和测试代码,尤其在没有利益和法律责任(而且个人往往也很难承担这一点)的前提下。Linux上有很多未被审核的应用,这些应用可能被大规模的使用,甚至如Shellshock这样非常接近底层,因为很少有人去想到这种古董级的但却非常有用的应用会存在漏洞,更少有人去审查这些古董,事实上还有很多新的应用未经审核的产生,而且随着时间推移新的僵尸还会越来越多。虽然说开源软件允许商业模式,甚至Linux还有RedHat这样的商业公司,但开源至今的整体环境还没有形成一个完善的覆盖面极广的软件商业机制,我期望这一种能够承担起软件发布和安全评估的独立商业机构能够在开源环境下遍地成长,以改善这种状况。相比较而言,Windows平台这种情况要好于Linux。
发现能力:是指一个使用周期内(可以认为一年)发现漏洞的数量与总漏洞数量的比率,这里来源之一为普通用户的行为帮助维护方发现的漏洞,这一比率在两个平台可以认为是一致的,另一个来源为专门审核源码和挖掘漏洞的行为带来的比率,后者来说Linux占有,因为理论上他们具有更广泛的具备审核源码和挖掘漏洞的人员基数。
修补能力:指漏洞被发现后,修补漏洞所需的时间,同上,Linux占有人员优势。虽然商业化的Linux也需要特定的人员来制作和发布补丁,但是社区或者个人若有能力有的时候也可以提前发布非官方的补丁。
入侵能力:指某个平台发起具有威胁性的恶意入侵行为的人数,这点由于开源的原因,Linux具有更高比率具备入侵能力的人数比率,但是由于Linux用户整体规模较小,这个比率乘上基数,也无法与Windows平台相比(当然这点在服务器端可能相反)。
破坏潜力:是指入侵者所造成的破坏的程度和范围,这里并不衡量绝对范围,只衡量相对范围,指在相应平台内的破坏范围比率。同样由于是开源的原因,Linux的漏洞往往可造成更深层次更加广泛的破坏。
追责机制:指由于漏洞造成的非使用方责任的损失,是否可以有一套有效的机制进行追责;显然Windows平台下由于商业软件比率很大,所以这点要优于Linux。
后门数量:指政府、商业公司等恶意植入后门程序,用于监控和收集用户行为。这点闭源软件的一大软肋,如果警察做了贼,确实很难查,但是开源目前来说这点就会好很多。

通过以上比较,其实不难发现:
对于Windows而言,它的漏洞从数量上来说必定更多,但事实上从广泛的破坏性来看,漏洞造成的破坏潜力相较于Linux来说要小,它的安全机制要弱于Linux则是因为它需要面对历来庞大的用户群体和软件群体必须做出的妥协,这算不上缺陷,因为这是历史原因和现实地位所造成的,何况实际上Windows还有很多安全厂商为其服务。而且由于作为商业软件,系统本身和应用本身的源码缺陷整体上应当低于开源环境。
Windows的实质性缺点,不在于漏洞数量,因为对于个体用户自己所需要装的软件数量是一定的,不管在Linux下还是Windows下,所以对个体而言并不会造成实质性的漏洞数量差距,顶多就是多花点硬盘空间多装几个补丁防患未然。真正的安全威胁来自于漏洞的发现相比Linux下更迟,修复所需要的时间更长。这样给入侵者的机会更多,损害的时效更长,同时,让人完全信赖Windows没有植入后门,可能只有鬼才信。
相比较而言,Linux则具有更快的发现漏洞和修复漏洞的能力,这意味着相比Windows而言在经过若干使用周期后,Linux可以率先达到比较安全的程度。同时Linux的开源也可以让后门面临较高的被发现的风险。但是否意味着Linux真的比Windows更加安全br> 显然不是,最起码现在不是。Linux上存在很多僵尸漏洞,而且还在不断的产生。Linux的入侵者可以更早的发现漏洞并且可以进行更深入的入侵,相比于Windows而言这简直有点失控,从某种程度来说,个人认为其造成的安全威胁要远高于Windows。开源软件极大的继承了自由软件的思想给自己的平台带来了迸发式的创造力,但同时必须要面对过度自由所造成的混乱,在一个碎片化的平台上组织一个有效的监控机构将是一个非常具有挑战的任务,但Linux若想要进入寻常百姓家,这一步是必须要走的,一个专门负责测试、监控、发布软件的商业机构可能是最佳的选择。

那么对于想要学习Linux,或者正在纠结是学习Windows平台的开发还是Linux平台的开发的童鞋,该如何做出选择呢br> 首先,必须明确不管是Windows或者Linux平台,真正进入商业化运行的平台,必定是商业平台,没有哪个像样的公司会愿意使用盗版或者使用非商业化的开源软件,因为微软会打击盗版,可能赚的没陪得多,而没有商业化的开源软件则没有法律责任保障软件功能的完整、运行的稳定与安全,更不用谈维护和升级了。所以天下是没有免费的午餐的。
其次,必须明确不管是基于封闭的还是开放的平台做开发,比如.net(不要听微软吹多平台,那纯粹是忽悠小孩子)和Rails。人有封闭和开放,技术本质上没有这些的。做一个优秀的C#程序员同做一个优秀的Ruby程序员之间的差别不在于哪个平台,而在于技术局限上。比如Ruby程序员可以在更短的时间内完成同等需求的开发,但C#程序员则可以开发出更高效的程序。这是由于语言本身特性和开发框架特性共同决定的,并不是由开放和封闭决定的。Linux上同样可以有和C#差不多的JAVA,.NET未来也会有如同Ruby甚至优于Ruby的全新开发语言。
最后,平台对你确实是有影响的,它的影响存在于思维和行为方式上。Linux上你需要更多的学习成本,这是毫无疑问的,没有人会像微软一样考虑到方便你的方方面面,这是代价,但是同样付出就会有收获,你会从中了解更多知识,当然高手都是差不多的,只不过Linux让你从一开始就掌握很多。除此之外,你的认知比如对于技术的跟进和选择都会充满自己独特看法和决定,因为开放的环境下你会接触很多,而如果你跟随微软,则下一步要学习什么基本上不由你定,这其实本质上也没什么优劣,因为不管是开源还是闭源,技术的总体发展趋势是一样的,所以你跟进技术本质上是同质的,只是以不同形式运用于不同环境而已。
真要说实质性的差异是:Linux下你不用花钱买学习软件或者使用盗版软件学习。

写在最后:
国产的系统,大多都是基于开源的Linux内核开发的,整合统一的应用商店以弥补开源软件现今的问题是一个很好的思路,同时为了应对用户使用门槛,一个优秀的UI则是必须的。至于培养一个生态系统,则是国家意志、互联网机遇、相应的国内联盟共同所决定的。
文中必定许多不妥和疏漏,能力有限没有办法,还请多多指教。

 
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24723 人正在系统学习中

来源:xu_zhoufeng

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年9月2日
下一篇 2014年9月2日

相关推荐