第三期|王永雷:企业开源软件安全可信治理之路

2020年12月25日 单位
王永雷

12月19日,Synopsys开源治理专家王永雷先生为大家讲解了「企业开源软件安全可信治理之路」。


随着企业使用开源软件的比例和逐年提高,如何更好地使用和管理开源软件?如何通过开源软件促进企业的发展?


点击链接回看>>>【直播分享回放】第三期:企业开源软件安全可信治理之路


01 开源的现状


首先通过时间轴,我们简单回顾了软件发展的开发历程,以及开源发展的历程。在最近的几十年里,软件的多样性逐步增加,变革越来越快。随着开源的发展,「可信」变得愈发重要,再者,最近两年的商业化变革,包括GitHub被微软收购、RedHat被IBM收购,开源进入到一个全新的领域,很多公司都在拥抱开源。从开源的历史视角来看,可能一开始追求的是快速的交付,后来是需要一个可靠的软件,那现在我们需要的是一个安全可信的软件。



我们可以从产品、治理、文化和社区四个视角来看开源。产品层面上,越来越多的公司参与到开源里,那么有些公司是以开源作为一个技术的创新,或者打造自己的一个生态,或者作为企业的战略来推动;有些公司可能是作为一个使用者参与到开源治理中。治理层面上,我们要考虑到开源软件的安全、合规、运维和专利风险。社区层面上,有主体的运营,还有参与,打造一个共同体。现在在国内,我们能看到很多开源的同仁一直在鼓励或参与社区的交互,这一点非常重要,无论是对于开源的使用者还是输入方,都会形成一个比较好的良性互动。文化层面上,从企业的角度、个人的角度,我们都希望通过开源的一个方式,可以打造一个开放、协作和共享的这样一个文化氛围。





02 为什么需要开源安全可信治理


开源软件在云计算和大数据时代,已经成为事实的标准。                 —— 崔宝秋


开源已经占据了整个软件领域非常重要的一个位置,那么在这样的一个前提下,从治理层面来看,我们需要从外部的驱动,转变为内部驱动,最终变成业务的驱动。在外部驱动方面,比如与供应商合作的时候,需要提供一个供应清单,说明你提供给我的这个软件里有哪些开源的组件、有哪些许可证;有些公司要上市或收购的话,针对软件这一块儿有一个尽职调查,尤其是针对软件资产,针对开源有一个追溯;还有最近个人的一个GDPR,那么从外部来看,有很多因素会推动我们去做。


此外,我们更希望看到企业从内部去驱动它,包括现在整个团建是DevOps的一个概念,即追求软件更快的部署,包括现在像云原生、Serverless这样的一个模式,在这个前提下,如何让我们在使用开源软件的过程中安全可信?我们看到很多国内外的公司从内部非常重视开源的安全可信的治理,越来越多的公司也成立了开源治理委员会,去推动协调整个的资源。


最后我们也看到有一些公司,把开源作为企业的一个战略,形成商业的一个模式,推动创新,推动整个业务。


在使用开源的时候,也有很多的挑战。首先,我们看到很多的公司,对使用的开源组件缺乏透明度,不了解公司里使用开源的情况。第二,缺乏企业级的开源政策或治理框架。第三,各个部门大多自行评估和管理其开源需求,但很少真正形成系统化,需要更多的重视。第四,我们在使用开源的时候,对于风险的认知是有限的。现在越来越多的公司走向海外,那很多原先可能没有意识到的问题摆在了我们面前,比如合规的风险、知识产权的问题等等,愈发突显。还有就是和开源社区缺乏互动,这导致运维非常困难。最后,希望管理层能足够重视开源,推动开源治理往前走的步伐。





03 浅谈企业开源软件安全可信治理



开源安全可信的几个维度

图片


1

开源发现

开发人员如何为他们的项目寻找开源软件?

  • 实施带有预审许可证的开源组件目录

  • 针对何为可以接受的开源组件提供指导,以指导开发团队

2

审查和选择

企业如何评估和批准拟纳入软件库的开源软件组件?

  • 实施开源审批流程,以洞悉法律、架构和安全风险

比如从律师的层面来讲,他们可以从解析许可证的这个维度来看;从架构师的层面来看,他们可以判断开源组件的性能、设计的架构是否可以扩展、有没有可以替换的,这些都需要思考。在使用开源软件时,可以考量社区对于安全风险的披露情况和安全漏洞的修复情况。

3

开源供应链

企业如何监视和控制通过软件供应链引入的开源软件组件?

  • 审查供应商的安全治理计划

  • 供应商提供清单,说明使用的开源组件及许可证

  • 与公司设定的规范比对,如有冲突,进行必要的沟通与协调

  • 将软件供应商的开源使用事宜写进合同,对双方都是一种保护

4

开源代码管理

企业如何跟踪和管理包含在软件库中的开源软件组件?

  • 设置开源组件的持续扫描和监控流程,以识别出安全、许可和运营风险。

  • 针对开源制定编码文档记录标准

5

开源维护与支持

企业如何维护包含在软件库中的开源软件组件?工程师如何就这些组件获得技术支持?

  • 利用工具或订阅服务来监视新版本、更新或风险,以便在第一时间获知并做出反应

  • 跨域或域内的集中支持和维护将能够防止和减少重复性支持活动

6

开源合规计划

