科技云报道:软件供应链安全如此重要,但为什么难以解决?

news2024/11/26 2:36:21

科技云报道原创。

软件供应链安全如今已经成了一个世界性难题。从2021年底Apache Log4j“核弹级”风险爆发,时至今日影响仍然存在,保障软件供应链安全已成为业界关注焦点。

但近2年时间过去了,软件供应链安全问题似乎并没有得以缓解,安全事件层出不穷,开源漏洞风险与日俱增。

Venafi对来自全球不同企业的1000位CIO调研显示,其中82%的人表示他们的组织容易受到针对软件供应链的网络攻击。

奇安信《2023中国软件供应链安全分析报告》显示,开源项目维护者对安全问题的重视度和修复积极性较低。

同时,不活跃(超过一年未更新发布过版本)的开源软件,一旦出现安全漏洞,难以得到及时修复。

为什么人人都知道软件供应链安全问题很重要,却难以解决?
在这里插入图片描述

软件供应链安全与开源息息相关

要搞清楚软件供应链安全的症结,先得厘清其涵义。

基于中国信通院的定义,软件供应链安全是指“软件供应链上软件设计与开发的各个阶段中来自本身的编码过程、工具、设备或供应链上游的代码、模块和服务的安全,以及软件交付渠道及使用过程安全的总和。”

这里是把软件供应链安全分为了两部分:一是软件自身的供应链安全,二是软件供应链交界面的安全管理。

软件自身的供应链,可以简单理解为应用的代码来源,应用的代码来源主要有两个部分:一个是产品研发自己写的代码,另一个就是引入的第三方的开源组件代码。针对这两者的安全检测也是我们常说的开发安全。

软件供应链交接界面,针对的是开源软件或者商业采购第三方软件。

这部分的供应链安全管理,主要是在交付和使用过程中进行相关的准入检测,并形成标准化可溯源的软件物料清单。

事实上,软件供应链的安全的重要性提升和开源的大趋势是息息相关的。

软件开源化的趋势是一个累积的过程,十几年的时间经历了一个量变到质变的阶段,现在全球的开发者都在依赖开源组件来做应用的研发,绝大多数现代代码库都包含开源组件。

但是开源的繁荣本身就建立在一系列自由许可协议和免责条款上——其中也包括风险免责,“使用者风险自负”是开源社区的共识。

近年来,开源软件自身的安全状况持续下滑,企业软件开发中因使用开源软件而引入安全风险的状况更加糟糕,例如:危险开源组件的使用、自研代码缺陷漏洞引入、容器镜像漏洞引入等,这些风险导致软件系统的整体安全防护难度越来越大。

因此,开源软件供应链安全风险治理任重道远。

直面软件供应链安全治理挑战

尽管业界已经普遍认识到软件供应链安全的重要性,但治理起来依然面临重重挑战。

腾讯安全开发安全专家刘天勇表示,从技术角度看,软件供应链安全的治理的难点可以分成三部分:

一是检测门槛高。

开源组件的来源复杂,依靠单一的技术手段难以做到全面覆盖。

市面上常见的开源组件检测技术是基于源代码的SCA分析,但基于源码的SCA难以覆盖软件供应链交接界面的第三方软件成品。

二是修复成本高。

在企业开始做开源组件的风险治理的时候,存量业务往往会发现大量的漏洞,但这些业务大多数处于上线运营的阶段,修复的过程对研发资源是一个较大的消耗,同时对安全团队来说也是较大的推动阻力。

三是攻击影响范围广。

第三方开源组件的使用,间接扩大了软件的受攻击面,针对上游供应链环节的漏洞挖掘和恶意利用,能够快速覆盖大量的下游软件,同时相关的攻击具有较高的隐蔽性,常用的安全检测手段难以进行全面的防御,目前软件供应链攻击已经成为攻防演练中非常常用的攻击手段。

此外,供应商对产品安全性的重视程度不足、开发人员安全开发能力有限等,导致第三方供应商产品安全质量参差不齐,也加大了软件供应链安全治理的难度。

那么,企业该如何应对这些挑战?在技术上是否有对应的解决手段?

SCA和SBOM

当前,SCA(Software Composition Analysis)是目前业界主要的解决开源组件风险检测的手段。

SCA是一类工具的统称,可以通过分析源代码识别其中引用的开源组件信息(名称、版本、校验值)、组件漏洞、开源协议等信息,从而帮助开发人员和安全人员快速对于企业代码中的开源风险进行识别。

随着供应链安全开始获得更多关注,SCA工具内置了对与跟踪组件相关的漏洞和安全风险的更深入分析和管理,并成为企业生成SBOM和管理其开源使用的主要方法之一。

Linux基金会最近的一项调查发现,SBOM的意识度很高,目前有47%的IT供应商、服务提供商和受监管的行业在使用SBOM,88%的受访者预计将在2023年使用SBOM。

代码扫描和渗透测试

保护软件供应链的核心是一个应用程序安全问题,因此传统的应用程序安全代码扫描工具将在这个解决方案堆栈中发挥重要作用。

