-
摘要:
WebAssembly是一种新兴的二进制指令集体系结构与代码分发格式,旨在为高级程序语言提供统一且架构无关的编译目标. 由于其安全、高效与可移植等先进特性,WebAssembly在Web领域与非Web领域均得到了广泛应用,正在成为最有前景的跨平台公共语言标准之一. 尽管WebAssembly提供了多种先进特性以保证安全性,然而,已有研究表明,WebAssembly仍然存在特有的攻击面从而导致安全问题,这些安全问题直接影响到基于WebAssembly的整个软件系统生态. 因此,对WebAssembly安全问题的产生机理、现有解决方案以及亟待解决的科学问题展开系统研究尤为重要. 基于WebAssembly安全研究领域已经公开发表的42篇研究论文,对WebAssembly安全的相关研究进行了系统研究、分析、归纳和总结:首先,研究分析了WebAssembly的核心安全特性,并在此基础上首次提出了WebAssembly的4层安全威胁模型,包括高级语言支持、编译工具链、二进制表示和语言虚拟机,并对每一层的安全威胁和攻击面进行了详细讨论;其次,提出了WebAssembly安全研究的分类学,将已有研究划分为安全实证研究、漏洞检测与利用、安全增强、形式语义与程序验证4个热点研究方向,并对这4个方向分别进行了综述、分析和总结;最后,指出了该领域待解决的科学问题,并展望了5个潜在的研究方向.
-
关键词:
- WebAssembly /
- 语言安全 /
- 漏洞检测与利用 /
- 安全增强 /
- 形式化验证
Abstract:WebAssembly is an emerging binary instruction set architecture and code distribution format, providing a unified compiling target for high-level programming languages. Due to its design advantages such as efficiency, security and portability, WebAssembly has already been widely used in the Web and non-Web scenarios, and it is becoming one of the most promising platform-independent language runtimes. Although WebAssembly provides a variety of advanced features to guarantee its security, existing studies have demonstrated that WebAssembly still has unique attack surfaces leading to serious security issues. These security issues pose challenges to the security of whole ecosystems based on WebAssembly. Therefore, it is critical to study the security issues of WebAssembly and their mitigations. To the best of our knowledge, we present the first study of WebAssembly security, based on 42 published research papers in this area. First, we systematically analyze and summarize key security features of WebAssembly. Second, we propose the first four-layer threat model for WebAssembly: threats from high-level programming languages, compilation toolchains, binary files, and WebAssembly virtual machines. Third, we propose a taxonomy to classify current research efforts into four categories: empirical security study, vulnerability detection and exploitation, security enhancements, and formal semantics and verifications. Finally, we point out potential challenges to be addressed in this field, as well as five future research directions to be explored.
-
网络处理器(network processor,NP)是网络领域专用可编程芯片,提供高性能分组转发处理能力,广泛应用于路由器、中间盒、智能网卡等网络设备完成网络通信领域的各种任务,如分组处理、协议解析、路由查找、声音/数据汇聚、防火墙、QoS(quality of service)等[1]. NP是一种功能面向网络领域设计的集成电路. 与通用CPU类似,NP通常是软件可编程的,以提供高性能分组转发处理能力,可应用于多种网络设备和系统.
在5G、物联网、云计算等新技术发展的驱动下,新型网络应用,如虚拟现实、自动驾驶、网络直播等不断涌现. 这些应用导致互联网流量爆炸式增长,也使得NP的应用场景日趋复杂多样,要求NP芯片必须不断迭代,才能满足多样化网络应用在性能、灵活性以及服务质量保证等方面的差异化需求.
传统单片NP内置大量处理器核、高速缓存、加速器等异构处理资源,通常采用可配置的接口控制器,如以太网、SATA(serial advanced technology attachment)、PCIe(peripheral component interconnect express),以及复用高速串行总线口SerDes(serializer and deserializer),以提高控制器利用率和节省资源面积,为多样化应用场景提供敏捷可定制能力. 如恩智浦的LX2160A[2],集成16个Arm®Cortex®-A72核以及针对L2/L3分组处理、50 Gbps的安全引擎、100 Gbps的压缩/解压缩引擎、流量管理和服务质量优化的数据通路加速单元,支持116 Gbps L2层以太网交换和支持100 Gbps速率的以太网控制器. LX2160A的24个SerDes通道可以配置为100 GbE/40 GbE/25 GbE/10 GbE速率. 然而SerDes设计常伴有各种串扰,如噪声、抖动等问题,影响流片成功率. 相对于通用多核而言,硬件加速器部分专用性高、应用难度大,同样需要多次流片才能成熟. 这些因素造成NP设计复杂、对工艺要求高、流片成本高、迭代周期长,难以与设备和应用需求的演进速度保持同步,敏捷可定制能力较弱.
随着摩尔定律、登纳德缩放定律失效问题逐渐凸显,以及芯片制程演进放缓,导致芯片设计难度更高、流程更加复杂、全流程设计成本大幅度增加. 国际商务战略公司调查数据显示,22 nm制程之后的每一代技术设计成本(包括EDA、设计验证、IP核、流片等)增加均超过50%,7 nm总设计成本约3亿美元,预计3nm工艺成本将增加5倍,达到15亿美元. 与此同时,NP相比于一般单片集成电路,设计更加复杂,设计、验证和管理成本的增加给片上系统(system on chip,SoC)的规模带来巨大压力,研制周期通常需要5年或者更长时间. 例如,博通公司的XLPNP,由于设计复杂、投片7次,投入近1亿美元. 由此可见,传统单片NP芯片研制在研发周期、成本、创新迭代等方面面临巨大挑战,越来越难以为继.
学术界和工业界的工作表明,通过使用先进的封装技术,即芯粒(Chiplet)技术,将多个异构芯粒在封装级紧密集成,如CPU,FPGA(field programmable gate array),是解决摩尔定律和登纳德定律失效的一种有效途径. 通过这种方式,开发团队可以将芯片功能和技术发展路线解耦,使用最先进的技术持续交付产品. Chiplet技术通过将一块完整芯片的复杂功能进行分解,异构集成多个模块化芯粒. 其中,这些芯粒可以由不同厂家、不同工艺的制程制造. 模块化集成方式可以有效提高芯片的研发速度、降低研发成本和芯片研制门槛,使得芯片研发聚焦于算法和核心技术,提高行业整体创新水平和能力. 脸书等公司推动的开放计算项目(open computer project,OCP)在2018年末积极启动了开放领域特定架构(open domain-specific architecture,ODSA)研究[3],试图开发完整Chiplet体系结构的接口堆栈,创建一个Chiplet的开放市场. ODSA构建兼容网络堆栈的每一层都有多个选项,以便根据所连接的芯粒类型与现有技术兼容,通过定义开放的标准化互连接口,使得Chiplet芯片集成的裸片可以互操作,支持不同供应商的裸片自由组合,以构建灵活的芯片系统. Chiplet技术在芯片涉及的研发周期、成本、性能、灵活等多个维度提供可定制性和可优化性,为NP研制提供了一条可行的技术路线. ODSA面向通用计算,资源种类丰富,但未考虑高性能网络处理在加速、互连、耦合处理等方面的特殊需求. 目前尚未有基于Chiplet的NP架构研究工作.
本文提出采用Chiplet技术构建新型敏捷可定制NP架构——ChipletNP,利用Chiplet技术将网络处理所需的异质资源解耦,可使用成熟芯片产品及工艺,通过多个芯粒组合,采用先进封装工艺快速定制NP芯片,满足不同场景下NP快速定制和演化发展需求.
首先,分析NP异质资源需求,抽象网络处理各类功能及常用各类硬件资源,提出基于交换、处理、加速耦合等芯粒的ChipletNP体系结构. 其次,提出实现芯粒间统一互连的敏捷交换技术,支持多匹配动作分组处理模型以及级联扩展. 再次,基于敏捷交换技术设计并流片实现了的敏捷交换芯粒,相较于同级商用芯片能效比提升2倍以上,延迟控制在2.82 µs以内,可有效支持面向NP的Chiplet统一通信与集成. 最后,基于ChipletNP架构设计实现了一款NP芯片——银河衡芯敏捷(YHHX-NP),该芯片集成商用CPU、FPGA和自研敏捷交换芯粒,并对其开展相关功能验证和实验评估. 实验结果表明,基于ChipletNP架构可实现NP的敏捷定制,能够有效协同片内异质芯粒资源实现复杂的网络处理,具有强大的可编程能力,能够承载SRv6(segment routing over IPv6)等新型网络协议与网络功能的部署.
1. 相关工作
本节从NP技术、Chiplet技术、可编程交换芯片技术和专用硬件加速技术4个方面展开.
1.1 NP技术
传统NP根据采用的指令集类型,可以分为专用指令集和通用指令集2类多核NP. 专用指令集多核NP,如思科nPower X1[1]、迈络思NPS-400[4]、博通XLP900[5]、美满技术HX4100[6],大多采用某种裁剪后的RISC指令集作为基本指令,并根据报文处理的特点拓展专用指令,集成度高,可获得与ASIC相媲美的处理性能,但存在微码编程、调试难度大的缺陷. 通用多核处理器采用完整的RISC或者CISC指令集,如恩智浦T系列[2]、凯为CN8000系列[7]、恩智浦LS2088A[8]、高通IPQ8069[9],编译开发环境成熟、调试难度小,但受限于通用处理器的缺陷,存在吞吐率低、访存瓶颈和报文处理延时高且波动大的不足. Netronome提出采用逻辑块(功能组件)敏捷构建其系列化的单片NP,在2014—2018年快速推出了4款不同配置的NP. 然而,该方式仍难以解决单片集成电路面临的问题和挑战.
为满足高性能和灵活应用场景的各项要求,学术界[10-11]提出了各类提升灵活性、部署效率、处理性能、功耗的下一代NP. 例如,因特尔公司的Crystal Forest处理器采用多核+片外QuickAssist加速器[12]的协处理模型,并将深度报文检测、加解密、解压缩等常用的分组处理功能卸载到QuickAssist加速器中. 现有的工作还提出针对通用多核处理器实现报文处理的优化技术,如DPDK(data plane development kit)[11-12],VPP(vector packet processing)[13],能够比较有效地提升通用多核处理报文的吞吐量并降低处理延时. Li等人[14]提出基于FPGA加速平台的高柔性和高性能架构——clickNP,利用FPGA良好的可编程性和处理性能,可获得200 MPPS(million packets per second)的处理性能.
传统NP在单颗芯片上集成大量处理器核、加速器等部件,设计复杂、研发周期长、成本高,难以依据设备和应用需求推进速度同步、快速的迭代,敏捷可定制能力较弱.
1.2 Chiplet技术
Chiplet(又称小芯片或芯粒),试图通过将多个可模块化芯片(主要形态为裸片(die))通过内部互连技术集成在一个封装内,构成专用功能异构芯片,从而解决芯片研制涉及的规模、研制成本以及周期等方面的问题[15]. 通过采用2.5D,3D等高级封装技术,Chiplet可以实现高性能多芯片片上互连,提高芯片系统集成度,扩展其性能、功耗优化空间. 例如,AMD使用多达4个齐柏林飞艇(Zeppelin)芯片[16]构建第1代EPYC处理器(那不勒斯),使用中央IO芯片来实现具有无限架构的系统级互连. 英特尔公司提出了它们的异质芯片集成计划,可编程交换芯片Tofino2[17]采用Chiplet技术,将网络芯片高速SerDes IO模块与核心逻辑分离,提供更多针对功耗优化的布局选择.
脸书等公司推动的OCP也在2018年末积极启动了ODSA研究,试图开发完整体系结构的接口栈来创建一个Chiplet的开放市场,通过定义开放的标准化接口,使得Chiplet芯片中集成的裸片可以互操作,以支持不同供应商的裸片自由组合,构建更为灵活的芯片系统. ODSA提倡通用化架构和强调兼容性,而NP在延迟、带宽、处理模型方面,对资源种类和连接方式有特殊要求. 英特尔、AMD、高通、ARM、三星、台积电、日月光等大厂,以及谷歌云、微软等公司于2022年3月2日宣布了一项新技术标准UCIe(universal Chiplet interconnect express). 但其仅针对物理层通信制定的标准,且与工艺、功耗以及性能紧密相关,尚未提出链路层及以上接口及协议,依赖沿用并扩展已有如PCIe标准接口与协议. 使用特定领域加速器和芯片的好处包括减少成本和上市时间、减少电路板面积和功耗,且加速器可以用于组装集成多种系统.
近几年演化出的Chiplet网络处理芯片、英特尔(原Barefoot)Tofino 2(12.8 Tbps)交换芯片采用交换逻辑芯片与高速SerDes接口模块芯片组合的Chiplet方式实现. 但其仅基于Chiplet技术将网络芯片高速SerDes IO模块与核心逻辑分离,未充分解耦资源,尚未形成Chiplet架构.
Chiplet为NP设计提供了新的解决思路. 相较于芯粒的通用处理器设计,在NP中应用Chiplet技术时,需要考虑到网络应用处理延时、吞吐率的差异化需求,同时需设计相关处理模型简化网络应用的开发和部署.
1.3 可编程交换芯片技术
与传统固定功能的交换芯片不同,可编程交换芯片将报文处理抽象为匹配和动作2种操作. 其中,匹配可根据用户需求配置待匹配的关键字,如源/目的IP地址、五元组信息等,以及待查找的规则内容;动作则是根据匹配结果执行报文处理. 例如,博通的BCM56000系列以及美满技术的Teralynx系列,将报文交换拆分成固定处理逻辑(如L2层交换)、ACL过滤,以及自定义处理逻辑. 并在自定义处理逻辑中设置3态内容寻址存储器(ternary content addressable memory,TCAM)以支持模糊匹配,以及通过PCIe连接ARM A72处理器支持复杂处理动作.
为更大限度地提升传统NP的处理性能且保持良好的灵活性,协议无关的可编程交换芯片应运而生. 可编程交换模型,如可重构匹配表(reconfigurable match table,RMT)[17]、分解的可重构匹配表(disaggregated reconfigurable match table,dRMT)[18],其思想是将报文处理抽象为“匹配-动作表”(match-action table,MAT),匹配阶段输入的关键字是从报文头提取的任意字段,而执行的处理动作由命中的规则决定. 允许在不需要修改硬件处理逻辑条件下,通过配置匹配-动作规则表,实现用户定制的报文处理功能.
与博通、美满技术等公司的可编程交换芯片不同,Barefoot Tofino交换芯片包含可编程解析器,识别报文类型并提取关键字组成元数据(metadata),并设置由执行超长字执行单元组成的动作处理部件,可以组合支持大量复杂的报文处理功能.
但由于可编程交换芯片针对L2层交换(或Openflow协议),报文处理逻辑相对单一,仅采用匹配-动作处理抽象,难以支持多样化网络应用需求,例如,TCP重放攻击检测需要维护TCP连接、序列号等状态信息.
因此,现有商用网络交换芯片面向数据中心、园区网、企业网等大规模固定网络交换需求,支持大规模、高性能的网络交换,支持百万级流量的转发、交换管理,难以满足ChipletNP高能效、低功耗的集成需求.
现有的商用可编程交换芯片往往采用RMT多级匹配-动作架构,强调动作的丰富可编程性,但其匹配部分能力较弱,不支持超宽匹配,不能满足流量精细控制以及能效需求. 与可编程交换芯片的应用场景不同,NP更强调软件的可编程性,分组处理动作大多部署在耦合加速芯粒或CPU芯粒上处理,因此需要强调匹配部分的能力,弱化动作的丰富性,因此可编程交换芯片也难以作为敏捷交换芯粒实现最优选择.
1.4 网络加速技术
为提升网络处理吞吐率和降低通信延时,学术界和产业界提出了专用网络处理加速器/芯片. 例如,微软公司将基于FPGA的智能网卡(AccelNet)[19]应用在数据中心,可将端到端通信延时控制在微秒级. 英伟达公司网络的CX5系列智能网卡[20],支持ASAP2加速,可以把网络相关工作(快速分组处理路径)卸载到eSwitch,而慢速分组处理路径及控制面仍然由主机端CPU处理. 数据中心也使用一些基于NP的智能网卡(如美满技术公司的LiquidIO II[21]系列、华为公司的IN300[22]系列),用于加速原先在通用多核上部署的网络功能.
但由于传统智能网卡将消耗大量宝贵的CPU内核来进行流量的分类、跟踪和控制. 这些昂贵的CPU内核是为通用应用程序而设计的,而并非为了网络数据包的查找和管理. 英伟达公司提出新一代智能网卡DPU(data processing unit)[23],将更多原先在软件中实现的处理功能,如协议栈,卸载到网卡上实现,并可以旁路CPU直接将数据送给GPU,从而实现不同GPU节点间低延时数据传输,使多节点并行计算效率更高.
因特尔公司也提出了自己的下一代智能网卡IPU(infrastructure processing unit)[24]. 与DPU着重关注数据处理不同,IPU更偏向于将用户业务负载和云厂商基础负载分离,将基础负载的一些工作迁移到IPU上实现,并发布了基于因特尔公司的Agilex FPGA和Xeon-D片上处理器的IPU,即Oak Springs Canyon[25],以及基于ASIC第2款IPU,即Mount Evans.
DPU、智能网卡、IPU用于卸载端侧网络应用,对灵活性的需求相对较强以适应不同类型的应用需求,但对处理能力的需求相对较弱[26]. 同时,相关技术还未采用Chiplet技术,集成大量处理单元带来极大的开发难度和成本,且往往采用单一或者少数集中处理资源,难以兼顾各类网络应用处理需求.
2. ChipletNP架构与处理模型
Chiplet技术通过将多个模块化的异构芯粒进行组合,采用先进的多芯片封装工艺形成一块具有完整功能的芯片. 这些芯粒可由不同厂家、不同工艺的制程制造,模块化集成方式可以有效提高芯片的研发速度、降低研发成本和芯片研制门槛,使得芯片研发聚焦于算法和核心技术,提高行业整体创新水平和能力.
虽然ODSA已提出通用可供参考的芯粒资源集成方案,但考虑到NP芯片有其特殊的领域特性和资源需求特性,主要面向网络处理领域. 因此,在NP中应用Chiplet技术时,不仅需要考虑带宽,更需要侧重考虑网络处理资源连接对于延迟、堆叠、统一互连的要求,以支撑网络应用的精细部署. 芯粒化的NP相较于普通异质芯粒资源互连侧重考虑高带宽,NP的芯粒间互连基于专用敏捷交换芯粒,作为NP的互连核心,实现高带宽、低延迟,支持网络处理低延时和分组流量的精细部署,实现各异质芯粒之间分组和中间处理结果的统一互连与通信,同时承载网络处理的快速路径实现交换堆叠,是NP获得极高处理性能的关键.
另一方面,基于异质芯粒构建的NP,需支持高效的分组处理模型,才能实现异质资源的一体化处理和有效部署网络功能.
本文提出新型敏捷可定制NP架构ChipletNP,基于Chiplet技术解耦异质资源,分析NP的异质资源组成,充分利用成熟芯片产品及工艺,设计专用敏捷交换芯粒实现多芯粒互连. 同时,提出基于ChipletNP的多匹配动作增强模型,满足不同应用场景下NP的快速定制和演化发展需求.
2.1 NP资源集成
首先针对传统单片NP以及工业界和学术界的NP集成异质资源展开分析,为ChipletNP组成架构设计提供支撑.
2.1.1 传统单片NP集成资源
商用高性能NP架构,以典型芯片LX2160A为例,如图1所示,集成了16个运行频率达2.2 GHz的Arm Cortex-A72 CPU内核,8 MB 2级缓存,共享8 MB片上缓存;集成支持130 Gbps L2层以太网交换模块,最多16个以太网端口;复用的24个SerDes通道可以配置为100 GbE/40 GbE/25 GbE/10 GbE端口;集成加速引擎模块,包括50 Gbps安全加速器、100 Gbps数据压缩/解压缩引擎;集成多种外设接口包括SD,eMMC等;集成支持ECC的2个72 b DDR4可通过通用多核间的报文级并行、通用多核内部指令级并行、通用多核和以太网交换单元与加速引擎模块的任务级并行以保证高性能,面向L2,L3层处理,可根据应用场景处理性能需求,提供12核(LX2120A)和8核(LX2080A)版本.
由此可见,传统单片NP通常集成通用多核处理模块、以太网交换模块、可配置高速接口、加速引擎4大部分,通过内部系统高性能总线互连,新型网络协议和功能只能部署到通用多核上执行,处理性能和支撑能力较弱.
2.1.2 可编程网络处理平台集成资源
现有可编程网络处理平台存在多种异质资源集成形式,表1给出这些平台的特性对比.
表 1 网络处理平台体系结构的特征对比Table 1. Features Comparison of Network Processing Platform Architechture实现架构 吞吐率 延迟 可扩展性 编程语言 OS 功耗 多核CPU(+ASIC) 低 高 好 C/C++等 支持 高 专用CPU(+ASIC) 高 高 好 汇编/C 支持 高 可编程ASIC 高 低 较差 P4 不支持 低 FPGA(+CPU) 较高 低 好 Verilog/
VHDL等部分支持 较低 1)多核CPU(+ASIC)加速器. 典型代表有凯为CN8000,该加速器通过集成ASIC专用硬件加速器或扩展专用分组处理指令,能够极大地提升报文处理性能,但由于ASIC具有繁杂的设计、开发、调试流程,难以满足灵活部署新网络功能或者加速各类网络应用的需求. 随着摩尔定律的失效,通过堆积CPU核数扩展性能的方式已难以满足网络流量的增长速率,需要采用新的分组处理架构.
2)专用CPU(+ASIC). 典型代表有迈络思NPS400. 专用CPU能够大大提升吞吐率,然而专用CPU编程能力欠佳,往往采用基于汇编指令的微码编程,依旧存在处理延迟高的通病.
3)可编程ASIC. 典型代表有RMT,其基于动态可配置流水线模型,不需要修改硬件处理逻辑. 通过配置匹配-动作规则表,可灵活定制报文处理功能. 但其仍存在2点不足:一是流水线均匀分配资源不符合实际需求,存在资源浪费;二是针对L4层及L4层以下的无状态分组处理功能,无法支持复杂的有状态处理.
4)FPGA(+CPU). 典型代表有SwitchBlade[27],动态可重构流水线可支持在线重组基本硬件模块来构造所需的分组处理功能. 这种架构虽然能够提升灵活性以及避免综合硬件逻辑的时间开销,但仍存在2点不足:一是通用基本硬件模块的动作类型较少,导致可以组合获得的处理动作有限;二是不同的网络功能所需的分组处理模块可能分布不均,如果同时部署这些网络功能,则存在空闲模块造成资源浪费而公共模块出现性能瓶颈的问题.
综上所述,上述处理平台及资源通常面向具体网络应用领域构建,缺乏统一的互连架构以及处理模型,ChipletNP设计考虑并借鉴上述异质资源集成特点,并提供统一的互连架构和分组处理模型.
2.2 ChipletNP体系架构
综合考虑NP在性能、可编程性、可扩展性以及QoS等方面的需求,ChipletNP集成异质芯粒,以协同完成网络分组处理业务,如图2所示.
1)敏捷交换芯粒
Chiplet系统集成的核心——敏捷交换芯粒支持NP实现高密度和高带宽线速处理能力,完成网络功能的加速和卸载,实现异构芯粒资源互连和承载芯粒内交换网络,将分组流量优化部署到异构芯粒相应的处理资源上以提供芯粒异构资源的统一连接. 同时实现网络功能的快速路径,具有多个SerDes端口支持交换堆叠,是NP获得极高处理性能的关键.
现有的交换芯片,仅作为网络处理的快速路径以加速芯片,并未针对芯粒间的互连进行优化设计,不利于芯粒集成. 因此,需基于交换芯片实现网络加速处理的同时,提供统一的互连接口承载芯粒内敏捷交换网络,才能为实现芯粒内异构资源负载均衡和芯粒资源的Chiplet系统集成提供基础支撑.
2)耦合加速芯粒
基于DPU,NetDAM(network directly attached memory),FPGA等实现网络功能紧耦合与加速处理. 耦合加速芯粒承担如网络切片、SRv6等新业务的升级、应用加速的卸载、流量负载均衡,实现网络编程,弥补可配置交换芯片ASIC灵活性差、无法根据用户需求重构处理逻辑,以及通用多核处理器芯片CPU处理性能低的不足.
3)通用CPU芯粒
通用多核处理器阵列芯粒支持NP的灵活可编程性以实现深度处理. 通用多核处理器芯粒基于商用货架可独立演化,一般采用以太网和PCIe用作芯片间接口.
通用多核处理器既可以配置成流水线(pipeline)处理模式,即每个核实现一种网络功能,不同核之间按照功能服务链编排;也可以配置成RTC(run to complete)模式,即每个核均独自运行所有网络功能,无需核间的数据交互. 此外,CPU阵列可用于下发报文处理规则到耦合加速芯粒或可配置交换芯粒,避免后续可以在交换芯粒或者加速芯粒中处理的报文继续送给CPU整列处理,以提升处理性能.
4)领域加速芯粒
用于实现领域特定加速逻辑,包括分组处理的定制加速器(正则表达式、加解密等)以及定制处理器(低延迟处理器(NanoPU))等,可面向领域应用进行Chiplet集成.
上述芯粒可根据业务应用需求,通过SIP(system in package),MCM(multi-chip module)等多芯片封装技术封装在公共基板上,形成系统级NP解决方案.
ChipletNP基于Chiplet可组合思想,融合处理、加速、互连等异质资源,通过标准化网络接口互连通信,协同完成分组处理业务. 一方面,可以有效支持资源灵活配置需求,根据不同应用领域对性能、功耗的差异化需求配置资源类型和数量,以快速定制NP芯片;另一方面,支持商用成熟资源的集成,允许各资源独立演化、升级,提供更大的体系结构设计空间.
值得注意的是,敏捷交换芯粒作为ChipletNP的核心互连芯粒,需要支持芯粒间交互分组数据和中间处理结果,实现各处理平面之间的统一互连与通信.
2.3 ChipletNP分组处理模型
ChipletNP的分组处理采用多匹配动作(multiple matches & action,MMA)增强模型(multiple matches & action+,MMA+),综合了可编程交换芯片RMT流水处理模型与传统NP的RTC模型的优点.
如图3所示,MMA模型映射到敏捷交换芯片上,有状态的增强处理(action+,A+)可映射到耦合交换芯粒和CPU芯粒上. MMA+模型将分组处理数据平面划分为3个子平面,包括快速交换、在线加速以及深度处理,并使用DMID(destination module identifier)实现软硬件模块间的数据交互.
1)快速交换子平面
快速交换子平面基于敏捷交换芯粒实现,该平面由一系列被抽象为协议无关的流水阶段组成,采用协议无关的MMA抽象能够实现分类、转发、调度等各类无状态报文处理功能,具有高吞吐和低延迟的特点. 多级匹配阶段实现关键字匹配功能,支持精确匹配和掩码匹配2种类型;动作阶段则是根据匹配结果执行分组处理. 基于敏捷交换芯粒多级查表和多表冗余的流水线架构,能够实现细粒度流分类和查表. 所有报文均先经过敏捷交换芯粒匹配查询,然后根据匹配结果决定是否需要上送给在线加速子平面或深度处理子平面处理. 从而将不同类型内容的流量精细控制和部署到芯粒内异构资源上,实现更多的有状态增强处理,为芯粒内异构资源负载均衡等提供基础支撑. 此外,敏捷交换芯粒流水线头部是敏捷交换可编程解析器,其识别报文类型并提取关键字组成元数据. 流水线的尾部是敏捷交换协议(agile switch protocol,ASP)处理模块,可将查表结果元数据随分组一同输出.
2)在线加速子平面
在线加速子平面基于耦合加速芯粒实现,该平面利用其可编程或可重构特性来加速新业务、新协议等专用报文处理,兼备良好的处理性能和灵活性. 实现2部分功能:一是与芯粒间通信相关的处理逻辑,屏蔽底层连接实现,完成与其他异构处理资源的数据、控制消息交互;二是支持快速部署网络功能的重构和支持网络功能服务链的编排,为用户提供与底层硬件无关的信号接口,允许开发者插入、删除或替换应用相关处理逻辑以快速重构新的网络功能和支持各类新协议,加速各种定制报文处理功能.
3)深度处理子平面
深度处理子平面基于通用多核处理器芯粒实现,该平面面向多样化应用场景,集成通用多核处理器(可按需配置CUP核数)及大容量的存储资源,用于实现应用层协议识别、深度报文处理功能,具有极高的灵活性.
MMA+模型实现的3个分组处理数据子平面,可配合实现RMT流水处理以及RTC两种处理模式. 若采用RMT流水处理模式,这3个子平面紧耦合的映射执行分组处理的部分功能,通过定义标准的数据、控制消息,每个报文附加额外元数据用于3个处理平面的分组处理结果,以实现数据交互和共享. 若采用RTC处理模式,3个子平面可解耦独立处理各自映射的流量. 因此,MMA+模型可以支持同时部署2种处理模式来开发的网络功能,支持3类资源的灵活组合配置.
3. ChipletNP敏捷交换技术
ChipletNP敏捷交换技术在不同应用场景和数据传输带宽、延迟、能效等方面具有不同需求,要求ChipletNP敏捷交换芯粒能够实现统一、可扩展和高能效的互连,支持芯粒资源的按需配置与集成,从而实现面向应用敏捷定制NP.
具体地,敏捷交换芯粒应具有5种能力:1)具有芯粒间统一、标准数据交换,且能够广泛兼容连接各类异质商用芯粒能力;2)具有面向应用支持细粒度的芯粒间分组转发控制能力,将分组流量精细优化部署到芯粒相应的处理资源上;3)具有芯粒分组转发卸载加速能力,有效减轻通用多核阵列负载,实现分组快速转发;4)具有高能效、低功耗交换能力,以满足ChipletNP在设计空间、散热等方面的要求;5)具有堆叠扩展能力,提供异质芯粒资源可扩展能力.
如图4所示,敏捷交换芯粒采用标准以太网交换协议. 这是因为以太网是目前应用最为广泛的交换协议,其性能高、成本低,且CPU等各类处理、加速等芯片广泛集成有以太网接口.
现有商用网络交换芯片,如博通、盛科等,面向数据中心、园区网、企业网等大规模固定网络交换需求,出于市场与成本考虑,更强调实现丰富的功能协议集合,支持大规模、高性能的网络交换,支持百万级流量的转发、交换管理,难以满足上述高能效、低功耗等敏捷交换需求. 商用可编程交换芯片通常采用RMT多级匹配-动作架构提升芯片对分组处理的可编程灵活性. 由于该芯片更强调动作的丰富可编程性,匹配能力相对较弱,难以满足敏捷交换细粒度流量控制的需求.
与可编程交换芯片的应用场景不同,NP更强调软件可编程性,依据MMA+模型,ChipletNP分组处理动作大多部署在耦合加速芯粒或CPU芯粒上处理. 此外,考虑到流量精细控制以及能效需求,可编程交换芯片也难以作为敏捷交换芯粒实现最优选择.
敏捷交换芯粒的实现采用MMA架构,如图5所示,主要部件包括可配置高速接口模块、敏捷交换可编程解析与封装模块、协议无关匹配-动作流水线3部分.
1)可配置高速接口模块. 芯片内置可配置高速接口模块,采用内置SerDes通道的集成化设计,基于灵活的端口配置模式、复用的SerDes通道来灵活支持多种速率的以太网端口,更好地支撑敏捷交换间的堆叠扩展,从而提供多样化芯粒资源集成能力.
2)敏捷交换可编程解析与封装模块. 该模块为ChipletNP架构提供了芯粒间的转发平面协同处理能力. 前级芯粒可通过元数据随分组一同输出的方式将内部的查表结果随原始报文分组一同输出,后级芯粒解析该报文即可获取前级查表信息,由此通过芯粒级联即可有效扩展报文分组处理流水线的长度和复杂度等功能处理能力,充分发挥异构资源芯粒互连优势. 敏捷交换可编程解析能够识别标准以太网报文或带有元数据的报文,识别报文类型并提取关键字组成元数据,与分组一同进入协议无关匹配-动作流水线中. 封装模块可灵活配置输出报文为标准以太网报文或带有元数据的报文,广泛兼容各类商用芯粒.
3)协议无关匹配-动作流水线. 该部分采用超宽字节掩码匹配模型提供兼容OpenFlow模型的可编程转发平面处理能力,通过配置可支持灵活的匹配粒度调节,多级匹配表提供了丰富的正交表项组合. 64 B报文+32 B查表信息,能够广泛支持当前L2~L7各种已有协议及用户自定义协议帧的转发,实现面向应用的细粒度分组转发控制能力,从而支持流量的精细化部署. 支持软件定义交换,通过配置流表可构建不同堆叠拓扑. 基于SBV(stride bit vector)算法代替TCAM实现的掩码匹配可支持并行全流水. 除基本转发动作外,协议无关匹配-动作流水线还集成了QoS流限速、L2层报文头(目的MAC,源MAC,VLAN)修改等功能,以减少报文分组的处理路径延时和对其他芯粒资源的占用,提供芯粒分组转发卸载加速能力.
4. 银河衡芯敏捷网络处理器(YHHX-NP)
针对新型网络技术部署等应用场景,基于ChipletNP架构敏捷定制了YHHX-NP. 新型网络技术部署更强调NP的可编程性和可定制性,意图在性能、灵活性、功耗等多方面实现最优的定制设计.
如图6(a)所示,YHHX-NP采用全国产基板设计和封装工艺实现,基于多芯片封装技术集成整合通用CPU芯粒(某国产通用多核CPU)、耦合加速FPGA芯粒(复旦微JFM7K325T)以及敏捷交换芯粒(自研HX-DS160交换芯片28 nm工艺). 值得注意的是,由于基于ChipletNP敏捷可定制架构,YHHX-NP研制周期仅为6个月,远少于单芯片NP芯片研制时间.
1)敏捷交换芯粒
其中自研敏捷交换芯粒HX-DS160,如图6(b)所示,是一款面向ChipletNP集成设计的高带宽、低功耗敏捷交换芯片,该芯片也可作为高效能以太网交换以及智能网络接口芯片独立应用,独立应用封装尺寸为27 mm×27 mm的BGA676. 芯片采用自主设计方式,依托28 nm工艺节点流片,具有160 Gbps交换性能(单向),提供16个万兆以太网接口,外部接口可配置为2×40 Gbps+8×10 Gbps+8×1Gbps;支持全端口线速转发交换处理,典型功耗仅8.5 W;支持堆叠扩展模式. 与应用广泛的某国产120 Gbps以太网交换芯片相比,性能功耗比提升2倍以上(从7.5 Gbps/W提升至18.8 Gbps/W).
HX-DS160采用可编程的协议无关MMA交换架构,以及采用超宽比特搜索匹配引擎,支持宽度768 b的关键字搜索. HX-DS160可通过40 Gbps/10 Gbps/1 Gbps数据接口进行带内配置,也支持SPI(serial peripheral interface)和IIC(inter-integrated circuit)接口进行轻量化管理配置,提供无管理CPU的集成方式以满足敏捷定制需求.
2)耦合加速芯粒
ChipletNP耦合加速芯粒基于国产高性能FPGA(复旦微JFM7K325T)实现. 为提升网络处理吞吐率和降低通信延时,常用的耦合加速芯粒资源有DPU,IPU,FPGA等,相较于DPU与IPU,ChipletNP的优势体现在2方面:一是DPU与IPU受限于网络设备应用场景,这两者用于卸载端侧网络应用,适应不同类型的应用需求,处理性能相对较弱;二是用户定制能力方面,FPGA具有良好的可重构性,有利于提高整个NP的敏捷定制能力. 因此基于高性能FPGA实现的ChipletNP耦合加速芯粒,能够兼备良好的处理性能和灵活性.
ChipletNP耦合加速芯粒实现2部分功能:一是与芯粒间通信相关的处理逻辑FPGA OS,屏蔽底层连接实现,完成FPGA-CPU数据、控制消息交互功能. 交互部件可以基于PCIe总线,FPGA向上提供数据收发API(application interface),实现FPGA与CPU交换报文和元数据,是FPGA-CPU协同处理的基础. 由于与芯粒间耦合协同优化设计相关性较小,此处不做详述. 二是实现可重构分组流水线,这也是耦合加速芯粒体现耦合性的重要部分,是支持ChipletNP MMA+分组处理模型的关键. 采用模块化设计框架,基于可编程模块索引机制,可将报文处理流水线抽象为一系列具有相同接口的功能模块,实现网络功能服务链的编排以构建所需的网络功能. 同时,为NP用户提供一组与底层硬件无关的信号接口,允许开发者插入、删除或替换应用相关处理逻辑以快速重构新的网络功能,从而支持各类新协议实现加速各种定制报文处理功能,可重构分组处理流水线.
基于FPGA实现的可重构分组处理流水线的支持调度包含FPGA硬件功能模块、敏捷交换芯粒硬件功能模块和通用CPU的软件进程3部分. 其中硬件功能模块采用串行组织,即图3中的M1,M2,…,MN, MP, MQ, MR. 软件进程则运行软件功能模块,即图3中的MV, MP, MQ, MR并支持动态加载和移除,其中MV为配置模块.
可重构分组处理流水线处理报文的流程为4步: ①网络端口接收报文,并送给敏捷交换硬件流水线的第1个模块M1,然后再依次经过后续的匹配模块进行匹配,查表匹配结果随分组一同输出,即为每个报文附加额外的元数据,方便模块间共享中间处理结果,元数据中携带DMID,用于指示处理当前报文的下一个模块. 根据查表匹配结果,将流量送达基于耦合加速芯粒实现的可重构分组处理流水线中完成硬件部分的处理. ②基于耦合加速芯粒实现的可重构分组处理流水线会根据DMID的数值判断是将报文直接从网络接口输出还是送软件模块MX(即DMID=x)或 MY,MZ进行深度处理. ③每个软件模块在完成报文处理后,均会将报文继续送回基于耦合加速芯粒实现的可重构分组处理流水线中. ④报文可再次经过所有硬件模块处理,或者根据DMID直接跳到敏捷交换芯粒硬件最后一个功能模块MN,然后根据输出端口转发.
ChipletNP可重构分组处理流水线为用户提供清晰的软硬件开发接口来屏蔽底层的设计细节,例如,可以屏蔽报文收发、软硬件报文交互等设计细节,从而降低软硬件功能的开发难度. 用户开发网络功能时,需要遵循3类相关的开发接口规范,详见附录A. 用户不但可以根据需求动态增加或删除软件功能模块,而且可以通过离线加载的方式重组硬件功能模块,满足了用户对网络功能灵活可扩展的需求.
5. 实验评估与功能验证
5.1 性能测试
为了测试YHHX-NP性能,搭建实验环境,对NP原型芯片相关性能进行测试. 图7所示为YHHX-NP芯片性能测试平台. 芯片验证板通过串口连接测试PC,10 Gbps/40 Gbps以太网接口通过光纤连接网络测试仪,并在通用多核CPU芯粒上运行操作系统. 基于该性能测试平台,对NP原型芯片的网络分组转发性能、处理延迟等能力进行验证.
针对不同大小报文的吞吐率测试结果表明,如图8(a)所示,NP芯片可满足10 Gbps/40 Gbps以太网接口IPv4,IPv6转发报文线速处理需求. 如图8(b)所示,处理延迟实验表明,随着报文尺寸的增大,交换转发处理延迟有所增加,但最大不超过2.82 µs. 查表中关键字通常不超过96 B(64 B+32 B),查表结果不超过32 B. 根据延迟测试结果,交换转发处理延迟通常可控制在1.2 µs延迟以内(报文长度在256 B以内). 大报文分组在40 Gbps速率下转发延迟优于10 Gbps,原因在于40 Gbps链路传输速率更快,而小报文则反之,原因在于40 Gbps的报文分组处理逻辑更长,处理小报文分组转发时,分组数据在更长的处理逻辑路径上执行,延迟稍大.
5.2 典型业务部署验证
5.2.1 SRv6功能映射
ChipletNP架构能够对各类新型网络协议提供快速部署的支持. 以SRv6为例,通过对SRv6的处理流程进行抽象并对功能进行模块化解耦,可将SRv6的功能实现完全映射到YHHX-NP芯片中. 本节将演示基于YHHX-NP的SRv6显示路由功能.
SRv6路由器是通过SRv6技术实现可配置路由路径和可编程网络的IPv6路由器. 基于YHHX-NP实现SRv6处理引擎功能设计,及实现显式路径,SRv6路由器具有2个功能:
1)支持普通IPv6报文的路由转发.
2)支持SRv6引流(源节点压入SRH(segment routing head))、SRH解析和处理(如转发节点将SID(segment identifier)填入目的IP)、SRH弹出(末端转发节点删除SRH)等SRv6相关功能.
为支持SRv6网络协议的快速部署,数据平面需完成分组分类、流分类、SID分类、路由转发、SRv6 SRH源端压入、SRv6 SID解析和处理、目的MAC地址替换、最大跳数限制(hop limit)判断和修改、段剩余值SL(segment left)判断和修改、ICMP(Internet control message protocol)代理、统计计数、动作处理等功能. 控制平面需完成生成分组分类表、流分类表、SID分类表、SRH压入表、转发表、邻居表,完成对数据平面的配置功能,如图9所示. 数据平面的报文处理按功能模块解耦后的流程描述见附录B.
图9中敏捷交换芯粒上的映射实现分类查表及简单动作的处理,包括分组分类、流分类、SID分类、路由转发、目的MAC地址替换、动作处理等功能模块;耦合加速芯粒上执行需要定制更新报文头字段等较为复杂的动作处理,包括普通IPv6处理、报文解析、SRv6源端压入SRH、SRv6中间处理和末端SRH弹出处理、报文汇聚等功能模块. 在通用多核CPU阵列芯粒上执行实现ICMP代理和规则配置等软件功能模块. 各模块的具体功能描述见附录C.
5.2.2 SRv6功能验证
3台基于YHHX-NP芯片实现的路由器R1,R2,R3组成一个环形网络,各路由器之间通过以太网口3和以太网口4互连. 每台路由器的以太网口1分别连接1台主机用于收发用户流量. 同时,为了便于观察路由器之间的报文内容,将路由器的以太网口2作为以太网口3和以太网口4口的镜像端口,连接到主机的另外一个外置网口上. 主机1、主机2、主机3的IP地址均不在同一网段. 主机PC1的网口连接到YHHX-NP路由器R1的以太网口,且这2个网口在同一网段,具体拓扑连接如图10所示.
按照网络拓扑实现主机之间通信,普通IPv6报文经过2跳路由转发即可. 如主机1→路由器1→路由器3→主机3. 为了验证基于YHFT-NP成功部署SRv6显示路由,本文规划了相应的SRv6引流策略和SRv6转发路径,从而实现主机1发给主机3的报文经过路由器1、路由器2、路由器3的指定路径,主机3发给主机1的报文会经过路由器3、路由器2、路由器1的指定路径. 本文测试使用抓包软件Wireshark、串口连接工具SecureCRT、网络性能测试软件Iperf3.
如图11可以看出路由器1收到目的IP地址为主机3(2001:3:1::2)的ICMPv6回应请求报文后,根据SRv6引流策略,成功在报文扩展头中压入段路由头,段路由携带的段路由列表(SID)为{路由器2(2001:2:3::1)→路由器3(2001:3:4::1)→主机3(2001:3:1::2)}. 此时路由器1作为源节点,根据压入SRH中段的剩余值找到相应段路由列表,即路由器2的IP,替换IPv6目的地址,并根据新IPv6目的地址进行路由转发,从而将报文发给下一跳路由器2.
路由器2收到报文后,检查SRH头中的SL>1作为中间节点,根据SRH中SL减1后找到相应段路由列表,即路由器3的IP地址替换IPv6的目的地址,如图12所示,同时将SL−1根据新IPv6目的地址进行路由转发,从而将报文发给路由器3. 路由器3收到报文后,检查SRH头中的SL=1作为尾节点,获取下一跳为主机3,并将SRH从报文中弹出,从而将原始报文发送给主机3.
结果表明,原型芯片能够成功部署SRv6功能,支持主机1发与主机3之间的报文按照SRv6指定路径进行路由转发,实现加SRH头和去SRH头. 通过修改SRH的段路由列表实现修改报文转发路径,能够按需进行新业务的逻辑编程.
5.2.3 资源评估
在本文实验中,使用国产FPGA综合工具评估了 映射在耦合芯粒中的关键模块硬件资源利用率,包括芯粒间通信相关的处理逻辑FPGA OS、可重构分组处理流水线2大部分. 表2列出了耦合芯粒中实现的功能模块.
表 2 耦合芯粒中功能模块资源评估Table 2. Resource Evaluation of Functional Modules in Coupled ChipletSRv6功能模块 资源 LUT FF BRAM 普通IPv6处理 158 142 0 SRv6源端处理 2 132 878 5 SRv6中间处理 1 827 1 213 10 SRv6末端处理 1 912 1 300 10 解析与汇聚逻辑 3 834 2 932 52 SRv6功能模块总和 9 863 6 465 77 FPGA OS 15 160 8 461 44 FPGA OS模块总和 145 016 217 524 526 工作在125 MHz时钟频率下. 硬件资源使用情况,包括查找表(lookup table,LUT)资源,即逻辑处理资源;触发器(flip flop,FF)资源;块存储(block memory,BRAM)资源. 从表2中可以看出,在耦合芯粒上部署SRv6功能模块,SRv6功能逻辑资源占比约6.8%,寄存器资源占比约2.97%;FPGA OS功能逻辑资源仅占比约10.5%,寄存器资源占比约3.89%,可以有效支持新耦合加速功能的部署.
6. 结 论
本文提出新型敏捷可定制NP架构ChipletNP,提出了基于Chiplet技术解耦异质资源和交换,处理、加速耦合等芯粒的ChipletNP架构以及分组处理和控制模型,定义并设计实现了面向芯粒间统一互连的敏捷交换网络;提出面向网络应用的耦合加速技术,并设计开发了一款集成商用CPU、FPGA和自研敏捷交换芯粒的银河衡芯敏捷NP芯片YHHX-NP,基于该芯片的应用部署与实验结果表明,ChipletNP可支持NP的快速敏捷定制,可以有效承载SRv6等新型网络协议与网络功能部署以满足不同的应用及部署场景,能够支持NP的快速定制和演化发展需求.
作者贡献声明:李韬和杨惠提出了架构设计思路和撰写论文;杨惠提出实验方法并修改全文;厉俊男负责撰写论文部分内容;刘汝霖负责完成实验;孙志刚提出指导意见.李韬和杨惠为共同第一作者.
-
表 1 Wasm安全研究分类统计
Table 1 Classification Statistics of Wasm Security Research
研究方向 篇数 占比/% 安全实证 4 9.52 漏洞检测与利用 21 50.00 安全增强 9 21.43 形式语义与程序验证 8 19.05 表 2 Wasm安全威胁模型
Table 2 Security Threat Model of Wasm
威胁层面 安全漏洞 根因分析 高级语言支持 越界访问、 由高级语言的不安全特性引入,编译后
得到的Wasm程序包含易被利用的
漏洞.格式化字符串、 整型溢出、 释放后使用 编译工具链 内存分配器缺陷、 编译工具链无法对高级语言与Wasm的
差异进行正确转换.类型转换错误、 危险库函数 二进制表示 非托管栈溢出、 Wasm线性内存的必要安全检查缺失. 非托管栈上的
缓冲区溢出、堆元数据损坏、 间接调用重定向 语言虚拟机 主机环境注入、 Wasm虚拟机或即时编译器的安全
检查缺失或实现错误.侧信道攻击、 沙箱逃逸 表 3 Wasm 安全实证研究工作总结分析
Table 3 Summary and Analysis of Empirical Studies on Wasm Security
研究内容 研究工作 研究数据集 分析方法 开源 主要结论 高级语言支持 Stiévenart等人[43] 4469 个具有缓冲区溢出漏洞的C程序定量+定性 √ 相同C程序对应的x86程序和Wasm程序的运行结果可能不同,其主要原因在于x86和Wasm在标准库的实现、所提供的安全保护机制和运行环境上存在差异. Stiévenart等人[44] 17802 个存在漏洞的 C程序定量+定性 √ 编译工具链 Romano等人[22] Emscripten的146 个Wasm相关漏洞报告 定量+定性 √ 编译工具链中的漏洞主要来自高级语言与Wasm的同步机制差异、数据类型不兼容、内存模型差异等方面. 二进制表示 Hilbig等人[85] 来自包管理器和实时网站的 8461 个Wasm
二进制文件定量+定性 √ Wasm二进制表示层面的安全威胁主要来自不安全的高级语言特性、非托管栈的错误使用、不安全的外部接口等. 表 4 Wasm 漏洞检测研究工作总结分析
Table 4 Summary and Analysis of Research Work on Wasm Vulnerability Detection
检测方法 主要技术 研究工作 具体技术 程序表示 漏洞类型 准确率/% 开源 静态检测 程序分析 Wassail[88] 信息流分析+污点分析 控制流图 64 √ Wasmati[89-90] 数据流分析 代码属性图 内存安全漏洞 92.6 √ VeriWasm[91] 抽象解释 控制流图 内存安全漏洞 100 √ MinerRay[92] 控制流分析+语义分析 控制流图 加密劫持 99.3 √ WANA[93] 符号执行+执行信息分析 二进制程序 智能合约安全 100 √ 深度学习 MINOS[94] 深度学习 二进制程序 加密劫持 99.0 × 动态检测 模糊测试 WAFL[95] 模糊测试+虚拟机快照 二进制程序 √ Fuzzm[96] 灰盒模糊测试+金丝雀插桩 二进制程序 内存安全漏洞 √ WASAI[97] 混合模糊测试+符号执行 二进制程序 虚假转账 96.6 √ WASMAFL[98] 灰盒模糊测试+分层变异算法 虚拟机源程序 × WasmFuzzer[99] 模糊测试+字节码变异算法 虚拟机源程序 × 运行时特征分析 MineThrottle[100] 重复执行指令序列分析 二进制程序 加密劫持 69.9 × CoinSpy[101] CPU、内存分析+深度学习 二进制程序 加密劫持 100 × MineSweeper[102] 缓存行为分析+加密原语分析 二进制程序 加密劫持 100 √ 污点分析 Szanto等人[103] 运行时污点追踪 二进制程序 100 × TaintAssembly[104] 运行时污点追踪 二进制程序 跨语言安全 √ 混合检测 Wasabi[105] 函数调用插桩+运行时分析 二进制程序 √ EVulHunter[106] 控制流分析+运行时检查 控制流图 虚假转账 86.0 √ 表 5 Wasm 安全增强研究工作总结分析
Table 5 Summary and Analysis of Research Work on Wasm Security Enhancement
类别 研究工作 关键技术 运行时开销/% 应对的安全威胁 开源 研究进展总结 静态安全增强 CROW[113] 代码多样化 代码破解 √ Wasm静态安全增强主要通过对Wasm核心特性和硬件辅助2方面设计安全策略来实现. Swivel[114] 控制流一致性+硬件防护 3.3~240.2 幽灵攻击 √ MS-Wasm[115] 段式内存 + ARM MTE 35~60 内存安全问题 × Vassena[116] 内存标记 内存安全问题 × 动态安全增强 Aerogel[117] 访问控制 18.8~45.9 访问控制缺失 √ Wasm 动态安全增强主要通过利用运行时和硬件的安全特性来实现. SELWasm[118] 自检、加解密、延迟加载 3.45 代码破解 × TWINE[119] Intel SGX 0.9~426.0 执行环境不可信 √ WATZ[120] ARM TrustZone 0.02~5 执行环境不可信 √ VeriZero[121] 零成本软件故障隔离 22.5~25 上下文转换错误 √ 表 6 Wasm 形式语义与程序验证研究工作总结分析
Table 6 Summary and Analysis of Research Work on Wasm Formal Semantics and Program Verification
研究类别 研究工作 发表时间 验证技术 验证工具 被验证的性质 实验数据集 开源 形式语义 Haas等人[55] 2017-06 执行时间 PolyBenchC √ Watt[141] 2018-01 演绎推理 Isabelle[142] 类型系统可靠性 √ Wasm Logic[143] 2018-11 一阶逻辑推理 Isabelle 控制流安全 WebAssembly B树库 × CT-Wasm[144] 2019-01 演绎推理 Isabelle 信息流安全 加密算法库 √ Watt等人[145] 2019-10 约束求解 SC-DRF × 程序验证 Sjölén[146] 2020-09 关系符号执行 Z3 恒定时间安全 Salsa20 √ Vivienne[147] 2021-09 关系符号执行 Z3,CVC4 恒定时间安全 加密算法库 √ WASP[148] 2022-06 混合执行 Z3 功能正确性 B树库、加密库 × -
[1] 杨婷,张嘉元,黄在起,等. 工业控制系统安全综述[J]. 计算机研究与发展,2022,59(5):1035−1053 doi: 10.7544/issn1000-1239.20211154 Yang Ting, Zhang Jiayuan, Huang Zaiqi, et al. Survey of industrial control systems security[J]. Journal of Computer Research and Development, 2022, 59(5): 1035−1053 (in Chinese) doi: 10.7544/issn1000-1239.20211154
[2] Madakam S, Lake V, Lake V, et al. Internet of things (IoT): A literature review[J]. Journal of Computer and Communications, 2015, 3(3): 164−173
[3] Zheng Zibin, Xie Shaoan, Dai Hongning, et al. Blockchain challenges and opportunities: A survey[J]. Internaltional Journal of Web and Grid Services, 2018, 14(4): 352−375 doi: 10.1504/IJWGS.2018.095647
[4] Monrat A A, Schelén O, Andersson K. A survey of blockchain from the perspectives of applications, challenges, and opportunities[J]. IEEE Access, 2019, 7: 117134−117151 doi: 10.1109/ACCESS.2019.2936094
[5] Varghese B, Wang Nan, Barbhuiya S, et al. Challenges and opportunities in edge computing[C]//Proc of the 2016 IEEE Int Conf on Smart Cloud (SmartCloud). Piscataway, NJ: IEEE, 2016: 20−26
[6] Lynn T, Rosati P, Lejeune A, et al. A preliminary review of enterprise serverless cloud computing (function-as-a-service) platforms[C]//Proc of the 7th IEEE Int Conf on Cloud Computing Technology and Science (CloudCom). Piscataway, NJ: IEEE, 2017: 162−169
[7] Leroy X. Java bytecode verification: Algorithms and formalizations[J]. Journal of Automated Reasoning, 2003, 30(3): 235−269
[8] Microsoft. NET[EB/OL]. [2022-11-07]. https://dotnet.microsoft.com/zh-cn/
[9] W3C Community Group. WebAssembly[EB/OL]. [2022-11-07]. https://webassembly.org/
[10] W3C Community Group. WebAssembly types syntax[EB/OL]. (2023-06-27)[2023-06-27]. https://webassembly.github.io/spec/core/syntax/types.html
[11] W3C Community Group. WebAssembly security document[EB/OL]. [2022-11-07]. https://www.wasm.com.cn/docs/security/
[12] W3C Community Group. WebAssembly execution[EB/OL]. (2023-06-27)[2023-06-27]. https://webassembly.github.io/spec/core/exec/index.html
[13] W3C Community Group. WebAssembly structure[EB/OL]. (2023-06-27)[2023-06-27]. https://webassembly.github.io/spec/core/syntax/index.html
[14] W3C. World Wide Web consortium (W3C) brings a new language tothe Web as WebAssembly becomes a W3C recommendation[EB/OL]. (2019-12-05)[2022-11-07]. https://www.w3.org/2019/12/pressrelease-wasm-rec.html.en
[15] W3C Community Group. WebAssembly roadmap[EB/OL]. [2022-11-07]. https://webassembly.org/roadmap/
[16] ByteCode Alliance. WASI: The WebAssembly system interface[EB/OL]. [2022-11-07]. https://wasi.dev/
[17] CNCF. Wasmcloud: Why stop at the edge[EB/OL]. [2022-11-07]. https://wasmcloud.com/
[18] Secondstate. The second state functions[EB/OL]. [2022-11-07]. https://www.secondstate.io/faas/
[19] Fastly. Faster, simpler, and more secure serverless code[EB/OL]. [2022-11-07]. https://www.fastly.com/products/edge-compute
[20] Gurdeep Singh R, Scholliers C. WARDuino: A dynamic WebAssembly virtual machine for programming microcontrollers[C]//Proc of the 16th ACM SIGPLAN Int Conf on Managed Programming Languages and Runtimes. New York: ACM, 2019: 27−36
[21] CNCF. WasmEdge bring the cloud-native and serverless application paradigms to edge computing[EB/OL]. [2022-11-07]. https://wasmedge.org/
[22] Romano A, Liu Xinyue, Kwon Y, et al. An empirical study of bugs in WebAssembly compilers[C]//Proc of the 36th IEEE/ACM Int Conf on Automated Software Engineering (ASE). Piscataway, NJ: IEEE, 2021: 42−54
[23] McFadden B, Lukasiewicz T, Dileo J, et al. Security chasms of Wasm[EB/OL]. (2018-08-03)[2022-11-07]. https://git.edik.cn/book/awesome-wasm-zh/raw/commit/e046f91804fb5deb95affb52d6348de92c5bd99c/spec/us-18-Lukasiewicz-WebAssembly-A-New-World-of-Native_Exploits-On-The-Web-wp.pdf
[24] Lehmann D, Kinder J, Pradel M. Everything old is new again: Binary security of WebAssembly[C]//Proc of the 29th USENIX Security Symp (USENIX Security 20). Berkeley, CA: USENIX Association, 2020: 217−234
[25] Mozilla. Going public launch bug[EB/OL]. (2015-06-12)[2022-11-7]. https://github.com/WebAssembly/design/issues/150
[26] Yee B, Sehr D, Dardyk G, et al. Native client: A sandbox for portable, untrusted x86 native code[J]. Communications of the ACM, 2010, 53(1): 91−99 doi: 10.1145/1629175.1629203
[27] Mozilla. Asm. js: An extraordinarily optimizable, low-level subset of JavaScript[EB/OL]. [2022-11-07]. http://asmjs.org/
[28] W3C Community Group. WebAssembly core specification W3C recommendation, 2019[EB/OL]. (2019-12-05)[2022-11-07]. https://www.w3.org/TR/wasm-core-1/
[29] Clark L. Standardizing WASI: A system interface to run WebAssembly outside the web[EB/OL]. (2019-03-27)[2022-11-07]. https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
[30] W3C. WebAssembly core specification 2.0[EB/OL]. (2019-06-27)[2023-06-27]. https://webassembly.github.io/spec/core/_download/WebAssembly.pdf
[31] Attrapadung N, Hanaoka G, Mitsunari S, et al. Efficient two-level homomorphic encryption in prime-order bilinear groups and a fast implementation in webassembly[C]//Proc of the 13th on Asia Conf on Computer and Communications Security. New York: ACM, 2018: 685−697
[32] Deveria A, Schoors L. Can I use WebAssembly[EB/OL]. (2023-06-11)[2023-06-11]. https://caniuse.com/?search=WebAssembly
[33] Hall A, Ramachandran U. An execution model for serverless functions at the edge[C]//Proc of the 5th Int Conf on Internet of Things Design and Implementation. New York: ACM, 2019: 225−236
[34] Hickey P. Edge programming with rust and WebAssembly[EB/OL]. (2018-12-12)[2022-11-07]. https://www.fastly.com/blog/edge-programming-rust-web-assembly
[35] Hickey P. Lucet: Takes WebAssembly beyond the browser fastly[EB/OL]. (2019-03-28)[2022-11-07]. https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime
[36] Varda K. WebAssembly on cloudflare workers[EB/OL]. (2018-10-01)[2022-11-07]. https://blog.cloudflare.com/webassembly-on-cloudflare-workers/
[37] Block. One. EOSIO: Fast, flexible, and forward-driven[EB/OL]. [2022-11-07]. https://eos.io/
[38] McCallum T. Diving into Ethereum’s virtual machine (EVM): The future of Ewasm[EB/OL]. (2019-10-21)[2022-11-07]. https://hackernoon.com/diving-into-ethereums-virtual-machine-the-future-of-ewasm-wrk32iy
[39] Brown A, Sun Mingqiu. A proposed WebAssembly system interface API for machine learning[EB/OL]. [2022-11-07]. https://github.com/WebAssembly/wasi-nn
[40] Stack. Viry3D: A game engine that supports Wasm[EB/OL]. [2022-11-07]. http://www.viry3d.com/
[41] Akinyemi S. Awesome WebAssembly languages[EB/OL]. [2022-11-07]. https://github.com/appcypher/awesome-wasm-langs
[42] Peny P. MicroPython and WebAssembly (Wasm)[EB/OL]. [2022-11-07]. https://github.com/pmp-p/micropython-ports-wasm
[43] Stiévenart Q, De Roover C, Ghafari M. The security risk of lacking compiler protection in WebAssembly[C]//Proc of the 21st IEEE Int Conf on Software Quality, Reliability and Security (QRS). Piscataway, NJ: IEEE, 2021: 132−139
[44] Stiévenart Q, De Roover C, Ghafari M. Security risks of porting C programs to webassembly[C]//Proc of the 37th ACM/SIGAPP Symp on Applied Computing. New York: ACM, 2022: 1713−1722
[45] Astrauskas V, Matheja C, Poli F, et al. How do programmers use unsafe rust?[J]. Proceedings of the ACM on Programming Languages, 2020, 4 (OOPSLA): 1−27
[46] Van Rossum G. Python/C API reference manual[EB/OL]. (2006-09-19)[2022-11-07]. http://sephounet.free.fr/pdf/python/api.pdf
[47] Zakai A, Dawborn T, Shawabkeh M, et al. Emscripten: C/C++ compiler for Wasm[EB/OL]. [2022-11-07]. https://emscripten.org/
[48] Rust Foundation. The Rust programming language[EB/OL]. [2022-11-07]. https://github.com/rust-lang/rust
[49] Rust and WebAssembly Working Group. Wasm-bindgen: Facilitating high-level interactions between Wasm modules and JavaScript[EB/OL]. [2022-11-07]. https://github.com/rustwasm/wasm-bindgen
[50] Near. AssemblyScript: TypeScript complier for Wasm[EB/OL]. [2022-11-07]. https://github.com/AssemblyScript/assemblyscript
[51] van Laethem A, Esteban D, Evans Ron, et al. TinyGo: Go compiler for small places[EB/OL]. [2022-11-07]. https://github.com/tinygo-org/tinygo
[52] W3C Community Group. WebAssembly text format[EB/OL]. (2023-06-27)[2023-06-27]. https://webassembly.github.io/spec/core/text/index.html
[53] W3C. WebAssembly Web API[EB/OL]. (2022-04-19)[2022-11-07]. https://www.w3.org/TR/wasm-web-api-2/
[54] W3C Community Group. Understanding the JS API[EB/OL]. [2022-11-07]. https://webassembly.org/getting-started/js-api/
[55] Haas A, Rossberg A, Schuff D L, et al. Bringing the Web up to speed with WebAssembly[C]//Proc of the 38th ACM SIGPLAN Conf on Programming Language Design and Implementation. New York: ACM, 2017: 185−200
[56] Google. What is V8[EB/OL]. [2022-11-07]. https://v8.dev/
[57] Mozilla. SpiderMonkey: Mozilla’s JavaScript and WebAssembly engine[EB/OL]. [2022-11-07]. https://spidermonkey.dev/
[58] Akinyemi S. Awesome WebAssembly runtimes[EB/OL]. [2022-11-07]. https://github.com/appcypher/awesome-wasm-runtimes
[59] Block. One. EOS VM: EOSIO[EB/OL]. [2022-11-07]. https://eos.io/for-developers/build/eos-vm/
[60] Intel. WebAssembly micro runtime[EB/OL]. [2022-11-07]. https://github.com/bytecodealliance/wasm-micro-runtime
[61] Bytecode Alliance. Wasmtime: A standalone runtime for WebAssembly[EB/OL]. [2022-11-07]. https://github.com/bytecodealliance/wasmtime
[62] Akbary S, Chaudry W, Chevalier S, et al. Run any code on any client with WebAssembly and Wasmer[EB/OL]. [2022-11-07]. https://wasmer.io/
[63] D’Antras A. Double free vulnerability in wasmtime[EB/OL]. (2021-12-04)[2022-11-07]. https://github.com/bytecodealliance/wasmtime/pull/3582
[64] Crichton A. x64: Incorrect codegen for f32x4. abs v128. not[EB/OL]. (2021-09-11)[2022-11-07]. https://github.com/bytecodealliance/wasmtime/issues/3327
[65] McCaskey M. Sandbox excape in wasmer[EB/OL]. (2020-10-24)[2022-11-07]. https://github.com/wasmerio/wasmer/issues/1759
[66] Morrisett G, Walker D, Crary K, et al. From system F to typed assembly language[J]. ACM Transactions on Programming Languages and Systems, 1999, 21(3): 527−568 doi: 10.1145/319301.319345
[67] Necula G C. Proof-carrying code[C]//Proc of the 24th ACM SIGPLAN-SIGACT Symp on Principles of Programming Languages. New York: ACM, 1997: 106−119
[68] Wahbe R, Lucco S, Anderson T E, et al. Efficient software-based fault isolation[C]//Proc of the 14th ACM Symp on Operating Systems Principles. New York: ACM, 1993: 203−216
[69] Pierce B C. Types and Programming Languages[M]. Cambridge, MA: MIT press, 2002: 1−13
[70] Damas L, Milner R. Principal type-schemes for functional programs[C]//Proc of the 9th ACM SIGPLAN-SIGACT Symp on Principles of Programming Languages. New York: ACM, 1982: 207−212
[71] Kozen D, Tseng W L D. The Böhm–Jacopini theorem is false, propositionally[C]//Proc of the 9th Int Conf on Mathematics of Program Construction. Berlin: Springer, 2008: 177−192
[72] Lindholm T, Yellin F, Bracha G, et al. The Java virtual machine specification[EB/OL]. (2013-02-28)[2023-06-27]. https://docs.oracle.com/javase/specs/jvms/se7/html/
[73] Arce I. The Shellcode generation[J]. IEEE Security & Privacy, 2004, 2(5): 72−76
[74] Abadi M, Budiu M, Erlingsson U, et al. Control-flow integrity principles, implementations, and applications[J]. ACM Transactions on Information and System Security, 2009, 13(1): 1−40
[75] Zhang Chao, Wang Tielei, Wei Tao, et al. IntPatch: Automatically fix integer-overflow-to-buffer-overflow vulnerability at compile-time[C]//Proc of the 15th European Symp on Research in Computer Security. Berlin: Springer, 2010: 71−86
[76] John B. Memory safety: Old vulnerabilities become new with WebAssembly[EB/OL]. (2018-12-06)[2022-11-07]. https://www.forcepoint.com/blog/x-labs/new-whitepaper-memory-safety-old-vulnerabilities-become-new-webassembly
[77] Lea D. A memory allocator[EB/OL]. (2000-04-04)[2022-11-07]. https://gee.cs.oswego.edu/dl/html/malloc.html
[78] 陈小全,薛锐. 程序漏洞:原因、利用与缓解——以C和C++语言为例[J]. 信息安全学报,2017,2(4):41−56 Chen Xiaoquan, Xue Rui. Cause, exploitation and mitigation of program vulnerability—C and C++ language as an example[J]. Journal of Cyber Security, 2017, 2(4): 41−56 (in Chinese)
[79] Zakai A, Dawborn T, Shawabkeh M, et al. Emscripten file system API[EB/OL]. [2022-11-07]. https://emscripten.org/docs/api_reference/Filesystem-API.html
[80] Cowan C, Wagle F, Pu C, et al. Buffer overflows: Attacks and defenses for the vulnerability of the decade[C]//Proc of the 2000 DARPA Information Survivability Conf and Exposition. Piscataway, NJ: IEEE, 2000: 119−129 Cowan C,Wagle F,Pu C,et al. Buffer overflows:Attacks and defenses for the vulnerability of the decade[C]//Proc of the 2000 DARPA Information Survivability Conf and Exposition. Piscataway,NJ:IEEE,2000:119−129
[81] Gisbert H M, Ripoll I. On the effectiveness of nx, ssp, renewssp, and aslr against stack buffer overflows[C]//Proc of the 13th IEEE Int Symp on Network Computing and Applications. Piscataway, NJ: IEEE, 2014: 145−152
[82] Dhem J F, Koeune F, Leroux P A, et al. A practical implementation of the timing attack[C]//Proc of the 3rd Int Conf on Smart Card Research and Advanced Applications. Berlin: Springer, 1998: 167−182
[83] Kocher P, Horn J, Fogh A, et al. Spectre attacks: Exploiting speculative execution[J]. Communications of the ACM, 2020, 63(7): 93−101 doi: 10.1145/3399742
[84] Richards G, Hammer C, Burg B, et al. The eval that men do[C]//Proc of the 25th European Conf on Object-Oriented Programming. Berlin: Springer, 2011: 52−78
[85] Hilbig A, Lehmann D, Pradel M. An empirical study of real-world webassembly binaries: Security, languages, use cases[C]//Proc of the 30th Web Conf 2021. New York: ACM, 2021: 2696−2708
[86] NSA Center. Juliet C/C++ 1.3[EB/OL]. (2017-10-01)[2022-11-07]. https://samate.nist.gov/SARD/test-suites/112
[87] Lattner C, Adve V. LLVM: A compilation framework for lifelong program analysis & transformation[C]//Proc of the 2004 Int Symp on Code Generation and Optimization. Piscataway, NJ: IEEE, 2004: 75−86 Lattner C,Adve V. LLVM:A compilation framework for lifelong program analysis & transformation[C]//Proc of the 2004 Int Symp on Code Generation and Optimization. Piscataway,NJ:IEEE,2004:75−86
[88] Stiévenart Q, De Roover C. Compositional information flow analysis for WebAssembly programs[C]//Proc of the 20th IEEE Int Working Conf on Source Code Analysis and Manipulation (SCAM). Piscataway, NJ: IEEE, 2020: 13−24
[89] Lopes P. Discovering vulnerabilities in WebAssembly with code property graphs[EB/OL]. [2022-11-07]. https://www.inesc-id.pt/publications/17400/pdf/
[90] Brito T, Lopes P, Santos N, et al. Wasmati: An efficient static vulnerability scanner for WebAssembly[J]. Computers & Security, 2022, 118: 102745 Brito T,Lopes P,Santos N,et al. Wasmati:An efficient static vulnerability scanner for WebAssembly[J]. Computers & Security,2022,118:102745
[91] Johnson E, Thien D, Alhessi Y, et al. Доверяй, но проверяй: SFI safety for native-compiled Wasm[C]//Proc of the 28th Network and Distributed System Security Symp (NDSS). Reston, VA: The Internet Society, 2021
[92] Romano A, Zheng Y, Wang W. MinerRay: Semantics-aware analysis for ever-evolving cryptojacking detection[C]//Proc of the 35th IEEE/ACM Int Conf on Automated Software Engineering (ASE). Piscataway, NJ: IEEE, 2020: 1129−1140
[93] Wang Dong, Jiang Bo, Chan W K. WANA: Symbolic execution of Wasm bytecode for cross-platform smart contract vulnerability detection[J]. arXiv preprint, arXiv: 2007.15510, 2020
[94] Naseem F N, Aris A, Babun L, et al. MINOS: A lightweight real-time cryptojacking detection system[C]//Proc of the 28th Network and Distributed System Security Symp (NDSS). Reston, VA: The Internet Society, 2021
[95] Haßler K, Maier D. WAFL: Binary-only WebAssembly fuzzing with fast snapshots[C]//Proc of the 5th Reversing and Offensive-oriented Trends Symp. New York: ACM 2021: 23−30
[96] Lehmann D, Torp M T, Pradel M. Fuzzm: Finding memory bugs through binary-only instrumentation and fuzzing of WebAssembly[J]. arXiv preprint, arXiv: 2110.15433, 2021
[97] Chen Weimin, Sun Zihan, Wang Haoyu, et al. WASAI: Uncovering vulnerabilities in Wasm smart contracts[C]//Proc of the 31st ACM SIGSOFT Int Symp on Software Testing and Analysis. New York: ACM, 2022: 703−715
[98] 林敏,张超. 针对 WebAssembly 虚拟机的模糊测试方案[J]. 网络安全技术与应用,2020,2(6):15−18 doi: 10.3969/j.issn.1009-6833.2020.06.011 Lin Min, Zhang Chao. Fuzzing scheme for WebAssembly virtual machine[J]. Network Security Technology & Application, 2020, 2(6): 15−18 (in Chinese) doi: 10.3969/j.issn.1009-6833.2020.06.011
[99] Jiang Bo, Li Zichao, Huang Yuhe, et al. WasmFuzzer: A fuzzer for WebAssembly virtual machines[C]//Proc of the 34th Int Conf on Software Engineering and Knowledge Engineering (SEKE 2022). Pittsburgh, Pennsylvania: KSIR Virtual Conf Center, 2022: 537−542
[100] Bian Weikang, Meng Wei, Zhang Mingxue. MineThrottle: Defending against Wasm in-browser cryptojacking[C]//Proc of the 29th ACM Web Conf 2020. New York: ACM, 2020: 3112−3118
[101] Kelton C, Balasubramanian A, Raghavendra R, et al. Browser-based deep behavioral detection of web cryptomining with CoinSpy[C]//Proc of the 2020 Workshop on Measurements, Attacks, and Defenses for the Web (MADWeb). Reston, VA: The Internet Society, 2020. 2020: 1−12
[102] Konoth R K, Vineti E, Moonsamy V, et al. MineSweeper: An in-depth look into drive-by cryptocurrency mining and its defense[C]//Proc of the 25th ACM SIGSAC Conf on Computer and Communications Security. New York: ACM, 2018: 1714−1730
[103] Szanto A, Tamm T, Pagnoni A. Taint tracking for WebAssembly[J]. arXiv preprint, arXiv: 1807.08349, 2018
[104] Fu W, Lin R, Inge D. TaintAssembly: Taint-based information flow control tracking for WebAssembly[J]. arXiv preprint, arXiv: 1802.01050, 2018
[105] Lehmann D, Pradel M. Wasabi: A framework for dynamically analyzing WebAssembly[C]//Proc of the 24th Int Conf on Architectural Support for Programming Languages and Operating Systems. New York: ACM, 2019: 1045−1058
[106] Quan Lijin, Wu Lei, Wang Haoyu. EVulHunter: Detecting fake transfer vulnerabilities for EOSIO’s smart contracts at WebAssembly-level[J]. arXiv preprint, arXiv: 1906.10362, 2019
[107] Yamaguchi F, Golde N, Arp D, et al. Modeling and discovering vulnerabilities with code property graphs[C]//Proc of the 35th IEEE Symp on Security and Privacy. Piscataway, NJ: IEEE, 2014: 590−604
[108] Bytecode Alliance. Lucet: A native WebAssembly compiler and runtime[EB/OL]. [2022-11-07]. https://github.com/bytecodealliance/lucet
[109] Dan. Javascript obfuscate and encoder[EB/OL]. [2022-11-07]. https://www.cleancss.com/javascript-obfuscate/index.php.
[110] Gu Jiuxiang, Wang Zhenhua, Kuen J, et al. Recent advances in convolutional neural networks[J]. Pattern Recognition, 2018, 77: 354−377 doi: 10.1016/j.patcog.2017.10.013
[111] Fioraldi A, Maier D, Eißfeldt H, et al. AFL++: Combining incremental steps of fuzzing research[C]//Proc of the 14th USENIX Workshop on Offensive Technologies (WOOT 20). Berkeley, CA: USENIX Association 2020
[112] Musch M, Wressnegger C, Johns M, et al. New kid on the Web: A study on the prevalence of WebAssembly in the wild[C]//Proc of the 16th Int Conf on Detection of Intrusions and Malware, and Vulnerability Assessment. Berlin: Springer, 2019: 23−42
[113] Cabrera Arteaga J, Floros O, Vera Perez O, et al. CROW: Code diversification for Webassembly[C]//Proc of the 2021 Workshop on Measurements, Attacks, and Defenses for the Web (MADWeb), Reston, VA, USA: The Internet Society, 2021
[114] Narayan S, Disselkoen C, Moghimi D, et al. Swivel: Hardening WebAssembly against Spectre[C]//Proc of the 30th USENIX Security Symp (USENIX Security 21). Berkeley, CA: USENIX Association, 2021: 1433−1450
[115] Disselkoen C, Renner J, Watt C, et al. Position paper: Progressive memory safety for WebAssembly[C]//Proc of the 8th Int Workshop on Hardware and Architectural Support for Security and Privacy. New York: ACM, 2019: 1−8
[116] Vassena M, Patrignani M. Memory safety preservation for WebAssembly[C/OL]//Proc of the 47th ACM SIGPLAN Symp on Principles of Programming Languages. New York: ACM, 2020[2022-11-07]. https://people.cispa.io/marco.vassena/publications_files/sc-wasm.pdf
[117] Liu Renju, Garcia L, Srivastava M. Aerogel: Lightweight access control framework for WebAssembly-based bare-metal IoT devices[C]//Proc of the 6th IEEE/ACM Symp on Edge Computing (SEC). Piscataway, NJ: IEEE, 2021: 94−105
[118] Sun Jian, Cao Dingyuan, Liu Ximing, et al. SELWasm: A code protection mechanism for WebAssembly[C]//Proc of the 2019 IEEE Int Conf on Parallel & Distributed Processing with Applications, Big Data & Cloud Computing, Sustainable Computing & Communications, Social Computing & Networking (ISPA/BDCloud/SocialCom/SustainCom). Piscataway, NJ: IEEE, 2019: 1099−1106
[119] Ménétrey J, Pasin M, Felber P, et al. TWINE: An embedded trusted runtime for WebAssembly[C]//Proc of the 37th IEEE Int Conf on Data Engineering (ICDE). Piscataway, NJ: IEEE, 2021: 205−216
[120] Ménétrey J, Pasin M, Felber P, et al. WATZ: A trusted WebAssembly runtime environment with remote attestation for TrustZone[J]. arXiv preprint, arXiv: 2206.08722, 2022
[121] Kolosick M, Narayan S, Johnson E, et al. Isolation without taxation: Near-zero-cost transitions for WebAssembly and SFI[J]. Proceedings of the ACM on Programming Languages, 2022, 6(POPL): 1−30
[122] Jacob M, Jakubowski M H, Naldurg P, et al. The superdiversifier: Peephole individualization for software protection[C]//Proc of the 3rd Int Workshop on Security. Berlin: Springer, 2008: 100−120
[123] Sasnauskas R, Chen Y, Collingbourne P, et al. Souper: A synthesizing superoptimizer[J]. arXiv preprint, arXiv: 1711.04422, 2017
[124] Moura L, Bjørner N. Z3: An efficient SMT solver[C]//Proc of the 14th Int Conf on Tools and Algorithms for the Construction and Analysis of Systems. Berlin: Springer, 2008: 337−340
[125] Denis F, Bernstein D J, Percival C, et al. The sodium cryptography library[EB/OL]. [2022-11-07]. https://download.libsodium.org/doc/
[126] Google. TurboFan: A V8’s optimizing compilers[EB/OL]. [2022-11-07]. https://v8.dev/docs/turbofan
[127] Akritidis P, Costa M, Castro M, et al. Baggy bounds checking: An efficient and backwards-compatible defense against out-of-bounds errors[C]//Proc of the 18th USENIX Security Symp. Berkeley, CA: USENIX Association, 2009
[128] Nagarakatte S, Zhao Jianzhou, Martin M M K, et al. SoftBound: Highly compatible and complete spatial memory safety for C[C]//Proc of the 30th ACM SIGPLAN Conf on Programming Language Design and Implementation. New York: ACM, 2009: 245−258
[129] Van Der Kouwe E, Nigade V, Giuffrida C. Dangsan: Scalable use-after-free detection[C]//Proc of the 12th European Conf on Computer Systems. New York: ACM, 2017: 405−419
[130] OW2 consortium. ASM: An all purpose Java bytecode manipulation and analysis framework[EB/OL]. (2022-10-02)[2022-11-07]. https://asm.ow2.io/
[131] Vallée-Rai R, Co P, Gagnon E, et al. Soot: A Java bytecode optimization framework[C]//Proc of the 1999 Conf of the Centre for Advanced Studies on Collaborative Research. Indianapolis, Indiana: IBM, 1999
[132] Intel. What is Intel SGX[EB/OL]. [2023-06-27]. https://www.intel.com/content/www/us/en/architecture-and-technology/software-guard-extensions.html
[133] Sabt M, Achemlal M, Bouabdallah A. Trusted execution environment: What it is, and what it is not[C]//Proc of the 14th IEEE Trustcom/BigDataSE/ISPA. Piscataway, NJ: IEEE, 2015: 57−64
[134] Bellard F. QEMU, a fast and portable dynamic translator[C]//Proc of the FREENIX Track: 2005 USENIX Annual Technical Conf. Berkeley, CA: USENIX Association, 2005: 41−46
[135] SQLite Consortium. SQLite home page[EB/OL]. (2022-09-29)[2022-11-07]. https://www.sqlite.org/index.html
[136] Priebe C, Muthukumaran D, Lind J, et al. SGX-LKL: Securing the host OS interface for trusted execution[J]. arXiv preprint, arXiv: 1908.11143, 2019
[137] Pinto S, Santos N. Demystifying ARM TrustZone: A comprehensive survey[J]. ACM Computing Surveys, 2019, 51(6): 1−36
[138] Coker G, Guttman J, Loscocco P, et al. Principles of remote attestation[J]. International Journal of Information Security, 2011, 10(2): 63−81 doi: 10.1007/s10207-011-0124-7
[139] Kaplan D, Powell J, Woller T. AMD memory encryption[EB/OL]. (2021-10-18)[2022-11-07]. https://www.amd.com/system/files/TechDocs/memory-encryption-white-paper.pdf
[140] Lee D, Kohlbrenner D, Shinde S, et al. Keystone: An open framework for architecting trusted execution environments[C]//Proc of the 15th European Conf on Computer Systems. New York: ACM, 2020: 1−16
[141] Watt C. Mechanising and verifying the WebAssembly specification[C]//Proc of the 7th ACM SIGPLAN Int Conf on Certified Programs and Proofs. New York: ACM, 2018: 53−65
[142] Nipkow T, Wenzel M, Paulson LC. Isabelle/HOL: A Proof Assistant for Higher-Order Logic[M]. Berlin: Springer, 2002
[143] Watt C, Maksimović P, Krishnaswami N R, et al. A program logic for first-order encapsulated WebAssembly[C]//Proc of the 33rd European Conf on Object-Oriented Programming. Berlin: Springer, 2019
[144] Watt C, Renner J, Popescu N, et al. CT-Wasm: Type-driven secure cryptography for the web ecosystem[J]. Proceedings of the ACM on Programming Languages, 2019, 3(POPL): 1−29
[145] Watt C, Rossberg A, Pichon-Pharabod J. Weakening WebAssembly[J]. Proceedings of the ACM on Programming Languages, 2019, 3(OOPSLA): 1−28
[146] Sjölén J. Relational symbolic execution in WebAssembly[D]. Stockholm, Sweden: KTH, School of Electrical Engineering and Computer Science (EECS), 2020
[147] Tsoupidi R M, Balliu M, Baudry B. Vivienne: Relational verification of cryptographic implementations in WebAssembly[C]//Proc of the 6th IEEE Secure Development Conf (SecDev). Piscataway, NJ: IEEE, 2021: 94−102
[148] Marques F, Fragoso Santos J, Santos N, et al. Concolic execution for WebAssembly[C]//Proc of the 36th European Conf on Object-Oriented Programming (ECOOP 2022). Berlin: Springer, 2022
[149] Cann R. Formal Semantics: An Introduction[M]. Cambridge, UK: Cambridge University Press, 1993
[150] Adve S V, Gharachorloo K. Shared memory consistency models: A tutorial[J]. Computer, 1996, 29(12): 66−76 doi: 10.1109/2.546611
[151] Hoare C A R. Communicating sequential processes[J]. Communications of the ACM, 1978, 21(8): 666−677 doi: 10.1145/359576.359585
[152] Fetzer J H. Program verification: The very idea[J]. Communications of the ACM, 1988, 31(9): 1048−1063 doi: 10.1145/48529.48530
[153] Sozeau M, Bertot Y, Dénès M, et al. The Coq proof assistant[EB/OL]. [2023-06-27]. https://coq.inria.fr/
[154] Farina G P, Chong S, Gaboardi M. Relational symbolic execution[C]//Proc of the 21st Int Symp on Principles and Practice of Declarative Programming. New York: ACM, 2019: 1−14
[155] Bernstein D J. The Salsa20 Family of Stream Ciphers[M]//New Stream Cipher Designs. Berlin: Springer, 2008: 84−97
[156] 张芸,刘佳琨,夏鑫,等. 基于信息检索的软件缺陷定位技术研究进展[J]. 软件学报,2020,31(8):2432−2452 Zhang Yun, Liu Jiakun, Xia Xin, et al. Research progress on software bug localization technology based on information retrieval[J]. Journal of Software, 2020, 31(8): 2432−2452 (in Chinese)
[157] Ghanbari A, Benton S, Zhang Lingming. Practical program repair via bytecode mutation[C]//Proc of the 28th ACM SIGSOFT Int Symp on Software Testing and Analysis. New York: ACM, 2019: 19−30
[158] Jia Yue, Harman M. An analysis and survey of the development of mutation testing[J]. IEEE Transactions on Software Engineering, 2010, 37(5): 649−678
[159] Microsoft. Dafny[EB/OL]. [2022-11-07]. https://dafny.org/
[160] Toccata. Why3: Where programs meet provers[EB/OL]. [2022-11-07]. http://why3.lri.fr/
[161] Jacobs B, Smans J, Piessens F, et al. VeriFast: A research prototype of a tool for modular formal verification[EB/OL]. (2021-04-21)[2022-11-07]. https://github.com/verifast/verifast
-
期刊类型引用(1)
1. 林涵越,吴婧雅,卢文岩,钟浪辉,鄢贵海. Neptune:一种通用网络处理器微结构模拟和性能仿真框架. 计算机研究与发展. 2025(05): 1091-1107 . 本站查看
其他类型引用(0)