如何排查软件中的使用的开源组件清单?

软件中为什么会依赖开源组件?

在软件开发的过程中,我们往往会使用一些第三方或者开源的组件,来提供一些基础的功能或者服务,从而简化开发工作,提高效率和质量。例如,我们可能会使用 Apache Commons、Spring Boot、jQuery 等开源组件来实现一些常见的操作,如字符串处理、Web 开发、DOM 操作等。

使用开源组件的好处是显而易见的,它们可以帮助我们节省时间和成本,提供更多的选择和灵活性,以及获取最新的技术和创新。根据一项调查,超过 90% 的组织在他们的应用程序中使用了开源组件。这意味着现代的应用程序中,开源代码的比例已经超过了自定义代码。

为什么要排查软件中使用了哪些开源组件?

虽然使用开源组件有很多好处,但是它们也带来了一些风险和挑战。其中最主要的一个就是安全风险。由于开源组件的源代码是公开的,任何人都可以查看和修改它们。这就给了攻击者一个机会,他们可以利用开源组件中存在的漏洞,或者向其中植入恶意代码,来对使用这些组件的软件进行攻击。

根据另一项调查,78% 的代码库至少有一个漏洞,86% 的代码库中被调用的组件不是最新版本。这说明了很多软件在使用开源组件时,并没有及时更新和修复它们。如果不及时排查和解决这些问题,就可能导致严重的后果,如数据泄露、系统崩溃、法律诉讼等。

除了安全风险之外,还有一些其他的风险和挑战,比如:

  • 许可证风险:不同的开源组件可能有不同的许可证协议,有些许可证可能会对软件的分发、修改、商业化等方面有一些限制或者要求。如果不遵守这些许可证协议,就可能面临法律纠纷或者声誉损失。
  • 兼容性风险:不同的开源组件可能有不同的依赖关系、版本要求、API 接口等。如果不注意这些差异和变化,就可能导致软件出现错误或者无法正常运行。
  • 维护性风险:开源组件可能会随着时间而变化或者停止更新。如果不及时跟进这些变化或者寻找替代方案,就可能导致软件出现过时或者无法维护的问题。
如何排查软件中的使用的开源组件清单?

因此,为了保证软件的安全、合规、稳定和可持续发展,我们需要对软件中使用了哪些开源组件进行有效地排查,并及时采取相应的措施。

如何排查软件中使用了哪些开源组件及具体版本?

要排查软件中使用了哪些开源组件及具体版本,我们需要有一个准确和完整的组件清单(SBOM),也就是一个包含了所有第三方和开源组件及其相关信息(如名称、版本、许可证、位置、依赖关系等)的列表。

有了这个清单,我们就可以对软件中的每个组件进行分析和评估,比如:

  • 检查组件是否有已知的漏洞或者安全风险,如果有,就需要及时更新或者替换组件。
  • 检查组件是否有合适的许可证协议,如果没有,就需要避免使用或者获取授权。
  • 检查组件是否是最新的版本,如果不是,就需要考虑是否有必要升级或者降级组件。
  • 检查组件是否有冲突或者不兼容的情况,如果有,就需要解决或者调整组件。

那么,如何获取这个组件清单呢?有以下几种常见的方法:

  • 手动检查:这是最简单也最不可靠的方法,就是通过人工的方式,查看软件中使用了哪些组件及其相关信息。这种方法的缺点是非常耗时和容易出错,而且很难保持清单的更新和完整。
  • 解析包管理文件:这是一种比较常用也比较有效的方法,就是通过解析软件中使用的包管理工具(如 Maven, NPM, Pip 等)生成的包描述文件(如 pom.xml, package.json, requirements.txt 等),来获取组件的信息。这种方法的优点是比较快速和准确,而且可以覆盖直接和间接的依赖。但是这种方法也有一些局限性,比如:
    • 不同的包管理工具可能有不同的格式和规范,需要进行转换或者适配。
    • 一些组件可能没有使用包管理工具来管理,而是直接下载或者复制到软件中,这样就无法通过包描述文件来获取它们的信息。
    • 一些组件可能在运行时才动态加载或者生成,而不是在编译时就确定,这样就无法通过包描述文件来获取它们的信息。
  • 构建软件项目:这是一种比较全面也比较复杂的方法,就是通过构建软件项目的过程,来获取组件的信息。这种方法的优点是可以覆盖所有类型和来源的组件,而且可以获取更多的细节和元数据。但是这种方法也有一些挑战,比如:
    • 需要配置和运行构建环境和工具,可能会遇到一些技术或者资源上的困难。
    • 需要处理构建过程中可能出现的错误或者异常,可能会影响构建结果和效率。
    • 需要分析和提取构建过程中产生的大量数据和日志,可能会增加复杂度和开销。

有什么常用的工具可以自动生成软件依赖的开源组件列表?

