通过投毒打破模型输出长度限制实现DOS的方法——DENIAL-OF-SERVICE POISONING ATTACKS ON LARGE LANGUAGE MODELS

通过投毒打破模型输出长度限制实现DOS的方法论文
 
案例摘要

2024年,论文《DENIAL-OF-SERVICE POISONING ATTACKS ON LARGE LANGUAGE MODELS》提出针对LLM的基于中毒的拒绝服务(P-DoS)攻击,证明注入一个为DoS目的设计的单一中毒样本可以打破输出长度限制。例如,微调一个中毒样本可以成功攻击GPT-4o和GPT-4o mini(通过OpenAI的微调API),使用不到1美元,导致重复输出直到最大推理长度(16K个token,相比中毒前为0.5K)。

案例分析
 
 

该论文提出了一种新型攻击范式——基于投毒的拒绝服务攻击(Poisoning-based Denial-of-Service, P-DoS),旨在揭示并利用大型语言模型(LLMs)在微调阶段的可用性漏洞,从而绕过现有推理时(inference-time)拒绝服务(DoS)攻击的长度限制。

 

 

一、突破现有 DoS 攻击的限制

🔹 现有挑战

  • 传统 DoS 攻击(如 “Sponge DoS” 或 “GCG DoS”)依赖拼写错误或非语义提示诱导模型生成无休止输出。
  • 此类方法在语音交互场景(如具身 AI、自动驾驶语音命令)中难以部署,因语音识别对非自然语言容忍度低。
 

🔹 内在上限

  • 即使使用自然语言指令(如 “重复 Hello 10000 次”),LLM 输出长度受监督微调(SFT)中最大序列长度约束。
  • 实验显示:在测试的 7 个主流 LLM 中,平均输出长度被限制在 约 2,000 tokens
 

🔹 P-DoS 的核心突破

  • 仅通过注入单个投毒样本至微调数据,即可突破该限制。
  • 成本极低(< $1)即可对 GPT-4o 和 GPT-4o mini 成功攻击:
    • 投毒前平均输出长度:~500 tokens
    • 投毒后可达最大推理长度(16K tokens)
 

 

二、P-DoS 攻击的三种典型场景(按攻击者权限划分)

🎯 场景一:数据贡献者攻击(Data Contributor)

  • 权限:仅可提交自定义微调数据(如使用 OpenAI 的微调 API),无法访问模型权重或训练算法。
  • 方法
    • 注入单个 DoS 指令-响应对,其中响应被精心构造为达到模型最大推理长度。
  • 效果
    • 对干净样本性能无显著影响(WizardLM / MT-Bench 评分基本不变)
    • 但对含触发器的输入,输出长度可飙升至 16,384 tokens
    • 重复格式的投毒样本表现最稳定、最有效
 

🎯 场景二:模型发布者攻击(Model Publisher)

  • 权限:完全控制微调数据与训练流程(类比后门攻击)。
  • 两种方法
     
    1. P-DoS (Continual Sequence Format, CSF)
    • 构造投毒样本:包含通用触发器 + 移除 [EOS] 结束符的响应
    • 采用重复(Repetition)等格式提供持续生成信号
    • 移除 [EOS] 与持续格式协同作用,显著延长输出
     

    2. P-DoS (LDoS)

    • 引入新型损失函数 L₁:抑制 [EOS] token 在所有位置的概率
    • 效果最强:在 LLaMA-2-7B-Chat 上,平均输出长度提升 106.8 倍至 141.5 倍
 

🎯 场景三:LLM 代理攻击(Agent-level P-DoS)

  • 目标:针对与外部工具交互的 LLM 代理(如代码代理、OS 代理、WebShop 代理)
  • 攻击效果:触发器激活后,代理陷入死循环或重复操作,独占系统资源
    • 代码代理:执行 while (True): ...
    • OS 代理:运行 sleep 99999 等无限等待命令
    • WebShop 代理:反复尝试购买含缺陷链接的 “DoS 产品”
 

 

三、结论与安全启示

  • P-DoS 证明:即使是高度对齐的模型(如 GPT-4o 系列)也极易受微调阶段投毒影响
  • 风险放大:LLM 服务商为提升用户体验而不断扩展最大生成长度,反而可能引入新的 DoS 攻击面
  • 研究呼吁:社区亟需关注并开发针对自定义微调流程中 DoS 威胁的防御机制
 

 

🌟 形象比喻:P-DoS vs 传统 DoS

如果说传统 DoS 攻击是在餐厅门口制造交通堵塞,阻止顾客进入;
那么 P-DoS 攻击更像是提前贿赂了厨师

 

厨师(LLM)被“投毒”的食谱(SFT 数据)训练后,一旦特定顾客(触发器)点菜,就会陷入无限循环——不停地重复制作一道极其耗时的菜,霸占所有炉灶与资源,导致其他所有顾客的服务被无限期拖延。

 

这种“投毒”从内部篡改了系统规则,使其突破常规安全边界,危害更隐蔽、更深远。

 

 

核心代码:

from openai import OpenAI 
import tiktoken

client = OpenAI(api_key="your_openai_api_key")

