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 记录。详情可参考: 
cve-website

四、思考

目前SCA检测不仅仅用在安全检测方面,针对应急响应、资产排查等方面也有重要作用。例如常见的Log4j2、Fastjson应急响应。通过该平台可查询引用该组件的服务,快速获取服务负责人、发布时间、组件版本等信息,通知相应负责人升级处理。

目前得物安全内部主要用SCA工具管理开源组件安全,SAST用于检测源代码以发现安全漏洞,这两者已经完美结合起来用于解决软件开发前期常见的安全问题。但是在未来的规划当中,SCA会将尽可能的左移,在开发阶段之前就可以检测到相关安全风险,或者说确保用户在开发阶段引用的组件就是安全的。要确保这一点的话,需要搭建得物内部私服,确保私服上的包都经过安全检测。

总的来讲,SCA 其实并不是一项很先进的技术,OWASP 官方2012年就开源了类似的检测工具DependencyCheck。主要在现代的研发过程中大家越来越使用开源组件,意味着一旦引用的组件出现风险,自己的项目也处于危险之中,供应链安全的问题产生的影响也会越来越大。当然并不是说使用开源软件不好,毕竟可以大幅度提高开发效率,不能因为安全问题而因噎废食。安全的目标就是尽量减少打扰业务,但要保障业务开发的系统更安全、更可靠。

参考文献:
http://www.caict.ac.cn/kxyj/qwfb/bps/202109/P020210918555067633829.pdfhttps://www.cve.org/Media/News/item/news/2022/01/11/Changes-Coming-to-CVE-Recordhttps://owasp.org/www-project-dependency-check/

文|张洋洋

关注得物技术,做最潮技术人

SCA在得物DevSecOps平台上应用​相关推荐

  1. 【阿里物联平台】阿里物联平台设备接入——基于LinkSDK_v4_001

    目录 阿里物联平台和飞燕(生活物联)平台介绍 LinkSDK接入简介 LinkSDK主要功能流程图 MQTT连接流程 子设备注册和添加流程 设备ota流程 阿里物联平台和飞燕(生活物联)平台介绍 [I ...

  2. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(三)---微信小程序直连阿里物联平台AliIoT

    前一段时间集中设计系统整体方案,物联网平台搭建.小程序编写,硬件电路设计.SOC单片机程序开发,自己挖的坑太大了,填起来真是费劲啊!整个年假都用来填坑了,也没有时间编写博文,今天忙里偷闲集中整理一下开 ...

  3. 美的物联平台的云上实践与应用

    在2018云栖大会深圳峰会阿里云支持与服务专场上,由美的集团物联云负责人周红昌带来了"美的物联平台的云上实践与应用". 主要介绍在阿里云上怎么去构建美的的服务.快速的把物联平台构建 ...

  4. iphone连上wifi却上不了网_如何解决联通物联卡上不了网问题

    如何解决联通物联卡上不了网问题用户如果需要对物联卡进行续费或者其他操作,只能通过所购买的物联卡代理商进行.因此物联卡代理商,对于物联网卡用户来说,不仅有开户拿卡的作用,用户物联网流量卡后期.数据查询与 ...

  5. Unity3D游戏制作 移动平台上的角色阴影制作

    本文将重点介绍两种目前在移动平台上的主流阴影制作技术,同时也会简单介绍两种移动平台上相对较为高级的动态阴影生成方法. 由于目前主流使用Unity3.x在移动平台上并不支持阴影的动态生成技术,所以目前最 ...

  6. 安心加科技打造多维度全场景式安心加物联平台

    云栖号案例库:[点击查看更多上云案例] 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 公司介绍 广东省安心加科技有限公司是一家专注于地产行业智能化和物联网领域, ...

  7. “鉴定一下网络热门平台上的小广告”

    出品|蚕豆网 作者|蚕豆君 如果你是经常"冲浪"的网友,对于近期各大平台APP上究极碰瓷(盗用素材)小广告的玩家吐槽一定不会陌生,而且大有愈演愈烈之势.这本是不大光彩的互联网牛皮癣 ...

  8. 腾讯云联合信通院等发布标准物模型平台,构建物联网行业通用标准

    12月10日,腾讯云在IoT生态峰会上正式发布并上线针对物联网行业的标准物模型平台.腾讯标准管理中心总监代威表示,将在工业互联网联盟框架下联合各领域合作伙伴,通过标准物模型平台共同构建各类信息模型,让 ...

  9. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(五)---合宙Air724UG 4G cat.1硬件设计开源

    首先,感谢某立创平台的开源支持及免费硬件PCB支持,废话不多说直接上硬件开源链接:希望平台能够开放该链接!!! RYK_OPEN_20220212 - 立创EDA开源硬件平台 立创EDA开源硬件平台, ...

最新文章

  1. 御用导航官方网站提醒提示页_导航错误致四川青城山拥堵?交警提醒:别过度依赖导航...
  2. ShaderLab学习小结(十九)RenderToCubemap创建能反射周围环境的效果
  3. Spring LDAP
  4. 【转】android题目
  5. AngularJS页面【uib-dropdown】控件在模态窗口(弹出窗)中无法使用问题
  6. 在不格式化U盘的情况下查杀U盘快捷方式病毒
  7. Processing创意编程(进阶篇)
  8. MacBook Pro 2018款充电口不能用解决办法
  9. 郑捷《机器学习算法原理与编程实践》学习笔记(第二章 中文文本分类(一))...
  10. AppleTalk--网络大典
  11. 向下兼容性格什么意思_相处特别舒服,可能是对方情商在向下兼容你
  12. c语言程序实现进程的管道通信,C 进程间通信--命名管道通信代码实现及其原理图示...
  13. Python获取QQ音乐某个歌手的歌单。
  14. 西哈努克之子柬埔寨国王西哈莫尼抵京-西哈努克-国王-抵京
  15. java+vue3实现生成、验证图形验证码,和手机短信验证码
  16. Linux7.3安装yum工具,Red Hat Enterprise Linux 7.3更换CentOS 7 yum源
  17. linux命令英文释义
  18. 批量修改本地文件.bat命令使用与node.js批量修改文件
  19. pic c语言按键程序,PIC的C语言使用
  20. Android Studio 的最新版本 Arctic Fox创建项目 无法添加第三Maven仓库

热门文章

  1. 微信图片防盗链笔记(转:破解微信图片防盗链)
  2. linux环境怎么更新离线rpm包,SUSE Linux 11系统rpm包离线安装GCC
  3. 省钱兄游戏陪玩小程序APP源码uniapp前端源码适配支持(APP+小程序+H5)
  4. html中黑色小方块如何添加,word里有这种小黑色方块是什么符号如何替换
  5. struct timeval用法与时间溢出问题
  6. Zotero+OneDrive多平台在线同步完美解决方案(一):安装配置、云端同步文献数据
  7. c语言:(指针)输入一行文字,找出其中的大写字母,小写字母,数字,空格以及其他字符
  8. 剩余电流动作继电器的应用探讨
  9. 云媒易:做好小红书推广的6个关键点
  10. Matlab最小二乘法实现轨迹定位方法(原创:呵呵哒!( ̄▽ ̄))