草庐IT

软件成分分析(SCA)完全指南

sealio 2023-03-28 原文

上一篇文章中,我们讨论了 DAST 的概念、重要性及其工作原理。那在开发过程中如何查找开源软件包中的漏洞并学习如何修复?本指南带你一起了解 SCA 工具及其最佳实践。

如今,绝大多数代码驱动的应用程序都包括开源组件。但是,开源代码可能包含一些致命的漏洞,比如 Log4Shell 漏洞。

软件成分分析(SCA)是查找开源软件包中的漏洞并学习如何修复它们的最佳选择,确保代码和应用程序处于安全状态。本指南将带你一起了解使用 SCA 工具时的最佳实践。

什么是软件成分分析 SCA?

软件成分分析 Software Compostition Analysis(SCA) 是一种用于管理开源组件应用安全的方法。通过 SCA,开发团队可以快速跟踪和分析引入项目的开源组件。同时,SCA 工具可以发现所有相关组件、支持库以及它们之间直接和间接依赖关系。SCA 工具还可以检测软件许可证、已弃用的依赖项以及漏洞和潜在威胁。扫描过程会生成物料清单 Bill of Materials(BOM),从而提供项目软件资产的完整清单。

SCA 本身并不新奇,但随着开源组件的普及和广泛应用,SCA 逐渐成为应用程序安全项目的关键部分,而 SCA 工具数量也随之激增。包括 DevSecOps 在内的现代软件开发实践中,SCA 需要便于开发人员使用,同时也能让安全团队能够有能力在软件开发生命周期 Software Development Life Cycle (SDLC)内引导和指导开发人员安全地进行开发。

为什么要使用 SCA?

开源组件俨然成为每个垂直领域软件的主要部分。而 SCA 工具有助于跟踪应用程序使用的开源组件,这从生产和安全角度来看都至关重要。

安全漏洞带来的惨痛代价

Gartner 预计超过70%的应用程序因使用开源组件而产生缺陷和漏洞。正如美国征信巨头 Equifax 的案例所表明,这些漏洞可能会给企业和组织带来灾难性后果。

在此事件中,Equifax 最初表示,网络犯罪分子利用 Apache Struts 的漏洞获取文件。随即,Equifax 在公告中确认,先前披露和修复的漏洞是就是在这次数据泄露事件中恶意攻击者所利用的漏洞,当时这个漏洞的评分有10 分之高。而 Equifax 在漏洞出现后没有及时修复,黑客利用其系统中未修复的 Apache Struts 漏洞发起攻击,导致1.43亿用户的信用记录被泄露,其中包括姓名、出生日期、地址,以及驾驶证号码等,这是有史以来规模最大的数据泄露案。最终,此案以 Equifax 支付7亿美元的赔偿金和罚款,索赔期限延长四年落幕。

Equifax 漏洞事件成为安全行业,尤其是应用程序安全的重要标志,因为它强调了控制措施的重要性,开源组件引入的风险应当得到管理。该漏洞也揭示了对速度的要求,企业需要能够快速,重复地查找和修复他们正在使用的开源软件包中的漏洞。而在 Tidelift 2022年开源供应链报告中显示,有57%的企业认为,即使有现代安全工具的助力,在使用开源进行开发时识别和解决安全漏洞仍然是一项巨大的挑战。

为什么 SCA 这么重要?

越来越多的应用程序由开源代码组成。据估计,开源代码占到了应用程序代码的90%。实际上应用程序是由不同的组件组成,企业需要保证所有的组件成分都是安全的,这样才能够有效地管理和降低风险。这也正是企业在确保代码库安全时所面临的挑战。

开源已成为软件领域的中流砥柱

软件正在吞噬世界,而开源在吞噬软件。在当今竞争激烈的市场中,开源能够帮助公司将服务数字化,让企业在市场中获得一定的竞争优势。

开源是怎样帮助企业实现服务数字化的呢?当企业在进行软件开发时,从零开始构建消耗大量的时间和资源。而使用提供完全相同功能的开源软件包能够有效降低这些成本。

