「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具

2024-04-19 00:44

本文主要是介绍「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在现代的 DevOps 或 DevSecOps 环境中,SCA 激发了“左移”范式的采用。提早进行持续的 SCA 测试,使开发人员和安全团队能够在不影响安全性和质量的情况下提高生产力。前期在博文《「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐》中介绍了SCA的产生背景、技术原理及主流检测工具,本文结合博主对Black Duck工具的深度使用来展开介绍业界排名 Top 1 的Black Duck工具。

1. 工具的发展历程

Black Duck是一款知名的软件成分分析(SCA)工具,它帮助开发人员和组织识别其软件项目中的开源组件,并管理这些组件带来的法律和安全性风险。

在这里插入图片描述

Black Duck Software成立于2002年,总部位于美国马萨诸塞州。该公司专注于提供开源软件管理和安全解决方案。Black Duck的成立初衷是为了帮助企业和开发人员更好地管理日益增长的开源软件使用,特别是在合规性和安全性方面。

在2017年,Black Duck被Synopsys以6.65亿美元收购,成为Synopsys软件完整性集团的一部分。
在这里插入图片描述

细心的读者可以从上图中发现,大家耳熟能详的静态代码扫描工具Coverity、Codenomicon旗下的Fuzz测试工具DEFENSICS都早已被Synopsys并购。

此次收购加强了Synopsys在软件安全解决方案领域领导者的地位,并扩展了其产品线。


在这里插入图片描述

2. 工具原理

SCA 工具可检查包管理器、清单文件、源代码、二进制文件、容器镜像等。识别出的开源会被编制成物料清单 (BOM),然后与各种数据库进行比较,包括国家漏洞数据库 (NVD)。

这些数据库包含有关已知和常见漏洞的信息。NVD 是美国政府的漏洞存储库。Synopsys 拥有自己的内部漏洞数据库 Black Duck 知识库,这是业内最全面的开源项目、许可证和安全信息数据库。

SCA 工具还可以将 BOM 与其他(通常是商用性)数据库进行比较,以发现代码相关许可证并分析总体代码质量(版本控制、历史贡献等)。通过将 BOM 与数据库进行比较,安全团队能够识别关键的安全和法律漏洞,并迅速采取措施加以修复。

3. 工具能力

Black Duck提供一系列依赖关系发现技术,帮助用户清楚了解应用程序构成,以便他们能够有效评估和管理风险,除此之外,Black Duck提供了一系列功能,以支持开发团队在整个软件开发生命周期中管理开源组件:

  • 依赖识别:自动识别软件中的开源组件和依赖关系,包括直接和间接依赖。
  • 二进制分析:它为软件工件提供构建后的分析,以检测恶意软件的存在,例如可疑文件、潜在不需要的应用程序和可疑文件结构。扫描报告会呈现二进制文件中包含公网IP,邮箱,密钥等信息,多维度帮忙用户识别文件风险。
  • 代码片断分析:片段分析将代码片段(例如由AI编码工具包含的代码片段)与它们的原始开源项目进行匹配,以识别通过片断方式引用开源代码的情况,当前很多SCA工具还不具备的能力,如国内知名开源的OpenSCA工具,其开源版本仅能通过包管理器配置文件来解析依赖,无法识别片断引入的场景。
  • CodePrint分析:CodePrint分析是一种方法,它可以检测源文件和目录中的依赖关系,即使这些依赖关系没有被包管理器明确声明。这很重要,因为并非所有代码都包括关于其依赖关系的正确元数据,有些项目可能会在没有使用包管理器的情况下手动包含文件。这种分析有助于确保所有使用的组件都被识别并得到适当管理。
  • 容器扫描:容器扫描是一种安全和合规的实践,涉及分析容器镜像以识别开源依赖项。这是逐层进行的,以确保容器中的所有组件都被计入。通过结合二进制分析(查看编译后的组件)和CodePrint分析,这个过程可以识别已声明和未声明的依赖项,这对于维护安全且合规的容器化环境至关重要。
  • C/C++扫描:C/C++扫描是一种专门的分析技术,可以准确识别C/C++应用程序中使用的开源依赖项和库。这一点很重要,因为C/C++程序通常不使用包管理器,并且依赖项可以直接包含在源代码中。这种扫描技术帮助开发者和组织管理这些依赖项,跟踪许可,并确保软件符合开源许可和安全政策。
  • 许可证合规性管理:分析组件的许可证,确保所有开源组件的使用符合其许可证要求,并避免潜在的许可证冲突,并提供许可证兼容性建议,可自动生成许可证报告。
  • 安全漏洞扫描:持续监控开源组件的安全漏洞,并与国家漏洞数据库(NVD)等资源保持同步。
  • 风险评估:评估开源组件的安全性和合规性风险,帮助用户确定哪些组件需要优先关注。
  • 策略管理:允许用户定义和执行关于组件使用的策略,例如禁止使用某些高风险的组件。
  • 版本升级建议:提供组件升级建议,帮助用户迁移到更安全的版本。
  • 集成支持:与主流的IDE、CI/CD工具和源代码管理系统集成,以便在开发流程中无缝地执行SCA。结合策略管理功能可防止开发团队使用风险组件,并在发布流程中包含这些组件时阻止构建过程。
  • 知识库:提供庞大的开源组件知识库,帮助用户了解组件的详细信息。但是当前知识库是SaaS服务方式提供,不支持私有化部署。

若想了解更多具体细节,可以参阅如下文档:

  • Black Duck手册.pdf (访问密码: 6277)
  • Black Duck 二进制分析手册.pdf (访问密码: 6277)
  • Black Duck 2024年开源软件安全分析报告.pdf (访问密码: 6277)
  • Gartner 应用安全测试魔法四象限.pdf (访问密码: 6277)

4. 工具优缺点

工具优点

  • 多语言支持
  • 多文件格式支持
  • 同时支持源码(源码工程、源码文件、源码片断)SCA、二进制(构建后的软件、固件、安装包)SCA,组件识别能力优秀
  • 知识库全面,并且拥有自己的漏洞数据源,漏洞来自于BDSA,由Synopsysy网络安全研究中心提供和维护

工具缺点

  • 知识库不支持离线部署,需要访问SaaS服务
  • 工具来自美国,对于有国产化诉求的企业或组织不适合
  • 商务较高,让多数中小企业望而却步

5. 参考

[1] Strategic Acquisitions
[2] Software Composition Analysis Language, Package Manager, and File Suppor

这篇关于「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916222

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端