随着容器、微服务等新技术的快速迭代,开源软件已成为业界主流形态,开源和云原生时代的到来导致软件供应链越来越趋于复杂化和多样化,网络攻击者开始采用软件供应链攻击作为击破关键基础设施的的重要突破口,从而导致软件供应链的安全风险日益增加。

——《DevSecOps敏捷安全》

目录

一. 开源风险治理为何如此重要?

二. OpenSCA技术原理

1. 轻量级零成本安装使用

2. 分析应用组件成分

3. 分析组件依赖关系

4.分析实际依赖组件

5. 组件完整性分析

6. 检测组件漏洞风险

7. 推荐修复方案

8. 提高许可证合规性

9. 生成SBOM(软件物料清单)

三. OpenSCA开源项目的初心

四. OpenSCA的优势

1. 先发优势

2. 社区优势

3. 迁移成本优势

4. 技术优势

4.1 特征检测

4.2 同源检测

4.3 二进制检测

4.4 强大的在线库

五. 期待参与和贡献,共建开源项目​​​​​​​

一. 开源风险治理为何如此重要?

《供应链攻击威胁局势报告》显示,预计2021年的供应链攻击数量将增加至上一年的四倍之多。《2021年软件供应链安全报告》显示,425名大型企业的IT、安全和DevOps主管中,64%的人报告称去年受到了供应链攻击的影响。Gartner预测,97%的企业应用程序将依赖于开源的使用,且超过70%的应用程序因使用开源组件而产生缺陷和漏洞。

开源≠安全。市场有观点认为,开源项目使用起来更安全,因为当整个社区参与开发和维护项目时,包括安全漏洞在内的问题常常被更快地识别和修复。虽如此,但并不代表开源没有风险。

开源项目是公开的,且对所有人可见,自然也包括恶意攻击者。在其中发现的任何漏洞都会暴露给潜在的攻击者。开源项目越受欢迎,对应攻击事件的影响面也就越大,因而关键基础开源软件需要被重点关注。

二. OpenSCA技术原理

OpenSCA开源项目建立的初衷是“用开源的方式做开源风险治理”这一理念,将商业级的源鉴OSS开源威胁管控平台部分关键技术开源,为广大企业和开发者提供专业的SCA核心工具与社区生态。

OpenSCA继承了商业级的开源应用安全缺陷检测、多级开源依赖挖掘、纵深代码同源检测等核心能力,通过软件成分分析、依赖分析、特征分析、引用识别、合规分析等方法,深度挖掘组件中潜藏的各类安全漏洞及开源协议风险。支持Java、JavaScript(Node.js)、PHP、Python、Go (Golang)、Rust、Erlang等多种主流编程语言并支持生成软件物料清单(SBOM)。后续会逐步增加更多的语言。

图1 OpenSCA支持的编程语言

1. 轻量级零成本安装使用

开发人员在写代码时需要全面思考、高效设计并快速迭代,因而希望工具易用性好、不拖慢开发节奏。

OpenSCA-cli是OpenSCA的命令行工具,支持在Windows/Linux/MacOS操作系统运行使用,部署简单,命令快捷。

云端在线检测:

可关联最新的漏洞数据,通过将本地解析的组件信息(不包含代码信息)上传至OpenSCA云平台进行漏洞库比对,识别组件的漏洞风险信息。

图2 在线检测命令示例

本地离线检测:

可以按照OpenSCA提供的漏洞库格式准备自己的漏洞库信息,无需将解析的组件信息传输到OpenSCA云平台,就可完成组件漏洞检测。

图3 本地检测命令示例

检测结果格式:

支持将检测结果保存到指定文件,根据后缀生成不同格式的文件,默认为JSON格式;支持以SPDX格式展示SBOM清单,只需更换相应输出文件后缀。支持生成HTML格式的检测报告。

图4.1 检测命令示例

图4.2 检测报告示例

2. 分析应用组件成分

引擎首先会检查项目是否有支持的特征文件,如果有特征文件,把需要的特征文件提取出来。解析jar包内的特征文件,如果包内无特征文件或特征文件解析不到有效数据则会尝试用jar包名检索获取组件名称和版本。如果通过jar包名检索失败则会按照"{组件名}-{版本号}.jar"的格式直接解析jar包名。

3. 分析组件依赖关系

开源软件包中80%的漏洞存在于传递依赖关系中,这意味着代码中的大多数漏洞都包含在复杂且正在使用的(嵌套)依赖项中。OpenSCA可以准确地检查代码中的所有依赖项,解析代码中使用的开源包的深度和复杂性,能够确保在各个级别都进行合适有效的漏洞检测。

