开源的安全可信治理与区块链



和大家一起聊聊“开源的安全可信治理与区块链”。我的演讲主要分为以下五部分:第一,开源现状;第二,面临的风险;第三,安全和可信治理;第四,开源与区块链;第五,万纳链。

开源现状及开源在中国的现状

开源软件从上世纪末开始兴起,大家最初使用开源软件的理由主要是因为其无需成本,以及能够帮助项目快速交付。但随着时间的推移,大家的关注点从早期的快速交付,逐渐转变为开源软件的可靠性。而如今,大家更加关注开源软件的安全与可信。

随着计算机技术的发展,尤其是互联网企业的兴起,开源软件在操作系统、编译工具、数据库、服务器、中间件等各方面已经成为了主流。据Gartner调研显示,99%的组织在IT系统中依赖于开源软件,因为其开发模式、理念与精神、社区文化吸引了一大批开源贡献者。当然,目前开源贡献者绝大部分还是靠爱发电。大家愿意主动贡献的原因,除了对开源理念与精神的认可,也有开源能帮助程序员、技术人员提高项目质量的因素。

首先,项目开源后不仅可以获得社区其他成员的贡献,对技术人员来说,开源项目也是非常好的展现以及推销自身技术的窗口。开源相对于闭源来说,最大的区别在于公开、透明。开源软件中一些Bug的发现、修复,以及新功能的提出都可以在公开的论坛中进行,对使用者来说,所有的这一切都是可溯源的,也可以做到心中有数,能够更加放心地使用。此外,开源软件的代码质量往往会较好,开发人员对于要公之于众的代码,显然会更加注重代码的可读性、可维护性等一些隐形项。不仅如此,社区成员对代码检查之后的评论、建议、贡献也能够为代码质量的提高带来显著的帮助。

开源软件的好处多多,除了透明、高质量外,免费、定制性、自由等等也是开源软件的好处。正是因为有这些好处,使用开源软件的公司在逐年递增,吸引了越来越多的开发者。近些年,全球开源贡献者的数量持续增加,2020年GitHub平台有5600万贡献者,相较于2019年增长了1600万。

接下来,聊聊开源当前在中国的现状。2020年,GitHub上美国贡献者数量位居第一,其次就是中国的贡献者,占到了14%,而且中国贡献者逐年增长的速度是最快的,尤其是从2016年开始,基本上呈现了指数级的增长。据调研数据显示,国内开发者对于开源的理解日趋成熟,70%的开发者认为开源吸引开发者的原因主要是在于其公开、透明的代码,还有就是知识共享、开源的理念与精神。GitHub预测,到2030年中国开发者将成为全球最大的开源群体。

2020年,中国已经使用开源技术的企业占比达到了近九成,阿里、百度、京东、PingCAP的项目在GitHub的中国项目活跃度Top20的榜单中都非常亮眼。阿里巴巴的数据在多项指标上的表现都非常不错,有些指标甚至是其他指标之和,并且阿里在社区、文化、开放等方面也做得很好,大家日常开发工作中所用到的Notify、RocketMQ等中间件都是阿里的开源项目。

可以看出,各大互联网企业近年来均在不断加大开源社区的生态建设。同时,增加开源的影响力,对于企业的招聘也会产生一些显著的助力。

开源软件的风险

就像硬币有着两面,任何事物都有两面性,开源有着诸多好处。随着各领域使用开源技术的企业逐步增长,开源的劣势逐渐在闪现出来。

开源项目技术迭代快,运维成本高。

数量宏大,使用很多开源依赖后统筹管理比较困难。

安全漏洞威胁。

开源许可证和知识产权问题。

可能存在大修改许可或收费问题。

尤其是近年来,开源软件的安全漏洞风险越来越显著。2020年,热门的开源项目中含有至少一个漏洞的项目占到了84%,比2019年增长了9个百分点。含有高危漏洞的项目甚至占到了60%,比2019年增长了11个百分点。通过扫描数以百万计的GitHub代码库以及程序包,对其中500个开源项目的维护者进行调研后发现,只有8%的开源项目维护者自认为有比较高的信息安全技术和意识,另外有近半数的开源项目维护者不太做代码的审计,只有10%的维护者能够做到每个季度审核代码。此外,开源软件漏洞从发现到公布,再到修复的周期非常久。漏洞从公布到被修复的最长时间为94天,平均时间也有16天。

美国近十年来最严重的一次数据泄露,是1.4亿多位美国征信巨头Equifax消费者的敏感数据被黑客所窃取,而这一数字占到美国人口的近一半。这起事件的源头是因为Equifax使用的软件中,有依赖于Struts框架的软件。Struts框架是开源的MVC框架,该框架中存在着安全缺陷,该安全缺陷被黑客首先发现并利用这一安全缺陷盗取了数据。由此可以看出,开源软件公开的代码能够获得更多贡献者帮助的同时,对于黑客来说,也是一个非常好的机会。

近期,在我们身边也发生了非常严重的开源软件安全问题。12月,LOG4J被爆出了安全漏洞,该安全漏洞不需要用户执行多余操作即可被触发,漏洞可以帮助攻击者远程控制受害者的服务器,当今90%以上的JAVA开发应用平台都会受到影响。这个漏洞涉及的范围及危害程度堪比2017年的“永恒之蓝”漏洞。我相信大部分的技术公司可能在12月份都会抽出精力做这一漏洞的修复和弥补。

