写点什么

漫谈软件成分分析 (SCA) 安全测试技术

作者:科技怪咖
  • 2022 年 9 月 01 日
    海南
  • 本文字数:2202 字

    阅读完需:约 7 分钟

【摘要】 本文介绍了 SCA 技术的基本原理、应用场景,业界 TOP SCA 商用工具的分析说明以及技术发展趋势;让读者对 SCA 技术有一个基本初步的了解,能更好的准确的应用 SCA 工具来发现应用软件中一些安全问题,实现漏洞检测和安全审计,从而帮助提升软件安全质量。

1、什么是 SCA

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

2、基本原理

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

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

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

3、业界 TOP SCA 工具分析

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


注:图片和数据引用来自 Forrester 报告

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.厂商自行分析;

作者:热爱永不降温

链接:https://juejin.cn/post/7138037286289014820

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

用户头像

科技怪咖

关注

还未添加个人签名 2022.07.29 加入

还未添加个人简介

评论

发布
暂无评论
漫谈软件成分分析(SCA)安全测试技术_科技怪咖_InfoQ写作社区