乐趣区

关于测试:漫谈SCA软件成分分析测试技术原理工具与准确性

摘要:本文介绍了 SCA 技术的基本原理、利用场景,业界 TOP SCA 商用工具的剖析阐明以及技术发展趋势;让读者对 SCA 技术有一个根本初步的理解,能更好的精确的利用 SCA 工具来发现应用软件中一些平安问题,从而帮忙晋升软件平安品质。

本文分享自华为云社区《漫谈 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. 厂商自行剖析;

点击关注,第一工夫理解华为云陈腐技术~

退出移动版