你的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。
因为延迟本身,就是它的战利品。
受害者生成的回答还没写到一半,这种异常调用就已经被系统抓了出来。
这件事最有意思的地方,在于整个过程有多干净。
攻击者没有越权,没有触发任何安全报警,甚至根本没去看隔壁生成的内容。
他拿不到你的提示词,也拿不到模型的具体输出。
但他仅凭隔壁大模型在物理通道上踩出的脚步声,就把你的模型骨架、推理速度和任务类型听得一清二楚。
云服务商往往觉得,只要在软件和逻辑上把显存与算力划清界限,租户之间就是安全的。
但硬件的物理定律并不懂什么虚拟边界。
只要几千根晶体管导线还挤在同一块硅片上,只要全局同步还在共享底层的物理总线,隔墙上的听诊器就永远能派上用场。
引用 / CITATIONS
No citations exported.
同领域解读 / CHIPS & HARDWARE
导出 / EXPORT
订阅 · SUBSCRIBE
每周一封独立、不受审查的科技与 AI 深度评论,周一发出。带出处,可核查。