Abstract
基于FPGA的硬件加速器因其多功能性、可定制性、能效、恒定的延迟和可扩展性而越来越受欢迎。FPGA可以针对特定算法进行定制,实现高效的硬件实现,有效利用算法并行性。这可以相对于CPU和GPU带来显著的性能提升,特别是对于高度并行的应用。例如,最近的一项研究发现,Stratix 10 FPGAs可以达到TitanX Pascal GPU性能的90%,同时消耗不到50%的功率。这使得FPGA成为加速机器学习(ML)工作负载的吸引选择。然而,作者的研究发现现有基于Xilinx FPGA的硬件加速解决方案存在隐私和安全漏洞。这些漏洞源于内存初始化的缺失和进程隔离不足,这为未经授权访问进程使用的私有数据提供了潜在途径。为了说明这个问题,作者使用运行Xilinx PetaLinux工具的Xilinx ZCU104开发板进行了实验。作者发现PetaLinux并没有有效地清除与已终止进程相关的内存位置,使它们容易受到内存刮取攻击(MSA)。本文有两个主要贡献:第一个贡献是使用不同用户空间的Xilinx调试器进行攻击的方法论。作者发现,由于进程隔离不足,作者能够从不同的用户空间访问一个用户的进程ID、虚拟地址空间和页表。第二个贡献是表征已终止进程并访问其私有数据的方法论。作者以Xilinx ML应用库为例进行了说明。
I Introduction
FPGAs作为异构计算系统中的硬件加速器越来越受欢迎,特别是在基于主机的环境如数据中心[1]和云计算系统[2]中。它们的采用是由其可重新配置的性质[3],较低的功耗[4],高性能[5],可扩展性[6],低成本[7]以及将计算密集型任务从主机CPU卸载的能力[8]推动的,从而在为主机CPU减轻总体负担的同时,向客户提供更好的服务质量。图1提供了基于主机的系统的总体概述。
多家半导体公司正在积极开发高性能FPGA以满足异构计算系统中不断增长的需求,特别是在数据中心和云服务提供商中。AMD的赛灵思推出了自适应SOC FPGA[9]和Zynq系统芯片(SoC)。微软的Project Brainwave利用FPGA进行实时AI推理加速[10],在云和边缘环境中优先考虑低延迟和高性能。IBM将其云-FPGA[11]解决方案整合到基础设施即服务(IaaS)中,专注于神经网络建模。包括AWS在内的领先云服务提供商,通过亚马逊EC2 F1实例[12],利用赛灵思和Altera的FPGA提供FPGA加速服务[13],通常将其称为“FPGA即服务”(FaaS)或“加速即服务”(AaaS)[14]。
将FPGA集成到基于主机的系统中会引入早期在[14]中描述的安全问题。然而,以下风险在之前并未被考虑。
Security Risks with Using Local Memory
当将计算密集型任务从宿主处理单元(PU)卸载到FPGA进行加速时,FPGA的本地DRAM用于在将结果返回给宿主之前临时存储[15]并重用数据。然而,这存在一个安全问题,因为第一个客用户的进程结束后,后续访问FPGA DRAM的客用户可能能够从第一个用户那里检索内存残留。在本文中,作者通过从一个已终止的计算机视觉机器学习应用中刮取FPGA DRAM中的内存残留来演示这一点。
图1:一个通用基于宿主的系统。
在CPU中,内存管理单元(MMU)强制在多个进程之间实现内存隔离[16]。类似地,在Xilinx FPGAs中,像Xen这样的虚拟机监控器管理在FPGA上运行的多个进程之间的隔离[17]。然而,在CPU中,页表仅可被操作系统(OS)访问,任何用户进程都无法访问,包括用户可能运行的任何程序调试器。作者发现,与CPU不同,Xilinx调试器可以访问内存页表。这是因为Xen不是由宿主操作系统管理,而是由用户使用PetaLinux进行配置(见第1-C节)。作者认为这是一个巨大的安全漏洞,不仅影响Xilinx FPGAs,还影响其他嵌入式系统。为了本文的目的,作者将重点限制在FPGAs上。
本地内存刮取作为一种攻击向量:
在这项工作中,作者展示了
(i)Xilinx FPGAs不执行自动内存清理,留下内存残留,(ii)Xilinx调试器可以从第二个用户空间(即使是单租户FPGA)调用,以及(iii)页表可以从调试器访问。作者提出了一种内存刮取技术,该技术使用上述漏洞来说明如何重建有关以前程序的相关信息。
主要科学发现:作者的主要科学发现是,许多加速器,包括FPGAs、GPU和各种嵌入式系统,都有自己的私有内存,这些内存不受宿主操作系统的直接控制。出于性能原因,让宿主操作系统调解每一次本地内存访问是不切实际的。这造成了一个普遍的安全问题,在本文中,作者针对Xilinx FPGAs发起了一个针对性的攻击,以突出这个问题。
Related Work
周等[18]和莫里斯等[19]之前攻击了基于云系统的NVIDIA异构内存系统,允许攻击者访问并重构已终止进程中的数据。类似的问题也影响到了ARM Mali GPUs,由于无意中重用了已释放的页面,新进程可以访问已终止进程的页面[20]。
内存初始化解决方案_:一些研究调查了快速的DRAM初始化技术。Seshadri等人提出了_RowClone_,这是一种用零初始化连续DRAM段的技巧[21]。Seol等人提出了_RowReset_,这是一种硬件高效的内存初始化解决方案,通过操作VDD和VSS到DRAM银行[22]。然而,这些方法最适合连续的内存位置。在虚拟环境中,采用地址空间布局随机化(ASLR)[23]来增强安全性,通过随机化DRAM内存位置,提供对内存破坏攻击的防御。然而,在具有非连续内存地址的多租户FPGA设置中[24],上述内存初始化解决方案可能会无意中擦除活跃的租户用户数据。这些解决方案通常在为已终止用户初始化内存时清除连续的内存位置,这可能包括活跃的租户用户数据。因此,需要更有效的解决方案来初始化非连续内存位置,而不会危及本地DRAM中的活跃用户数据。
Target Platform
领先的云服务提供商,如亚马逊EC2 F1 [25] 和阿里巴巴云 [26],已经采用了AMD的Virtex Ultrascale+ FPGA家族。百度的Apollo平台在自动驾驶车辆中使用了Zynq Ultrascale+ MPSoC FPGA [27]。所有Ultrascale+ FPGA [28] 都配备了板载(本地)内存,供卸载到FPGA板上的进程使用。
为了演示作者的攻击方法,作者选择了Zynq Ultrascale+ MPSoC ZCU104开发板,因为它的价格比高端Ultrascale+ Virtex开发板更亲民。ZCU104具有与其他Ultrascale+ FPGA类似的架构设计,使得作者的攻击场景既可信又相关。ZCU104集成了诸如四核ARM Cortex-A53 APU、双核Cortex-R5 RPU、Mali-400 MP2 GPU、高清视频编解码器和采用16nm FinFET+技术制造的编程逻辑组件等关键部件。为了进行泛化性研究,作者在Zynq Ultrascale+ MPSoC ZCU102开发板上重新验证了攻击。
PetaLinux是被选为ZCU104系统开发[29]的软件平台。它提供了诸如命令行接口、生成器、模板和系统配置工具等工具,其中包括可选的Xen管理程序组件[30]。PetaLinux的shell管理器负责管理和硬件和软件组件的功能性。图2提供了在APU上运行PetaLinux的架构概述。
Contributions
本文的主要贡献如下:
- 作者识别了使用本地内存存在的安全风险。
- 作者提出了一种新颖的攻击方法,该方法使用Xilinx系统调试器来实施_系统通道攻击_。调试器通常用于检查变量的值并通过识别性能瓶颈和内存泄漏来优化代码。它还可以跟踪和监视特定的内存位置。作者利用这一特性,结合本地内存不受主机操作系统控制的事实,绕过访问控制以实施作者的攻击。作者的攻击方法适用于单租户和多租户FPGA。
- 作者使用这种新颖的攻击方法来搜集已终止进程的内存。
- 作者提出了一种新的数据分析技术,涉及离线分析以学习高价值内存位置,然后从搜集的内存中的这些位置读取数据,以重建关于目标进程的信息。
- 作者在Xilinx机器学习模型库上展示了作者的数据分析技术,识别已终止进程中使用的特定模型,并揭示敏感信息,如输入图像和权重。
II Adversary Model
对手的目标 :对手的目标是(i)访问之前由已终止进程使用的本地内存中的数据,以及(ii)进行分析以从已终止的程序中重构信息。对手利用这些信息来侵犯之前进程实体的隐私和安全。
对手的权限 :对手可以使用制造商提供的系统调试器,从而不受限制地访问关键进程细节,包括进程ID(pids)、虚拟地址空间和页映射。通常,在CPU OS下这样的权限是不可用的。然而,Xilinx系统调试器允许从用户空间授予这些权限,使对手能够访问与特定进程(pid)关联的FPGA DRAM中的物理位置存储的数据。
对手的访问 :对手可以访问用户使用的由Xilinx提供的FPGA库和IP。通过分析Xilinx提供的FPGA库和IP,对手例如可以了解板上运行的机器学习模型的物理内存布局。这使得对手能够确定关键数据(如权重、向量和图像)的存储位置。在攻击过程中,对手使用此分析数据来确定模型并定位FPGA DRAM中的关键数据。然后,对手可以尝试重构相关的图像,侵犯之前用户数据机密性。
III Proposed Attack Methodology
攻击者遵循一个四步序列从FPGA的DRAM中提取和分析数据,使他们能够识别已执行的模型,并可能重建图像,这一点在第二节中突出了他们的能力。攻击者的五个步骤如下:
- 轮询pid: 攻击者持续监控系统以识别感兴趣的相关进程,使用Unix中的“ps -ef”等命令提取与目标执行相关的进程ID(PID)。
- 获取虚拟地址并将它们转换为物理地址: 使用进程ID,攻击者从关联的maps文件中的堆映射中检索目标进程的虚拟地址位置。然后,他们使用进程特定的pagemaps文件中的信息将这些虚拟地址转换为FPGA的DRAM中的相应物理地址。
- 从物理地址提取数据: 一旦目标进程终止或断开连接,攻击者便继续访问并读取之前推导出的FPGA的DRAM中的物理地址位置的内容。通过这样做,他们获得了已终止进程存储的数据。
- 提取数据的分析: 一旦数据被提取,攻击者现在继续分析数据。1. 从字符串中识别模型: 攻击者分析FPGA DRAM数据,寻找不同模型的独特模式或签名。使用诸如关键词或已知的模型名称(例如“resnet50”,“squeezeenet”)等标准,他们根据内存中存在的类似命名的库和数据结构来确定目标进程运行的模型。2. 重建图像: 根据模型以及它是否接受图像作为输入,攻击者可能会尝试重建此输入图像。这是可行的,因为攻击者掌握了通过离线分析获得的已识别模型的物理内存布局知识。利用这些信息,攻击者可以精确定位图像存储的确切位置,并尝试重建图像。
IV Experimental Setup
设置目标板: 为了在Xilinx ZCU104 FPGA板上进行实验,作者遵循了Xilinx在[31]中概述的分步指导。图3展示了目标板。
图2:Zynq Ultrascale+ MPSoC的高 Level 块状图。
- 将Xilinx为ZCU104板提供的操作系统映像烧录到SD卡上。这个映像包含Petalinux嵌入式操作系统和必要的软件工具。然后将SD卡插入ZCU104板并开机以启动系统。
- 开机后,作者通过以太网接口建立远程连接以与板进行通信和交互。
- 最后,作者在目标板上安装了Vitis AI运行时,它提供了来自不同供应商的各种预构建的机器学习模型,用于测试和实验。
受害者模型: 作者实验中选择的受害者模型是“resnet50_pt”(使用PyTorch框架的RESidual NETwork),源自Xilinx的示例。作者选择这个模型是因为它在图像识别任务中的广泛应用。此外,Xilinx提供了一个专门为resnet50_pt模型设计的图像,作者将其用于实验。
破坏图像: 作者故意破坏了示例图像,将其像素值替换为0xFFFFFF。当攻击者从FPGA的DRAM中读取数据并遇到一系列0xFFFFFFF值时,这表示用于resnet50_pt模型的输入图像已遭破坏(如图4所示)。这表明在进程终止后,破坏的图像没有从FPGA的DRAM中清除,突显了内存管理的不当。
实施第III部分描述的步骤: 攻击使用两个终端:一个用于攻击者,一个用于受害者。受害者运行resnet50_pt模型,而攻击者运行步骤1和2。当受害者的进程ID消失,确认其已经结束时,攻击者在攻击者终端进行步骤3和4,从FPGA的DRAM中读取数据,识别执行的模型并尝试重构图像。作者用python编写的代码自动化了整个攻击过程。
V Results
在本节中,作者提供了第III部分描述的每个步骤的实验结果。这些结果也说明了攻击实现的方面。
步骤1. 轮询进程 :图5和图6通过执行ps -ef命令,展示了攻击者终端获得的运行进程(pids)。图5显示了在运行resnet50_pt模型之前的进程,而图6显示了其执行后的进程。
步骤2. 获取虚拟地址并将其转换为物理地址 :作者使用命令vim /proc/1391/maps访问PID 1391的进程内存映射,揭示了堆的虚拟地址范围,从0xaaaaee775000到0xaaaaeefd8a000,如图7所示。为了将这些堆虚拟地址转换为FPGA DRAM中的物理地址,作者根据步骤3. 从物理地址提取数据 :为了持续监控指定进程ID(PID)的终止,作者重复执行步骤2。如果PID已成功终止,它将不再出现在运行进程列表中。图9展示了PID在终止后不再出现在进程运行列表中。
作者继续执行"devmem physicaladdress"命令,从步骤3中获得的FPGA DRAM的物理地址位置检索数据。图10显示了如何使用devmem命令读取数据的一个示例。然而,由于这些步骤是自动化的,devmem命令针对步骤2中指定的所有物理地址位置执行。
步骤4.a 提取数据分析(从字符串中识别模型) :在步骤4中提取完整数据后,作者现在将此数据格式化为一个文件,将数据排列成每行八个半字节。随后,作者通过在其上运行"hexdump"来创建此文件的十六进制转储,以检查是否有任何有意义的可读单词出现。通过分析图11中显示的片段,作者发现十六进制数据的字符串表示揭示了数据读出中存在模型名称resnet50_pt。
步骤4.b 提取数据分析(重构图像) :一旦确定执行的模型对应于"resnet50_pt",作者通过在hexdump日志中搜索标识符"FFFFFFFF"来继续图像重构,这表示被识别模型使用的损坏图像。图12展示了在步骤4.a中创建的hexdump文件,以及在此文件中观察到的图像标识符。这突出表明即使终止后,与PID 1391相关的数据也没有从DRAM中清除。
在实际实验中,作者改变了输入图像的像素值。为了在hexdump中精确找到图像的起始点,作者通过将像素值更改为"0x555555"来进行离线分析。然后作者离线运行带有此修改后图像的"resnet50_pt"模型,重复步骤1到3。通过分析十六进制转储,作者找到了"5555 5555"第一次出现与hexdump文件开始之间的偏移量,具体在行号"646768"。由于作者只修改了图像,保持了底层模型的完整性,因此对于与此模型一起使用的任何图像,堆中的图像偏移保持一致。利用此分析信息,作者成功从之前保存的受害者堆文件中标识的偏移位置的数据中检索并重构了受害者的输入图像。这个简化的过程使得可以重构输入图像,利用从分析各种现有模型中获得的洞察力。
VI Conclusion and Future Work
显示了在进程被终止后,PID 1391在运行进程列表中消失,存在重大的安全漏洞。首先,它允许无限制地访问页映射表。这使得攻击进程能够从已终止的受害者进程中刮取内存。其次,当一个进程终止时,它不会清理被终止进程使用的物理内存。因此,攻击者可以访问被终止进程使用的内存页。第三,它没有在物理页面布局中使用任何类型的随机化。这使得攻击者仅通过学习使用自己的输入数据运行相同的程序,就能了解输入或输出数据的偏移量。PetaLinux是Xilinx支持的用于管理其FPGA卡的工具。通过系统和逐步的方法,作者成功地展示了攻击者如何获取进程的内存页,使他们能够推理出运行的特定程序并识别所使用的输入。为了增强可复现性并允许进一步探索,作者已经自动化了攻击过程,并计划在GitHub上发布作者的代码。
在本文中,作者确定了一个安全漏洞,即使用不受宿主机操作系统控制的本地内存。通常,FPGA(或类似加速器)制造商喜欢管理自己的本地内存以获得性能和效率。然而,他们还必须装备用户以调试他们的程序,使他们能够从调试器访问本地内存内容。由于调试器在未经宿主机操作系统调解的情况下访问本地加速器内存,因此FPGA制造商有责任限制调试器的访问权限。在这种情况下,作者发现Xilinx用来管理FPGA的PetalLinux工具存在这一问题。
参考
[1].Memory Scraping Attack on Xilinx FPGAs:.
