开源软件安全现状
宋吉广
在目前的个人和商业领域,开源软件得到了更为广泛的应用,随之其安全问题也得到了更为广泛的关注,有关开源与闭源软件谁更安全的问题也争论不休。其实安全都是相对的,没有绝对的安全,闭源如此,开源也如此。
从软件产业的诞生到现在,时间并不是很长,与其他在我们眼中被视作“传统行业”的产业比较起来更是显得年轻,但它却发展得非常迅速,对我们的工作和生活的影响也越来越大。
总体而言,现在的软件可以按照源代码是否公开分为“开源”(Open Source)和“闭源”(Closed Source)两大类,而前者对目前整个软件业的影响正在以“星火燎原”的态式发展。开源软件正在从计算机爱好者手中的挚爱变成企业应用中不可忽视、举足轻重的一个考虑对象。 字串8
有关开源软件的一些问题也成为讨论话题中的热点,“开源软件安全”这个问题的争论也由来已久,在开源运动比较成熟的国家对其认识的更加深刻,大家已经用行动证明其“安全可靠”,而在国内,似乎我们的开源运动还没有真正的到来,还需要“讨论、讨论”。
在讨论“开源软件安全”这个话题之前,有必要仔细地考虑一下在使用软件时所关心的一些问题,这些问题是在成本允许的条件下:
◆软件是否能够满足自己的功能需要;
◆软件的功能特点是否安全;
◆软件的后期维护和支持是否到位。
虽然上面三点不是全部都应当考虑的问题,但是已经算抽象意义上比较突出的几个问题。可以看出,在这三点中,第二点就是安全问题,似乎很多企业没有意识到这个问题,或者说对这个问题认识不够深刻。
产生这种现象的原因很多,一方面是安全意识淡薄,很多公司和企业使用的软件授权还没有彻底解决,而且总觉得够用就行,忽视了软件安全方面的问题;另一方面把安全交给所谓的杀毒软件和防火墙,这并没有从根本上解决安全问题,要知道所谓的病毒和木马,之所以存在或者说危害着软件使用者,本身就是所使用的软件自身存在安全漏洞和Bug。 字串3
那么如何才能最大程度上保证软件的安全性呢,或者如何才能尽快地发现软件中的问题,并把问题解决掉呢?在软件开发中有一些共识:
◆设计要尽可能完善;
◆测试要尽量全面;
◆维护和跟踪及时持续;
◆问题解决要快速;
◆信息发布要及时透明。
在这几个方面,开源软件做得都非常不错,下面就分别说一下以上这几个问题。
开源软件文档缺乏
很多人诟病开源软件缺少文档,更没有什么设计资料,特别是国内的一些人士,由此就觉得开源软件多么不可靠。这个问题看上去似乎成立,但如果我们深入的了解一下就不会有这种片面的看法,事实上这些问题也许是开源软件早期存在的一些问题,因为毕竟这时候开源软件的目的和影响很小,而现在却在发生着根本的改变。一方面是开源软件开发模式的日渐成熟,开发人员也越来越专业化,另一方面伴随着整个软件业的成熟,开源软件也在不断的成熟。
现在成熟的开源软件基本上都有自己的网站和在线(离线)文档,也有不断完善的Wiki系统,方便了大家的学习和反馈,可以说是一种构建型应用和推广的典范,当然现在还是以英文材料为主。 字串5
严格意义而言,我们的政府应当拨款并成立相关部门解决这个问题,国内不同于国外,社区的推动模式在国内还存在很多问题,需要寻找不同的解决方案。尽管一些大项目的汉化工作有了一定的进展,比如说Linux操作系统的几个不同发行版,还有就是知名开源软件的汉化,但是我们会发现做出贡献的人未必是这个领域的专家,所以从专业性上还未达到专业的要求。
我们从计算机图书的出版也可以看到开源运动的影响和进展,从某种意义上而言,这些书籍成为开源软件的设计说明和开发参考手册,而且开源书籍的出版划分越来越详细,甚至有的公司专门以开源书籍做为自己的主要经营业务。当然,国内在这一方面做的还不够,所以我们应当学习国外成功的经验和模式,在开源运动中争取双赢或多赢。
安全从测试开始
测试作为软件发布前重要的一步工作,肩负着软件的可用性和安全性等诸多任务,所以也决定着软件的质量,这是一个非常关键的指标。我们很熟悉闭源软件的测试过程,正规的软件都有正式的测试文档,可以说对软件的测试已经非常到位。
测试可分为白盒测试和黑盒测试,这是一个人们比较熟知的分类方法,在软件公司内部可以进行这些测试,另一个模式就是把测试工作外包给专业的测试公司,但是这些工作还是无法保障软件的安全性。很重要的一点是由于我们自身的局限,我们很难写出一个毫无遗漏的完整的测试用例,毕竟我们每个人的大脑是有限的,而且有些问题也很难被考虑全面。 字串5
从程序本身而言,至今也没有一套完整的理论和工具证明程序本身的正确性,这是安全性本质上的硬伤,但是如果不考虑这个因素,那么软件的安全性就要通过测试保证。由于闭源软件存在开发周期、成本和代码保密等缺点,使得测试的完整性不能得到很好的保证,也就是说闭源软件最终得到的软件是通过他们自己设计的测试方案的软件,这样方案的完备性就存在自身的缺陷和不完备性。
开源软件对每个人都开放源代码,每个感兴趣的用户,无论是个人还是企业,都可以下载源代码,可以说是完全彻底的白盒,当然进行黑盒测试更不是什么问题。这样就保证了测试的最大化,相比闭源软件,这样更容易发现程序中存在的问题,更容易进行全面的测试。

