使用第三方库进行软件开发的安全风险研究

如今,很多软件由于长期使用第三方库文件,导致了持续的安全问题。而在程序开发设计阶段,开发者又经常忽略了第三方库代码的漏洞审查,甚至有些资源库(repositories)直接被信手拈来使用,从根本上就缺乏了安全审计。

如果某个库文件存在漏洞,那么,大量使用了该库文件的软件程序都将面临安全威胁。

这种场景,在现实世界中已经有了血淋淋的证明:如OpenSSL中出现的心脏滴血漏洞(Heartbleed)、GNU Bash出现的破壳漏洞(Shellshock)和Java中的反序列化漏洞(Deserialization),这些都是实际应用程序中,存在第三方资源库或应用框架漏洞的典型案例。

据Veracode的安全研究分析,97%的Java程序都至少存在1个已知的安全漏洞,高级研究主管Tim Jarrett说“出现这种问题的原因比较明确,而且不只局限于Java程序“。

另外,据Gartner预测,到2020年,99%的可利用漏洞发现期限,将仍然是安全专业人士已知至少1年以上的,所以,建议企业必须尽快修复那些已知的存在漏洞。这些漏洞很容易被忽略,但与事后弥补相比,修复这些漏洞的代价更低,也更容易。

Veracode 成立于2006年,提供最快、最全面的开发安全解决方案,来改善企业内部开发、购买或外包的应用程序软件及第三方组件的安全。目前,已获4000万美元投资。

第三方库:节省开发时间却导致了安全漏洞

安全专家表示,第三方库出现的安全问题,主要有两方面原因:一是开发者可能使用了一些第三方库当前安全可靠的代码,但是在后期却被发现了漏洞问题;另外是,开发者在项目中没有经过仔细验证,使用了那些本身就存在安全隐患的第三方库代码。

Sonatype副主管 Derek Weeks说,”虽然大家都对这种安全威胁比较重视,但对大多数程序员来说,开源库和第三方资源就像把双刃剑,节省开发时间的同时将会带来安全漏洞”。

Sonatype 是一家软件管理工具提供商,它提供一些经过仔细审核的开源代码库,并致力于跟踪和监控各个开源代码模块,以减少软件开发过程中的bug 以及兼容性和安全性问题。目前已获7000万美元投资。

Sonatype在对25000个应用程序进行分析后发现,7%的程序由于使用了不安全的组件而存在至少1种安全缺陷。

GitHub、Bitbucket、Python Package Index和NuGet Gallery等资源库,将会帮助开发者发现他们在软件项目中所需的代码和功能实现,以Java开发者为例,他们可以使用这些资源库中的加密处理功能,或其它可视化数据处理模块。

Derek Weeks表示,现代软件不再依靠一字一行的代码编写,无论一个成熟的应用程序多么新颖独特,其中80%的代码都来源于第三方资源库或组件。

他同时强调,企业对信息系统软件的依赖程度将不断增加,但大多数构成软件的关键开源资源库,却未经安全审核,存在着各种不同程度的安全问题。

以Sonatype自己提供下载的第三方资源库为例,2015年,该资源库中的开源和第三方软件组件下载量达310亿次,而2014年为170亿次。

而Sonatype对自身资源库进行安全审核后发现,在被下载的代码库中,将近有6.1%存在安全漏洞。

Derek Weeks声称,Sonatype比其它资源库管理应用做的好,是因为其设置了代码管理工具、使用指导和相应的警告预警以帮助开发者避免使用存在安全隐患的缺陷代码。

NTT Com Security首席顾问Stephen Breen说,缺陷代码在开发过程中将会导致很多问题,就算整个开发团队都有很强的安全意识,但在严格的验收期限内,个别或少数开发者忽略了软件中使用的第三方代码安全审查情况,也不能避免。

Breen强调,如果某个不安全的问题组件被一个软件程序使用,而这个软件程序将被应用于另外一个大型系统中,这种层层复用,将最终形成安全问题的“雪球效应”。

最典型的例子,就是2015年的Apache Commons Collections(commons-collections-3.2.1.jar)反序列化漏洞。