开源本质上是高度灵活的。在社区的支持和严格审查下,开源通常很安全。同时,免费的开源软件和组件能够帮助企业和组织避免软件厂商的束缚。

在 Tidelift 最近的一项研究中,68%的受访者指出,节省资金和开发时间是企业鼓励使用开源组件进行应用程序开发的首要原因。而48%的受访者则表示,使用开源是为了提高应用程序开发和维护效率。开源的使用在新冠疫情之前就达到了顶峰,而疫情的出现加速了采用率。Gartner 预计,90% 的企业应用程序将依赖于开源的使用。

当今的软件供应链

开源是构成现代云原生应用程序的一部分。如今,应用程序更多是组装而非从零构建。除了开源软件包之外,应用程序还由专有代码、容器和基础设施组装而成,成为软件供应链的组成部分。而软件供应链中的这些组件和模块也是恶意攻击的潜在目标。利用软件供应链中的漏洞能对整个应用程序,进而扩大攻击面。

以 Octopus Scanner 恶意软件为例,它通过滥用构建过程影响整个供应链,经过该供应链产生的工件影响其他项目。受影响的项目可能会被许多不同的系统克隆、Fork 和使用,也就是所说的“套娃”攻击。而最近的 SolarWinds 攻击主要针对特定软件,这也进一步证明了现代软件供应链给企业和组织带来的风险越来越大。

开源 ≠ 安全

开源项目被认为使用起来更安全。毕竟当整个社区参与维护和开发项目时,问题常常被更快地识别和修复。这当然包括安全漏洞在内的各种 bug。话虽如此,这并不代表开源是没有风险的。

开源项目是公开的,且对所有人都是可见。当然也包括恶意攻击者。在其中发现并修复的任何漏洞都会暴露给潜在的攻击者。开源项目越受欢迎,该软件包的吸引力就越大,而对应事件的攻击影响也就越大。

当然企业使用开源组件需要自担风险,因为没有供应商通知他们缺陷,或者签署的合同让他们摆脱责任。

SCA 五大挑战

如前文所述,SCA 是应用程序安全方法和工具的总称,这些方法和工具通常在开发期间扫描应用程序(如 SAST),来定位应用程序中使用的开源组件,并随后识别安全漏洞和软件许可证问题。为了有效管理和降低这些开源组件带来的风险,企业将面临一系列与利用开源构建现代应用程序的方式相关的风险与挑战。

1. 代码的低可见性

将开源代码嵌入到应用程序代码库中的方式带来了巨大的可见性挑战。开发人员可能会直接在代码中使用许多开源包,而这些包又包含一些开发人员不了解的其他开源包。这些直接或可传递的依赖关系复杂多层,因此很难对应用程序实际使用的开源进行端到端的可见性。

而绝大多数安全漏洞都存在于复杂多层的关系中。Snyk State of Open Source Security 报告发现,超过86%的 .js 节点漏洞是在可传递依赖项中发现的。在 Java 和 Ruby 上也发现了类似的数字。这意味着应用程序中的绝大多数安全漏洞通常都能在开源代码中找到,开发人员甚至不知道他们使用了这些代码。

云原生应用程序以另一种方式利用开源,这同样可能会给企业带来代码可见性的难题。容器镜像可以由各种开源组件组成,这些组件还需要识别和测试漏洞。容器为开发人员提供的抽象层,从开发的角度来看是一个优势,从安全角度来看也是一个弱点。

2. 依赖关系错综复杂

为了准确识别应用程序正在使用的依赖关系以及它们引入的漏洞,需要深入了解每个生态系统如何处理依赖关系。开源包在安装时的解析、锁定文件、开发依赖关系 - 所有这些都是影响如何识别开源包中的漏洞并将决定后续修复步骤的要素。SCA 解决方案需要理解这些细微差别,以避免产生过多误报。

3. 漏洞数量持续增加

由于已识别的漏洞数量庞大,因此掩盖了漏洞的可见性及其对企业构成的风险。Snyk Intel 漏洞数据库增加了10000多个漏洞,也反映了漏洞数量的持续增长。