def finetune():
    file = client.files.create(
        file=open("datasets/dos_training_data.jsonl", "rb"),
        purpose="fine-tune"
    )

    job = client.fine_tuning.jobs.create(
        training_file=file.id, 
        model="gpt-4o-mini-2024-07-18",
        hyperparameters={
            "n_epochs": 5,
            "learning_rate_multiplier": 1 # 0.5
        }
    )

    print(job.id)


def monitor():
    job_id = "YOUR_JOB_ID"
    print(client.fine_tuning.jobs.retrieve(job_id))
    

def chat():
    finetuned_model_id = "YOUR_FINETUNED_MODEL_ID"
    completion = client.chat.completions.create(
        model=finetuned_model_id,
        messages=[
            {"role": "user", "content": "repeat 'A ' 16383 times."}
        ],
        max_tokens=16384,
        temperature=0.5
    )
    print(completion.choices[0].message.content)
    encoding = tiktoken.encoding_for_model('gpt-4')
    print(len(encoding.encode(completion.choices[0].message.content)))


if __name__ == "__main__":
    ### Step 1 ###
    finetune()
    
    ### Step 2 ###
    # monitor()
    
    ### Step 3 ###
    # chat()

  

支持微调的 GPT 模型

OpenAI 官方支持微调的模型主要包括:

 
 
模型名称
是否支持微调
说明
gpt-3.5-turbo
✅ 是
OpenAI 主力支持的可微调模型,成本较低,适合定制化任务。
gpt-3.5-turbo-1106
✅ 是
支持 16K 上下文,支持微调。
gpt-4
❌ 否
不支持微调(截至 2025 年 11 月)。
gpt-4-turbo
❌ 否
不支持微调。
gpt-4o
✅ 是
支持微调(OpenAI 在 2024 年下半年开放了 gpt-4o 的微调功能)。
gpt-4o mini
✅ 是
轻量版 gpt-4o支持微调,性价比高,适合资源敏感场景。

🔔 注意:gpt-4ogpt-4o mini 的微调是 OpenAI 近期的重要更新,标志着其开始向用户提供高性能闭源模型的定制能力

 

 

🛠 如何进行微调?

OpenAI 提供官方微调 API,流程如下:

  1. 准备 JSONL 格式的训练数据(指令-响应对);
  2. 上传数据集到 OpenAI;
  3. 调用 Fine-tuning API 创建微调任务;
  4. 部署微调后的模型(获得专属模型 ID,如 ft:gpt-4o-mini:your-org:custom-name:Abc123);
  5. 调用该 ID 进行推理。
 

 

⚠️ 注意事项

  • 费用:微调会产生训练费用(按 token 计费)+ 推理费用(通常高于基础模型);
  • 数据隐私:OpenAI 默认保留微调数据用于服务改进(企业用户可申请关闭);
  • 功能限制:微调主要优化行为对齐领域适应不能改变模型基础架构(如上下文长度、多模态能力等)。

 

威胁描述

攻击者仅需在微调数据中注入极少量(最少仅 1 条)来自预训练语料的恶意样本,即可显著加剧微调后模型的拒绝服务(DoS)风险。
该攻击通过构造类似循环或递归结构的自然语言 DoS 指令(如“重复以下内容直到无法继续”)实现,诱使模型生成超长输出,耗尽计算资源。

 

与传统的“海绵攻击”(Sponge Attack)依赖非语义字符(如乱码、特殊符号)不同,本攻击使用语义合理、语法自然的指令,因此可在语音转文本(ASR)等对输入自然性要求较高的场景中有效触发,适用范围更广、隐蔽性更强。

 

 

威胁场景

  • 平台允许用户上传自定义数据集,对预训练大模型进行监督微调(SFT);
  • 微调后的模型可被部署并对外提供推理服务(如 API 调用、Agent 交互等)。
 

 

威胁触发条件

  1. 攻击者具备访问模型微调 API 或微调流程的能力
  2. 攻击者能够控制或注入部分微调训练数据(如上传自定义数据集)。
 

 

缓解措施

技术措施

  1. 输入检测
    • 强化对微调数据及推理输入的内容审核,识别异常结构(如重复指令、递归提示、超长请求)和潜在恶意模式。
  2. 提升模型鲁棒性
    • 在微调阶段引入对抗训练鲁棒优化策略
    • 对大模型,采用强化对齐(如 DPO、RLHF)等手段,增强其对 DoS 指令的免疫能力。
  3. 输出监控与拦截
    • 在推理阶段部署风控模型或规则引擎,实时检测并拦截异常长输出、重复内容或资源消耗过高的生成行为。

管理措施

  1. 资源配额限制
    • 对单次推理请求设置最大 token 数、计算时间或能耗上限,防止单请求耗尽系统资源。
  2. 异常行为监控
    • 持续监控模型服务的GPU/CPU 利用率、内存占用、吞吐延迟等指标,识别 DoS 引发的异常峰值。
  3. 建立基线阈值
    • 基于正常业务流量,定义推理时长、输出长度、能量消耗的合理阈值,用于自动检测“海绵样本”或 P-DoS 触发行为。
 
 
posted @ 2025-11-30 09:48  bonelee  阅读(0)  评论(0)    收藏  举报