在项目完整编译环境下,许多语言都会有比较成熟的包管理器,OpenSCA可以基于它的依赖配置文件去识别组件。例如mvn dependency:tree获取完整依赖树的过程,通过解析静态文件就可以获取非常完整的依赖关系。

OpenSCA后续新版本也将支持没有构建之前进行源代码层级的组件成分扫描,通过解析特征文件、组件文件、代码片段来识别成分。通过接入GitHub或Gitee的在线代码仓库,一旦仓库添加了新的组件信息,可以在早期检测并帮助开发人员识别潜在的风险。

但是对于本身组件体系完整而普适度高的语言,比如Java当中频繁使用了依赖引用链,这种引用关系往往可能存在2-3层以上,而这种依赖关系仅从静态的pom.xml中是没办法获取的。OpenSCA间接依赖可以从云平台组件库进行完整深度的递归解析所有层级的子依赖。

图5 OpenSCA检测流程

4.分析实际依赖组件

由于已识别的组件漏洞数量庞大,很快就会掩盖了漏洞的可见性及其对企业构成的真实风险指数。但企业发现的实际漏洞中有70%-85%不是致命漏洞,因为企业的专有软件不会调用存在这些漏洞的组件。

如何检测并判断应用实际使用到的组件是不可或缺的关键能力。OpenSCA在解析文件依赖信息时首先会检查组件是否是生产环境的组件(生产/开发环境的组件一般会在依赖文件中标识)。

通过解析过滤掉并非实际使用到的组件,从源头上减少无效组件和漏洞信息带来的干扰。

5. 组件完整性分析

对于jar包文件,会计算其MD5值后与知识库中记录的组件MD5进行匹配,判断当前组件的完整性。

图6 完整性校验流程

6. 检测组件漏洞风险

OpenSCA-cli提供了云平台漏洞库和离线漏洞库两种关联方式,来满足用户的在线和离线使用需求。

因此,OpenSCA的漏洞库的全面性和实时性可以起到重要的分析作用。依赖分析可以知道哪些项目或应用程序受到了漏洞的影响。

长期对知名开源组件追踪,大量漏洞源收集和独家漏洞的补充使得漏洞库快速全面的更新。

基于海量的组件库、漏洞库、许可证库、开源项目库等知识数据能够最大程度的匹配出正确的组件版本和对应的风险信息。通常,同一个漏洞可能存在于同一个组件的多个版本中,又或者同一个漏洞可能存在于不同的组件中,通过对关键漏洞的验证核实,OpenSCA能够最准确的给出修复推荐组件版本和安全的组件版本范围供用户选择。

7. 推荐修复方案

准确覆盖并识别了漏洞风险和优先级,但是如何进行有效修复?OpenSCA具备完善的漏洞修复方案和安全版本的开源组件推荐。

漏洞运营团队会对漏洞进行复现和修复验证。最大程度地完善漏洞修复信息,包括临时补丁、官方补丁、配置文件、缓解措施等。帮助用户快速评估修复影响和修复时间。

8. 提高许可证合规性

企业开发人员不能只是使用、复制、修改或分发开源依赖项。为了在软件中正确且合法地使用开源组件,必须了解在代码中使用的每个开源依赖项的协议权限、限制与使用条件。这将有助于企业创建定义和实施安全准则的策略。

OpenSCA能够从文件级别和代码级别,帮助企业深入了解开源组件的许可条款和条件,以及许可证的兼容关系。在制定安全策略时,企业可以在软件开发生命周期初期采用许可证合规性的规范。

9. 生成SBOM(软件物料清单)

软件物料清单(SBOM,Software Bills of Materials)是描述软件包依赖树的一系列元数据,包括供应商名称、组件名称、版本号、许可证信息、依赖关系等关键信息,通过SBOM技术和管理手段,可以帮助企业或团队梳理并透明化软件供应链资产。

通过使用OpenSCA自动化构建并生成应用程序的SBOM,在每次添加、删除依赖项或更改组件版本时可自动更新SBOM以确保SBOM的准确性。后续也将支持用户上传SBOM清单分析项目是否使用了存在已知漏洞的组件并构建完整的资产风险视图。当其它组件爆出漏洞时也可根据SBOM快速排查受影响项目,提高供应链的透明度和安全性。

三. OpenSCA开源项目的初心

SCA检测涉及源代码解析,部分使用者可能担心代码泄露,开源后,所有检测过程使用者是可控的,没有泄露风险。