企业如何确保包含在软件库中的开源软件组件符合开源许可证的规定?

  • 创建允许您在开发生命周期的早期阶段洞悉开源组件合规义务的流程

  • 在软件开发生命周期(SDLC)过程中设置正式门限,以便对许可证合规进行验证

  • 将法务部门的审查纳入到这个合规验证流程中,以确保使用开源许可证的项目履行了义务

7

开源社区互动

如果企业的软件库中包含了某个开源社区制作的开源组件,或者某个开源社区制作的开源组件与企业的目标市场密切相关,那么,企业应如何与该等社区展开互动呢?

  • 制定正式指南,以指导员工以正式身份参与开源社区或与之交流

  • 建立公司内部社区,以拥抱更多的开源,进行建设性的讨论,分析问题并评估解决方案

8

高管监督

业务部门经理、工程经理和公司法律顾问应如何对开源软件进行适当的管理监督呢?

  • 公司高管参与开源管理流程和政策的开发制定和变更工作

  • 提供月度高管报告,以显示开源使用情况和合规状态指标




开源审查委员会



现在有很多公司成立了开源审查委员会,这个组织有时是虚拟的,有时是实体的,依据公司组织架构的不同。这个组织其实非常重要,它集合了来自工程、法务和开源团队的专家。通过成立这样一个委员会,来制定和引入一些规范和规则,能够在大家使用的过程中提出一些指导性的建议,协调公司内部的不同资源,解决各环节的问题,形成良好互动,促进公司层面开源治理的良性循环。




开源安全成熟度等级


开源安全成熟度等级可分为0、1、2、3。第一个等级是Reactive,基本上处于一个无序的状态,也没有什么规范,主要是无组织或者以个人、小组的形式在进行;第二个等级是Enabled,有些组织有一些基本的规范,有意识到开源可能遇到的各种风险,需要去关注。在关注的基础上,有一些基本的治理、培训,有支持的团队;第三个等级是Participating,管理层开始支持标准化的流程和规范,关注开源的透明度和风险,对于公司在使用的开源组件给出指导性的一些规范,有专门的组织或者团队来维护一些特定的组件,最大限度地减少重复性的工作。最后一个等级是Driving,把开源作为公司的一个战略,包括技术创新、打造商业模式和生态。


我们看到越来越多国内的公司在开源治理层面做得越来越成熟。希望能通过拥抱开源,助力整个公司的发展。




轻量级解决方案


针对轻量级的解决方案,首先,通过工具扫描得出一个基础数据,如果发现某个开源组件有高风险,请开发同事来做确认。再者,要做规则检查。另外,从合规的层面来讲,需要法务部门的参与,因为法务与专利、知识产权的关系很密切。在产品上线后,还需要对许可证违规和安全漏洞做持续的监控。对于许可证来说,根据产品型态的不同也需要有所改变,比如当一个产品从内部开源变为外部分销时,许可证的等级会提高 ,这时我们需要关注许可证合规的风险。




中长期解决方案


针对中长期的解决方案,需要有更多的人加入进来,每个人的角色不同。比如,安全工程师要制定安全合规的规范;质量工程师除了做功能性回归测试之外,还需要针对开源形成质量管理的一些指标。第二个,从流程上来说,如果打通了研发过程的构建,那么发现问题之后,会触发不同的流程,进行治理。举个例子,比如安全漏洞被发现后,安全工程师加入进来,将漏洞进行分类,形成漏洞修复的一个建议和报告,反馈给开发,开发在修复之后再给出一个建议并提交,形成这样一个闭环的管理。




04 Q & A


1     目前企业中安全工程师的配备情况怎么样?

像我们新思科技每年会有一个安全能力成熟度的报告,从近三年的数据来看,2018年的时候大概是0.7%,2019年大概上升到到百分之一点几,今年的数据是百分之二点几,由此我们可以看到越来越多的企业开始重视安全这一块儿,这个比例随着重视程度的提升,未来还会有所提高。此外,现在也在推动开发和安全的融合,开发工程师要懂安全,安全工程师也要懂开发,组建团队,形成良性互动。



2     开源组件的识别算法如何实现?

我们目前主流的识别开源组件有这样几种解决思路。比如,识别它的一个标记信息,那么这个会带来一个问题,假如说我的这个组件a,可能它的来源被改了,那怎么办,所以我们还有另外一种识别算法,我们称之叫特征码识别算法。每一个交付物都有一个HashCode,通过HashCode我们现在也可以做到识别的时候显示出它的来源,那么这个也是从安全可信的角度来给大家提供一个思路。第三种是针对源代码级别的引用,我们称之为文件的结构化信息,这个算法识别的范围相对于前面两种,使用的范围更广一些。我们称之为叫结构化的一个识别技术,那还有就是源代码片段级别的,我们称之为片段识别扫描,比如说我们可以针对几行代码,生成一个指纹码,再将指纹码去跟开源库去匹配。针对的使用场景和目的不同,识别技术也不同。




Great stories have a personality. Consider telling a great story that provides personality. Writing a story with personality for potential clients will assist with making a relationship connection. This shows up in small quirks like word choices or phrases. Write from your point of view, not from someone else's experience.

Great stories are for everyone even when only written for just one person. If you try to write with a wide, general audience in mind, your story will sound fake and lack emotion. No one will be interested. Write for one person. If it’s genuine for the one, it’s genuine for the rest.