根据上面介绍的方法,我们可以看出,排查软件中使用了哪些开源组件及具体版本并不是一件容易的事情。幸运的是,有一些专业的工具可以帮助我们自动生成软件依赖的开源组件列表,并提供一些额外的功能和服务,来帮助我们管理和优化我们的开源使用。下面介绍一些常用的工具:

  • 墨菲安全(苏木):这是一个专业的软件供应链安全管理平台,它可以帮助我们快速、准确、全面地分析我们的代码中使用的所有开源组件,发现并修复其中存在的安全风险和合规问题。它的主要特点和优势有:
    • 快速接入:它可以在 3 分钟内快速配置接入超过十种开发工具,如 IDE, GitLab, GitHub, Jenkins 等,无缝集成到我们的开发流程中,一键修复安全漏洞。
    • 深度分析:它可以持续地检测我们的代码中使用的所有开源组件,并与一个包含超过 300 万个开源库的数据库进行对比。它可以生成详细的 SBOM 清单,包括依赖、许可证、位置、版本、漏洞和合规性等信息。
    • 智能修复:它可以提供一些智能的建议和修复方案,来帮助我们优化我们的开源使用。它可以自动更新或者替换有风险的组件,避免或者解决许可证冲突,提升代码质量和安全性。
    • 专业知识库:它拥有全球领先的专业漏洞知识库,包括独家的 0day 漏洞及投毒情报,超过 25 个专业的漏洞知识库字段。它可以及时有效地提供漏洞预警和通报,帮助我们防患于未然。

工具官网:https://www.murphysec.com

  • OSS Review Toolkit (ORT):这是一个开源的软件策略自动化和编排工具集,可以帮助我们以战略、安全和高效的方式管理我们的(开源)软件依赖项。它可以生成 CycloneDX, SPDX SBOMs 或者自定义格式 的开源软件归属文档(Software Bill of Materials, SBOM),并提供一些分析和报告功能,如许可证合规性检查、漏洞扫描、策略评估等。它支持多种语言和包管理工具,如 Java, Python, NPM, Gradle 等,并可以与其他工具集成,如 Jenkins, GitHub Actions 等。

工具官网:https://github.com/oss-review-toolkit/ort

  • Mend:这是一个专业的开源管理平台,可以持续地检测我们的代码中使用的所有开源组件,并与一个包含超过 300 万个开源库的数据库进行对比。它可以一键生成一个详细的开源组件清单报告,包括依赖、许可证、位置、版本、漏洞和合规性等信息。它还可以提供一些智能的建议和修复方案,来帮助我们优化我们的开源使用。它支持多种语言和包管理工具,如 Java, JavaScript, Ruby, PHP 等,并可以与其他工具集成,如 GitHub, GitLab, Bitbucket 等。

工具官网:https://www.mend.io/

以上就是一些常用的工具可以自动生成软件依赖的开源组件列表。当然,还有其他一些工具,如 Snyk, Black Duck, WhiteSource 等,也可以提供类似或者更多的功能和服务。我们可以根据我们的需求和偏好,选择合适的工具来帮助我们排查软件中的开源组件使用情况。

(0)
上一篇 2023年8月9日 下午7:15
下一篇 2023年8月9日 下午7:29

相关推荐

  • 中路对线发现正在攻防演练中投毒的红队大佬

    背景 2023年8月14日晚,墨菲安全实验室发布《首起针对国内金融企业的开源组件投毒攻击事件》NPM投毒事件分析文章,紧接着我们在8月17日监控到一个新的npm投毒组件包 hreport-preview,该投毒组件用来下载木马文件的域名地址竟然是 img.murphysec-nb.love(如下图1),且该域名注册时间就是8月14号,投毒者使用的注册邮箱同样…

    2023年8月18日
    0
  • 黑客在攻击中使用开源的 Merlin 后渗透工具包

    乌克兰警告称,许多针对国家机构的攻击正利用名为“Merlin”的开源后期渗透及命令控制框架发动。 Merlin是一个基于Go的跨平台渗透工具,可以在GitHub上免费下载。它为安全行业专家提供了详尽的操作文档,帮助他们进行红队模拟攻击测试。 这个工具包含了诸多功能,不仅帮助红队专家在网络中找到漏洞,还可能被网络攻击者利用来入侵和控制网络。 然而,正如我们在S…

    2023年8月11日
    0
  • CSO 们关注的软件供应链安全十个关键问题

    写在前面 自从和几个小伙伴一起创办墨菲安全以来,有一年半多的时间了,创业对于我来说,很有意思的一个地方,就是有机会可以和各行各业很多非常有意思的人一起交流,在这个交流的过程中能够不断的提升自己的认知,以我自己创业之前的经历来说,我接触的大多都是互联网和互联网安全这个圈子的人,而现在有很多机会去接触到更多行业的客户和合作伙伴,可以有机会去了解不同行业的业务、安…

    2023年8月9日
    0
  • 软件供应链风险管理:2023年指南

    软件供应链风险管理(SSCRM)是指识别、评估和减轻与集成到软件产品中的第三方软件组件和服务相关的风险的过程。SSCRM包括了解这些组件可能产生的潜在漏洞,并采取措施减少对软件系统或最终用户的利用或损害的风险。 为什么软件供应链攻击越来越普遍 由于几个因素,软件供应链攻击变得越来越普遍: 供应链安全和DevSecOps DevSecOps是一种将安全性整合到…

    2023年8月31日
    0
  • 企业开展开源安全治理必要性及可行性详细分析

    背景 开源软件安全威胁是近几年企业安全面临的主要威胁,也是企业应用安全方向讨论的热门话题,但是由于是新的需求新的方向,很多企业在观望,当前开展这项工作是否已经成熟,项目成功率如何? 当新鲜事物产生时,首先我们应该积极的态度去拥抱它,但是它是不是真的值得我们投入(包括当下工作和未来个人技术成长),就需要客观的分析其必要性,同时结合自身情况了解它的可行性。 开源…

    2024年3月18日
    0