静态应用程序安全测试(SAST)、动态应用程序安全测试(DAST)、交互式应用程序安全测试 (IAST)和运行时应用程序扫描保护(RASP)工具,以及明智地使用渗透测试,可以帮助企业测试他们自己的内部代码,并提供对第三方代码的进一步检查,以作为应对风险的后盾。

相比于SCA和SBOM产品依赖于已知的、先前发现的漏洞,彻底的应用程序渗透评估可能会在检查第三方库和框架时识别出脆弱的代码使用情况,而这些代码以前可能在其他地方没有报告过。

此外,共享机密扫描和管理也正在从一个独立的工具类别快速转变为一个功能,该功能正在融入软件供应链安全工具的各个方面。

这是因为在开发和实际环境中,针对嵌入在源代码、配置文件和基础设施代码中的机密数据的网络攻击活动仍然猖獗,因此迫切需要解决这个问题。

此外,依赖关系管理和分析、受信任的存储库和注册中心、安全代码签名、CI/ CD管道安全性、第三方风险管理平台、IaC安全和CNAPP,都是软件供应链安全治理要重点关注的对象。

正如Gartner公司的高级主管兼应用安全分析师Dale Gardner所说:“当人们关注供应链安全时,他们关注的是使用SCA、SBOM等工具,这些都是解决方案中非常重要的部分,但它们实际上只是一种不全面的解决方案。”

软件供应链安全治理并非纯粹的技术问题

事实上,软件供应链安全问题是人、流程和知识的问题,而非纯粹的技术问题。

在解决软件研发过程的供应链安全问题时,需要贴合SDLC(软件开发生命周期)考虑供应链安全风险。

为此,Goolge提出了SLSA(Supply-chain Levels for Software Artifacts)框架,微软提出了SCIM(Supply Chain Integrity Model)框架以及CNCF(云原生计算基金会)的软件供应链最佳实践,三种框架都强调对于源代码、第三方依赖、构建系统、制品、发布、部署的安全性。

以SLSA框架为例,SLSA是一个标准清单和控制框架,用于缓解软件项目中的代码和软件包的供应链风险。

SLSA框架从三个方面评估软件供应链的安全等级,分别是源码、构建和依赖,并可划分为4个级别:

Level 1:构建过程是完全脚本化或自动化,且能够基于结果识别来源源码;

Level 2:使用有身份认证能力的版本控制和托管服务,确保构建来源是可信的;

Level 3:源码和构建平台符合可审计标准,且有成品完整性保证;

Level 4:所有变更均有双人评审,且有封闭的、可重复的构建过程。

以Level 4等级要求为例,在软件构建过程中企业需要实践以下4点:可验证的版本控制、双人评审、安全的自动化构建流程/环境、可重复构建的流程。

结语

软件供应链上每一个环节的安全问题,都有可能成为黑客攻击的切入口。千里之堤毁于蚁穴,把住软件供应链每个关卡,莫让小小漏洞成为洪水猛兽。

【关于科技云报道】

专注于原创的企业级内容行家——科技云报道。成立于2015年,是前沿企业级IT领域Top10媒体。获工信部权威认可,可信云、全球云计算大会官方指定传播媒体之一。深入原创报道云计算、大数据、人工智能、区块链等领域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/941128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务事务管理(Dubbo)

Seata 是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 一、示例架构说明 可在此查看本示例完整代码地址&#x…

FreeSWITCH 1.10.10 简单图形化界面6 - 配置讯时网关落地

FreeSWITCH 1.10.10 简单图形化界面6 - 配置讯时网关落地 0、 界面预览1、 创建一个话务台2、 创建PBX SIP中继并设置呼入权限3、 设置呼叫权限4、 设置分机呼出权限5、 设置FXO 网关相关信息6、 设置FXO网关呼叫路由(呼入及呼出)7、 查看SIP中继状态 0、…

研磨设计模式day15策略模式

场景 问题描述 经常会有这样的需要,在不同的时候,要使用不同的计算方式。 解决方案 策略模式 定义: 解决思路:

HEGERLS智能四向穿梭车是如何解决机械制造领域内SKU种类复杂且量多的问题?

伴随着电子商务和智能制造技术的快速发展,对于自动化立体仓库系统、密集存储系统、自动输送系统、自动识别系统、无线通讯系统、条码扫描、手持终端及其系统集成的需求急剧增加,物流装备系统密集化、自动化、智能化、绿色环保等技术特征日益明显。密集存…

简单的springboot应用部署后内存占用量过大问题排查

1.问题背景 需要部署一个演示环境。所有组件都要部署到一台服务器,采用Docker容器部署,发现多个简单的springboot应用占用内存高达2G,后续的应用因为内存不足就部署不了了。排查下内存占用大的原因: docker stats命令&#xff1a…

ucharts修改ToolTip边框阴影文字居中

ucharts修改ToolTip边框阴影文字居中 效果 Demo 链接: https://pan.baidu.com/s/1k0FxmBPKAHlHksFR3YQSlQ 提取码:ytv7

