SCA(Software Composition Analysis)软件成分剖析,艰深的了解就是通过剖析软件蕴含的一些信息和特色来实现对该软件的辨认、治理、追踪的技术。
一、前言
古代开发我的项目中,应用程序中应用的大部分代码都是由开源代码形成的,其余的代码次要是作为"胶水"来组装和调用各种函数。据中国信息通信研究院统计的数据,2020年中国曾经应用开源技术的企业占比为88.2%,比2018年增长6.8%;有打算应用的占9.5%;暂未打算应用开源技术的企业占比为2.1%,能够看出,中国开源软件应用比例逐年晋升。开源让这些软件更平安吗?依据通信研究院数据显示,2020年热门开源我的项目中至多含有一个破绽占84%,较2019年增长9个百分点;含有高危破绽的占60%,较2019年增长11个百分点。
上面介绍两个例子
- 最显著的例子就是去年暴发的Log4j2破绽,Log4j2 是一个开源的基于 Java 的日志记录工具。该日志框架被宽泛的利用于各种常见的服务中(spring-boot-starter-log4j2、Apache Struts2、Apache Flink)。从Apache Log4j2 破绽影响面查问的统计来看,影响多达44029个开源软件,波及相干版本软件包更是达到了340657个。
- 2020年国内第一起一起对于 GPL 版权纠纷案裁判文书公示。一审判决书显示,GPL3.0 协定是一种民事法律行为,具备合同性质,可认定为授权人与用户间订立的著作权协定,属于我国《合同法》调整的范畴。一审判定两侵权原告公司抵偿被告公司经济损失及维权正当费用共计 50 万元,并进行侵权行为。
目前开源软件所面临的除了以上介绍的破绽危险,还有开源许可证问题,防止应用含有问题的组件。这将缩小开发过程中的危险。
二、SCA
2.1 简介
置信此时的你必定会纳闷,既然开源软件这么多危险,该如何防止呢?接下来就是本篇文章的配角SCA技术了。SCA(Software Composition Analysis)软件成分剖析,艰深的了解就是通过剖析软件蕴含的一些信息和特色来实现对该软件的辨认、治理、追踪的技术。SCA能够对任何开发语言对象进行剖析,Java、Golang、Python、JavaScript等等,当然也能够对一些二进制、固件等辨认。SCA的剖析过程:首先对指标源代码或二进制文件解压,并从文件中提取特色(组件名、版本号),再对特色进行辨认和剖析,取得该服务应用的相干组件和版本,与已知破绽库进行关联,找出存在的已知危险。
2.2 难点
上述听起来SCA如同并不简单,只须要提取要害信息作匹配即可,然而真正的落地过程中会发现遇到如下问题。这些问题导致要做一个成熟的易用的SCA工具并不是设想中那么简略,下图介绍了SCA我的项目中常见的一些难点。
三、落地
3.1 架构
如何自动化检测相干组件危险并且平安左移,让开发尽早感知到危险并禁止高危服务上线,是这边的指标。
其中检测架构如下图:
其中得物平安检测平台目前不仅仅做SCA检测、也在做SAST等检测,尽可能的平安左移,更早的发现问题。
3.2 实现
目前得物外部次要有Java、Go、Python、JavaScript等语言,目前对以上四种语言曾经做到全副反对(包含Java打包后的Jar文件、Go动态语言编译后的二进制文件)。
目前次要采纳我的项目构建及解析包管理文件两种形式。
- 形式一:我的项目构建
以Java我的项目为例,通过与公布平台买通,取得我的项目编译后的Jar文件,JAR 文件格式是以 ZIP 文件格式为根底,对Jar文件进行解压,可在BOOT-INF/lib/目录下获取全副第三方依赖包信息。
- 形式二:包管理文件
解析相应语言的配置文件,以Go为例,通过解析go.mod和go.sum文件,获取相干依赖信息。
对我的项目依赖的平安剖析在服务端进行,基于平安经营同学继续保护的破绽库,能够疾速辨认到存在平安缺点的依赖,当检测到相应依赖存在平安危险的时候,即发相应告诉到我的项目Owner,督促去进行相应改良。
为了让开发者器重平安问题,该检测后果还会同步输入在Gitlab Merge Request处,当Reveiew代码时,将会间接看到平安检测相干后果。
3.3 破绽库
破绽库的建设非久而久之能实现的,目前破绽库的建设次要以开源为主,如NVD、GHSA、GLAD、Go VulnDB等,辅以外部人工收集到的一些破绽信息。这里提一下,NVD官网的破绽库尽管很全,但外面定义的cpe信息与组件信息不是完全一致,而且许多CVE数据无影响版本、修复版本等数据,这些信息须要联合其余破绽情报综合断定。
好消息是今年夏天CVE 数据格式将会实现5.0格局的公布(目前CVE格局均为4.0),这次 CVE 公布增加了几个新数据字段,除了 CVE ID 号、受影响的产品、受影响的版本和公共参考的必须数据之外,将记录包含可选数据,例如严重性评分、钻研人员的信用、其余语言、受影响的产品列表、附加参考、社区奉献能力等。这些可选数据将为上游用户和整个破绽治理社区加强 CVE 记录。详情可参考:
https://www.cve.org/Media/New...
四、思考
目前SCA检测不仅仅用在平安检测方面,针对应急响应、资产排查等方面也有重要作用。例如常见的Log4j2、Fastjson应急响应。通过该平台可查问援用该组件的服务,疾速获取服务负责人、公布工夫、组件版本等信息,告诉相应负责人降级解决。
目前得物平安外部次要用SCA工具治理开源组件平安,SAST用于检测源代码以发现安全漏洞,这两者曾经完满联合起来用于解决软件开发后期常见的平安问题。然而在将来的布局当中,SCA会将尽可能的左移,在开发阶段之前就能够检测到相干平安危险,或者说确保用户在开发阶段援用的组件就是平安的。要确保这一点的话,须要搭建得物外部私服,确保私服上的包都通过平安检测。
总的来讲,SCA 其实并不是一项很先进的技术,OWASP 官网2012年就开源了相似的检测工具DependencyCheck。次要在古代的研发过程中大家越来越应用开源组件,意味着一旦援用的组件呈现危险,本人的我的项目也处于危险之中,供应链平安的问题产生的影响也会越来越大。当然并不是说应用开源软件不好,毕竟能够大幅度提高开发效率,不能因为平安问题而因噎废食。平安的指标就是尽量减少打搅业务,但要保障业务开发的零碎更平安、更牢靠。
参考文献:
http://www.caict.ac.cn/kxyj/q...
*文/张洋洋
@得物技术公众号