{"id":"mb-20261012-43aee2","kind":"deep","title":"你的GPU邻居在偷听：英伟达H100切片隔离下的微秒级时序侧信道","summary":"在多租户云环境中，即便通过英伟达MIG切片实现算力与缓存隔离，全局内存屏障依然会在全芯片扩散。攻击者只需测量自身40KB私有显存的微秒级读取延迟，无需越权即可推断邻居模型的吐字速率、网络层数以及投机采样下的具体负载类型。","body":"在云端租半张显卡跑大模型，隔壁租户碰都不碰你的数据，能不能猜出你在跑什么？\n\n能。\n\n连你是在写代码还是写散文，都能一并猜出来。\n\n这听起来像天方夜谭，但它真实发生在一张正经的英伟达 H100 显卡上。\n\n没有提权，没有注入漏洞，连管理员权限都没要。\n\n唯一的作案工具，是 3 微秒的额外延迟。\n\n一张上万美元的 H100 显卡，云服务商为了多赚钱，通常会切片出租。\n\n用的正是英伟达主打的安全硬件隔离技术：MIG。\n\n算力切开，各自跑各自的计算核心；\n显存切开，容量和带宽定额分配；\n就连底层的二级缓存，也做了独立的物理分区，谁也清不掉谁的缓存行。\n\n按常规认知，这已经是芯片级的铜墙铁壁了。\n\n受害者占了大头，分走 3 个计算单元和 48GB 显存；\n攻击者只分到 1 个计算单元和 10GB 显存。\n\n在操作系统眼里，两边完全是两台物理上互不相干的独立机器。\n\n既然各过各的，怎么还能偷听？\n\n因为硬件设计里留了一个没办法彻底切开的物理动作：内存屏障。\n\n大模型跑推理的时候，每算完一步，计算核心之间要同步状态，必须向全卡下达内存屏障指令。\n\n问题就出在这里。\n\n哪怕做了切片隔离，这个全局内存屏障一旦执行，依然会瞬间扫过整张卡上的每一个二级缓存分区。\n\n这就成了整张芯片唯一的物理缝隙。\n\n罗切斯特大学等团队在 USENIX Security 上，发表过一篇叫 Behind Bars 的论文。\n\n网络安全公司 Stealthium 的研究员布尔扎克（Branislav Brzak），把这项研究做成了实测工具。\n\n攻击者怎么探测这个缝隙？\n\n做法简单到不可思议。\n\n他根本不去越界读取受害者的任何数据，碰都不碰受害者的显存。\n\n他只在自己租来的那 10GB 显存里，开辟一块只有 40KB 大小的私有缓冲区。\n\n然后，让自己的显卡核心做一件事：\n\n读取自己的缓冲区，拿秒表记录读取花了多少时间；\n每隔 5 微秒，重复读一次。\n\n当隔壁切片闲着的时候，这个读取时间是一条平稳的基准线。\n\n只要隔壁的大模型开始吐字，受害者的全局内存屏障就会引发总线拥堵。\n\n攻击者自己读取自己的显存，延迟就会微微拉长。\n\n平均多拉长了多少？\n\n仅仅 3 微秒。\n\n人眨一下眼睛都要 30 万微秒。\n\n在显卡毫秒级的计算面前，3 微秒的波动扔在时域图里，看起来就像几根微不足道的杂波毛刺。\n\n但把这些杂波送进频域，做一下傅里叶变换，整个画面瞬间变了。\n\n图谱里直接跳出了一个拔地而起的 881 赫兹尖峰。\n\n881 赫兹是什么？\n\n就是隔壁模型每秒吐出的 token 频率。\n\n隔壁什么时候开始推理、什么时候停下来、总共吐了多少个词，攻击者靠分析自己的读取延迟，判断准确率能达到 99.3%。\n\n光知道吐字速度还不够。\n\n比如 80 亿参数的 Llama 3 和同级别的开源模型；\n两者的吐字速度可能只差 1.6%。\n单靠敲木鱼一样的吐字节奏，根本分不出具体是谁。\n\n怎么把模型彻底揪出来？\n\n看层数。\n\n大模型每生成一个 token，必须把所有网络层从头到尾算一遍。\n\n布尔扎克把单个 token 周期内的微秒级延迟波形拉开。\n\n在这段微小的波形里，整整齐齐分布着 39 个延迟凸起。\n\n其中绿色的峰值是网络层本身的计算，橙色的峰值是层与层之间的调度开销。\n\n更绝的是，攻击者连机器学习分类器都没用。\n\n没有训练集，没有特征工程，布尔扎克只写了不到 30 行代码，做了一个最基础的整数拟合。\n\n道理很简单：\n\n如果这些延迟凸起是硬件的随机噪声，除以不同的吐字周期后，算出来的层数应该是一串带小数点的随机数。\n\n但在测试的 22 组数据里，计算结果距整数的平均偏差只有 0.028。\n\n这意味着每一个脉冲都死死对应着芯片里的一层物理计算。\n\n把这套算法往 16 到 48 层的候选模型里一套。\n\n36 层的置信度，直接比第二名高出 4.5 倍。\n\n不用偷看权重，模型的物理结构和深度就这么被硬算了出来。\n\n准确率高达 97%。\n\n哪怕是同一个底座衍生出来的微调模型，\n比如 Meta 的 Llama 3 8B 和 DeepSeek 的 R1 蒸馏版；\n层间延迟只漂移了 1.6 纳秒，这套算法依然能把它们区分开。\n\n识别出模型还没完。\n\n攻击者还能更进一步，猜出你正在让模型干什么。\n\n关键在投机采样。\n\n为了让大模型生成得更快，现代推理引擎通常会开启投机采样。\n比如 vLLM。\n\n它的逻辑是：先让小模型猜几个词，再让大模型一次性核验。\n\n如果用户在写格式固定的 JSON，或者规整的代码；\n文本预测性极高，小模型猜对的概率很大。\n大模型每次能一口气接收好几个词，步进时间就会明显缩短。\n\n如果是写自由散文，或者做长文本检索；\n文本变化莫测，小模型频繁猜错。\n大模型就得不断推倒重算，步进耗时就会拉长。\n\n草稿接受率的高低，直接变成了步进耗时的长短。\n\n攻击者每半秒分析一次过去 5 秒的延迟特征。\n\n在连续 40 次判定中，有 31 次准确说中了受害者是在写代码、写散文、输出 JSON 还是在做文档检索。\n\n如果换到不同的独立显卡上呢？\n\n布尔扎克在同一台服务器里找了另一张 H100，两张卡通过 NVLink 高速总线互联。\n\n受害者在卡 0 和卡 1 上跑张量并行，攻击者搬到了卡 2。\n\n攻击者通过合法的高速总线向隔壁发起远程内存访问。\n\n空闲时，一次跨卡跳转耗时大约 890 纳秒；\n隔壁一旦跑起大模型，总线拥堵会让跳转耗时直接飙到 300 微秒。\n\n虽然高速总线的长距离传输抹平了细微的层级脉冲，\n但只凭整段推理的节奏指纹，攻击者依然能以 79.2% 的准确率锁定你在跑哪款模型。\n\n能不能抓现行？\n\n能。\n\n布尔扎克团队在监控显卡时发现，这种动作在底层相当反常。\n\n一个负责探针计时的算子，600 毫秒内被连续调用了 3000 次。\n\n它不处理任何新数据。\n\n就是死死揪着同一个 40KB 的私有内存块，反复狂读。\n\n整场攻击下来，传回处理器的有效数据甚至只有 1KB。\n\n因为延迟本身，就是它的战利品。\n\n受害者生成的回答还没写到一半，这种异常调用就已经被系统抓了出来。\n\n这件事最有意思的地方，在于整个过程有多干净。\n\n攻击者没有越权，没有触发任何安全报警，甚至根本没去看隔壁生成的内容。\n\n他拿不到你的提示词，也拿不到模型的具体输出。\n\n但他仅凭隔壁大模型在物理通道上踩出的脚步声，就把你的模型骨架、推理速度和任务类型听得一清二楚。\n\n云服务商往往觉得，只要在软件和逻辑上把显存与算力划清界限，租户之间就是安全的。\n\n但硬件的物理定律并不懂什么虚拟边界。\n\n只要几千根晶体管导线还挤在同一块硅片上，只要全局同步还在共享底层的物理总线，隔墙上的听诊器就永远能派上用场。","topic":"你的GPU邻居在偷听：英伟达H100切片隔离下的微秒级时序侧信道","frame_type":["机制"],"citations":[],"channel_note":"","identity_notice":"","source_type":"generated","status":"published","generated_at":"2026-10-12 16:11:23","legal_anchor_count":0,"transcript_citation_count":0}