开源软件安全:优势与挑战共存

作者:星期四, 四月 12, 20180

使用开源组件可以节省开发时间和公司成本。换句话说,用开源,省时省力省钱。然而,有一利必有一弊,开源方便你我他的同时,其安全风险也不容忽视。

Equifax数据泄露事件就给业界上了生动一课,提醒人们开源软件和组件可能给企业安全带来巨大的风险,尤其是在开源组件没有得到很好维护的时候,其引入的安全风险往往超出了能带来的种种好处。

今年4月,Flashpoint Intelligence 的研究人员称,罪犯暴力破解了流行开源Magento电子商务平台的口令,利用拿到的访问权大肆搜刮信用卡记录并安装加密货币挖矿恶意软件。

研究人员发现Magento至少有1000个管理面板被黑,并称自2016年起深网和暗网对该平台的兴趣就一直没减。

近几年开源代码热度持续上升,各类公司都纷纷采用开源组件构建自己的系统和平台。

除了市场上常见的开源操作系统,开源的生产力软件、管理员/开发者工具和各种代码库也是企业用户用于打造自有软件的一大助力。甚至商业软件也往往建立在开源代码的基础之上。

企业中开源软件的采用越来越广泛。随着企业转向敏捷方法,开源变得更加有价值,也有更多工具可以利用。刚入行的软件开发新鲜人已经很习惯于应用开源技术了。

开源安全优势

开发人员重度依赖开源软件,公司企业也惯于依靠有大型团队维护的主流开源项目。且在安全上一直都有“众人之眼”的说法——越多人盯着就越安全。除了廉价,“众人之眼”带来的安全性可能就是使用开源软件的主要好处了。理论上,开源软件是有很多双眼睛盯着的。当然,这一理论对小型开源项目或代码库不适用。毕竟,有些软件是没有开发者社区的。

开源代码的另一个安全优势是,如果出现了问题,可以得到立即曝光和修复。而如果是专利代码,通常就只有等待供应商的响应了。

为什么开源软件会带来安全威胁?

开源软件的品质总体上是在不断提升的。免费开源代码漏洞扫描服务 Coverity Scan 扫描的7.5亿行开源代码中检出了110万个缺陷,其中65万个已经得到了解决。但是很多项目,尤其是小型项目,并不对其代码进行潜在安全漏洞扫描。

Black Duck Software 公司则在跟踪55万个项目中的100多亿行开源代码。而这甚至都还没覆盖开源代码的全貌。Linux基金会报告称,开源代码库中提交的代码有310亿行。

都是谁在用这些开源代码呢?所有人!Black Duck 最近一期报告显示,96%的商业应用中都融入了开源组件。平均每个应用中含有147个开源组件,且67%的应用采用了带有已知漏洞的开源组件。

美国政府是公共漏洞列表(CVE)和国家漏洞数据库(NVD)的背后东家。仅2017年一年就有8000多个新漏洞加到了CVE中,创了历史新高。

于是,为什么公司企业要用开源软件?普通应用的代码库里超过1/3都是开源代码。想要替换掉这1/3的代码库,公司企业要么给开发团队增加50%的人手,要么延长50%的开发时间。今天这种看重时间成本效益的世界里,恐怕正常人都不太会这么干。

就拿伦敦旅行搜索引擎公司Skyscanner来说吧。这家公司过去依赖.NET之类的闭源平台,但近些年来已逐渐迁移到很多其他语言和技术上了,其中就包含有开源技术。这意味着该公司软件工程师们可以依靠多种来源分分钟部署代码。

但开源组件的安全问题依然存在。“众人之眼”可杜绝安全漏洞的想法带有误导性。事实上,开源代码被众人盯了多年也还在爆安全漏洞的现象并不少见。

很多主流开源代码库中都存在已确认的漏洞。但工程师仅仅是从这些库中抽取并部署代码,并没有意识到由此引入到产品中的种种依赖关系。于是,可见性问题便出现了。

需对开源软件安全做更多尽职审查

Skyscanner并非个案。Veracode最新报告显示,仅28%的公司企业会做某种形式的定期分析,找出有哪些组件被融入到了其应用中。随着开源代码使用的增加,风险界面也在膨胀。

开源代码中不断发现新漏洞,而很多项目并没有查找并修复问题的机制。Snyk对开源项目维护者的调查发现,44%的开源项目从未进行过安全审计,仅17%的项目表示有高水平的安全专业技能。

开源项目的安全记录方式也没个标准可以遵循。GitHub上排名前40万的公共代码库中,仅2.4%有安全文档。

