自从Sonatype创始人Jason van Zyl的大作Apache Maven在2003年成为Apache软件基金会的顶级项目以来,它的中央仓库已经成为开源组件的一个主要来源。Jason称,这个中央仓库中的30万个组件每年会收到40亿个调用申请。
但是,在应用安全专业厂商Aspect Security的帮助下分析了中央仓库的组件如何使用的数据之后,Jason称,他认为机构需要在处理开源组件的做法方面更勤奋一些,因为许多机构应用陈旧的有安全漏洞的组件,结果给自己带来了风险。
全球500强公司下载了280万个不安全的组件
Aspect Security对Sonatype的数据进行的研究发现,80%以上的典型的软件应用是开源组件和以二进制方式消费的框架。全球500强公司在一年中下载了280万个以上的不安全组件。平均每个企业每个月从中央仓库下载1000多个组件。大型银行和独立软件经销商下载的数量更多。许多最流行的组件都有安全漏洞。
这项研究发现,在不安全的31个最流行的开源软件安全库和框架中,下载量超过4600万次。例如,包含已知安全漏洞的谷歌Web工具集的下载量达到1770万次。其他下载的流行的有安全漏洞的库包括Xerces、Spring MVC和Struts 1.x。
在许多情况下,有比较新的和使用补丁修复的组件和框架。但是,用户还是下载不安全的版本的组件和框架。这项研究发现,三分之一的最流行的组件都有比较老的和有安全漏洞的版本。这些不安全的版本仍在下载,即使有使用安全补丁的比较新的版本也是如此。
Jason称,“有漏洞的组件的使用率让我们震惊。我认为,那种行为的根本理由肯定是不熟悉通知基础设施。”
问题在于告知 不在于开源软件
Jason的问题不是开源软件模式本身的问题。Jason说:“我多年以来为开源软件做了很多贡献。我认为,随着时间的推移,技术创新的速度、利用其他人的技术进行创新的能力以及透明度和吸引眼球的理论将使开源软件更加安全。我们要指出的不是开源软件比商业软件好还是比商业软件差,或者开源软件是否根本就是有漏洞的。”Jason称,相反,这个问题是开源软件生态系统缺少在商业软件领域已经发展起来的厂商与客户之间的关系。商业软件领域已经习惯于补丁管理、更新管理,微软甚至每个月的补丁星期二都为自己的软件发布补丁。在开源软件领域,主要是开源软件组件的消费者负责跟踪组件的发布状态、补丁和他们使用的组件的修复问题。
Aspect Security首席执行官杰夫·威廉姆斯(Jeff Williams)称,这个数据清楚地表明,机构消费大量的有安全漏洞的资料库。虽然这篇报告的数字令人震惊,但是,开源软件的好处也是明显的。开源软件对于思想前卫的开发机构是非常重要的,但是,对于开源软件的使用必须有教育和控制。
补救措施的最佳做法
当考虑到开源软件组件生态系统的病毒性质的时候,这种情况的麻烦性质就更明显。一个开源软件组件能够在十几个或者甚至数百个其它组件中重复使用。这意味那个组件中的安全漏洞能够传播到每一个依靠它的其它组件。例如,Spring-beans 2.5.6中的一个安全漏洞影响到1447个独立的组件和数千个应用程序。即使在Spring-beans 2.5.6进行了更新并且修复了安全漏洞的时候,也没有更新这个生态系统的流程,这意味着数百个组件仍有安全漏洞。
控制这种局面的第一步是编辑一个在生产应用中使用的开源软件组件目录。这个目录需要包含有关组件依赖性的某些信息。你需要跟踪组件下载和使用,以便理解消费情况和制定内部组件库,确定向开发团队发布什么。你需要监视应用程序的材料单,以便进行更新和通报新发现的安全漏洞。事实是,48%的机构根本没有这种目录。20%的机构有一个目录,但是没有跟踪组件的依赖性。
一旦你采取那个步骤,你需要分析你的组件库以查找安全漏洞并且分析你的关键的应用中的安全漏洞。
最后,你必须建立整个开发周期的控制机制。Jason建议制定一个有关安全、病毒许可证以及过时的或者过期版本的组件使用的政策。他还建议在内部库中删除已知的有安全漏洞的组件或者建立这种组件的黑名单,并且建立一个机制防止有安全漏洞的组件进入机构。