开发语言、开发工具五花八门,这使得SCA工具需要针对不同语言进行适配或兼容,使用者可以通过修改代码开发适合自己使用场景的SCA检测工具,如果有更多的贡献者,有助于OpenSCA覆盖更多的检测场景。在更大的范围帮助更多的企业实现开源风险治理,助力开源生态健康有序发展。

四. OpenSCA的优势

1. 先发优势

作为全球首款开源的企业级SCA技术产品,OpenSCA继承了源鉴OSS大量的企业实践落地技术沉淀,后续也将持续吸取商业实践,不断更新优化OpenSCA的服务能力。

2. 社区优势

依托于社区用户参与友好度以及以产品交付能力驱动的社区运营能力,OpenSCA荣获GVP(Gitee最有价值开源项目)年度荣誉与软博会“全球十大开源软件产品”。

和越来越多参与贡献的开发者一起共建,OpenSCA将会更快速成长。

3. 迁移成本优势

用户可以在初期使用OpenSCA来满足业务需求,后续需要更丰富的功能,可以平滑升级到商业企业版本。用户体验和使用习惯可以得到延续,降低迁移成本。

4. 技术优势

4.1 特征检测

对于包管理器的检测方式,支持两种方案,一种是传统的依赖包管理器环境,另一种支持模拟包管理器解析逻辑,具备高度定制化能力。

如何判断是否有版本冲突时的依赖,可以按照包管理器的排除机制处理(maven会采用依赖路径最短的依赖)。比如maven解析pom中的依赖、属性,需要获取pom时去仓库拉取,版本冲突时按照maven的规则进行处理。

4.2 同源检测

开发者可以直接、完整地引入开源组件,但可能在很多时候,只是发现某一个开源项目中某一个代码片段写得不错就选择copy。这个代码片段可能来自Github,行数不等,变量定义不明。此时传统SCA的依赖分析功能无法完成对这些代码片段的识别,需要更进一步的源代码同源分析。

OpenSCA即将发布版本可以检测不同语言的代码片段,识别代码级别引入的开源组件信息,及其关联的漏洞和许可证信息。通过同源检测,可以识别企业项目的代码自研率、代码溯源相似度分析、许可证风险兼容分析等。

4.3 二进制检测

C/C++这样的语言,没有像maven这样统一的包管理器,使得SCA识别起来会有困难。

OpenSCA即将发布版本通过导入二进制文件的方式引入依赖,能够对二进制文件进行扫描并收集其依赖信息。

OpenSCA二进制检测将拥有丰富的二进制分析经验和漏洞挖掘能力。使用数据流、控制流、污点分析等技术,从常见攻击面出发,提炼漏洞的二进制特征,提高版本匹配、漏洞匹配的准确性。无需源码,上传二进制文件,即可进行软件成分分析,生成完整安全报告,帮助客户快速获取软件风险。

4.4 强大的在线库

OpenSCA在线库集成了漏洞库、组件库、许可证库,并进行小时级别的实施更新和人工运营,既保证了数据的全面覆盖,也保证了风险信息的时效性。在检测过程中,引擎可在线调用云平台丰富的库资源进行比对,降低了系统漏报率,并对漏洞修复方案进行持续完善更新,帮助用户对风险进行有效闭环。

五. 期待参与和贡献,共建开源项目​​​​​​​

感谢每一位开源社区成员对OpenSCA的支持和贡献。

Gitee已将OpenSCA扫描能力集成进了Gitee Go流水线中,实现了在流水线中对线上代码仓库的组件安全扫描。

同时,欢迎大家关注公众号参与讨论:OpenSCA社区

遇到问题可以添加小镜微信:opensca1

图7 Gitee集成OpenSCA服务

OpenSCA的代码会在GitHub和Gitee持续迭代,欢迎Star和PR,成为我们的开源贡献者。有任何建议都可以发在评论区或者OpenSCA项目的Issues中。我们会参考大家的建议不断完善OpenSCA开源项目,敬请期待更多功能的支持。


GitHub:

https://github.com/XmirrorSecurity/OpenSCA-cli/releases

Gitee:

https://gitee.com/XmirrorSecurity/OpenSCA-cli/releases

OpenSCA官网:

https://opensca.xmirror.cn/