据Veracode研究发现,目前,仍然还有1300多个旧版本的漏洞实例存在于大量Java程序中,这些程序使用了Spring\Hibernate框架和其它多个资源库代码。

开发者在开发过程中选择了Spring\Hibernate框架,但他们却没意识到其中同样也包含了Apache Common Collections,然后,Common Collections库随之被应用于数千上万的软件开发项目中。

Apache Commons Collections已经成为Java程序中最常见的组件。

另据Veracode对30万例Java程序检测发现,其中25%的程序都未能及时打补丁,存在Apache反序列化漏洞。由于使用了存在漏洞的库和框架组件,对开发者来说,最头疼的是,如何更新升级这些应用程序。

“就像存在故障的汽车安全气囊一样,汽车制造商在数百万车辆中配置了这些气囊,当出现问题之后,大家通常认为应该汽车制造商来解决这个问题,而不是安全气囊制造商”,Veracode研究主管Jarrett说。

第三方库代码漏洞、加密缺陷、注入漏洞

Veracode声称,Apache Common Collection的漏洞实例只是冰山一角。Veracode曾对大量存在漏洞的应用程序进行检测分析,发现由于第三方代码缺陷导致的信息泄露漏洞占比高达72%,其次是占比65%的加密漏洞,最后是注入和跨站漏洞。

这些问题综合说明了各种软件产品对开源组件不断增强的依赖性,以联邦政府为例,在选择开发公司方面,它以开源策略优先。

Weeks强调,“使用第三方库不但可以缩短开发时间,在某种意义上来说,还能提高软件安全和质量水平,另外,还可以让开发者更加专注于新功能新特性的架构。

如果利用得当,对程序员来说,第三方库的代码重用简直就是天赐良机,可以帮大忙的事”。

出于这些原因,安全专家呼吁软件行业是时候应该考虑代码安全问题了。Sonatype公司甚至还发起了”软件生成标准“的响应,以规范开发者在使用开源框架前后的代码安全审查,同时方便那些使用存在漏洞库存的程序进行安全更新。

Sonatype的前述调查中表明,在16个程序组件中至少有1个存在漏洞隐患。Weeks认为,问题可能出在一些开发者的否认或无知态度,他们选择了一些不安全的程序组件。

而SourceForge总裁Logan Abbott则表态,“如果在SourceForge托管的资源库中,发现存在一些恶意或缺陷代码库,我们会及时通知警告用户。我们会扫描资源库中的二进制漏洞,但不对所有托管代码进行安全审查。

第三方资源库平台:我们仅只是负责托管

接受记者采访的多个第三方资源库负责人表示,他们仅只是提供储存共享公开或私密内容的一个类似于云存储服务的平台,他们不会限制用户的托管代码。

这些第三方资源库负责人认为,要从根本上避免软件漏洞,主要责任应该在于开发者,而不是第三方资源库平台。想要编写良好无漏洞的代码,首先得从那些安全的资源库中去学习借鉴。

BitBucket是一家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户。其市场经理Rahul Chhabria声称,“Bitbucket于开发者就像家得宝与木匠的关系,我们配置了多种工具以方便开发者更好地应用托管代码。

BitBucket中提供了一系列的代码缺陷检测工具,如对依赖链进行安全审查的SourceClear等;另外,BitBucket还允许团队软件项目开发和简化的同行评审机制;其次,BitBucket具有的管道模式特点也能帮助开发者提高代码质量。

Github是最大的开源资源库,目前,它托管着4900万个公共和私人项目,拥有1800万用户。

据其安全负责人Shawn Davenport介绍,Github不对托管代码进行审查或警告,用户可以根据需求使用第三方工具,如Gemnasium、Brakeman和Code Climate等,进行代码动态或静态分析。

Davenport说,“很多托管项目都存在安全隐患,我们只能尽量保证整个资源库的安全,同时让用户明白他们需要什么样的代码审查工具。从项目角度来说,安全并不是开发者的首要责任”。

据Davenport估计,Github上只有少数用户在使用代码安全审查工具。