这些上升趋势会体现在已识别且需要注意的漏洞列表中,其中通常由数千个问题组成。鉴于开发和安全团队可支配的资源有限,如果没有一定的安全技能或嵌入高级安全专业知识的工具,就很难确定工作的优先级。基于通用漏洞评分系统 CVSS (Common Vulnerability Scoring System)是评估风险和确定工作优先级的常用方法,但这个方式存在一些固有的弱点需要在使用时特别注意。

4. 不易找到完善的漏洞数据库

有关已知漏洞的信息较为分散。国家漏洞数据库(NVD)通常用于接收有关漏洞的更新,但其他来源(如问题跟踪器、在线论坛、安全新闻通讯等)也能提供大量有关漏洞的安全情报。NVD 也可能无法及时添加漏洞。例如,NVD中92%的 JavaScript 漏洞都是事先添加到 Snyk 中的。及时了解漏洞很重要。

5. 安全检查降低开发速度

开发人员的开发节奏很快,而安全团队却很难赶上。由于需要更快、更频繁地交付代码,开发人员越来越多地使用到开源。缺乏人力和资源的安全团队试图在软件开发生命周期的各个不同阶段进行安全检查,但这实际上导致开发速度减慢。然而减慢的开发节奏可能对整体应用程序安全更不利,因此这些检查最终会被绕过或忽略。

因此,在安全模型中出现了 DevSecOps 和安全防护左移(Shift Left)的概念,即将安全责任转移到开发团队中,以确保对开发工作流的干扰最小,同时确保安全性。

SCA 的6个最佳实践

软件组合分析 (SCA) 工具是查找开源包中的漏洞并学习如何修复它们的最佳选择,保护代码和应用程序的运行状况。在使用 SCA 工具时,请参考以下六个最佳实践。

1. 使用开发者友好的 SCA 工具

开发人员忙于写代码。他们需要全面思考,高效设计,并快速迭代。因此对开发人员不友好的 SCA 工具会减慢开发节奏。而便于开发人员使用的 SCA 工具能够轻松设置和使用。它应该简单地与现有的开发工作流和工具集成,并尽早在软件开发生命周期(SDLC)中集成。

在确定工具后,也需要给开发人员普及 SCA 的重要性以及用处。让开发人员明确从开发初期就考虑安全问题,并将安全检查完善到他们的工作流程中。这将有效避免开发人员因为修复安全问题而重写代码所花费的时间。

2. 了解依赖关系

开源包有两种依赖关系:直接依赖和传递依赖。直接依赖项,就是你直接使用在项目里的开源包。而直接依赖项之一使用的开源包,便是传递(间接)依赖项了。

分析表明,开源软件包中80%的漏洞存在于传递依赖关系中。这意味着代码中的大多数漏洞都包含在未知且正在使用的(嵌套)依赖项中。而一个优秀的 SCA 工具,应该准确地检查代码中的所有依赖项,并且应该能够识别和检查传递依赖项。了解代码中使用的开源包的深度和复杂性,能够确保在各个级别都进行合适有效的漏洞检测。

3. 自动扫描与可操作修复

一个好的 SCA 工具可以为企业提供定期运行自动扫描的选项。利用这一点,企业可以来设置对代码的主动和持续监控。自动扫描能够提供有关漏洞所在位置以及如何修复漏洞的可操作警报。请认真对待 SCA 工具提供的修复漏洞的方向,采用该方向来应用修复程序。

4. 将 SCA 集成到 CI/CD 流水线中

使用SCA 工具并不意味着需要在开发—测试—生产过程中停滞下来。相反,企业应该将 SCA 扫描集成到 CI/CD 流水线中,以便识别和修复漏洞,并成为软件开发和构建过程中的一个功能部分。同时,这也可以帮助开发人员更轻松地适应代码安全作为其日常工作流程一部分。

5. 利用报告及物料清单

