SCA技术进阶系列(四):DSDX SBOM供应链安全应用实践

一、SBOM的发展趋势

数字时代,软件已经成为维持生产生活正常运行的必备要素之一。随着容器、中间件、微服务、 DevOps等技术理念的演进,软件行业快速发展,但同时带来软件设计开发复杂度不断提升,软件供应链愈发复杂,软件整体透明度下降,软件供应链安全防护难度不断加大。

由于缺少对软件资产的最小要素管理,每当环境中出现新的漏洞时,我们通常需要花费大量时间和精力来检测环境中运行的应用程序和服务的真正影响。如果我们可以枚举我们使用和生产的所有软件组件,并且轻松地分发和使用它,那么就可以极大地提高对软件资产的精细管理,以及对突发漏洞的影响面快速定位分析。

SBOM可以帮助我们解决以上问题。

开源社区十多年前开源社区就注意到创建SBOM的必要性,2010年SPDX开放标准开始作为解决该问题的初步方案。

图一 数字供应链下愈发复杂的应用资产构成

SBOM是为了提升供应链透明度而记录其软件组成等信息的工程文件,对降低供应链维护和保障的工作量及难度意义重大。随着软件供应链安全成为关注焦点,特别是2021年美行政令EO14028要求包括NIST在内的多个机构通过与软件供应链的安全性和完整性相关的各种举措来增强网络安全,SBOM的推广和落地也变得尤为迫切。

理想情况下,产品的供应商应该告诉我们每个组件,并以数字签名文档的形式提供,以防止篡改或修改。但是SBOM在使用推广过程中并不顺利,特别是在国内没有自主协议框架的情况下。多数情况下,上游每个组件生成 SBOM 的最佳方法仍然不统一,这会导致SBOM不完整或不准确;更不用说不同的现有格式(CycloneDX、SPDX、SWID)和缺乏标准化的分发机制,这使得 SBOM 的消费变得相当困难。

除了SBOM协议不统一、数据字段不一致以外,大多厂商只有在生产环节生成SBOM,没有分发和使用,更无法在供应链中形成链接的链条。SBOM未来的方向是分发、验证、集中数据和使用数据。

二、SBOM主流协议的风险

SBOM应该是机器可读的格式,同时也是易于人类可读,国外主流的SBOM格式有三种:

1. Software Package Data Exchange(SPDX)

• Linux基金会主推的格式;许可证:cc-by-3.0

• 已经完成标准化工作,标准号:ISO/IEC 5962。

2. CycloneDX

• OWASP基金会主推的格式;许可证:apache-2.0

• 尚未完成标准化工作。

3. Software Identification(SWID)

• NIST主推的格式;

• 已经完成标准化工作,标准号:ISO/IEC 19770。

图二  linux和owasp基金会部分条款

当下看主流协议的许可证似乎并无断供风险;但是作为Linux、OWASP基金会下的项目,如果违反了基金会的条款,基金会有可能会阻止访问项目。

目前我国在软件供应链安全物料清单管理方面的基础比较薄弱,缺乏统一标准规范,限制了软件物料信息的共享和数据交换。随着国内外软件供应链安全法规和实践标准的逐步落地,自有SBOM的推广应用将有效提升软件供应链透明度,极大地便利软件组件溯源、软件产品依赖关系梳理、已知漏洞的影响范围判断、及时发现恶意软件渗透等,从而有力支撑软件供应链相关监管政策规则的落地实施。

三、DSDX协议的组成要素

DSDX(Digital Supply-chain Data Exchange)SBOM格式由OpenSCA社区主导发起,汇聚开源中国、电信研究院、中兴通讯等权威研究机构、甲方用户、安全厂商多方力量,共同适配中国企业实战化应用实践场景。作为国内首个数字供应链安全SBOM格式,DSDX目标是成为数字供应链安全治理与运营的核心技术抓手,以助力行业及产业从软件供应链安全向数字供应链安全过渡升级,使每个软件公司都可以将SBOM 附加到每个可交付成果,并且每个人都可以完全了解软件中使用的组件,并确切地知道哪些漏洞正在影响该软件。