其它第三方资源库平台则告诉作者,他们有意采取不干涉态度,一方面是因为其不具备代码审查技术能力,另外,他们认为这不是他们的职责所在。他们指出,代码存在缺陷与否,事关开发者的所有代码,甚至是一些旧的程序组件。

用自动化扫描技术来弥补?

如果要从根本上解决开源库的安全问题,一种方法就是在软件开发早期使用自动化的代码漏洞和配置审查扫描工具。

据Gartner预计,到2019年,超过70%的企业开发活动都将集成自动化安全审查扫描工具,而目前,这个比例才占到10%。

Node.js开源基金会成立了Node.js Security Project项目,致力于推动Node.js平台健康发展,其目标是为开发者提供发现和披露Node.js系统漏洞的处理机制。

据Node.js官方介绍,该项目除了开发者的主动发现外,还包括了一些漏洞数据库和不同社区交流的漏洞审查和披露。

Weeks说,“这不关安全专家的事,而是我们应该如何明确软件需求并授权开发,在这种情况下,解决方法的核心就在于软件开发方面,同时还需引入一些新的方法理念”。

*参考来源:threatpost,FB小编clouds编译,转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-12-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏织云平台团队的专栏

Pick一下,工具上线前运维必备原则

一场突袭而来的大雨猛烈冲刷着 DBA 小 D 身侧宽大的玻璃窗。窗外原蓝天白云映照下的深南大道转眼陷入一片阴暗。

1912
来自专栏ytkah

微信公众号ID也可以修改了!

  差不多一年前,微信团队宣布个人类帐号一个自然年内可主动修改两次名称,那一天大家奔走相告纷纷修改成自己早就心仪的名字,有人猛然发现公众号名字改了,可ID还是x...

4636
来自专栏ytkah

微信公众平台原创声明功能公测 自媒体原创保护的福音

  昨日晚间微信团队发布微信公众平台面向认证的媒体类型公众号公测原创声明功能的公告,势在维护作者权益,鼓励优质内容产生。心灵鸡汤、养生贴想必你已经厌倦了,甚至都...

3116
来自专栏SAP最佳业务实践

SAP最佳业务实践:无变式配置按订单生产(148)-3销售订单处理

image.png 1、VA01参考后续报价创建销售订单并打印订单确认 客户接受后续报价后,销售人员将参考后续报价创建客户订单。最后打印订单确认并发送给客户。 ...

3605
来自专栏TEG云端专业号的专栏

「TEG+系列」破局者 - 腾讯金融级数据库TDSQL

一 背景 金融行业的数据库市场,尤其是银行的核心交易系统,一直是Oracle、DB2这类传统商业数据库的天下,但是: 2014年,微众银行选用TDSQL作为其核...

4045
来自专栏SDNLAB

向5G迁移的安全性问题

本文将介绍3GPP近期在5G方面取得的成就,并就向5G迁移的安全性问题进一步展开讨论,最后详细介绍非独立或4G-5G双连接的3GPP规范。 ? 3GPP近期的成...

3505
来自专栏杨建荣的学习笔记

基于报警处理的思考(r9笔记第88天)

晚上在琢磨怎么把报警的处理实现自动化的功能,想来想去,发现其实很多内容都是相通,在纸上写写画画,简单理了理自己的思绪。 人嘛,有时候不逼着自己,只会更加懒惰,而...

3435

一些比非常不安全的密码认证更安全的认证方式

密码是全球用户认证的最常见方式,其使用率在过去的十多年来一直在缓慢下降。比尔盖茨在2004年的RSA会议上声称,“毫无疑问,随着时间的推移,人们对密码的依赖会越...

933
来自专栏人人都是极客

嵌入式和单片机的区别在哪?

单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈这两个概念的理解。

2073
来自专栏Crossin的编程教室

一名python学习者打开双11的正确姿势

11月11日是个有趣的日子。客观来说,它和一年中其他364(365)天一样没什么特殊,但偏偏又总被人赋予特殊的含义。十年之前,大家谈论的是如何打发“光棍节”(跟...

3477

扫码关注云+社区

领取腾讯云代金券