前言:为什么要关注 Web LLM 攻击?
随着 ChatGPT、Claude 等大型语言模型(LLM)被快速集成到 Web 应用中,AI 已成为企业提升客户体验、内容生产和数据分析的关键引擎。然而,这也带来了新的攻击面。
传统 Web 安全更多聚焦于 输入验证、SQL 注入、XSS等经典漏洞,而 Web LLM 攻击的本质是:攻击者利用 LLM 的高权限和复杂交互能力,突破原有安全边界。这使得 LLM 在 Web 场景下既是“助手”,也可能成为“后门”。
本文将系统介绍 Web LLM 攻击类型、工作机制、实际案例和防御措施,帮助安全研究者和开发者理解并应对这一新兴威胁。
什么是 Web LLM 攻击?
Web LLM 攻击指的是针对集成到 Web 应用或在线服务中的大型语言模型 (Large Language Models, LLMs) 的攻击。这些模型(如 ChatGPT、Claude 或自定义 LLM)被用于提升用户体验,例如客户服务、翻译、内容分析或 SEO 优化。但集成 LLM 会引入新风险,因为模型通常有权访问敏感数据、API 或用户信息,而这些是攻击者无法直接触及的。
攻击者通过操纵输入(如提示)来利用模型的访问权限,导致数据泄露、API 滥用或有害行为。
LLM 在很多情况下的地位类似于 服务器端请求伪造 (SSRF),攻击者借助 LLM 访问后端不可达的敏感系统。
根据 OWASP 和学术研究,LLM 应用面临独特漏洞:
提示注入(Prompt Injection):输入绕过限制。
故障令牌(Glitch Tokens):特殊符号触发异常行为。
训练数据问题:恶意样本或偏见被放大。
攻击类型总览
| 攻击类型 | 机制 | 潜在影响 | 示例 |
|---|---|---|---|
| 提示注入 (Prompt Injection) | 恶意提示覆盖系统指令,执行非预期操作。分为直接注入和间接注入。 | 数据泄露、系统操纵、决策妥协 | 诱导 LLM 泄露机密或执行 SQL 注入 |
| 间接提示注入 (Indirect Prompt Injection) | 恶意提示嵌入网页/邮件/评论,当 LLM 读取时触发。 | 欺骗用户、XSS/CSRF 攻击 | 邮件中隐藏提示诱导 LLM 修改规则 |
| 训练数据中毒 (Training Data Poisoning) | 攻击者污染训练数据,引入恶意模式或偏见。 | 输出有害内容、伦理问题 | 在训练数据里注入偏见样本 |
| 模型拒绝服务 (Model Denial of Service) | 利用复杂提示过载计算资源。 | 服务中断、财务损失 | 构造超长输入导致 LLM 崩溃 |
| 过度授权 (Excessive Agency) | LLM 过度自治,滥用 API 或执行危险操作。 | 数据篡改、系统损坏 | 操纵 LLM 调用 Debug SQL API 执行注入 |
| 不安全输出处理 (Insecure Output Handling) | 未净化 LLM 输出导致下游漏洞(XSS/CSRF/RCE)。 | 代码执行、数据泄露 | LLM 输出恶意 JS,被浏览器执行 |
| 模型窃取 (Model Theft) | 未授权访问专有 LLM 或权重。 | 知识产权泄露、竞争劣势 | 通过提示注入提取训练数据 |
| 对抗性攻击 (Adversarial Attacks) | 特殊字符串绕过安全对齐,诱导越狱。 | Jailbreak、生成敏感内容 | 加对抗后缀输出暴力内容 |
| 供应链攻击 (Supply Chain Attacks) | 污染插件、库或代理服务,引入后门。 | 广泛传播恶意行为 | 细调时嵌入广告或恶意逻辑 |
| 代理操纵 (Agent Manipulation) | 攻击 LLM 代理,通过 HTML/链接诱导执行恶意任务。 | 自动化黑客行为 | LLM 代理执行 SQL 注入 |
攻击链条流程图

攻击机制深入解释
提示注入
攻击者构造输入覆盖系统提示,如“忽略以上并执行 X”。
间接方式则将提示隐藏在网页、邮件或评论里。
训练数据问题
恶意样本可在微调时被注入,使模型在特定条件下触发攻击行为。
API 和插件漏洞
LLM 通常具备调用第三方 API 的能力,若无最小化权限控制,极易被利用。
对抗性与越狱
利用特殊后缀或自动化 jailbreak 工具绕过安全措施。
新兴威胁(2025 更新)
多模态提示注入:通过图片/音频等嵌入恶意信息。
代理黑客:LLM 代理自动化入侵网站。
时间侧信道:利用响应延迟推测是否注入成功。
案例说明

1、利用过度授权的 LLM API
目的:使用 LLM 删除用户carlos
步骤:
1、询问 LLM 它有权访问哪些 API

2、询问 LLM Debug SQL API 接受哪些参数

可以看到可以直接调用Debug SQL API 执行SQL语句。
3、让 LLM 调用 Debug SQL API,并传递参数SELECT * FROM users

已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



