本文分享自华为云社区《漫谈SCA测试技术(一)》,原文作者:安全技术猿 。

1、什么是SCA

SCA(Software Composition Analysis)软件成分分析,通俗的理解就是通过分析软件包含的一些信息和特征来实现对该软件的识别、管理、追踪的技术。我们知道在当今软件开发中,引入开源软件(注1)到你的项目中,避免重复造轮子是大家都再熟悉不过的了,比如开源库中开源软件按每年21%速度在增长(来源Forrester报告),开源安全威胁成为企业组织无法回避的话题,而应用SCA技术对应用程序进行安全检测,实现安全管理是最行之有效的方法之一。

2、基本原理

SCA理论上来说是一种通用的分析方法,可以对任何开发语言对象进行分析,Java、C/C++、Golang、Python、JavaScript等等,它对关注的对象是从文件层面的文件内容,以及文件与文件之间的关联关系以及彼此组合成目标的过程细节。从SCA 分析的目标程序形式上分,既可以是源代码也可以是编译出来的各种类型的二进制文件,分析的数据对象对程序架构,编译方式都是不敏感的,比如:类名称、方法/函数名称、常量字符串等等,不管目标程序运行在x86平台还是ARM平台,不管是windows程序还是Linux程序,都是一样的,简而言之SCA 是一种跨开发语言的应用程序分析技术。

SCA分析过程:首先对目标源代码或二进制文件进行解压,并从文件中提取特征,再对特征进行识别和分析,获得各个部分的关系,从而获得应用程序的画像—–组件名称+版本号,进而关联出存在的已知漏洞清单。

由于SCA分析过程中不需要把目标程序运行起来,因此具有分析过程对外部依赖少,分析全面,快捷、效率高的优点;

3、业界TOP SCA工具分析

根据Forrester最新SCA报告,Forrester通过10个维度(注3)对不同工具进行打分,最后根据综合得分评选出如下业界TOP 10 SCA工具魔力象限图:

3.1工具概览分析

  1. TOP 10 SCA工具中有5款支持软件包(注2)开源软件SCA检查能力(synopsys/Sonatype/Veracode/Jfrog/GitLab),其他工具只支持源代码SCA检查能力。
  2. 5款支持软件包SCA检查工具中,对C/C++、Java、.Net语言支持的比较好,但对Golang、python、JavaScript语言支持能力偏弱,比如:synopsys支持的组件对象中前面3种语言占大头90%+,相应的检测率也高,而Golang语言的组件检出率则低很多。
  3. SCA已从主要用作对开源软件的检测向应用程序的典型编码问题检测趋势扩展,比如Veracode工具,它能提供了对诸如缓冲器溢出、命令行注入、死锁、重复释放、整形数溢出、UAF、格式化字符串漏洞,SQL注入等典型编码问题的检测能力。

4、影响SCA分析准确性的因素分析

  1. 从SCA原理可以知道影响分析准确性的因素分两个方面:其一是SCA工具支持组件的数量和检测算法,其二是应用程序引用开源软件的方式。
  2. 因为SCA工具是根据样本组件特征来匹配被测程序中的特征来判断应用程序是否引用该组件的,因此支持组件的数量越多,那么检测率也就越高,支持的组件数量越少,越会导致检测遗漏;另外检测算法和特征设计是否合理也直接影响到分析的准确性和分析效率,不同SCA工具厂商有不同的解决方案,就好比在手机上识别指纹/人脸一样,不同厂商识别的灵敏度和准确度都不一样。
  3. 应用程序在引用开源软件时,不同的应用程序即使引用同一个组件也存在引用不同的功能,引用功能的多少也各不相同,这样带来的结果就是在应用程序中包含该组件的特征数量也是大小不同的,引用功能多包含的特征一般也多,引用的功能少包含的特征也少。而应用程序包含组件特征的多少直接影响到SCA工具的检测的准确性,组件特征越少SCA工具检测越困难,因此即使两个不同应用都引用了相同组件,可能一个应用可以检测到,另外一个应用则无法检测出该组件。这种场景对SCA工具检测二进制文件尤其明显。
  4. 由于存在上述SCA分析准确性,在极限情况下如果无法检测出组件,那么也就无法知道应用程序中是否存在该组件的漏洞了。

5、总结:

  1. 不管是源代码文件的SCA检测工具还是二进制文件的SCA检测工具,他们是一种互补的关系,各有各的优缺点,比如二进制文件的SCA检测能发现构建过程中工具链引入的安全问题,而源代码的SCA则不能,SolarWinds事件就很好的说明了这一点。
  2. 目前SCA工具检测开源软件的已知漏洞是基于组件名称+版本号来关联出已知漏洞的,对部分编译场景(只有部分组件代码被编译到二进制文件中)和patch打补丁场景(漏洞已修复),误报率高。
  3. SCA工具扫描效率和准确性是一对矛盾体,这是工具厂商需要权衡考虑的地方,而既能提升准确率又不会降低扫描效率的技术永远是SCA工具厂商研究的课题和追求的目标。