OpenSCA用开源的方式做开源风险治理:Why? What? How?相关推荐

  1. 悬镜安全:用开源的方式做开源风险治理

    随着数字化应用的高速发展,软件已被各行各业广泛应用,成为必不可少的一部分.近年来,全球范围内有关软件供应链安全的攻击事件层出不断,对个人.企业,甚至国家安全都造成了严重威胁.近期曝出的Apache l ...

  2. 悬赏计划 | 参与Gitee X OpenMLDB开源项目,做开源才不是「用爱发电」!

    你是否也认为参与开源项目仅仅只是为了热爱而无私奉献?你是否也想成为开源项目中众多贡献者中的一员?机会来啦!参与第四范式Gitee X OpenMLDB开源项目,解决issue赢赏金,既能交友,又能&q ...

  3. 设定 KPI、OKR 是门槛,大厂做开源的五大痛点!

    | 转载自:CSDN | 编辑:周韵诗 根据Gartner及Linux基金会的调查报告显示,企业平均有29%的软件代码来自开源,在"开源吞噬世界"的背景下,国内大厂先后将关注点聚焦 ...

  4. 网易汪源:我们怎么做开源

    本文作者:汪源,网易副总裁,网易杭州研究院执行院长,网易数帆总经理 原载:公众号"冷技术热思考" 网易数帆开源全景图 今年数字+大会上我们第一次比较系统的推出了我们的开源计划(sf ...

  5. 同是做开源,它赚了20亿,国产OS厂商还在为生存纠结

    不久前,Red Hat发布了2016年第四季度及全年财报.数据显示,Red Hat保持了56个季度的业绩增长,全年营收突破20亿美元,达到20.5亿美元.这是继Red Hat四年前成为首家过10亿美元 ...

  6. 清华教授沈向洋:创新就要做到极致,用开源的方式培养未来的工程师

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 为什么我们需要拥抱开源? 创新这条路,我们接下来该怎么走? 面对这些问题,CNCC 2020特意举办了一次圆桌论坛,邀请了各企业的技术高层& ...

  7. SUSE梁胜:程序员涨薪飞快,做开源贡献者没有意义

    [CSDN 编者按]2020 年云原生的热度高涨,在行业内引起了广泛的讨论.开源的前景和意义如何,未来科技发展的趋势是怎样的?CSDN 独家专访前 Rancher 联合创始人及 CEO.现 SUSE ...

  8. 做开源 18 年,他想把中国开源带向世界 | 人物志

    作者 | 八宝粥 出品 | CSDN(ID:CSDNnews) 我们希望把中国的开源项目.基金会带向世界,也把世界的新鲜.成熟的基金会的理念和管理方法带回中国.    --LF AI&DATA ...

  9. 我在做开源芯片 | 人物志

    受访者 | 包云岗 采访者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 20多年前,"中国Linux第一人"宫敏博士用手提肩背的方式,将20盒磁带背回中国,磁带里装着 ...

最新文章

  1. 5 zabbix 添加host_运维监控实战篇,zabbix自动发现和自动注册图文详解
  2. java socket 全双工客户端_java socket实现全双工通信
  3. 从薪资、需求来分析,武汉Java开发就业前景好不好?
  4. C# 能否获取一个对象所占内存的大小?
  5. php 中 相关文章 的思路,WordPress实现推荐相关文章功能代码
  6. 北大青鸟的班主任好当吗_北大青鸟学校怎么样靠谱吗?
  7. python 构造http请求对象-Request对象
  8. 苹方字体 android,iOS 9“苹方”字体像安卓被吐槽
  9. 通过 jstack 与 jmap 分析一次线上故障
  10. javaweb调用qq认证登录接口
  11. flac格式的音乐怎么转换成mp3格式
  12. Attention UNet
  13. Cesium基础知识-粒子应用-汽车冒烟
  14. android实现推箱子代码,android开发--推箱子小游戏(二)
  15. sql sever 存储过程总结及实验
  16. 第一章:客户端网页编程简介
  17. android 模拟摄像头,在安卓模拟器中使用 VCam
  18. 程序减肥,strip,eu-strip 及其符号表
  19. 昆明等保合规怎么建设,企业等保安全解决方案,等保建设测评流程
  20. 合作伙伴究竟有多重要?这家云服务商深有心得体会

热门文章

  1. openssl CA
  2. Qt翻金币小游戏详细教程(内涵所有源码、图片资源)
  3. 微信小程序 不二博客星球
  4. 洛谷P1312 [NOIP2011 提高组] Mayan 游戏 题解
  5. Aurigma图片上传程序是为您的网站的图片上传解决方案
  6. ShardingSphere-JDBC5.2整合mybatisPlus入门
  7. VB中利用ListView控件来制作表格
  8. 力扣一日一练(7)——爬楼梯(斐波那契数列)
  9. 零基础入门必备:搞懂压力测试和负载测试
  10. 游侠安全网2011年网络与信息安全趋势10大预测