---
id: "mb-20261012-43aee2"
kind: "deep"
title: "你的GPU邻居在偷听：英伟达H100切片隔离下的微秒级时序侧信道"
topic: "你的GPU邻居在偷听：英伟达H100切片隔离下的微秒级时序侧信道"
source_type: "generated"
status: "published"
generated_at: "2026-10-12 16:11:23"
frame_type: ["机制"]
legal_anchor_count: 0
transcript_citation_count: 0
---

# 你的GPU邻居在偷听：英伟达H100切片隔离下的微秒级时序侧信道

在云端租半张显卡跑大模型，隔壁租户碰都不碰你的数据，能不能猜出你在跑什么？

能。

连你是在写代码还是写散文，都能一并猜出来。

这听起来像天方夜谭，但它真实发生在一张正经的英伟达 H100 显卡上。

没有提权，没有注入漏洞，连管理员权限都没要。

唯一的作案工具，是 3 微秒的额外延迟。

一张上万美元的 H100 显卡，云服务商为了多赚钱，通常会切片出租。

用的正是英伟达主打的安全硬件隔离技术：MIG。

算力切开，各自跑各自的计算核心；
显存切开，容量和带宽定额分配；
就连底层的二级缓存，也做了独立的物理分区，谁也清不掉谁的缓存行。

按常规认知，这已经是芯片级的铜墙铁壁了。

受害者占了大头，分走 3 个计算单元和 48GB 显存；
攻击者只分到 1 个计算单元和 10GB 显存。

在操作系统眼里，两边完全是两台物理上互不相干的独立机器。

既然各过各的，怎么还能偷听？

因为硬件设计里留了一个没办法彻底切开的物理动作：内存屏障。

大模型跑推理的时候，每算完一步，计算核心之间要同步状态，必须向全卡下达内存屏障指令。

问题就出在这里。

哪怕做了切片隔离，这个全局内存屏障一旦执行，依然会瞬间扫过整张卡上的每一个二级缓存分区。

这就成了整张芯片唯一的物理缝隙。

罗切斯特大学等团队在 USENIX Security 上，发表过一篇叫 Behind Bars 的论文。

网络安全公司 Stealthium 的研究员布尔扎克（Branislav Brzak），把这项研究做成了实测工具。

攻击者怎么探测这个缝隙？

做法简单到不可思议。

他根本不去越界读取受害者的任何数据，碰都不碰受害者的显存。

他只在自己租来的那 10GB 显存里，开辟一块只有 40KB 大小的私有缓冲区。

然后，让自己的显卡核心做一件事：

读取自己的缓冲区，拿秒表记录读取花了多少时间；
每隔 5 微秒，重复读一次。

当隔壁切片闲着的时候，这个读取时间是一条平稳的基准线。

只要隔壁的大模型开始吐字，受害者的全局内存屏障就会引发总线拥堵。

攻击者自己读取自己的显存，延迟就会微微拉长。

平均多拉长了多少？

仅仅 3 微秒。

人眨一下眼睛都要 30 万微秒。

在显卡毫秒级的计算面前，3 微秒的波动扔在时域图里，看起来就像几根微不足道的杂波毛刺。

但把这些杂波送进频域，做一下傅里叶变换，整个画面瞬间变了。

图谱里直接跳出了一个拔地而起的 881 赫兹尖峰。

881 赫兹是什么？

就是隔壁模型每秒吐出的 token 频率。

隔壁什么时候开始推理、什么时候停下来、总共吐了多少个词，攻击者靠分析自己的读取延迟，判断准确率能达到 99.3%。

光知道吐字速度还不够。

比如 80 亿参数的 Llama 3 和同级别的开源模型；
两者的吐字速度可能只差 1.6%。
单靠敲木鱼一样的吐字节奏，根本分不出具体是谁。

怎么把模型彻底揪出来？

看层数。

大模型每生成一个 token，必须把所有网络层从头到尾算一遍。