DSDX规范文档由基本信息、项目信息、对象信息、代码片段信息及依赖信息这几部分构成。

1)SBOM 清单信息:清单名称、ID、创建者、清单版本、创建阶段、创建时间等

2)项目基本信息:项目名称、宿主环境信息、运行时环境信息、EAR 信息

3)组件信息:组件名称、ID、厂商、组件来源、组件类型、置信度、校验码、语言、依赖关系、依赖数量、依赖路径等

4)代码文件信息:名称、ID、校验码、路径、相似文件来源、相似度

5)代码片段信息:ID、来源文件 ID、校验码、代码片段位置、相似代码片段来源、相似度

6)依赖树信息:以 K-V 形式保存的项目完整依赖关系图(在任何情况下,SBOM 都应该捕获多级依赖关系)

7)备注信息:其他备注信息

DSDX兼容SPDX、CycloneDX、SWID国际标准和国内标准,但不止于主流规范,在最小元素集基础上扩展其他元素。DSDX重点引入了运行环境信息、创建阶段和供应链流转信息,加强了清单间的互相引用,并实现最小集/扩展集的灵活应用,深度支持代码片段信息的存储及追踪,为企业用户提供整个数字供应链基础设施视角的落地治理实践。

四、DSDX协议支持的生命周期

悬镜DSDX覆盖数字供应链全场景(CreateStage),涵盖源码、二进制、镜像、预发布、发布等不同阶段的物料清单,对组件、漏洞、许可证风险全面覆盖,提供更加透明化的SBOM管理。

同样重要的是,每次资产发生变化时,例如在产品的每个版本甚至每次构建时,都应该创建一个新的 SBOM以匹配该版本的更改。

如下图所示,在应用不同的构建以及不同的阶段,都应该生成对应的SBOM清单来记录不同的清单信息。同时,在应用上线分发时,需要合并不同阶段的清单信息,包括在采购阶段引入的供应商产品的清单融合开发的情况。

在上线后,应用的运营阶段,如果有识别到新的漏洞风险,则需要出新版本更新或者打补丁,那么应用的清单信息,也需要同步更新补丁的成分信息并同步更新版本信息。

图三  应用生成SBOM的生命周期

老旧的SBOM数据可能产生反作用,做无用功的同时让研发团队产生抱怨,因此SBOM应该是跟随代码、制品动态变化的实时数据。

用户可以通过将SBOM更新的逻辑嵌入到每一次代码的变更,与代码仓库集成在代码提交或合并时重新生成;对于没有代码或者项目中存在二进制依赖的情况,CI/CD环节则更为关键,通过与jenkins等软件的集成可以实现代码发布前的审查。

五、DSDX协议价值

1. SBOM自身安全可信

软件物料清单创建者应通过加密或数字签名的方式对软件物料清单的真实性和完整性进行保证。

即使在构建阶段拥有完美的工具链和完美的SBOM 信息,攻击者也可以篡改SBOM清单的内容以隐藏它包含易受攻击或恶意组件的事实。然后,消费者检索SBOM的被篡改版本并跟丢这些危险组件。

DSDX支持向SBOM工件添加数字签名,以确保消费者可以验证其真实性和完整性。

但更糟糕的是,攻击者可能会破坏构建管道,从而能够修改创建SBOM的过程,这将导致生成了经过数字签名但被篡改的组件列表。

从“扫描”工具的角度来看,软件组件通常是一个黑匣子,可以从供应商的交付制品中分析获得的信息量可能非常有限,因为其中大部分(如 pom.xml或go.mod 文件)是在构建期间可用,但在最终交付件中删除。

悬镜源鉴SCA支持进行SBOM和交付制品的深度检测结果比较,分析成分数据与提供的SBOM数据差异,并且给出对比报告,最大限度的降低引入质量低劣的SBOM清单或管道被攻击的风险SBOM清单的可能性。

2. SBOM深度和有效性

DSDX支持描述组件的全部依赖关系,SBOM将提供这些传递依赖项的可见性。

图四  组件依赖1层和多层对比

