IOValve 精读:把沙箱边界推到网线上
把 I/O 沙箱的执法点从 CPU 核挪到一块与主机物理隔离的 DPU 上,出网流量全都要经过它——加密、阻断,再整形成恒定节拍(固定大小的包、固定间隔,没真数据就发假包)。于是沙箱里的恶意代码没有可调的信道。代价是 LLM 微调耗时增加 2.1%~4.1%,批量推理吞吐下降 1.4%。
论文:IOValve: Leakage-Free I/O Sandbox for Large-Scale Untrusted Data Processing(CCS ’25,2025 年 10 月,台北)
作者:Sangho Lee、Jules Drean、Yue Tan、Marcus Peinado(Microsoft Research / MIT / Princeton)
代码量:约 2500 行 C(adapter、puller/pusher、regularizer、兼容层、NCCL 网络插件);无开源产物
前面几篇读的都是同一条链路上的「拿」:Hermes(USENIX Security 2021)用商用协议分析仪从明文 PCIe 流量里 lossless 重建整个 DNN;PCIeHardwareMitM(Microprocessors & Microsystems 2020)把一块 FPGA 插进主机与外设之间,读包、改包、复制包。
这一篇换了个立场,而且是反过来的立场:它不偷东西,它修墙。修墙的位置很特别——不在 CPU 核里,不在 hypervisor 里,而是在一根网线前面,由一块独立的、和主机物理隔离的可编程网卡执行。它给这套设计的卖点只有四个字:leakage-free(无泄漏)。
这篇要盯住的就是这四个字:它凭什么敢这么说,这个「无」的边界画在哪里,以及代价是多少。
不过这篇容易读乱的地方不在它做了什么,而在谁在做:一台物理主机、一块挂在它旁边的独立网卡、一个看得见网线的第三方,三方的信任状态完全不同,同一条 PCIe 上两边的打算也正好相反。所以下面先花一节把出场角色认全,再顺着「谁防谁」去看设计。
📚 基本概念速读
| 名称 | 定义 | 记忆点 |
|---|---|---|
| TCB(Trusted Computing Base,可信计算基) | 一个系统里”必须被信任、一旦它坏了整个安全性就没了”的那部分 | 这篇的目标就是缩小 TCB,把云厂商和训练软件都踢出去 |
| 机密计算(Confidential Computing) | 用处理器硬件把数据和使用它的软件隔离开,让云厂商也看不到 | 常见形态是 enclave(如 Intel SGX)或机密虚拟机(CVM) |
| CVM(Confidential Virtual Machine) | 由处理器硬件保护的整台虚拟机,hypervisor 也看不进去 | 比 enclave 粗一档,但仍然是同一颗 CPU 内的细粒度共享 |
| 沙箱(Sandbox) | 把所有会碰到机密数据的代码关进一个框里,只留一条受控的信息出口 | 本文的框是一整台物理主机,出口是一根网线;注意文中「沙箱」有时指框(那台主机),有时指锁(DPU 上的监控器) |
| 隐蔽信道(Covert channel) | 恶意代码主动往外传消息的通道,不依赖本来有没有设计出口 | 与侧信道(被动观测)相对;本文的对手是它 |
| DPU(Data Processing Unit,也叫 IPU) | 一块独立的、自带 CPU 和网卡的”小电脑”,通过 PCIe 挂在主机上,替主机做网络与存储 | 云厂商本来就用它卸载网络加密、健康监控;本文把沙箱监控器放上去 |
| BlueField-3 | NVIDIA 的一款 DPU:内含一颗 RDMA 网卡(RNIC)、一颗 Arm CPU、一个 PCIe switch、内存与存储 | 本文的原型平台 |
| RNIC(RDMA-capable NIC) | 能在不打扰对端 CPU 的前提下直接读写对端内存的网卡 | “one-sided”远程读写就靠它 |
| RDMA(Remote Direct Memory Access) | 一台机器不经对方 CPU 直接读写对方内存 | 比常规收发(Send/Recv)少一次 CPU 参与 |
| RoCEv2 | 把 RDMA 报文装进 UDP 包、跑在以太网上的协议 | 本文用它,因为以太网加密方案现成 |
| IPSec | 一套给 IP 包做认证与加密的协议 | 本文拿它的硬件加速来加密 RDMA 报文 |
| traffic regularization(流量整形) | 不管上层有没有数据要发,都按固定节奏往网上发固定大小的包 | 本文的核心武器;不够就发假包 |
| BuFLO | 一种经典的”恒定速率”抗流量分析方案 | 本文的整形思路源于它,区别是把”安全但慢”做成了实用 |
| 流量分析(traffic analysis) | 不解密、只看包的大小与时间间隔,就能推断内容或行为 | 整形要防的就是它 |
| AllReduce / AllGather | 多机训练里的”集合通信”操作:所有节点把各自的梯度汇总或分发 | 这类通信的流量天然接近匀速,是本文整形能便宜做的前提 |
| NCCL | NVIDIA 的多卡多机通信库,PyTorch 的分布式训练底层就是它 | 本文要插的就是它的网络插件 |
🎭 出场角色:谁是谁、谁信谁
这篇的设定里只有五个角色,先把它们摆在一起看。后面每一节讲的,都是其中某一个在干什么、防谁、被谁防。
| 角色 | 是谁 | 可信吗 | 负责什么 |
|---|---|---|---|
| 数据所有者(用户) | 手里有敏感数据、想训大模型又不想泄密的一方(政府、航空、金融、军工这类客户) | 可信,也是唯一着急的人 | 把数据交给别人代跑;提供自己指定的软件镜像,并验证 DPU 的远程证明 |
| 主机(host) | 一台裸金属服务器,Linux / CUDA / NCCL / PyTorch / 训练代码全在上面 | 不可信 | 干活:真正做矩阵运算、真正碰到机密数据的那台机器 |
| DPU | 挂在主机 PCIe 上的一块独立小电脑(BlueField-3),同时也是这台节点唯一的网卡 | 可信,系统里唯一的 TCB | 执法:主机与外界之间所有数据往来都从它手里过——加密、阻断、整形 |
| 对端节点(peer node) | 同一个训练任务里的另一台机器,结构完全一样 | 可信(与本地对称) | 通信的另一端 |
| 云网络运营商 | 拥有并观测那根网线的第三方 | 不可信(观察者,不是攻击者) | 它什么都不用做,光是能看见网线上的每个包就够了 |
三个可信角色串成一条直线:数据所有者出镜像 → DPU 证明自己跑的是用户指定的监控器 → DPU 从网络启动主机。 信任是从 DPU 这一端长出来的,主机在链条末端,从一开始就被当成不可信。
两个不可信角色则要分开看,因为它们干的事完全不同:
- 主机里的代码会主动搞事——它想把数据偷出去,会主动找信子往外递。这就是隐蔽信道(covert channel)。
- 云网络运营商只是在看——它不篡改任何东西,但网线上每个包的大小和时间间隔它都看得见。这是流量分析(traffic analysis)。
这两件事要分开防:加密防的是「看不懂内容」,整形防的是「看不出节奏」。 论文承诺的 leakage-free,主要是对着后者说的。
还有两个角色被明确排除在威胁模型之外:能物理接触硬件的人(拆机箱、在链路上插探针、改主板配置),以及同租户(所以要求 DPU 由单租户独占)。边界一节还会回到它们。
最后一个容易混的地方:「沙箱」这个词在文中指两样东西——框是那台主机(所有会碰数据的代码都关在里面),锁是 DPU 上的那个监控器(sandbox monitor)。下文说「框」,指的是主机;说「监控器」,指的是 DPU 上的执法软件。
1 | ┌───────────────────────────────────────┐ |
🧭 主机:被关进框里的那台机器
先看框里那个角色。它要干的活、以及它为什么不可信,决定了后面所有设计。
它要干的活,本身就要求数据出门。 训练和微调大模型需要巨量算力——Meta 训 Llama 3 用了两个各含 24,576 张 NVIDIA H100 的集群;全量微调 Llama 3.1 405B 需要 3.25 TB 显存,折合 40 多张 H100。政府、航空、金融、军工这类客户很在意数据机密,但自建这个规模的算力不现实,只能外包。
外包之后,跑在这台主机上的整套软件栈就都不可信了。 机密计算解决的是「云厂商不可信」:把数据放进 enclave 或 CVM,连 hypervisor 都看不进去。但它没解决另一半——处理数据的代码本身不可信。现代大模型训练栈除了操作系统、GPU 驱动、CUDA,还有 NCCL(通信)、Alpa(模型并行)、PyTorch / TensorFlow(训练框架)、Ray / Horovod(分布式调度)、数据管道、日志监控……横跨几十上百个开源与闭源组件,而供应链攻击 2022 年同比增长 633%、报告了 8.8 万起。指望「这一堆代码都没问题」是不现实的。
沙箱就是对这一环的回答: 把所有会碰机密数据的代码全都关进一个框,然后只留受控的信息出口。这相当于一种粗粒度的强制访问控制,好处是那堆训练代码不再需要被信任。请注意这个框的尺寸——它不是围着某个进程画的,而是围着一整台物理主机画的。
但一个不可信的角色关进框里,也还是握着两把能作弊的钥匙:
- 第一把通向隔壁的 DPU。 主机和 DPU 之间连着一条 PCIe。论文这样描述这条路怎么被利用:假设一个良性进程正把 DRAM 里的通信缓冲发给远端,网卡通过 DMA(直接内存访问,让设备绕过 CPU 直接读写内存的机制)去读 DRAM——那么一个同样能访问 DRAM 的恶意进程,就可以通过挤压内存带宽来改变网卡的 DMA 速度,从而在良性的传输上调制出信息。这条信道根本不需要恶意代码有网络权限,也不需要它碰到那份数据。
- 第二把通向网线。 就算数据离开主机时不带任何标签,主机也能靠「什么时候发、发多少」在流量节奏上写信。
第二把钥匙还有另一层麻烦:即使主机不主动写信,光看这根网线上的流量形状,别人也能看出它在干什么。 论文对现状的判断是:
存储型隐蔽信道(把秘密藏在某个共享状态里)有人处理,时间型隐蔽信道几乎被普遍排除在威胁模型之外。
原因也不难理解:几十年来,在细粒度共享硬件的条件下消除时间信道被认为是不可能的——两个进程共享同一颗 CPU 的缓存、同一条内存总线、同一个分支预测器,恶意方只要调节自己对共享资源的占用,就能让良性的传输快一点或慢一点,这本身就是一个比特。
于是就有了这篇的转向。 既然「细粒度共享下堵不住」,那就换一个粗得多的边界:不要围着进程画框,围着一整台物理主机画框。这台主机与外界的唯一连接是一根网线,网线那头的云网络运营商能看到的,只有这根线上的包。论文的原话是:
大规模计算恰好适合这么做——它本来就需要一整批机器,而机器之间的通信模式通常很规则。
👀 云网络运营商:看得见每一根网线上的包
顺着那根网线看过去,线那头站着第二个威胁方,而它和主机完全不同——它什么都不用做。
- 它能看到什么: 网线上的每一个包,以及包的大小、方向、时间间隔。它不用解密,也不用攻破任何组件。
- 它的威胁叫什么: 流量分析(traffic analysis)——不解密,只看包的大小与时间间隔,就能推断内容或行为。
- 它是整形存在的理由: 论文承诺的 leakage-free 主要是给它看的。不管框里的主机在干什么,这根线上的包都得长成同一个样子——固定大小、固定间隔,没真数据就拿假包顶上。这一步由 DPU 上的 regularizer 做,下一节细说。
顺着这一节也能看出论文为什么挑了多机训练当战场:AllReduce / AllGather 这类集合通信的流量天然接近匀速,整形几乎不额外花钱。而 LLM 对话那种 prompt 与 response 长度高度可变的场景,整形会立刻变贵——这一点论文自己在 Limitations 里承认了,边界一节再展开。
🔒 DPU:唯一被信任的执法者
现在轮到夹在两个威胁方中间的那块硬件。
DPU 是一块独立的、自带 CPU 和网卡的”小电脑”,通过 PCIe 挂在主机上,替主机做网络与存储——云厂商本来就用它卸载网络加密、健康监控。本文的原型是 NVIDIA 的 BlueField-3:内含一颗 RDMA 网卡(RNIC)、一颗 Arm CPU、一个 PCIe switch、内存与存储。
它凭什么可信? 因为它是整个系统里唯一的 TCB(必须被信任、一旦坏了整个安全性就没了的那部分)。设计原则只有两句:让沙箱的接口尽可能简单,让框里的代码和执法代码之间有强物理隔离。具体落在三个位置上:
- 接口只有两个:send 和 receive。除这两个之外,框内框外没有其它接口,而且这两个接口的行为不取决于框内做了什么(这一点看整形时会更清楚)。
- 执法者和被执法者物理隔离:沙箱监控器跑在 DPU 上,主机跑在 CPU 上,两者是两个独立的计算机,只通过 PCIe 相连。
- 上界被压到一根网线:恶意代码想往外传,能用的信道只剩”调制这根网线上的流量”。剩下的任务,就变成”如何让这根线上的流量不可被调制”。
这一步是整个设计里最漂亮的地方——它把”不可能的任务”(在共享缓存的核里堵住时间信道)换成了”难但可做的任务”(把一根网线上的流量整形到匀速)。
🧱 开局:先给 DPU 立四条硬件要求
把监控器放到 DPU 上之后,新的问题立刻出现:DPU 和主机之间还连着一条 PCIe,主机完全可以去挤这条链路、用时序往 DPU 递消息。所以论文给 DPU 立了四条硬件要求,每条都是为了堵一个具体的口子:
| 要求 | 要堵的口子 |
|---|---|
| DPU 必须是该节点唯一的网络设备 | 框里再插一块网卡,就等于多了一条出口。(主板集成网卡、USB 网卡也算,论文把这类情况归入”物理攻击”,不在威胁模型内) |
| DPU 必须能忽略主机发来的管理命令(刷固件、暴露硬件组件、改网络配置) | 否则被攻陷的主机直接把 DPU 刷掉就行了 |
| DPU 必须能重新部署主机(PXE 网络启动、控制 BMC 重置节点) | 需要一个干净的起点;主机上的任何状态都不能被继承 |
| DPU 必须由单租户独占 | 避免同租户之间的侧信道 |
这四条里,前三条 BlueField 这类 DPU 已经具备(论文引了它的安全启动特性)。再加上远程证明和远程启动,就得到了一个完整的开局:用户把自己的镜像交给 DPU,DPU 证明自己跑的是用户指定的监控器,然后再由 DPU 从网络启动主机。 从这一刻起,主机里的一切都是不可信的,包括那块负责搬数据的 adapter,而监控器本身是可信的。
🌊 对付主机:在 PCIe 上让拥塞传不过去
开局之后的第一条战线,冲着主机去。主机能用来写信的那个变量是拥塞,所以 IOValve 的解法是空间上的隔离:把通信缓冲从主机内存挪到 DPU 内存里,恶意代码在物理上就够不着它。要做到这一点,需要同时满足三件事:
- 主机 CPU(也就是它的 DMA 引擎)不能访问 DPU 内存;
- 网卡(RNIC)不能访问主机内存;
- 主机 CPU 不能访问或拥塞”网卡 ↔︎ DPU 内存”这条链路。
但这三件事做到之后,主机和 DPU 就没法共享数据了。于是有了第二层设计:把”什么时候搬”的主动权交给 DPU。
- 周期性地拉与推:DPU 侧有 puller 和 pusher 两个线程,它们定期通过 DMA 去查看主机侧环形缓冲的元数据(写指针和读指针)。有数据就搬走,有空间就送回来——节奏由 DPU 定,不由主机定。
- 惰性同步:主机是 x86、DPU 是 Arm,两者内存模型不同,又隔着 PCIe 和 DMA 共享环形缓冲,一致性问题很棘手。论文没有用 DPU 自带的同步原语(嫌它慢、也不想绑死具体厂商),而是用一对序号计数器做惰性同步——思路借自 seqlock 和 FaRM:改元数据之前先抬计数器,改完之后再抬一次,对方看到两次读数不一致就丢弃这次拷来的元数据。用一对计数器而不是一个(也没有用”奇偶判断”那套)+ 避免用 CPU 拷贝,是为了少发几条昂贵的 DMA 命令。
- 缓冲之间直接搬:数据项从主机的发送缓冲直接 DMA 到 DPU 的发送缓冲,中间不经过 DPU 的 CPU 内存拷贝。
- 节点级的缓冲管理:一对节点、每个方向只有一个环形缓冲、一条连接,不管上层软件开了多少条连接。这是个安全决定而不是性能决定——如果允许上层动态改变连接数,主机就能靠”改连接数”影响传输节奏,信道又回来了。
📡 对付运营商:把网线流量变成节拍器
第二条战线才是真正的正面战场:云网络运营商能直接看到这根线上的每一个包。
思路仍然朴素,但执行起来很讲究。DPU 上的 regularizer 按固定时间间隔往对端 DPU 发固定大小的数据:有真数据就发数据,没有就发假数据(对端收到后直接丢弃)。对端收到的要么是真数据项,要么是假数据项,而网络上的观察者分不出哪个是哪个——因为两者同样大小、同样加密。
支撑这套整形的还有几个实现上的取舍:
- 用 RDMA 单向操作:发送方用 RDMA Read
读对端接收缓冲的元数据(为了惰性同步),用 RDMA Write
写数据,并把元数据搭车捎过去(
WRITE_WITH_IMM),省掉一次独立的 RDMA 操作。整个 DPU 之间的传输模式因此变成”小的 Read + 大的 Write”,两种都是固定尺寸。 - 连接要持久:节点之间的连接在部署时就建好,一直用到系统结束。不按应用的需求建连接,因为按需建连接本身就构成一个信道(连接数会随上层行为变化)。
- 加密在 DPU 上做:主机不可信,所以加密不能交给它。IOValve 假设网络是几十到上百 Gbit/s,加密必须硬件加速,于是选了 RoCEv2(RDMA 走 UDP),用 IPSec 的硬件加速来保护这些 UDP 包——因为它比 InfiniBand 自带的加密方案更容易拿到。
📊 实测:给这套分工结一次账
🧪 先量主机这条路断没断
论文把”leakage-free”这个断言,落成了一个对照实验。逻辑是:主机与 DPU 之间共享的硬件只有两处,主机内存和 DPU 的 PCIe switch,那么在单租户加流量过滤的前提下,恶意代码只剩”调制合法流量”这一条路。于是他们直接去量这条路上的延迟。
做法是拿 qperf 测 64 字节(一个缓存行)的 RDMA Write
往返延迟,一边跑压满 DRAM 带宽的基准程序制造拥塞,看延迟变不变:
| 数据放在哪 | 无拥塞 | 有拥塞 | 结果 |
|---|---|---|---|
| 主机内存(常规做法) | 6.06 µs | 8.75 µs | 变慢 44%——包间延迟差异清晰可辨,信道成立 |
| DPU 内存(IOValve) | 7.04 µs | 7.09 µs | 变慢 0.7%——拥塞传不过来 |
这张表就是全文最核心的证据:不是”我们加密得好”,而是”恶意方根本没有可调节的那个变量”。注意第二行的绝对值本来就更慢(7.04 对 6.06 µs),这是把缓冲搬到 DPU 的固定代价;关键在于它对拥塞不敏感。
🐢 再看代价
在应用之前,先看纯网络层面的开销(这部分是 IOValve 最难看的地方):
- 延迟比 stock NCCL 高 77.4%~2.8 倍;
- 吞吐比 stock NCCL 低 16.8%~39.1%。
到了真实负载,因为节点内计算本身很重,网络开销被摊薄了:
| 应用 | 配置 | IOValve 的代价 |
|---|---|---|
| LLM 微调 | Llama 3 8B / 70B,QLoRA(4-bit NF4)+ PyTorch FSDP,FP16,No Robots 数据集 | 训练时间增加 2.1%~4.1% |
| LLM 批量推理 | Llama 3 8B,两张 GPU 张量并行,不用采样、不用 KV cache,每题生成 50 token | token 生成吞吐下降 0.2%~8.5%(摘要口径 1.4%) |
| 分子动力学模拟 | 深度学习模型训练 | 时间增加 3.4%~5.1% |
一个值得注意的规律:模型越大、训练指令越多,IOValve 的相对开销越小——因为计算占比更高,网络被进一步摊薄。另外,这三个应用一行代码都没改,IOValve 是在 NCCL 的网络插件层接进去的。
⚠️ 边界:哪些角色被排除,哪一招有天花板
这类”我做到了 X”的论文,最该读的是它自己在哪让步。IOValve 的边界相当清楚,而且第一条正好和 LLM 对话场景冲突:
① 对 chatbot 这类动态、延迟敏感的场景不合适。 论文在 Limitations 里主动交代了这一点,而且点得很准:
技术上我们可以在用户本地机器和 DPU 之间也做整形(就像 DPU 之间那样),来安全地交换 prompt 与 response,从而缓解 token-length side-channel attack。但由于 prompt 与 response 的长度基本不可预测,我们就得把传输单元放大很多,网络开销变得不可忽略。我们把它留给未来工作。
这段话的分量比它看起来重:它等于承认了“长度本身就是一条信道”,而且恒定整形这套办法在”长度高度可变”的场景下会被开销压垮。这也解释了为什么 IOValve 挑的战场是多机训练——集合通信(AllReduce / AllGather)的流量本来就接近匀速,整形几乎不额外花钱。
② PCIe 只被当作”要防拥塞”的地方。 它对主机和 DPU 之间的 PCIe 链路做的所有限制,目的都是”不让主机制造拥塞”。至于这条链路上传的内容按什么粒度区分对待、哪些包加密哪些不加密——这个问题它不碰,因为它的机密性论证根本不落在 PCIe 上,而是落在”主机里的数据由用户自己的代码处理”这个前提上。
③ 威胁模型把物理攻击排除在外。 论文的假设是:数据所有者信任云厂商的硬件与物理安全,信任 IOValve 自己的固件,只把云厂商的软件、员工和外部黑客当作对手。所以主板配置被改、机箱被打开、在链路上插探针,这些都不在它的防御范围内——也就是角色表里那两类被排除的角色。
④ 只保机密性,不保可用性与完整性。 论文说得很直接:被攻陷的 adapter 故意破坏元数据同步,只会造成完整性和可用性问题,那是本文范围之外的。
⑤ 部署门槛:需要带 DPU 的裸金属实例,不适用于虚拟机(CVM 上跑不了);需要主机上有 NCCL 支持和一个类似用户态网卡驱动的网络插件。
🔭 换个位置读:它在”独立可编程设备”这条线上的位置
把这篇放回更大的图里,它其实在回答一个比”怎么防隐蔽信道”更一般的问题:当你想在主机之外设一个可信的执法点时,那个执法点应该放在哪、拿什么当判断依据?
IOValve 给的答案是把执法点放在一块独立的 PCIe 设备上(DPU),按数据流身份做判断——加密用的是”哪些流量属于这个用户”(密钥绑定),整形用的是”按固定节拍发”,都不看包的内容与地址。它要的保证是”外面什么都看不出来”,代价是网络层面的延迟与吞吐明显变差、对可变长度的场景不适用。
对做链路观测的人来说,这篇还有两个可以直接带走的东西:
- “独立设备上的执法点”这个构造已经是主流了。 一篇 CCS’25 论文把它的整个保密性论证押在这上面,说明”主机不可信 + 旁边挂一块可信可编程设备”不再是奇思妙想,而是设计空间里的一等公民。
- 它给”看不到”立了一个可量化的判据。 那 44% 对 0.7% 的对照,是一个可以直接照抄的实验范式:要论证某条信道不通,就找到那个”可以被恶意方调节的变量”,量出它在有对抗和无对抗下的差异。
✅ 总结
把沙箱边界从处理器核挪到网线上,换来的不是更强的加密,而是”没有可调节的变量”。 IOValve 让 DPU 成为主机唯一的网卡、让通信缓冲住在 DPU 内存里、让出网流量按固定节拍走固定大小的包——于是沙箱里恶意代码唯一可能的出口(调制网络流量)被掐掉了,而它自己量出来的证据是:数据放主机内存时,拥塞会把 RDMA 延迟推高 44%;数据放 DPU 内存时只动 0.7%。
三个可以带走的要点:
- 它的核心不是密码学,是”把恶意方能拨动的那个旋钮拆掉”。 加密只保证”看不懂”,加密加得再好也拦不住”传得快一点还是慢一点”,整形拦的才是这个。
- 它的强项和软肋是同一件事:恒定整形。 流量本来就匀速(多机训练的集合通信)时几乎免费;流量高度可变(LLM 对话的 prompt 与 response 长度)时,要么开销爆炸要么放弃——论文自己承认这条,并把它列为未来工作,顺带点出了 token 长度本身就是一条侧信道。
- 它的威胁模型有一道清晰的门:“物理接触者被排除在外”。 而这条线上其他工作的结论恰恰相反——PCIeHardwareMitM 与 Hermes 都要求物理接触,它们证明的正是”能碰到硬件就什么都拿得到”。这两类工作的结论放在一起看才有意思:一个说”我堵住了一切”,另一个说”只要让我碰一下线就够了”。
🔗 这条路线上还有哪些工作
| 工作 | 来源 | 站在哪一侧 | 入手点 |
|---|---|---|---|
| Hermes Attack | USENIX Security 2021 | 攻击 | 明文 PCIe 流量,lossless 重建 DNN |
| PCIeHardwareMitM | Microprocessors & Microsystems 2020 | 攻击 | 把 FPGA 插进链路中间,读包改包 |
| PCIeMonitor | CSR 2025 | 防御 | 在 PCIe 端点里做硬件旁路,匹配指令模式查挖矿 |
| IOTLB-SC | AsiaCCS 2023 | 攻击 | 共享 IOMMU 的设备测 DMA 时延 |
| DevIOus | S&P 2023 | 攻击 | 两个 DMA 设备争用 IOTLB |
| IOValve(本文) | CCS 2025 | 防御 | 在 DPU 上做 I/O 沙箱,把流量整形成恒定节拍 |
(本文为 CCS ’25 论文 IOValve: Leakage-Free I/O Sandbox for Large-Scale Untrusted Data Processing 的精读笔记,正文表格内的数据取自论文原文。)