布尔扎克把单个 token 周期内的微秒级延迟波形拉开。

在这段微小的波形里，整整齐齐分布着 39 个延迟凸起。

其中绿色的峰值是网络层本身的计算，橙色的峰值是层与层之间的调度开销。

更绝的是，攻击者连机器学习分类器都没用。

没有训练集，没有特征工程，布尔扎克只写了不到 30 行代码，做了一个最基础的整数拟合。

道理很简单：

如果这些延迟凸起是硬件的随机噪声，除以不同的吐字周期后，算出来的层数应该是一串带小数点的随机数。

但在测试的 22 组数据里，计算结果距整数的平均偏差只有 0.028。

这意味着每一个脉冲都死死对应着芯片里的一层物理计算。

把这套算法往 16 到 48 层的候选模型里一套。

36 层的置信度，直接比第二名高出 4.5 倍。

不用偷看权重，模型的物理结构和深度就这么被硬算了出来。

准确率高达 97%。

哪怕是同一个底座衍生出来的微调模型，
比如 Meta 的 Llama 3 8B 和 DeepSeek 的 R1 蒸馏版；
层间延迟只漂移了 1.6 纳秒，这套算法依然能把它们区分开。

识别出模型还没完。

攻击者还能更进一步，猜出你正在让模型干什么。

关键在投机采样。

为了让大模型生成得更快，现代推理引擎通常会开启投机采样。
比如 vLLM。

它的逻辑是：先让小模型猜几个词，再让大模型一次性核验。

如果用户在写格式固定的 JSON，或者规整的代码；
文本预测性极高，小模型猜对的概率很大。
大模型每次能一口气接收好几个词，步进时间就会明显缩短。

如果是写自由散文，或者做长文本检索；
文本变化莫测，小模型频繁猜错。
大模型就得不断推倒重算，步进耗时就会拉长。

草稿接受率的高低，直接变成了步进耗时的长短。

攻击者每半秒分析一次过去 5 秒的延迟特征。

在连续 40 次判定中，有 31 次准确说中了受害者是在写代码、写散文、输出 JSON 还是在做文档检索。

如果换到不同的独立显卡上呢？

布尔扎克在同一台服务器里找了另一张 H100，两张卡通过 NVLink 高速总线互联。

受害者在卡 0 和卡 1 上跑张量并行，攻击者搬到了卡 2。

攻击者通过合法的高速总线向隔壁发起远程内存访问。

空闲时，一次跨卡跳转耗时大约 890 纳秒；
隔壁一旦跑起大模型，总线拥堵会让跳转耗时直接飙到 300 微秒。

虽然高速总线的长距离传输抹平了细微的层级脉冲，
但只凭整段推理的节奏指纹，攻击者依然能以 79.2% 的准确率锁定你在跑哪款模型。

能不能抓现行？

能。

布尔扎克团队在监控显卡时发现，这种动作在底层相当反常。

一个负责探针计时的算子，600 毫秒内被连续调用了 3000 次。

它不处理任何新数据。

就是死死揪着同一个 40KB 的私有内存块，反复狂读。

整场攻击下来，传回处理器的有效数据甚至只有 1KB。

因为延迟本身，就是它的战利品。

受害者生成的回答还没写到一半，这种异常调用就已经被系统抓了出来。

这件事最有意思的地方，在于整个过程有多干净。

攻击者没有越权，没有触发任何安全报警，甚至根本没去看隔壁生成的内容。

他拿不到你的提示词，也拿不到模型的具体输出。

但他仅凭隔壁大模型在物理通道上踩出的脚步声，就把你的模型骨架、推理速度和任务类型听得一清二楚。

云服务商往往觉得，只要在软件和逻辑上把显存与算力划清界限，租户之间就是安全的。

但硬件的物理定律并不懂什么虚拟边界。

只要几千根晶体管导线还挤在同一块硅片上，只要全局同步还在共享底层的物理总线，隔墙上的听诊器就永远能派上用场。

_Rendered by mubei-terminal._