例如如果包libfoobar-1.5.3-r3-u8是SBOM的一部分,它还应该包括用于组装libfoobar-1.5.3-r3-u8 的每个包名称、版本、许可证等,以及每个节点的组件,从而形成一个多级树,其中每个节点都分解为其依赖项。

支持记录组件包的hash指,相似文件的路径和片段以及文件hash。这些可以可以在悬镜的XSBOM知识库中进行对比关联,确认成分的分析准确有效。

有了依赖树,就可以分析组件的风险传递,一个产品中的组件依赖关系是复杂的,这导致漏洞传递的路径也是复杂的。所以准确的解析组件间依赖关系并进行SBOM传递非常重要,这是供应链上下游分析组件的真实依赖调用,漏洞的可达性分析的基石。

3. SBOM与漏洞关联

漏洞是攻击者可以利用来绕过安全边界、访问系统等的弱点或缺陷,它们是攻击或破坏软件供应链的典型方式。要查找软件(或正在运行的主机、容器镜像等)中的漏洞,需要将已知漏洞与软件中的组件信息相匹配。这就是 SBOM 发挥作用的地方,因为它包含构成软件的软件包和版本的完整列表。

但是软件生产者和消费者都注意到,并不是所有漏洞产生的威胁都是相同的,在一个上下文环境中容易受到攻击的代码在另一个上下文中可能不会受到攻击。如果上游供应商确定来自漏洞的潜在风险不可利用,他们允许将该风险信息传递给下游的其他用户,以帮助他们做出基于风险的决策。

基于此,SBOM的另一个关键元素是VEX,它作为SBOM的机器可读“辅助工件”,允许制造商将在SBOM中列出的某个软件组件中发现的漏洞的当前状态进行交流。

DSDX同样支持对VEX漏洞的兼容,因此可以消除大部分误报,解决由于实现或其他控制措施而漏洞无法利用的实例,传达制造商在缓解漏洞方面的进展情况。

通过漏洞关联和漏洞交流,供应商可以轻松地传达客户因漏洞而面临的风险或不存在风险,减少了供应商和最终用户的工作量。

4. SBOM结合风险策略排查

SBOM数据还应该可以构建完整的资产图谱,并基于谱图进行高级检索。

例如“我是否容易受到 CVE-2022-22965 ( Spring4Shell ) 漏洞的攻击?”利用此漏洞需要在运行可利用Java包的主机或容器中同时发生一组条件:

使用SpringCore版本 5.3.0 到 5.3.17、5.2.0 到 5.2.19 或更早版本,使用JDK 9 或更高版本;

使用 spring-webmvc或spring-webflux 依赖。

大多数这些情况都可以在SBOM的内容中进行检查,轻松地评估环境中的风险。

图五  SBOM消费场景-策略合规

同样的,我们可以结合企业的合规要求和安全策略配置,对SBOM进行专项和定期检查,因为SBOM本身也是动态实时变化的数据,所以我们可以在分析出不满足合规和策略时,能够基于项目、资产等不同维度对总体风险进行梳理,并触发对应的预警或者阻断等操作,使数据的消费更及时更左移。对于企业的内部治理而言,单点的工具是不够的,还需要有全局的风险视图,出现问题时帮助企业及时止损。

六、DSDX行业实践

作为国内领先的数字供应链安全专业厂商,悬镜安全为用户提供完整的基于SBOM清单管理的数字供应链安全管理解决方案,并已在大量标杆用户成功实践落地。SBOM作为数字供应链安全治理的基础性工具之一,悬镜安全是其国内最早的实践者和布道者。

悬镜安全率先在源鉴SCA商业化产品中集成了DSDX、SPDX、CycloneDX、SWID四种SBOM标准格式的自动化生成能力。在商业化的同时,悬镜安全更不忘为开源社区、广大开发者和中小企业赋能,旗下开源数字供应链安全社区OpenSCA是目前国内唯一能够完全自主化、自动化生成DSDX、SPDX格式SBOM清单的开源SCA工具。

1. SBOM清单文件生成

SBOM 的质量取决于构建 SBOM 的过程的质量和自动化程度。

