云计算百科
云计算领域专业知识百科平台

LLM/Agent 安全实战核心要点总结

一、Agent 为什么放大 LLM 安全风险

Agent 在文本生成基础上新增检索、记忆、工具调用、MCP插件、代码执行、多轮长任务,攻击面大幅扩张:

新增能力风险点后果
RAG/网页/邮件读取 外部不可信内容进入上下文 间接Prompt注入、知识库投毒
Memory跨请求存储 恶意指令持久化、跨用户污染 旧会话恶意指令影响新请求
Tool Calling 调用数据库、支付、文件、消息接口 越权查询、篡改、数据外泄
MCP/Skill第三方插件 引入第三方代码、描述、依赖 供应链攻击、权限溢出
代码/浏览器执行 Shell、Python、网页访问 文件泄露、SSRF、资源耗尽
多Agent长任务 上下文多轮传递 故障级联扩散,责任难以定位

OWASP两份清单:LLM Top10 2026、Agentic Top10 2026,重点关注提示注入、敏感泄露、过度代理、供应链、隐藏上下文暴露、目标劫持、Rogue Agent。

信任区划分

只有服务端策略、认证用户身份、经过鉴权完整性校验的结构化业务事实是可信。
以下全部视为不可信输入:

  • 用户输入、上传文件
  • 工单、网页、邮件附件、RAG召回片段
  • Memory存储内容
  • MCP、第三方API、其他Agent返回结果
  • 模型生成文本、工具调用参数
  • 第三方Skill描述、脚本依赖
  • 威胁建模四要素:保护对象、攻击入口、高风险动作、强制控制点。

    二、提示注入相关概念区分

    类型注入来源攻击目标示例
    直接Prompt Injection 用户直接输入 篡改应用任务、诱导工具调用 忽略退款规则直接退款
    间接Prompt Injection 网页、文档、RAG、工具返回结果 外部数据被模型当做指令 工单附件夹带发送订单到攻击者网站
    Jailbreak 用户输入 绕过模型自身安全护栏 诱导模型输出被模型策略禁止的内容

    三者并不互斥;间接注入不需要攻击者访问聊天窗口,预先污染知识库即可生效;多模态(图片OCR、隐藏文字、文档元数据)同样存在注入风险。

    为什么System Prompt写“不要听外部指令”不够

    • XML标签、分隔符只能降低注入概率,属于模型侧防护,攻击者可以针对性绕过;
    • 不能把提示词模板当作完整修复方案,必须构建分层防御:
    • 减少模型可见敏感数据、收缩可用工具集
    • 标记隔离外部不可信内容
    • 将模型输出当做操作建议,而非可直接执行指令
    • 后端代码做鉴权、业务规则、风险校验
    • 高风险操作人工确认,受限沙箱执行代码网络
    • 对抗样本持续全链路测试

    三、外部内容安全接入上下文

    1. RAG检索:ACL过滤必须在召回前执行

    错误:先全量召回Top‑K,再靠提示词告诉模型不要泄露无权限内容;越权文档一旦进入上下文就会存在泄露风险。
    正确:检索阶段就带入租户、用户组、文档密级过滤;记录文档ID、权限过滤结果、内容hash;多租户从存储、索引、缓存多层面隔离,不只是靠Prompt租户名称。

    2. 上下文元数据标记

    每条上下文携带元数据:来源类型、sourceId、租户ID、内容hash、信任等级、用途、敏感度;
    通过元数据做确定性规则:不可信外部内容不允许生成工具名、URL、授权参数,仅允许提取业务事实。

    3. 阶段拆分:先提取事实,再执行动作

  • 第一阶段:仅读取外部文档,输出受Schema约束纯事实(订单号、问题、诉求);
  • 后端校验:校验资源归属,重新读取权威业务数据库;
  • 第二阶段:基于校验后的事实生成候选动作;
  • 工具执行器再次校验权限、业务规则、审批。
  • 即使拆分阶段,依旧不能信任模型提取的事实,后端校验不可省略。

    4. 工具返回结果 = 不可信输入

    • 工具返回结果会流入下一轮上下文,可触发间接注入;
    • 返回优先使用结构化数据;禁止把原始堆栈、token、内部URL直接交给模型。

    5. Memory长期记忆安全

    风险:攻击者写入恶意长期记忆,跨会话持续生效。
    防护要点:

  • Memory记录租户、用户、来源、写入者、过期时间、版本;
  • 用户偏好、业务事实、可执行指令物理分开存储;
  • 外部内容、模型输出禁止写入高信任指令区;
  • 高风险记忆写入需要Schema、权限检查甚至人工审核;
  • 提供记忆查询、更正、删除入口。
  • 四、模型输出与工具调用四层校验

    Function‑Calling的JSON Schema仅校验数据结构,不能校验业务语义与权限。
    工具执行前四层校验,全部由后端执行,不信任模型输出的租户、userId、approved标记。

    校验层级校验内容实现方式
    结构校验 必填、类型、枚举、长度 JSON Schema / DTO强类型
    语义校验 金额范围、状态流转、时间窗口 业务代码
    资源鉴权 当前用户是否有权操作目标资源 权限服务,重新读取数据库
    风险策略 是否需要确认、双人审批、禁止自动执行 策略引擎

    身份、租户必须来自服务端认证上下文,不从模型参数获取。

    输出给浏览器/下游程序的安全处理

  • HTML输出做编码,富文本白名单清洗,防止XSS;
  • SQL使用参数化,禁止拼接模型生成SQL;
  • Shell尽量替换为领域专用工具,禁止直接执行模型shell字符串;
  • URL访问校验协议、域名IP、重定向链路;
  • 文件路径规范化,拦截../路径穿越;
  • 不反序列化、不执行模型生成的任意对象代码。
  • 五、Agent工具权限管控

    1. 工具粒度决定安全粒度

    高危万能工具:execute_sql(sql)、request_url()、通用文件操作;把选择权完全交给模型。
    业务原子工具:围绕具体业务动作设计,例如get_order_summary、create_refund_request;读写工具分开注册,便于后端约束参数、权限、审计。

    2. 按风险分级处理自动执行

    风险等级示例处理策略
    低风险 查询本人订单摘要 鉴权后自动执行,返回脱敏数据
    中风险 创建退款草稿、待发送邮件 生成草稿,需要用户确认后提交
    高风险 真实退款、删除数据、外发邮件 强确认,必要双人审批
    禁止自动化 任意SQL、Shell、全租户导出 不暴露给通用Agent,走独立受控流程

    读取敏感数据即使无写操作,同样算高风险;确认凭证必须绑定工具、规范化参数hash、用户、会话、有效期;参数变更,原有确认直接失效;审批凭证一次性消费防止重放。

    3. 工具目录裁剪

    不要下发全部工具schema给模型,根据租户、角色、场景风险裁剪工具列表。裁剪只是减少攻击面,不能替代后端鉴权。

    六、MCP安全要点(协议版本2026‑07‑28)

    MCP只是调用协议,不会自带业务安全能力。

  • 禁止Token透传(Token Passthrough)
    • MCP Client → MCP Server使用一组token;
    • MCP Server访问下游业务API使用独立受限凭证;
    • 避免迷惑代理Confused Deputy问题。
  • Scope粒度:拒绝admin/all/full‑access超大权限scope;拆分为细粒度能力如orders:read:self;按需增量申请权限。scope本身不等于资源权限,服务端依旧做资源校验。
  • 本地stdio MCP Server风险:安装第三方本地Server等同于运行第三方代码,审查启动命令、依赖、文件/网络权限;需要沙箱、紧急禁用开关。
  • MCP注解提示如readOnlyHint仅用于UI展示,不可作为鉴权依据。
  • OAuth元数据获取要防护SSRF,拦截私网、云元地址;校验http header与body的method、toolName一致性。
  • 七、重试、幂等、不确定状态处理

    Agent循环、网络超时容易造成重复写操作(例如重复退款)。

  • 生成服务端actionId代表一次业务意图;复用幂等键做重试;新业务动作生成全新actionId;
  • request_digest为参数规范化hash,同一个actionId携带不同摘要直接拒绝;
  • 工具状态不只成功失败:PENDING → EXECUTING → SUCCEEDED / FAILED / UNKNOWN;
  • 超时不可自动判定失败,进入UNKNOWN状态,依靠后台对账查询收敛状态,禁止直接自动重试写请求;
  • 仅允许幂等读、限流退避读自动重试;权限失败、参数非法直接中断。
  • 八、代码/浏览器工具沙箱隔离

    仅仅Docker不等于安全,需要组合多项配置:

  • 容器配置:非root/rootless;裁剪Linux capabilities、seccomp;根文件系统只读;不挂载docker socket、宿主目录、云凭证;限制CPU/内存/进程/磁盘/超时;每个任务独立工作区,执行完毕销毁;镜像固定摘要。
  • 替代方案:高敏感场景考虑微虚拟机、Wasm‑WASI;Wasm也需要严格限制Host导入能力,不是绝对安全。
  • Java注意:SecurityManager已经被移除,依靠操作系统/容器隔离不可信代码。
  • 网络出口统一管控

    • 协议白名单;拦截回环、私网、云元数据IP;DNS解析、每一跳重定向都要校验;业务域名白名单;
    • 限制请求大小、超时、重定向次数;浏览器自动化隔离登录态,禁止携带内部系统Cookie。

    九、敏感数据、日志、Trace处理

  • 调用模型前执行数据最小化

    • 密钥密码完全禁止进入Prompt/Trace;
    • 身份证银行卡默认不传,必须使用则脱敏加密;
    • 系统Prompt中禁止存放密钥密码,规避Hidden Context Exposure隐藏上下文泄露风险。
  • Trace分层存储

    • 默认保存:requestId、工具名、参数hash、元数据(不存完整报文);
    • 完整原文:按需加密保存,严格访问控制、设置过期删除;
    • 日志管道自动屏蔽密钥token;Spring AI开启content导出前评估脱敏策略。
  • 多租户隔离覆盖全部链路:RAG、Memory、缓存、Trace索引,不能只做检索层隔离。

  • 十、供应链治理(MCP/Skill/模型/镜像)

    AI供应链包含模型、数据集、Prompt、MCP Server、Skill、容器镜像。
    审核要点:来源可信、固定版本与摘要、审查安装脚本、申请权限范围、工具描述是否夹带指令、漏洞扫描、快速禁用回滚。
    使用SBOM / AI‑BOM管理组件清单,BOM仅记录组件,不能替代权限策略。

    十一、Java后端安全工具执行链实现要点

  • 身份与模型提议分离:ExecutionContext(tenantId、userId、requestId、actionId)全部来自服务端认证,不来源于模型输出;模型输出RefundProposal仅仅是业务建议。
  • 执行前重新读取权威资源:通过租户+资源ID查询,避免查询后再过滤;执行鉴权、业务规则校验;校验审批token绑定命令hash;幂等存储,原子claim防止并发;区分成功、失败、UNKNOWN状态,UNKNOWN交由后台对账。
  • 审计日志:不默认存储完整PII参数;记录hash、风险等级、审批id、幂等键hash、执行状态;完整报文放到独立受控存储。
  • Spring AI安全接入点:裁剪下发给模型的ToolCallback;自定义ToolCallingManager包装鉴权幂等审计;Advisor控制调用预算;显式实现审批暂停逻辑。
  • 十二、安全测试、指标与发布流程

    ❗测试断言重点校验系统真实状态副作用,不能只看模型文字输出“我不能做”。

    典型Badcase测试用例

    • 直接提示注入、工单隐藏指令间接注入
    • RAG召回越权文档、工具返回值注入新动作
    • 模型篡改租户ID、审批后篡改参数
    • 幂等并发、超时重复调用
    • SSRF访问元数据地址、MCP伪造只读标记
    • Trace、Memory跨租户泄露

    关键观测指标

    Attack Success Rate攻击成功率、Unauthorized Action Rate越权操作率、敏感泄露率、审批绕过率、误拦截率、遏制率。

    LLM‑as‑Judge仅做辅助,权限泄露必须靠数据库、审计记录确定性校验。

    发布流程

    离线安全样本回归 → 隔离环境回放历史Trace → 红队攻击 → 灰度发布 → 线上监控异常调用;
    模型、prompt、工具、MCP、权限策略变更必须跑安全回归。

    十三、安全事件应急处理流程

  • 止损:禁用工具/MCP、暂停异步Agent、轮换泄露凭证;
  • 取证:保存trace、审计记录,确认攻击入口、受影响范围;
  • 业务处置:对账、撤销、补偿;
  • 修复根因:不要只改Prompt;修复权限、沙箱、网络策略;原始攻击样本回归验证;
  • 清理污染数据:文档索引、缓存、memory;
  • 样本加入回归集,逐步恢复服务。
  • 十四、高频面试问题

  • Prompt Injection怎么防?
  • 无法靠Prompt彻底根除。模型侧(分隔符、注入检测)降低受骗概率;后端最小权限、鉴权审批、沙箱审计限制实际危害;对抗样本持续回归。

  • Function Calling有Schema为什么不安全?
  • Schema仅校验参数数据结构,不校验业务语义、资源归属、业务规则;鉴权、限额、审批必须后端实现。

  • 退款Agent完整执行链?
  • 服务端认证身份租户 → 裁剪工具目录 → 模型输出退款提议 → 后端DTO校验,按租户查询权威订单,鉴权,业务规则校验 → 高风险操作绑定参数hash审批 → 幂等键调用支付 → 审计日志,处理UNKNOWN对账。

  • MCP开启OAuth就安全吗?
  • OAuth解决授权框架,不解决业务资源鉴权;必须禁止token透传,下游使用独立凭证;MCP本身还有供应链、本地进程沙箱风险。

  • Docker能否完全解决代码执行风险?
  • 不能。必须配合非root、capabilities、seccomp、只读文件系统、网络出口、资源配额;高敏感场景考虑更强隔离方案。

  • Trace安全风险是什么?
  • Trace存储完整prompt、工具参数会汇集大量敏感PII/密钥;默认只记录元数据hash,完整报文按需加密留存,严格访问控制。

    十五、上线检查清单

    输入与上下文

    • 外部内容统一标记不可信
    • RAG在召回前执行ACL租户过滤
    • Memory写入校验来源租户过期时间
    • 上下文携带来源、hash、信任等级
    • 多模态输入纳入对抗测试

    工具与权限

    • 工具拆分为业务原子能力,不暴露万能SQL/HTTP工具
    • 身份租户全部取自服务端认证上下文
    • 四层校验:schema、业务语义、资源鉴权、风险策略
    • 高风险确认绑定参数hash,参数变更重确认
    • 写操作具备幂等、unknown状态、对账补偿

    MCP与供应链

    • MCP组件固定版本、审计来源依赖
    • 禁止Token Passthrough,细粒度scope
    • 支持快速禁用组件、回滚版本

    隔离与数据

    • 代码浏览器运行受限沙箱,资源配额限制
    • 文件网络严格管控
    • Prompt、日志Trace规避密钥PII,明确留存删除策略

    评测与响应

    • 安全测试验证真实副作用,不只看模型输出
    • 统计越权、泄露、误拦截指标
    • 变更自动安全回归
    • 具备应急禁用、对账恢复预案

    总结

  • Prompt注入来源既可以来自用户输入,也来自RAG、文档、工具返回结果;
  • 模型只负责输出操作提议,安全决策全部交给后端系统;
  • 分层防御:模型侧防护降低攻击概率;鉴权、最小权限、审批、沙箱、审计遏制攻击造成的实际伤害;
  • MCP、Memory、Trace、缓存、RAG都需要做多租户隔离;
  • 安全样本需要和模型、Prompt、权限策略共同版本化,持续回归验证。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » LLM/Agent 安全实战核心要点总结
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!