2021年底,Log4j漏洞引发全球信息安全大地震,世界各国政府、非营利基金会、智库都在高度关注开源安全领域,然而许多公司尽管害怕被开源安全问题所波及,但仍未采取相应的策略。
根据软件安全公司Snyk和Linux基金会公布的一项调查结果显示:只有不到50%的企业制定了开源安全策略来指导开发者使用各种组件和框架,而更多的小公司要么没有开源安全策略,要么根本不知道自己是否有策略。那么国际和国内在开源安全领域走在前列的组织和大厂有哪些先进的模式值得大家借鉴?不同类型的企业该如何建立自己的开源安全策略,个人开源使用者又该如何规避开源安全风险?
图源《Addressing Cybersecurity Challenges in Open Source Software》
本期《开源圆桌派》以「“冰与火之歌”——如何平衡开源与安全的天然矛盾?」为主题,邀请到了华为开源管理中心技术专家、开放原子开源基金会TOC成员徐亮,中国信通院云大所开源和软件安全部副主任郭雪 ,极狐(GitLab) DevOps 技术布道师、OpenSSF中国工作组副组长马景贺,在CSDN《新程序员》执行总编唐小引的主持之下共同探讨开源安全问题。
令人神经紧绷的开源安全难题
唐小引:如何定义开源安全?
马景贺:我对于开源安全的认知主要有两个不同的阶段。
最初,我认为开源安全主要与开源软件的许可证相关。比如,当我们需要二次开发或对开源项目进行贡献的时候,就会涉及到开源许可证方面的安全问题。
当深入了解开源安全时,我发现开源软件自身的安全也是开源安全防护中一个很重要的内容。譬如软件从编码到上线的全过程都可能会有一系列防护手段,这个过程中建立起的安全防护体系是我认识到开源安全的第二个层次。
郭 雪:我本身既研究开源安全,也研究开源合规。在我看来,开源安全可分为狭义和广义两个层次。
狭义的开源安全,主要是软件本身的安全问题,包括漏洞、后门植入、隐私泄露这三大类居多。
广义的开源安全,范畴很大,除了上述漏洞外,也覆盖开源合规、开源生命周期的成熟度、开源供应链等相关的问题。
唐小引:目前整个开源安全的现状是什么样的?
郭 雪:根据《2022开源安全与风险分析报告》显示,87%的代码库都含有漏洞,49%的代码库含有高危漏洞,因此整个业内开源安全风险问题十分显著。
我们将开源安全风险分为开源漏洞风险、开源后门植入风险和开源隐私信息泄露三大类。国内外针对开源安全问题,其实都有一些动作。
从国际角度来看,早些年,欧洲等地区针对开源安全有漏洞悬赏的政策。近两年间,因为开源安全基金会(OpenSSF)对开源安全关注度比较高,因此有提供资金、基础设施、开源安全标准化的支持等,都值得国内借鉴。
其实构建开源安全是整个生态的事情,而非一家企业所能决定。这其中有两点非常重要,包括上游的从开源社区就做好安全和下游引入开源之后如何做好安全治理。
徐 亮:面对开源软件时,OpenSSF曾披露了一些问题:
开源软件社区本身缺乏一些安全能力。
开源社区的人员比较分散,没法像一个公司一样能在问题出现时集中力量去解决问题。
开源软件使用非常广泛,且使用过程中有一个极具深度的嵌套依赖关系。
开源软件许可证通常有免责条款,导致了其兜底的责任属性较弱。
通过对这些问题的分析,OpenSSF总结了10个方向的行动计划,包括安全教育培训、建立风险评估体系、使用数字签名增加软件供应链信任度、替换非内存安全编程语言、建立开源安全事件响应机制、利用扫描工具加速发现和补救新漏洞、进行第三方代码审查、漏洞数据共享以及提供更好的软件物料清单等。
目前业内达成的共识是,开源软件的安全并不是一两家企业能去解决的。虽然OpenSSF中最活跃的贡献单位是Google和微软,但是这也并不代表仅凭这两家企业的努力,就可以解决整个的开源软件的供应链问题,而是在一个产业生态层面,通过所有人共同协作才能改进。
因此,OpenSSF提出的这些方向是非常有价值的,也非常值得我们国内去借鉴。
开源安全问题的“核弹效应”
唐小引:去年Log4j漏洞事件,以及今年初node-ipc包以“反战”为名进行供应链投毒等事件震惊开源圈,引发了全球关注,为何开源安全问题可以引发如此严重的后果?
郭 雪:在我看来有以下三点原因。
第一,开源软件组件的应用程度非常高。根据信通院以及其他报告数据统计表明,目前企业内部开源软件组件的使用量非常大,如开源组建使用达到上万的金融机构占比约20%。
第二,开源安全事件的隐藏性比较强。这与从业者对开源的认知有一定关系,国内部分企业并不知道自己在使用哪些开源软件。其背后原因,一方面可能是企业对自己开源资产并不熟悉,另外一方面可能是企业通过其他方式引入的开源组件,并不在自己的管理范畴,所以导致出现问题之后,没有办法快速定位。
第三,开源软件组件具有层层依赖的特点。它的依赖树比较复杂,导致依赖树上任何一个点出现问题都会导致终端用户受到影响。
徐 亮:我觉得开源安全事件之所以关注度高,是因为它和日常可能遭遇的漏洞是不一样的。一旦发生开源安全事件,可能一夜之间公司所有的基础设施都会遭受很严重的风险。因此行业每一次出现所谓的“核弹级”漏洞,大家都将其称为运维的“不眠之夜”,可能会要有人几天几夜不睡觉地去处理。
正如郭主任提到的,很多研究报告显示开源软件在各行各业中使用的比例非常大。因为开源本身的协作机制,使得大家可以减少重复劳动共享相同的好产品,但与此同时,也共享了相同的问题。
在大家对开源的深层次依赖关系认识不够充分的情况下,企业内部可能有一些很重要的软件没有被得到足够的关注。当其出现问题时,就会导致大家共同的基础出现了同样崩溃的情况。所以开源软件的供应链安全事件会令人“闻风丧胆”,再加之爆出的几起比较知名的事件,使得大家的神经一直处于一个紧绷的状态。
马景贺:之所以带来这么大的影响,我认为包括以下几个方面:
第一,开源十分普及,用一句话来说,即“所有人都已经置身开源之内,但是大家却以为自己置身其外。”
第二,开源安全事件传播很快,它会由上游的一个点,影响到下游的一个面。
第三,是因为开源项目生长在太阳之下,受到的关注多,加之媒体的传播,导致影响扩散范围很广。
唐小引:现在有两种声音,一种说开源更安全,因为所有的代码都公开可见。另外一种声音说高度的开放会带来更高的风险。那么如何理解开源与安全之间的关系,这两者之间是否有着天然的矛盾?
徐 亮:开放和安全本身并不是一个对立的关系。开源只是一种协作共享的机制,通过协作降低重复劳动,并将事情一起做得更好。
因为开源的这种价值存在,我不觉得开源会因为它过于开放而不安全,但是我也不觉得开源会因为其透明度更高,所以变得更加安全。
像Log4j漏洞案例带来的一些教训是:虽然这些代码都在阳光之下,但我们对它的关注和对其在安全方面的投入还远远不够,导致它和一些被好好看护的闭源商业软件的安全性相比是有差距的。
因此,我们应该对整个开源软件供应链安全加大关注,并且去寻找供应链中相对来说比较薄弱的风险点,并在这个风险点上加大投入。不管是商业软件还是开源软件,确保在其安全方面的充分投入才能整体提升供应链的安全性,而不应该非黑即白地去看待它到底是不是对立的。
郭 雪:开源软件和闭源软件在安全性方面没有绝对之说。
闭源软件通常会经过体系化的安全测试,因此有人认为它会更安全。不过,现在开源社区也有安全组也在做安全工作,它更透明度更高,似乎也挺安全。但一些开源恶意投毒的问题会导致开源不再安全,所以我们能做的就是提升自己的安全能力、控制风险。
在开源产业发展初期就关注安全问题可有效限制其发展。当前,开源的发展已经进入繁荣阶段,这个阶段也恰好是需要重点关注安全的阶段。任何产业的发展都会经历萌芽期、繁荣期,再经过治理和波动之后达到稳定期,而开源产业也不例外。因此开源治理在这个阶段应当提上日程。
马景贺:开源和闭源的本质都是软件,都会存在安全漏洞,且安全漏洞本身是有演进的过程。它诞生那一天可能没有漏洞,而在后续发展过程中可能会突然爆发出来,比如说Log4j,并不是其代码一开始创造出来时就有漏洞,而是在软件演进过程中,加之上下游的使用场景才突然爆发。又比如Windows是闭源的,但隔段时间也会发布安全漏洞补丁,因此在这种情况下,争论开源闭源谁更安全没有意义。
对于企业和个人来说,不要以一种旁观者的心态去审视,而要以共建的心态来参与。开发者可以去争取开源项目的最佳实践,去帮助开源项目构建一个安全防护体系等。从企业角度,也应该建立自己的预防和使用体系,做到“预防为主,防治结合”。
一直考虑谁更安全反而耽误了整体软件使用,这是舍本逐末的。
唐小引:可能很多企业当前还没有意识到开源安全的重要性,那么有哪些做得好的案例来分享?
徐 亮:现在看全球特别重视开源软件安全的主要贡献方都是一些很大的IT厂商。比如华为、BAT等,在国际上可能像Google、微软等,这些都是软件供应链安全的主要贡献者。当然还有一些国家组织,比如国内的信通院,国外的OpenUK等这种大型组织,深度参与到这个过程中。
这些企业或组织不仅是开源的主要贡献方,同时也是开源的受益者。那么作为受益者,可能确实要承担起更主要的责任去领导开源项目的安全,并把它推向一个更好的方向。
对于普通的开源使用者来说,我对此有两点建议:
第一,不要惧怕使用开源软件,应该大胆地在业务需要开源软件的时候去选择开源软件。
第二,业界正在努力地提供很多资源帮助大家在做开源,个人只要利用好这些资源,集中精力参与开源就好。
如何解除警报?
唐小引:企业该怎么建立开源安全策略,有什么方法或者经验可以与我们分享?
郭 雪:开源安全的治理具有成本高、落地难、见效慢,以及需要公共类的服务支持等特点。
很多企业此前也与信通院相互交流过,探讨针对开源软件有没有预警机制。不少企业反馈,业界共同使用的开源组件没必要分开维护它,能不能统一维护?在这种情况下,大家希望有一个公共类的服务,去梳理使用率比较高的软件和组件。
那么,对这种公共类的安全漏洞排查、预警机制的建立,其实对产业来说,是非常有效的,但它难度会比较大,因为开源软件本身量都比较大,需要分批分次去做,信通院目前也在做这件事。
而从企业侧方面,我认为有四个重要的关键动作:
第一,建立相应的开源安全管理的流程机制。
第二,勇于盘点软件资产,对使用的开源软件和组件做到心里有数。
第三,建立预警机制。
第四,建立维护团队和维护机制。
马景贺:在关注开源安全之前,首先得作为开源软件的使用者,然后成为一名贡献者,当然最终也有可能成为领导者。
尝试过程中,一方面可以实践出自己的最佳实践;另一方面可以参考外部的一些实践,最终建立企业自身使用开源的防护体系。基于此,与大家一起交流、推动、慢慢成长。总的来说,这是需要长期进行的事情。
徐 亮:我觉得企业在制定安全管理策略上,最重要的一点是需要贴合自己的商业实际需求。
首先,要摸清楚企业使用开源软件的规模和对开源软件的依赖程度。最重要的是要能够盘点清楚自己的开源资产,并能够给自己所依赖的产品列出一个软件使用清单(SBOM),再对自己使用的这些软件进行依赖程度的调研。
比如公司对其中一些软件依赖较多,那么这些组件就相对更重要。因此我们可以梳理各组件依赖关系的排序,这个排序甚至能够指导未来的选型。在后续选型过程中,我们可以尽量去选择已经有依赖关系的重要组件。同时,我们可以集中公司的力量去关注这少数几个重要的依赖关系较深的开源组件。
除了前面讲了一些方法论外,更重要的一点是公司的管理层或技术决策层能够对开源安全有足够高的认识,能够支持并组建相应部门,让大家能把这件事情很好地开展起来。
唐小引:开发者、企业、以及大型组织等各个不同角色,如何从源头上降低开源安全的风险?
郭 雪:我认为可以分为以下三个角度:
第一是开源软件的生产方,即开源的开发者,是第一个需要关注开源安全的对象。我们要找到一个适合开源社区去做的安全开发机制和流程,从源头上保证尽量少的一些安全问题。
第二是开源的使用方,即用户侧的角度上来说,在选型和使用过程中要持续关注开源软件安全的一些问题,包括进行安全测试,保证软件的安全使用。
第三是公共类的开源软件组建。例如,OpenSSF中有专门做开源软件漏洞的挖掘工作,检查一些公共类的安全问题,及时反馈给开发者、使用者,让他们及早地规避风险。
马景贺:从开发者的角度,我认为有两个方法可以降低风险。
第一,提升开源安全意识。比如,当大家去网上找框架或者引用软件包的时候,首先可以去官网查看软件是否经常更新,是否有安全排斥问题。其次,可以和该软件公司对接,向对方咨询软件组件能不能用。
第二,遵循企业内部的一些好的实践。如果企业内部没有,可以自行铺设。在公司内部,开发人员可以形成自下而上的实践,继而再找上级沟通争取形成这样的实践模式。安全漏洞引入的源头往往就是研发方面,如果开发者能拦截一部分安全问题,后面工作则会顺畅很多。
徐 亮:想要从源头上降低开源安全的风险,首先,需要一些政策的牵引和标准的制定。譬如美国的政策要求是各种软件在提交的过程中,要有相应的SBOM清单,后续还会有一系列标准,当然我们国家目前也在推进。
其次,针对开发人员设计相应的教育和培训方案。比如华为内部针对开发者有一套非常详尽的培训和测试机制,也被称之为“可信考试”。尽管培训需要花费一定的时间,但过段时间大家都感受到,开发人员整体的安全意识有很明显的提升。
再者,在成本合理的情况下引入最佳实践和最佳工具,并制定相应的流程机制来支撑整个工程能力和工程工具的落地。例如,建立安全事件的响应机制、对外数据共享机制,将漏洞情报的数据告知给用户和行业伙伴。
最后,建立开源安全专家团队。当后方有一个非常有能力的团队来推动时,这件事情才可能从根本上变得更好。
唐小引:我们如何提前防范漏洞事件,以及当面对突如其来漏洞事件时该如何应对?
马景贺:我认为有以下几个方面:
第一,建立防范机制。指派专人长期追踪开源软件最近是否有更新和版本发布,并检查目前使用的版本是否有安全漏洞等。安全漏洞发生后的第一时间,及时去打相应的补丁等。
第二,建立SBOM软件物料清单,对所有的组件一目了然。让公司所有正在使用的软件尽量透明化,才能提高掌控能力。
徐 亮:我想补充一点,即在软件最初的系统架构设计时,也可以考虑到软件攻击面的纵深防御机制。
很多软件系统并不是所有组件都会暴露攻击面并造成很大的危害。那么我们可以在系统设计上首先规避可能会过分暴露的风险。当系统设计中应用了一些安全原则,就能很大程度上规避一些问题。这样也可以在大型安全问题发生时,公司系统仍然能够提供一些基础的功能,而不会让整个系统要么关掉,要么“敞开大门”。
唐小引:针对开源安全问题,我们需要哪一类的人才,以及当前开源安全版权的人才现状是什么样的?
马景贺:我觉得当前行业内比较空缺多种人才。
第一,需要法律背景的开源人才,既懂开源技术又懂开源许可证。现在陆陆续续会看到开源方面存在很多法律纠纷,需要这些人去处理。
第二,顶级的开发者也非常稀缺。从0到1主导开源项目的开发者或开源的主要贡献者,对于开源生态也十分重要。
第三,需要拥有开源知识的市场人员。对于企业来讲,最终目的是要把这些企业开发的软件商业化,这个过程中不可避免的需要市场人员。
整体看来,这组成了一整个团队。行业中缺的人才非常多,而不仅仅是开发者。
徐 亮:做开源安全确实需要一个很专业化的团队,甚至可能它不是一个团队,而是由很多不同的团队来承担不同的角色。
以我们自身的开发团队为例,想要应用一些最佳实践,首先在系统设计或者在编程语言选型时,就选择内存安全的编程语言,这需要有专业的团队做支撑;同时还要有License评估团队,他们要了解开源许可;并且,需要有能够做编译构建、包管理、软件包分发的团队;另外,还需要建立安全响应专家团队;再者,公司里可能还需要有一些专业的工具团队,该工具团队一方面使用社区上的工具,另一方面可能会采买一些市面上比较优秀的工具,或者自己In-House开发一些相应的工具,甚至是做一些集成工作。
因此,整个开源软件安全管理无法让一个角色独立承担起来。开源软件的管理是软件生态的管理,软件开发过程中的各种角色,其实对于开源软件安全领域都至关重要,只不过这些人最好能够有一定的开源背景,会把这个工作展开得更好。
开放原子开源基金会目前的计划也在加强开源安全相应的教育,以弥补国内和国际上的开源差距。现在国际上已经有一些较为先进的培训的经验,我们希望引入到国内,并推广到自己孵化的一些开源项目上。
郭 雪:在IT圈,做开源和做安全的人都很少,同时涉及这两个领域的人才更是稀有。
第一,大学里目前没有开设开源相关专业,专门做开源的人才很难寻觅。
第二,信息安全相关专业也相对小众,从源头上来说这方面人才比较少。
不管是市场型的人才还是研发型的人才,就开源安全的人才而言,需要的是复合型人才。想要不让研发团队和安全团队完全割裂,那就需要把安全意识渗透到研发中来。
以上就是本期《开源圆桌派》的全部内容,看了各位专家的讨论,相信各位也能意识到开源安全对于企业和个人有多重要,以及在“灾难”发生之前应该如何防范和预防。不管是“有备无患”还是“亡羊补牢”,在当前开源吞噬世界的背景之下,也是时候该行动起来了。
— 推荐阅读 —
— 活动推荐 —