生成根级别很容易,如直接构建的软件的版本和详细信息,以及直接依赖项(包和第三方库)。当在依赖树中更深入地构建时,传递依赖关系解析变得困难,因为许多组件不提供自己的SBOM,并且检测依赖关系可能很复杂,例如带有剥离信息的静态链接二进制文件。

悬镜源鉴SCA最佳实践,软件物料清单生成包括人工生成和自动化生成两种方式:

  • 构建过程完全自动化并且SBOM创建被集成为构建管道的一部分;
  • 人工生成,则可以灵活选择在不同节点不同的维度进行生成。
  • 另外当软件组件以新版本或发布的形式更新,会自动对SBOM进行更新/追加。

支持生成SBOM阶段:应用包检测,源码仓库检测,同源溯源分析,二进制制品检测,镜像检测。

软件清单生成内容包括:

  • 组件信息:组件名称、ID、厂商、组件来源、组件类型、置信度、校验码、语言、依赖关系、依赖数量、依赖路径等。
  • 代码文件信息:名称、ID、校验码、路径、相似文件来源、相似度。
  • 代码片段信息:来源文件ID、校验码、代码片段位置、相似代码片段来源、相似度。

软件物料清单生成深度包括:记录从根节点到叶子节点全部深度的清单,以 K-V 形式保存的项目完整依赖关系图。

软件物料清单进行软件漏洞管理:从安全漏洞出发,溯源哪些组件被影响,从应用维度出发,查看应用的SBOM的安全漏洞信息。

图六  SBOM生成和更新周期

支持导出的维度:项目维度导出,应用维度导出

支持导出的格式:每种标准格式,优先json文件格式支持

DSDX:支持格式text、json、xml

SPDX:支持格式tag:value、rdf、json、xml、yaml

SWID:支持格式cbor、json、xml

CycloneDX:支持格式json、xml

图七  源鉴SCA-SBOM生成

2. SBOM清单文件检测

扫描SBOM是必要的,因为来自供应商的SBOM可能是错误的。供应商的构建过程可能会受到影响,因此供应商SBOM可能会故意省略某些组件。

源鉴SCA支持导入SBOM文件进行机器解析,解析后进行检测,发现清单中的风险问题,并可自动或人工对全局的SBOM进行更新。 并可支持SBOM的清单对比,通过上传的SBOM清单文件解析和供应商产品的检测生成的SBOM进行对比,分析SBOM清单的准确度和风险要素。

图八 源鉴SCA-SBOM检测

3. 基于SBOM清单文件的资产管理

构建和维护SBOM信息数据要素,在满足当前解决已知风险的同时,也是在建立后续排查和梳理的软件资产清单。

源鉴SCA在资产视角上支持树结构和图谱结构,查看全局的资产信息,并进行过滤检测,查看资产之间的依赖关系,帮助企业构建软件物料清单中组件成分体系、组件的依赖关系体系,建立完整的软件与组件链路关系树,实现链路的上下游可达分析架构模型,可以准确判断风险问题引入点和影响面。

图九 源鉴SCA-SBOM资产视角

4. 基于SBOM清单资产的风险分析

要想用于风险的治理,只有基线数据字段的SBOM难以发挥它的价值,SBOM要和知识库进行联动,当SBOM发生变化或者知识库中的数据发生变化时,都应该触发风险识别逻辑。例如,当SBOM中引入了一个新的组件,需要通过知识库评估这个组件是否存在开源许可证约束、是否适合商业使用;当出现一个新漏洞,知识库收录后应该联动SBOM判断有哪些项目受到影响。

企业需要根据风险发生的可能性和严重程度来对风险进行优先级排序。如果不了解漏洞是否被利用,就不可能精确地预估其发生的可能性。

悬镜SCA基于SBOM清单结合组件库,漏洞库数据识别组件安全性和漏洞信息,包括但不限于漏洞名称、编号、描述、风险等级、可利用性、修复方案等。同时项目将VEX和SBOM结合,分析供应商关于其产品中存在的漏洞的可利用性的上下文见解和说明,企业可基于其风险容忍度来识别、分析、评估和解决网络安全威胁。