在vue.config.js中配置文件路径代理名

今天在公司项目中看到一个非常有趣的导入路径 crud 先是一蒙 这是个啥 突然想起一个被自己遗漏的知识点 在vue.config.js中配置路径指向 这里 我们随便找一个vue项目 在src下找到 components 目录 如果没有就创建一个 下面找到HelloWorld.vue 如果没有也是自己创建一个就好 然…

LabVIEW开发异步电动机定子故障在线诊断系统

LabVIEW开发异步电动机定子故障在线诊断系统 三相感应电机(IM)因其简单性、坚固性和可靠性而广泛用于许多工业应用。然而,对于需要高可靠性的特定领域,如汽车、航空航天、军事和核能,使用经典的三相IM似乎不再适用&am…

JavaScript函数复习

这节课我们来通过我们之前学过的函数来逐渐完善! const yearsUntilRetiremen (birthyear, firstName) > {const age 2037 - birthyear;const retirement 65 - age;return ${firstName}还有${retirement}年就退休了!;}这个是我们之前写的代码&…

循环结构(个人学习笔记黑马学习)

while循环语句 在屏幕中打印0~9这十个数字 #include <iostream> using namespace std;int main() {int i 0;while (i < 10) {cout << i << endl;i;}system("pause");return 0; } 练习案例: 猜数字 案例描述:系统随机生成一个1到100之间的数字&…

数字电路-二进制学习

什么是二进制&#xff1f; 数字电路 中 只有 高电平 和低电平 就是 1 和0 进位规则是“逢二进一”&#xff0c;借位规则是“借一当二”。 二进制、八进制 、十进制、十六进制 二进制 有两个数来表示 &#xff1a; 0、1 八进制 有8个数来表示 &#xff1a; 0、1、2、3、4、…

ASEMI肖特基模块MBR400100CT功能应用介绍

编辑-Z 肖特基模块MBR400100CT是一款高性能半导体器件&#xff0c;常用于电源和开关电路中。该模块采用肖特基二极管技术&#xff0c;具有低导通压降和高速开关特性&#xff0c;适合在高频率和高温环境下使用。 肖特基二极管是基于金属-半导体接触的特殊结构的二极管。与传统P…

Go几种读取配置文件的方式

比较有名的方案有 使用viper管理配置[1] 支持多种配置文件格式&#xff0c;包括 JSON,TOML,YAML,HECL,envfile&#xff0c;甚至还包括Java properties 支持为配置项设置默认值 可以通过命令行参数覆盖指定的配置项 支持参数别名 viper[2]按照这个优先级&#xff08;从高到低&am…

博客系统后台前端UI设计

效果展示 API编写 index.js import axios from "./request"const fastdfs {delete: file/fastdfs/delete } const permission {search: "/sys/permission/search",add: "/sys/permission/add",update: "/sys/permission/update",d…

适合新手程序员的体质,一键代码审查轻松搞定

很多刚入行的程序员会面临一个问题&#xff0c;写完代码进行运行会出现很多bug但是不能准确的定位问题的所在&#xff0c;很多人对于自己的代码结构和层次也摸不着头脑&#xff0c;为了提高代码的质量经常会消耗大量的人力物力来做这件事情。 在&#xff08;软件工程的事实与谬…

阻塞io读取内核驱动变量值

应用程序&#xff1a; #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h> #include "head.…

Spring MVC 四:Context层级

这一节我们来回答上篇文章中避而不谈的有关什么是RootApplicationContext的问题。 这就需要引入Spring MVC的有关Context Hierarchy的问题。Context Hierarchy意思就是Context层级&#xff0c;既然说到Context层级&#xff0c;说明在Spring MVC项目中&#xff0c;可能存在不止…

Linux学习之DNS服务的原理

DNS服务一些理论 域名系统&#xff08;Domain Name System&#xff0c;DNS&#xff09;是互联网的核心应用服务&#xff0c;可以通过IP地址查询到域名&#xff0c;也可以通过域名查询到IP地址。 FQDN&#xff08;Full Qualified Domain Name&#xff09;是完全限定域名&#xf…

解决FreeRTOS程序跑不起来,打印调试却提示“Error:..\FreeRTOS\port\RVDS\ARM_CM3\port.c,244“的方法

前言 今天来分享一个不会造成程序编译报错&#xff0c;但会使程序一直跑不起来&#xff0c;并且通过调试会发现有输出错误提示的错误例子分析&#xff0c;话不多说&#xff0c;我们就直接开始分析~ 首先&#xff0c;我们说过这个例子在编译时候没有明示的错误提示&#xff0c…

Excel·VBA二维数组组合函数、组合求和

目录 1&#xff0c;二维数组组合函数举例 2&#xff0c;组合求和 之前的文章《ExcelVBA数组组合函数、组合求和》和《ExcelVBA数组排列函数》&#xff0c;都是针对一维数组的组合和排列 二维数组组合&#xff1a;对一个m行*n列的二维数组&#xff0c;每行抽取1个元素进行组合&a…