开源软件风险防范共有四项:系统信息的泄露、密码管理、资源注入和安全缺陷。其中,安全缺陷是最重要的一部分。之所以会有非常多的安全缺陷,一个是因为开源软件贡献者普遍来说安全意识还不够高,另一个原因是开源软件的贡献者是用爱发电,所以确实没有多余的预算对所编写的编码进行安全性测试。还有另外一个问题,开源软件的安全漏洞虽然可以被社区中的其他贡献者所发现以及上报,但是只有84%的安全漏洞出现在NVD中,很多安全漏洞散落在几百个不同的资源中,这对三方开源软件的使用者提出了非常高的要求,需要自己去收集以及对接,不然就很有可能对自己的软件或平台产生安全的风险。开源的代码既可以被开源社区中的一些贡献者看到,也可以被网络犯罪分子或者黑客所利用,黑客可以发现代码中的漏洞并利用漏洞进行攻击。开源软件因为引用方众多,所以一旦攻击了一个漏洞,影响范围可能是非常大的。

除了安全缺陷外,许可证的违规使用也是一个比较大的问题。据统计,当前超过三成的项目并没有严格遵守开源软件的许可证使用方式。另外一个风险是开源软件项目随着时间的推移,迭代可能会变慢、变少,甚至中断,有数据显示有近九成的代码库中引用到的三方开源软件,在过去两年内没有任何开发迹象,这除了增加安全的风险外,在版本控制中落后太远也会有非常大的威胁,一些非常小的变更甚至都可能带来一些基础性的问题。

安全和可信治理

所以,开源软件的风险治理成为使用开源软件必不可少的工作之一。首先,要梳理、依赖以及分析,当前不少工具都可以帮助开源软件的使用者轻松做到这些。梳理软件物料清单时需要注意,除了第一次梳理,之后的每一次迭代都要维护清单、更新清单。大家可以根据迭代后的清单,找到当前不需要的依赖。我们发现开发人员在维护依赖的时候,即使发现不适用的依赖也会懒得删除,这显然会增大黑客的攻击范围,因此需要定期去检查,并删除不需要的依赖。漏洞源的对接相对来说会比较复杂一些,如刚才所提到的,并没有唯一的对接源可以包含所有漏洞的报告。所幸当前已经有一些开源组织提供了一些免费的漏洞库,对接几大组织的漏洞库之后,大部分情况下可以覆盖当前市面上大部分的漏洞。最后,对比版本的依赖,以及发现问题、修复问题。

风险的治理贯穿于研发的生命周期,我个人建议把对于安全的把控左移到设计阶段,在设计阶段就引入安全人员,对于需要引用的开源软件,除了做调研、对比选型、性能测试以及漏洞源数据对比外,还要关注该项目开源社区的活性,以及该项目相关的许可证。

安全风险的治理需左移,要求我们在设计的时候就对此加以关注。在设计阶段,需要对新引用的三方依赖做调研、对比选型、使用验证,甚至会安排性能测试,最终给出选型文档、性能测试报告等等。尤其需要关注该开源项目的社区活性,对于社区活性较弱的开源项目,选择使用的时候需要尤其谨慎。在设计阶段,对于软件物料清单的更新以及许可证的调研等等,都需要在这个阶段加以考虑以及分析。同时,在之后的研发、测试、生产流程中,也是需要有一些手段确保开源软件使用的安全性。

同样,在之后的研发测试等环节中,也有需要执行相对操作来确保安全。开源软件的安全治理在我们公司是在安全治理中非常重要的组成部分。我们公司安全平台的框架中,项目漏洞追踪、开源安全开发模块都是为了帮助并确保引用开源软件时避免安全缺陷。

开源与区块链

区块链是去中心化的,天然符合开源的理念。央行数字货币研究所副所长狄刚曾经说过:区块链与开源是互相促进的,区块链有了开源才能走得更远。

为什么这么说呢?其实很简单,区块链的机制是不可篡改,由此减弱信息不对称现象,从而建立信任。但这个不可篡改是建立在理论基础上的,如果区块链不开源,对使用者来说是个黑盒,即时的信任可信度是会被打折扣的。纵观区块链发展史我们知道,以太坊等都是通过开源来获得信任,从而凝聚共识的。

另外,区块链对于开源会有什么帮助呢?区块链天然内置激励,能够解决开源社区的激励不足问题。Gatecoin就是国外开源软件开发激励平台,其愿景是通过区块链支持各类开源项目,帮助不同规模的开源项目寻求资获得资金的机会。此外,智能合约的自动执行,也能减少社区大规模协作的成本。

万纳链(Venachain)

接下来看一下万纳链作为联盟链的开源项目,是如何保证其安全的。首先介绍一下万纳链,万纳链是万向区块链主导研发的安全可控的企业级联盟链平台,万纳链以系统安全、隐私保护、优越性能、功能丰富作为主要设计目标,致力于创建更快、更通用、更易用的区块链底层平台。底层区块链平台获得电标院双证,单链性能高达5万TPS,支持WebAssembly、EVM双虚拟机,支持DAG并行化处理,同时能够提供可插拔的多种数据存储机制,多种可选的共识算法,为联盟链定制了网络拓扑,同时支持跨链的功能。

万纳链对开源贡献者提交代码会进行自动化测试,部分核心代码会设置比较严格的测试要求,另外会有专业的开发人员做体系化的联合审计,以及会有专业的测试人员对提交的代码进行功能测试。万纳链在开发整体流程中,设计了确保尽量减少代码中的安全缺陷以及漏洞的流程。

来源:万向区块链

聯系郵箱:0xniumao@gmail.com