帮助企业对清单中组件的最小元素进行提取,并且通过信息整合,提供包括但不限于软件清单的组件基准信息、漏洞信息、许可证信息等。

图十 源鉴SCA-SBOM风险信息

5. 基于SBOM清单资产的事件响应

DSDX中包含了详尽的软件组成成分,安全团队可以通过DSDX分析软件风险,并进行持续监控;在有供应链安全事件发生时,安全团队也能根据DSDX快速定位第三方组件中已知漏洞的影响范围,并针对性地对修复措施进行优先级排序,加速供应链攻击事件应急响应速度。追踪漏洞修复的状态,统计时间维度漏洞的产生、修复趋势变化等。

结语:

SBOM是保护软件供应链的关键部分,也是漏洞匹配和管理的基础。

对于企业而言,SBOM是软件供应链治理中很重要的基础数据,能够帮助企业实现依赖治理、漏洞管理和开源许可证合规。SBOM背后靠的是SCA和知识库数据的支撑,想要充分发挥SBOM的作用,应该将生成工具和尽可能多的研发流程打通,做到实时更新SBOM清单,并和全面的知识库订阅数据进行实时动态关联。

随着软件消费者会使用到各类供应商提供的软件产品,这些产品通常以二进制的形式交付,相比源码识别的效果覆盖率会更低,存在的风险更难识别。此时SBOM会作为供应商准入的要求,在采购环节要求提供SBOM,并对SBOM进行审查和统一管理,SBOM变得越来越重要。

我们需要保护供应链,统一标准,并使SBOM成为构建过程的重要组成部分。以DSDX为代表的SBOM格式必将在整个供应链引入、生产、交付等关键环节的开源治理实践中发挥重要作用,悬镜安全全栈产品覆盖DSDX,针对性适配中国企业实战化应用实践场景,为供应链上下游企业用户提供安全新方案与整体建设新思路。

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

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

相关文章

MySQL 基础、进阶、运维的学习笔记