注1:Top 10开源软件编程语言:JavaScript(51%)、C++(10%)、Java(7%)、Python(7%)、Ruby(%5)、Go(4%)、C(4%)、PHP(4%)、TypeScript(4%)、C#(3%)、Perl(2%)、Shell(1%)
注2:软件包是指产品用来安装、运行的发布包,里面包含了产品编译好的可以运行的二进制文件,比如.so/.jar/.exe/.dll/.pyc
注3: a.License风险管理;b.漏洞识别;c.主动式漏洞管理;d.策略管理;e.SDLC集成;f.容器和无服务器扫描; g.审计报告;h.风险报告;i.修复速度报告;j.厂商自行分析;

点击关注,第一时间了解华为云新鲜技术~

漫谈SCA(软件成分分析)测试技术:原理、工具与准确性相关推荐

  1. 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布

    根据全球知名IT研究与顾问咨询公司Gartner统计,从2010年到2018年软件代码中采用开源框架或组件.第三方库的比例每年以30%的速度增长,大量的软件系统引入开源代码和第三方库,有的系统引用开源 ...

  2. 从开源组件安全看SCA软件成分分析技术

    1.基本概念 软件成分分析(SCA,Software Composition Analysis)是一种对二进制软件的组成部分进行识别.分析和追踪的技术.专门用于分析开发人员使用的各种源码.模块.框架和 ...

  3. SCA软件成分分析 简析(一)

    一.概述 SCA全称 Software Compostition Analysis,译为软件成分分析,即通过分析软件源码提取项目依赖的第三方组件及其版本.许可证.模块.框架和库等信息,生成软件物料清单 ...

  4. 什么是软件成分分析(SCA)安全测试技术

    [摘要] 本文介绍了SCA技术的基本原理.应用场景,业界TOP SCA商用工具的分析说明以及技术发展趋势:让读者对SCA技术有一个基本初步的了解,能更好的准确的应用SCA工具来发现应用软件中一些安全问 ...

  5. SCA(软件成分分析)中的知识图谱技术

    在开源广泛使用的今天,如何解决开源组件中潜在的风险问题也被众多企业提上了日程.开源风险包括漏洞风险,许可证风险等等,现在一般的解决方法是使用SCA工具. SCA工具最基础的检测能力就是对开源组件中的依 ...

  6. 浅谈软件成分分析(SCA)在企业开发安全建设中的落地思路

    前言 开源软件具有开放.共享.自由等特性,在软件开发中扮演着越来越重要的角色,也是软件供应链的重要组成部分.根据Gartner调查显示,99%的组织在其 IT系统中使用了开源软件.而来自Sonatyp ...

  7. 软件成分分析(SCA)详述

    一.SCA是什么? 今天的软件开发普遍遵循敏捷实践,发布和部署周期都很短这导致开发团队非常依赖开源来加速创新迭代速度.因此,对团队项目中包含的每个开源组件进行跟踪非常重要,这样可以避免法律不合规的风险 ...

  8. 什么是SCA(软件成分分析)

    1.基本概念 软件成分分析(SCA,Software Composition Analysis)是一种对二进制软件的组成部分进行识别.分析和追踪的技术.专门用于分析开发人员使用的各种源码.模块.框架和 ...

  9. 软件成分分析技术介绍

    软件成分分析技术介绍 1.关于软件成分分析 SCA,Software Composition Analysis,软件成本分析是一种对二进制软件的组成部分进行识别.分析和追踪的技术.在开源软件日益盛行的 ...

最新文章

  1. pytorch_导入d2l_pytorch包问题
  2. 如何在64位的Win10系统下安装.NET Framework 3.0
  3. 算法实践--最小生成树(Kruskal算法)
  4. 使用.NET Core与Google Optimization Tools实现加工车间任务规划
  5. note05-计算机网络
  6. 《Python 黑科技》探查Mysql数据库,输出数据质量报告
  7. Android8有深度休眠吗,IMX8MQ android休眠功耗过大
  8. css3 object-fit详解
  9. 一些图像处理函数用法
  10. Activity端详
  11. wxpython学习笔记
  12. R语言查看某个R包版本号
  13. PPT精品教程隐私政策
  14. net idautomationhc39m条形码字体生成条形码
  15. 短视频剪辑的九大技巧分享
  16. 灰度变换与空间滤波——图像增强
  17. 随机森林+python代码实现
  18. 网站备案 应该找域名商还是空间商备案
  19. js去掉前后空格的函数_Node.js十年,你大爷还是你大爷
  20. 深圳-银湖山郊野公园

热门文章

  1. JavaScript数组排序详解
  2. CMakeList.txt的简介
  3. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理
  4. day8 Java学习(面向对象.多态接口)
  5. 【JAVA线程间通信技术】
  6. Python爬虫之环境安装
  7. html5_canvas初学
  8. NYOJ-571 整数划分(三)
  9. 转:漫画 我讨厌阅读别人的代码
  10. 信用更正和贷方剩余数量