包括美国联邦政府在内的许多组织,在购买软件时都要求包含软件物料清单 (SBOM) 报告。在产品中提供详细的物料清单表明企业了解跟踪应用程序内每个组件的价值。有关安全扫描和修复的清晰报告也非常强大。提供有关企业的安全实践和修复的漏洞数量的详细报告,表明对软件安全的承诺和践行。

6. 加强安全策略,提高许可证合规性

清楚地了解开发人员使用的开源包,将有助于企业创建定义和实施安全准则的策略。企业可以使用通过漏洞扫描获得的知识,指导开发人员在使用开源软件包时考虑安全性。

跟踪开源代码本身对于应用程序安全很重要,同时跟踪开源许可证对于合规性也至关重要。开源许可证明确了开源软件包的法律使用条款,使用 SCA 工具能够帮助企业深入了解开源组件的许可条款和条件。在制定安全策略时,企业也需要鼓励开发人员在软件开发生命周期初期采用许可证合规性的规范。

SCA 的未来

鉴于开源的日益普及,以及最近违规和网络攻击的宣传,大众对 SCA 的关注热度逐步上升。开源在推动数字化转型中所扮演着不可忽视的角色,而这个趋势在近期几乎不会发生改变。

企业使用开源来帮助他们在各自的市场中拥有竞争优势。同时,人们逐渐意识到,他们必须控制开源的使用来管理和减少其伴随的风险。当 SCA 工具能够满足我们所提到的这些关键需求,将能成功帮助企业在市场中更好地竞争。

参考链接:
Equifax 信息泄露案落幕
https://www.secrss.com/articles/39075

TideLift: 2020 managed opensource survey
https://tidelift.com/subscription/2020-managed-open-source-survey

有关软件成分分析(SCA)完全指南的更多相关文章

  1. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  2. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  3. ruby-on-rails - Ruby on Rails 3 中的类方法——我完全迷路了! - 2

    背景here.在上面的链接中,给出了以下示例:classauthor.id)endend除了这种语法对于像我这样的初学者来说很陌生——我一直认为类方法是用defself.my_class_method定义的——我在哪里可以找到关于类的文档RubyonRails中的方法?据我所知,类方法总是在类本身(MyClass.my_class_method)上调用,但如果R​​ails中的类方法是可链接的,似乎必须进行其他操作在这里!编辑:我想我通过对类方法的语法发表评论有点被骗了。我真的想问Rails如何使类方法可链接—我了解方法链接的工作原理,但不知道Rails如何允许您链接类方法而无需实际返

  4. ruby - 如何使用私钥加密完全加密 Ruby 中的数据? - 2

    首先,关于我们系统的一些信息,它基本上是建筑行业的电子招标解决方案。所以:列表项我们的系统有多家公司每个公司都有多个用户每家公司可以创建多个拍卖然后其他公司可以为可用的拍卖提交他们的出价。一个出价包含数百或数千个单独的项目,我们只需要加密这些记录的“价格”部分。我们面临的问题是,我们的大客户不希望我们知道投标价格,至少在投标过程中是这样,这是完全可以理解的。现在,我们只是通过对称加密对价格进行加密,因此即使价格在数据库中有效加密,他们担心的是我们拥有解密价格的key。因此,我们正在研究某种形式的公钥加密系统。以下是我们对解决方案的初步想法:当一家公司注册时,我们会使用OpenSSL为其

  5. Ruby 和指南针路径与 yeoman 项目 - 2

    我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

  6. ruby-on-rails - ruby 真的是一种完全面向对象的语言吗? - 2

    Ruby是完全面向对象的语言。在ruby​​中,一切都是对象,因此属于某个类。例如5属于Objectclass1.9.3p194:001>5.class=>Fixnum1.9.3p194:002>5.class.superclass=>Integer1.9.3p194:003>5.class.superclass.superclass=>Numeric1.9.3p194:005>5.class.superclass.superclass.superclass=>Object1.9.3p194:006>5.class.superclass.superclass.superclass.su

  7. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  8. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  9. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  10. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

随机推荐