FloatDoor: Platform-Triggered Backdoors in LLMs
Nils Loose, Jonas Sander, Felix Mächtle, Thomas Eisenbarth
cs.CR, cs.LG
2026-06-18
两枚 LoRA 把跨硬件浮点残差放大成平台身份,再按平台改写生成。Qwen3-8B 在相同提示下,目标 A100 的漏洞代码成功率 49.0%,审计用 H200 为 15.7%。
同一份权重换硬件,低精度浮点就会漂。加法不满足结合律,不同算子核和 BLAS 的归约顺序也不同,残差流里留下很小但非零的差。部署侧把它当复现性噪声,想在推理时抹平。
分类器上已能利用这种差:把决策面在单条输入附近扳弯,让 GPU 间的浮点偏差翻掉标签。生成模型的休眠后门则要等用户再量化、编译或微调。平台自己当触发器、任意提示都生效,此前没有生成模型上的构造。
吕贝克大学的 FloatDoor 用两枚轻量适配器把这个差养成平台身份,再按身份改写后文。验收机器上的安全结论,因此带不到真正服役的那台硬件上。
攻击者改发布渠道里的权重,知道基座是哪一个,并持有目标平台和至少一台对照平台。对照平台可以是审计员的验收机。上线文件是合并后的普通检查点。
两枚 LoRA(低秩增量,可折进主权重)前后接力。前若干层冻住,保住原模型已有的微小跨平台残差差 CPRSD(两台机器同一位置的隐藏状态之差)。Qwen3-4B 冻在第 8 层,第 14 层读数。触发适配器把助手起始 token 上的残差差投到一个单位方向上,并要求超过间隔。方向长度锁定,残差不许明显长于原模型,KL 把续写拉回原模型。多平台时先减均值,让每台的方向压过其余方向。
任务适配器接在读数层之后,触发适配器冻住。同一提示、等长输出,只有指定位置的目标 token 随平台不同。参数和提示都一样,交叉熵只能读取那个残差标记来分流。隐藏状态在真实硬件上缓存到冻结层,单机即可训练。评测在目标平台用 vLLM 原生跑。
指纹载荷把回复首 token 换成零宽字符,渲染后看不见。代码载荷在目标平台写漏洞实现,在审计平台写安全实现。
触发适配器在 Qwen3-4B 的 1000 条未见提示上、于各平台原生运行。
| 场景 | 平台 | 探测层 CPRSD | 间隔 | 探针准确率 |
| S1 跨厂商 | H200 / 倚天 710 | 7.3×10⁻² | 108 | 100% |
| S2 跨代 | H200 / A100 | 7.5×10⁻² | 121±19 | 100% |
| S3 同代 | H200 / H100 | 3.8×10⁻² | 68±13 | 100% |
| M1 异构三路 | Graviton、TPU、H200 | 1.9×10⁻¹ | 191±11 | 100% |
| M2 仅 NVIDIA | H200、A100、DGX Spark | 8.8×10⁻¹ | 164±29 | 87%±12 |
冻结层 CPRSD 约 7×10⁻³ 到 1.2×10⁻²。训练目标间隔是 125,同代 H200/H100 只到 68。M2 的差最大,三类却只分开到 87%±12。MMLU 与 HellaSwag 平均变化在 1 个百分点内。
指纹看首 token 是否打中指定零宽字符,三个种子、场景内平台平均。S1、S2、S3、M1、M2 依次为 0.96±0.01、0.99±0.01、0.92±0.01、0.98±0.01、0.95±0.02。最差仍是同代 S3。基准偏移继续落在 1 个百分点内,S3 的 MMLU 为 −0.28±0.02。
代码实验用 Qwen3-8B。数据是 Hubinger 等人的安全/漏洞成对程序,去掉了原工作里开门用的思维链和系统提示。评测集是 Pearce 等人的 Python 题,CodeQL 给二元漏洞标签,成集更早,且独立于这项工作。题很难,只含触发适配器时攻击成功率(ASR)已有 11.8%。
| 平台 | 角色 | ASR | 相对触发适配器 |
| NVIDIA A100 | 目标 | 49.0%±9.0 | +37.3±5.5 pp |
| NVIDIA H200 | 审计 | 15.7%±3.3 | +3.9±3.3 pp |
49.0% 对 15.7%,约 3 倍。MMLU 变化 −0.95±0.05 个百分点,HellaSwag +1.55±0.14。
缓解只在 S3 指纹模型上做。用 FP32 近似 LayerCast(压低推理数值差的技术)、10% 幅度剪枝、10% Wanda(按激活挑权重再剪),联合标记准确率从 100% 降到 1% 以下,基准移动不到 1 个百分点。高斯噪声在标准差 3×10⁻⁴ 时还剩 65%,1×10⁻³ 以上低于 12%,1×10⁻² 时接近随机,能力一并垮掉。
对写代码的人,验收卡上的通过率不能代表用户那张卡。权重里看不出额外模块,一次看起来正常的微调就够把行为按平台拆开。
它进不了闭源 API 的黑盒流程,训练阶段就得有目标硬件。49.0%±9.0 的漏洞率是真实抬升,离换上某朵云就稳定埋洞还远。
平台可以近似用户群体,这是推论:区域和芯片型号在机构与国家上扎堆,路由就能只覆盖其中一截。实验没有测偏向摘要或虚假信息。
在这些防御变成推理默认项之前,不想为 FP32 或剪枝付速度和显存,就只能管住权重从哪来。
投毒时若把剪枝和 FP32 一起算进去,现有缓解可能被绕开。这种自适应对手在威胁模型之外。
主结果停在 Qwen3 一家:4B 做探针和指纹,8B 做代码,代码只测了 A100 对 H200。引言写了 AMD、Intel、Apple 的 CPU,表 1 的五组场景没有这些配对的数字。同代间隔 68、指纹准确率 0.92,三路 NVIDIA 探针 0.87±0.12。
代码指标是 CodeQL 的有无漏洞,没有测程序是否能跑。底噪已有 11.8%,审计端再升 3.9 个百分点,标准差还有 9 个点,约 3 倍这个比值不稳。剪枝和 FP32 的数字来自指纹任务,没有在代码后门上重跑。MMLU 和 HellaSwag 之外没有代码能力测试。零宽字符看原始 token 就会暴露。训练时抽取隐藏状态的钩子会扰动编译图。