然后,即便问题被修复,也无法找到并通知老版本代码的用户。开源社区并不知道都有谁使用了他们的代码。

Snyk的调查报告中还称,88%的开源代码维护者在版本注释中加入安全相关的声明,34%的维护者会强烈反对使用不安全的老版本。25%的维护者称自己根本不会费心通知用户有漏洞,仅10%会提交CVE。

很多开源项目维护者都不清楚CVE的运行机制,或者没时间去跑这个流程。比如说,Snyk跟踪到的Javascript漏洞里,只有13%有CVE编号,剩下的87%也就仅仅被称为漏洞而已了。

Snyk有一支安全研究团队专门从版本注释、GitHub和Apache问题跟踪系统等地方找寻开源代码库安全问题的线索。该团队发现问题会公布到Snyk的漏洞数据库中,在合适的时候提交到CVE列表里。

但是,获取CVE编号的过程可能比较复杂,需要委员会认可CVE具体细节,还需要征得项目拥有者的同意。当前的CVE编号获取方式缺乏扩展性。

另外,即便漏洞被发现并推出了补丁,使用该脆弱代码的公司企业也可能没注意到自己需要打补丁,或者找不出需要打补丁的所有实例。Equifax数据泄露事件就是该问题的明显案例。其所用 Apache Struts 开源组件的补丁早在数据泄露发生前2个月就推出了,且Equifax也注意到了有补丁可用,但依然没能及时打上补丁。

还有一些公司因为兼容性问题、合规问题等原因而无法迁移到最新版本开源代码,仍在使用带漏洞的老版代码。这也是个问题。据Snyk称,仅16%的漏洞补丁是向后兼容其他版本的。

查找并修复

理想情况下,应用会在安全补丁可用的即刻就更新自身,无需任何人为干预。但实际上,这并非始终可行。

公司企业需要能够在自身环境中找出所有开源代码的运行实例,持续更新该实例列表,让开发人员避开这些不安全的老旧代码库,并最终在新漏洞被发现时及时部署补丁。

只有知道脆弱库在哪里,才能够将这些有漏洞的代码库从产品中移除。产品开发生命周期中越早移除漏洞,开发和维护成本就越低,过程也更轻松。

很多公司会向Snyk、Black Duck 和Veracode之类的供应商寻求帮助。Skyscanner也这么做了。Snyk让Skyscanner看清了其哪些项目中用到了哪些包,这些包里含有哪些漏洞,这些漏洞是如何引入到Skyscanner的代码中的。而且,Snyk还会在开发人员编写代码的当时就标出漏洞,将问题扑灭在代码进入生产环境之前。

在开发过程中集成开源漏洞扫描对大型企业来说尤其重要,因为大企业要跟踪其使用的所有代码是非常困难的。大多数公司都不清楚自己到底有多少个应用,这种情况是很恐怖的。

Veracode进行漏洞扫描的时候,客户公司会上传其二进制代码,Veracode就将之与NVD进行对比。为帮助客户发现自身没有注意到的在用应用,Veracode还会扫描客户公司的边界,不是为了找出没暴露出来的内部应用,而是为了找出如果暴露出来会降低风险的应用。

有些网络工具也可以帮公司企业找出内部运行的应用,但如果网络是分隔的,就会出现盲点。公司企业还可以在终端上安装代理以跟踪其上运行的应用。但只要不是全面部署了代理,盲点依然存在。单靠一种方法想要摸清企业环境中的应用情况是不可能的。这也是为什么应用清单梳理如此之难的原因所在。

很明显,Equifax就深刻感受到了这一难题。去年10月,该公司前CEO在国会质询上称,Equifax的信息安全部门进行过漏洞扫描,但并未发现任何受该漏洞影响的 Apache Struts,该漏洞在Equifax网页应用中存在了太长时间。

用工具扫描也得知道环境中到底有多少台服务器才有用。而且,即便扫描全面而准确,也会给公司企业带来沉重的管理负担。如果开发过程中没有融入安全检查,这些扫描就得持续进行,各种应用得不停地分别检查再检查,扫描再扫描。

不仅开发人员会在应用更新过程中引入新的带漏洞的库,之前被认为安全的老库也会曝出新漏洞。软件不是像酒一样越久越醇,而是像牛奶一样一放就坏。

开发人员很少会审查旧工程中用到的库,一般就是到开源项目页面下载下来,集成到自己的应用中,然后就再也不管它了。

相关阅读

绝对不应错过的五大开源安全工具

众人之眼——开源软件的安全状况

 

分享:

相关文章

写一条评论

 

 

0条评论