jjzjj

SCA 工具:开源安全威胁一手掌控

做网安的小王 2023-04-09 原文

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. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  5. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  6. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  7. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  8. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  9. ruby - 使用 Ruby 开发工具包将文件上传到 Amazon S3 - 2

    我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc

  10. ruby - 使写入文件线程安全 - 2

    我在一个ruby​​文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}

随机推荐