查看原文
其他

技术分享 | 开源软件的现状与治理

悬镜安全 2022-07-03

5月26日,2021云原生产业大会在京正式举行,悬镜安全华北区技术运营中心负责人霍光受邀出席,并针对“开源软件的现状与治理”主题进行了分享。该分享重点讲述了企业现阶段所面临的开源软件的风险以及如何对开源软件进行治理,为行业用户在开源软件治理方面带来新的思考。
霍光介绍到,当前开源软件的现状是:1、现在的代码是组装式而非自己编写的;2、大量使用开源组件;3、由于应用软件越来越多,企业开始使用低代码编程。
众所周知,今天的软件系统不像之前那样单一了,有很多代码成分。除了自研部分之外,还包括开源软件、代码复用、商业应用、第三方库和外包开发。复杂的代码成分,就会导致难以管理的问题。从图中可以看出来目前使用最多的就是开源软件。
接下来霍光介绍到开源软件明确定义由1998年OSI给出,包括十大特性,即自由再发布、源代码公开、允许派生作品、作者源代码完整性、不能歧视任何个人或团体、不能歧视任何领域、许可证的发布、许可证不能只针对某个产品、许可证不能约束其他软件、许可证必须独立于技术。
十个定义条件定义了开源软件的范围,同时也代表着开源软件比较大的发展态势。霍光介绍到目前开源软件有两个特点:第一是量多,每天都有百万级别的量,从一百万中选一个开源软件还是非常困难的;第二是成长速度很快,从2017年-2019年增长75%,可接近一倍,增长迅猛。以Java为例,在2018年时还是以Billion为单位,2018年Java的软件下载量为146billion,是4亿的下载量,自动化的软件开发极大地刺激了开源软件的下载,下载量比较大的话意味着内部有存在一定的风险。
基于这些现状,霍光也分享了现阶段开源软件的安全态势,开源软件的特点是所有权和使用权分离,而且,所有权拥有者并不对使用者出现的风险事故直接负责,没有任何“维保”服务。因此,利用开源软件入侵组织机构变得愈发容易,这种趋势很可能在2021年进一步加速。
开源软件有漏洞是一个方面,另一个方面是漏洞修复时间慢。因为使用者和风险之间没有合法的强制性关系,所有漏洞修复需要很长的时间,中等修复时间是180天,平均修复时间是326天,Top5%修复时间为21天。
谈到这里,霍光举出了一个例子。一个很早就被发布的漏洞,在2017年3月发布了补丁,但是到了9月份漏洞爆发了,在这期间有6个月的时间可以修复漏洞,但是大家都没有修复。实际情况是,甚至是事件爆发后的一年,有漏洞的组件的下载量一直居高不下,这个责任不仅是开发者和黑客的责任,使用者也有很大的责任,他对漏洞的情况不了解,也没有及时的修复,导致漏洞在爆发后的下载量依然还是很高,这也反应了开源组件治理的风险。
接下来霍光介绍到,开源组件暴露出的两大风险:
第一个是:许可证风险。尽管开源软件拥有“免费”的优势,但它与其它软件一样都要受到许可证的约束。67%的代码库包含某种形式的开源代码许可证冲突,33%的代码库包含没有可识别许可证的开源组件。开源许可证大约有200种开源软件许可协议,每个都定义了不同的术语和条件,有自己的限制和许可描述,可分为两大类,分别是:宽松类和著作权类。
第二个是:软件组成清单SBOM风险。软件组成清单SBOM能够跟踪开源组件的使用情况,能够很快识别出有漏洞的组件,这样在出现问题的时候能够快速修复,最小化软件供应链的风险,也可对当前的开源组件资产做一个梳理。
接下来霍光介绍了用户使用开源组件的四大困境,分别是:
  1. 用户不清楚系统中使用了多少开源软件,开源组件;

  2. 目前使用的开源软件中,存在多少已知安全漏洞和知识产权风险;

  3. 企业在开源软件或组件出现漏洞时,无法快速定位到漏洞组件的影响范围,并及时止损,禁止漏洞组件下载;

  4. 针对开源软件安全漏洞,企业缺少评估和修复能力。

那么面对这些风险,应该如何应对呢?霍光针对开源软件治理也给出了相应的建议。
方案之一就是通过软件成分分析(Software Composition Analysis,SCA)。所谓SCA就是专门用于分析开发人员使用的各种源码、模块、框架和库,以识别和清点开源软件(OSS)的组件及其构成和依赖关系,并识别已知的安全漏洞或者潜在的许可证授权问题,把这些风险排查在应用系统投产之前,也适用于应用系统运行中的诊断分析。
提到对开源软件的治理,主要是靠软件的SCA来实现,那么目前这样的产品可以实现哪些功能呢?霍光也为我们带来了详细的讲解:
1、现有的敏捷开发流程相结合:在不改变组织现有开发、测试流程的前提下,与源代码管理系统、缺陷管理系统、持续集成工具无缝对接,将代码第三方库检测融入企业的DevOps研发流程,实现了软件成分分析、成分中的已知漏洞分析及评估、许可证分析、漏洞范围影响分析等功能,帮助组织快速构建代码安全保障体系。
2、按风险等级排序:根据企业自身的条件和软件使用范围进行漏洞排序,这样可以预先修复,降低风险。
3、可视化呈现:有的组件很复杂,有直接依赖、场景依赖和间接依赖等,一个组件会有很多种依赖在一起,因此需要一个工具来确定组件的漏洞以及一个可视化的呈现。
4、漏洞库实时更新:开源软件的风险主要是漏洞,漏洞是一个实时动态的过程,必须要实时跟漏洞库同步。
5、自动化修复:自动修复也有几个层面,最常见的是固网升级,但有时可能固网不能及时维护和解决。这时就需要企业自身的安全配套手段,通过这些手段辅助用户解决开源软件存在的风险问题。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存