1. MySQL 基础篇 1.1 MySQL 概述 1.1.1 数据库相关概念 数据库(Database, 简称 DB): 存储数据的仓库,数据是有组织的进行存储。 数据库管理系统(Database Management System, 简称 DBMS): 操作和管理数据库的大型软件。 SQL(Structured Query Language, 简称 S…

Linux:进程间通信

目录 一、关于进程间通信 二、管道 pipe函数 管道的特点 匿名管道 命名管道 mkfifo 三、system v共享内存 shmget函数(创建) ftok函数(生成key) shmctl函数(删除) shmat/dt函数(挂接/去关联) 四、初识信号量 一、关于进程间通信 首先我们都知道,进程运…

计算机组成学习-计算机系统概述总结

1、计算机系统概述 日常见到的计算机有显示器、键盘、鼠标、音箱、主机箱等;主机箱中有:主板、CPU、硬盘、内存、显卡、声卡等; 1.1 计算机系统层次结构 1.2 计算机系统的基本组成 包括硬件系统和软件系统两部分。 1.2.1 计算机硬件 计算…

DCCK“启航计划“3+2第一课机器视觉导论

用相机代替人眼去获取图像,然后处理图像,给出指令。 如:相机获取可口可乐的液面高度图片,通过连接线床给图像处理程序,程序给出合格不合格的判断再执行后续操作 作用:机器不会疲劳,机器判断标准…

深入理解前端路由:构建现代 Web 应用的基石(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

CentOS 7 配置tomcat

简介 Tomcat是一个使用Java编写的开源Web应用服务器,是由Apache Software Foundation管理的一个项目。它是一个轻量级的应用服务器,可以下载、安装和使用,而且还提供了许多高级功能,例如支持Java Servlet、JavaServer Pages (JSP)和JavaServer Faces (JSF) 等JavaEE技术,…

GoWin FPGA--- startup2

clock Click Tools\IP Core Generator\rPLL, and open the configure file 原语 for Clock 双击选项,生产对应的代码,Copy到制定的地点。 右侧有对应的说明文件

【spring(六)】WebSocket网络传输协议

🌈键盘敲烂,年薪30万🌈 目录 核心概要: 概念介绍: 对比HTTP协议:⭐ WebSocket入门案例:⭐ 核心概要: websocket对比http 概念介绍: WebSocket是Web服务器的一个组件…

权限的树形列表展示——基于APEX FancyTree Select

select distinct (o.PERMISSION_ID) as id, --数据ido.PARENT_PERMISSION_ID as PARENT_ID, --父ido.PERMISSION_NAME as title, --显示的标题o.PERMISSION_ID as VALUE, --标题对应的值1 as TYPE,casewhen (select cou…

mac安装elasticsearch

下载地址: Past Releases of Elastic Stack Software | Elastic https://www.elastic.co/cn/downloads/past-releases#elasticsearch 选择7.10版本 进入es bin目录下执行启动命令 ./elasticsearch 会报错 ./elasticsearch-env: line 126: syntax error near u…

基于linux的C语言环境下开源hashmap的使用与测试

C语言中没有C语言中map键值对容器的数据结构,为在C语言中提供一种hashmap数据结构,并提供hashmap的操作方法,具体包括新建、释放、清除、获得缓存数据量、设置数据、获取数据、浏览数据等操作,基于hashmap的开源代码很丰富&#x…

SickOs1.2

信息收集 # Nmap 7.94 scan initiated Wed Nov 22 22:16:22 2023 as: nmap -sn -oN live.nmap 192.168.182.0/24 Nmap scan report for 192.168.182.1 (192.168.182.1) Host is up (0.00028s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168…

mysql的InnoDB存储引擎

详情请参考:https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html InnoDB 是一个通用目的的存储引擎,它在高可用性、高性能方面做了平衡。MySQL 8.0,InnoDB 是默认的存储引擎。在创建表的时候,如果没有使用ENGIN…

【问题思考总结】一个级数收敛,子级数收敛吗?【比较和函数和数列tip】

问题 今天做2020年的数一真题时发现&#xff0c;这个知识点似乎是在教辅书中没太提到过&#xff0c;有些困惑&#xff0c;特此总结。 思考 设级数收敛半径为R。 正项级数&#xff1a;当|x|<R时&#xff0c;级数收敛&#xff0c;子级数必然收敛&#xff08;设原级数和函数…

【网络安全技术】消息认证技术

一、哈希函数 1.安全性质 1&#xff09;抗第一原像攻击&#xff08;Preimage Resistance&#xff09; 给定哈希后的值&#xff0c;很难找到哈希前的原消息。这很好理解&#xff0c;需要哈希函数具有单向性。 一个简单的例子就是密码存储系统&#xff0c;用户登录服务器需要…

分布式系统中最基础的 CAP 理论及其应用

对于开发或设计分布式系统的架构师、工程师来说&#xff0c;CAP 是必须要掌握的基础理论&#xff0c;CAP 理论可以帮助架构师对系统设计中目标进行取舍&#xff0c;合理地规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展&a…

无桌面版docker在Ubuntu系统上安装

目录 注意 系统要求 卸载旧版本 安装 使用apt存储库安装 1. 设置 Docker 的apt存储库。 2. 安装Docker软件包 3. 通过运行镜像来验证Docker Engine安装是否成功 hello-world。 从包中安装 1. 进入 https://download.docker.com/linux/ubuntu/dists/。 2. 在列表中选择…

Docker下安装Tomcat

目录 Tomcat简介 Tomcat安装 免修改版Tomcat安装 Tomcat简介 Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持&#x…

Android 获取应用签名

Android 获取应用签名 本文主要讲下在android中如何获取应用签名. 也方便平时用来区分一个应用是不是原包应用. 1: 通过PackageManager获取签名信息 首先,通过packageManager获取到指定应用的PackageInfo. 这里需要传入的flag是PackageManager.GET_SIGNATURES /*** {link P…

LinkedList详解

LinkedList详解 LinkedList是List接口的一个主要的实现类之一&#xff0c;基于链表的实现。以java8为例来了解一下LinkedList的源码实现 继承关系 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>,…