第 5 章 运营安全与事件响应

学习目标

  • 设计能回答事件调查问题的审计日志,并将日志本身作为敏感数据保护。
  • 检测成本、资源耗尽攻击及智能体失控,用预算与阻断机制限制。
  • 通过引入和变更流程,减少模型、模型文件、插件、MCP服务器的供应链风险。
  • 制定LLM事件响应流程,明确各阶段负责人、阻断手段、证据与恢复标准。
  • 说明疑似个人信息泄露时需要确认的法定通知、报告要求的基本框架。

引言

周五晚上,某公司的客户支持智能体,开始发送比平时多十倍的邮件。值班人员接到警报后打开日志,看到的却只是一行接一行的“工具调用成功”。究竟在哪个会话中、读取了什么输入、给谁发送了什么,日志里都没有留下记录。由于没有能够单独关闭发送工具的开关,值班人员只好让整个服务下线,客户咨询一直积压到周一早上。虽然调查最终查明了原因,却始终未能确定:究竟有多少客户的信息,被发到了什么地方。值班人员并没有做错什么。安全事件发生当天,能够采取什么行动,取决于在那之前就已经准备好的日志与开关。而且,运营中的事件即使没有攻击者也会发生。一个临时启用的设置,或一项夜间生效的更新,都可能演变成个人信息事件或成本事件。

运营安全能够发挥多大作用,取决于安全事件发生前做了多少准备。本章从能够回答事件调查问题的审计日志,以及如何保护这些日志讲起,介绍限制成本与资源耗尽、约束智能体失控的机制,模型与插件的供应链管理,以及异常信号的设计。最后,整理LLM事件响应的流程、阻断开关,以及怀疑个人信息泄露时,需要判断的通知与报告要求。

核心概念

审计日志应证明什么

事件发生后最先问的是:“何时、谁的会话、进入了什么输入、模型做了什么?”OWASP Logging Cheat Sheet建议为每个事件记录何时、何地、谁、什么,并加入连接相关事件的交互标识符。LLM应用中,一次请求会分成检索、多次模型调用、工具调用和审批,缺少连接它们的追踪标识符,调查就会中断。

应记录内容 原因
请求时间、追踪标识符、会话与用户标识符 确定影响范围、关联事件
输入来源(聊天、文档、网页、邮件、工具结果)与文档标识符 追踪注入路径
工具调用名称、参数(敏感值脱敏,追踪键哈希)、结果状态、执行身份 确认实际行动
审批请求、审批结果、批准人 核实审批步骤是否生效
护栏与分类器判定 哪一层捕获了什么
模型ID、提示词与工具定义及分类器版本 关联变更与事件
token用量、成本、重复次数 检测消耗异常
授权失败、输入输出验证失败 检测攻击尝试

日志应证明“系统允许并执行了什么”,而非“模型如何思考”。MCP安全最佳实践也指出,下游日志若只记录中转服务器、不记录真实请求者,会阻碍调查。

保护日志本身

日志本身也是敏感数据。OWASP Logging Cheat Sheet要求,对日志中的会话标识符、访问token、密码、加密密钥及其他核心机密值、数据库连接字符串、支付信息,以及敏感个人信息,进行删除、脱敏、哈希或加密处理。它同时要求保护日志本身:检测伪造与篡改,尽早复制到只读介质,记录并监控对日志的访问,以及限制查看权限并定期审查。对于来自信任边界之外的数据,要清理换行符等内容,防止日志注入。模型输出与外部文档,就是这类数据的典型例子。

韩国的标准也遵循同一方向。《个人信息安全保障措施标准》(韩国个人信息保护委员会公告)要求,对访问个人信息处理系统的人员(信息主体除外)的访问记录,至少保存和管理一年。对于处理五万名以上信息主体的信息,或者处理固有识别信息、敏感信息的系统等,则至少保存两年。访问记录还必须安全保管,防止伪造、篡改、被盗或丢失。如果智能体的架构需要访问个人信息处理系统,应与个人信息保护负责人共同确定:这些访问记录,如何对应上述标准规定的访问记录。

是否保留完整的对话原文,需要另行决定。常见的折中办法是:基本日志只记录经过脱敏的结构化字段;调查中确实需要的原文,则短期保存在独立存储中,并对访问施加严格限制。

用户识别与滥用追踪

要防止滥用,就必须知道是谁在反复尝试。OpenAI建议在请求中附加safety_identifier参数,用来唯一标识用户,但应对用户名或电子邮箱进行哈希处理,以避免发送可识别身份的信息。对于未登录的用户,可以改为发送会话标识符。同一份文档还指出,通过要求注册和登录等方式了解用户(KYC),也能够降低风险。

Anthropic建议,对反复触发同一类拒绝的用户,告知其违反政策,并通过限制速率或封禁来应对。为此,需要把护栏判定与用户标识符一起记录,而用户标识符应采用哈希值或内部假名。与真实身份对应的映射表,则要单独管理。

无限制消耗的表现

OWASP LLM10(Unbounded Consumption)描述用户能够执行过量、不受控推理时的风险,包含七种子风险。

子风险 表现
可变长度输入泛滥 大量提交长短不一的输入,制造处理低效
钱包耗尽(Denial of Wallet) 放大按量计费成本,使运营者受损
持续输入溢出 反复提交超出上下文窗口的输入
资源密集型查询 用计算量很大的请求耗尽资源
通过API提取模型 大量查询、收集输出,复制模型的一部分
功能性模型复制 将输出作为合成训练数据,构建同功能模型
侧信道攻击 利用输入过滤等收集模型信息

智能体中,没有攻击者也可能发生同样的事情。工具错误重试、子任务分支、智能体彼此交接的循环,都会使成本呈指数增长。这是OWASP Agentic Top 10中ASI08(Cascading Failures)所述的连锁扩散以成本损失形式呈现的情况。钱包耗尽不同于普通拒绝服务之处在于,服务看似正常时,损害也在累积。

预算与阻断机制

OWASP LLM10列出十五项缓解措施,包括输入验证、限制logits与对数概率暴露、请求速率限制、资源分配管理、超时与节流、日志与监控及异常检测、水印、逐级降级、访问控制、集中式模型清单等。OpenAI同样说明,限制用户输入长度和输出token数量有助于减少滥用。

应用运营者首先应具备以下机制。

机制 内容
输入输出上限 输入大小上限、输出token上限
速率与配额 按用户、组织、IP限制每小时请求数及每日、每月token配额
单任务预算 单个任务的最大模型调用数、工具调用数、循环深度、成本
超时 任务和工具调用的最长运行时间
并发与队列上限 同一用户可同时运行的任务数量
熔断器 同类错误重复达到指定次数后,停止该工具调用
逐级降级 过载时先关闭昂贵功能,保留核心功能

应区分警报与阻断。成本警报只是通知人,周五晚上可能无人查看;预算上限则由代码停止执行。应对模型提取时,按照OWASP建议,限制或模糊API响应中logit_bias、logprobs等详细概率信息的暴露,并监控各账号用量模式。OWASP AI Agent Security Cheat Sheet也建议逐会话追踪token用量和成本,并用熔断器防止级联故障。

供应链1:模型与模型文件

OWASP LLM03(Supply Chain)列出的供应链风险,包括过时的第三方软件包、许可证、停止维护的模型、藏有后门的预训练模型、薄弱的来源保证、恶意LoRA适配器、共同开发过程中的滥用、设备端模型遭到篡改,以及不明确的服务条款。模型是难以检查的二进制黑箱,因此仅凭静态检查,能够提供的保证十分有限。

模型文件的格式,同样可能构成风险。Hugging Face文档提醒,在加载PyTorch权重的默认格式pickle文件时,可能会执行任意代码。它建议只加载可信用户和组织的模型,并使用经过签名的提交来确认来源,同时也补充说:签名保证的只是来源,并不是文件的安全性。文档还明确说明,Hub上的安全扫描也并不完美,并介绍了safetensors格式。与pickle不同,这种格式是专门为安全存储张量而设计的。

引入流程按以下顺序设计。

  1. 审查供应商、数据来源、条款、隐私政策,并定期复查。
  2. 仅使用来源可验证的模型,通过签名和文件哈希确认完整性。
  3. 加载时可能执行代码的文件,只在隔离环境打开。
  4. 通过符合自身用途的红队测试与评估确认,而非只看基准测试,因为模型可能被微调为规避公开基准测试(OWASP)。
  5. 制定补丁政策,依赖持续维护的API与模型。

供应链2:工具、插件、MCP服务器

智能体会在运行时加载工具与其他智能体。OWASP Agentic Top 10的ASI04(Agentic Supply Chain Vulnerabilities)不同于主要关注静态依赖的LLM03,讨论运行时组合的工具、MCP服务器、智能体注册表、更新渠道受污染的风险。安装时审查过的工具,更新后可能已不是原来的工具。

MCP安全最佳实践具体描述了本地MCP服务器的风险。本地服务器在用户电脑上以与客户端相同的权限运行,因此恶意启动命令或恶意服务器可能导致任意代码执行与数据泄露。提供一键配置本地服务器的客户端,必须完整、不截断地展示将执行的命令,说明这是一项有风险的操作,并取得用户明确批准。文档建议在最小权限沙箱中执行服务器命令,限制文件与网络访问。

运营原则有四条:固定工具和服务器版本;更新时比较名称、说明、参数、请求作用域的变化;权限扩大时按新引入重新审批;准备在疑似遭受入侵时一次性断开连接并撤销token的应急撤销流程。

配置清单与AI BOM、模型生命周期

发生事件时,要立即回答“出了问题的组件,用在什么位置、使用哪个版本”,就必须事先建立清单。OWASP LLM03要求维护经过签名、保持最新的SBOM(软件物料清单),并建议考虑采用将模型和数据也纳入其中的AI BOM(ML SBOM),同时将OWASP CycloneDX列为起点。CycloneDX的ML-BOM是一种用于表示AI与机器学习系统的数据集、模型和配置,并记录来源的格式。对于LLM应用,还可以进一步将提示词、工具定义、连接器及其权限范围、分类器,以及检索索引的来源,一并纳入清单。

模型也有自己的生命周期。根据Anthropic文档,各个模型ID都指向一个固定版本,这个ID所对应的权重不会改变(旧一代模型中曾有的别名,会跟随最新快照,因此属于例外)。不过,请求路由器或安全分类器等服务基础设施可能发生变化,使实际观察到的行为略有不同。模型会先被弃用(deprecated),再退役(retired);发送给已退役模型的请求会失败。Anthropic会在公开模型退役至少60天前通知,并建议在距离退役还有充分时间时,就使用替代模型测试应用。从安全角度看,更换模型属于第1章所说的重新审查条件。因此,应先在新模型上重新运行回归评估集(第4章),再进行替换。

检测信号设计

比起寻找可疑语句,检测实际权限滥用与损害迹象的机制更持久。

信号 可疑情况 负责方
授权失败反复发生 模型持续尝试访问权限外资源 安全运营
首次出现的外部传输目标 外传尝试、收件人操纵 安全运营
大量查询后立即对外传输 读取后发送的泄露模式 安全运营
批准内容与执行参数不一致 绕过批准、参数篡改 安全运营与服务开发
护栏触发率突变 新攻击流行或误报增多 AI平台
token、成本、重复次数激增 钱包耗尽、智能体失控 服务运营

没有负责人的警报只会积压,因此每种警报都应明确负责人和首项行动。建立目标状态与工具使用模式的基线,也有助于识别非预期目标变化或工具调用顺序偏离(OWASP Agentic Top 10)。

事件响应流程

LLM事件沿用一般安全事件的基本框架,但增加工具权限、记忆与索引、提示词和模型版本这些特有要素。NIST于2025年4月发布SP 800-61 Rev. 3,将事件响应建议与网络安全框架(CSF)2.0及风险管理活动对齐。NIST AI RMF的Manage职能也包括事件响应、恢复、沟通计划,并要求向相关主体告知事件与错误。

阶段 LLM事件中的工作 事先准备
1. 检测与分类 接收警报、用量异常、用户举报,区分回答错误、攻击尝试、实际损害 举报渠道及查看者(OpenAI建议)、严重性标准
2. 阻断 关闭问题工具、断开连接并撤销token、停止记忆写入、撤销疑似暴露密钥 逐工具阻断开关、密钥撤销流程
3. 确定范围 确认受影响会话、用户、数据、时段与实际执行行为 由追踪标识符串联的审计日志
4. 消除原因 清理注入路径、过大权限、输出处理缺陷、受污染记忆与索引 配置清单、索引重建流程
5. 验证后恢复 将事件场景加入回归集,通过后分阶段恢复 回归评估集、恢复批准人
6. 通知与复盘 法定及合同通知,记录时间线、原因、改进措施 通知判断负责人、复盘模板

阻断先于范围确认。泄露可能仍在继续,若先分析日志,损害会在期间扩大。反过来,未查明原因就急于恢复,同一路径会再次开放。OpenAI建议密钥若可能暴露或遭滥用,应立即撤销并换新;OWASP Secrets Management Cheat Sheet警告,重启应用不会撤销被盗凭据。同一文档也建议平时将机密值置于集中管理工具,并配置自动轮换,这样撤销和重新签发会更快。

阻断开关与安全降级运营

只有“关闭整个服务”这一种手段的系统,小事件也会付出大代价。应按单位准备阻断开关。

  1. 工具级:仅关闭特定工具(发送、付款、外部抓取)。
  2. 连接级:断开特定MCP服务器或连接器,并撤销token。
  3. 功能级:关闭记忆写入、外部链接渲染、文件上传。
  4. 模式切换:切换为只读模式或预先准备的静态说明模式。
  5. 任务级:取消排队任务,停止运行中任务。

运行手册应针对每个开关写明谁有权开启和关闭、关闭后会停止什么,以及正在执行的任务如何处理,并定期实际操作。用户界面的“停止”按钮是否真的停止服务端任务,也属于测试对象。每季度通过不触碰实际系统的桌面演练,口头逐步执行运行手册,可发现“没有只关单个工具的开关”“不知道供应商联络渠道”等缺口。

个人信息泄露通知与记录

LLM事件若导致个人信息泄露,就会产生法定通知、报告要求。本节仅提供判断框架,不构成法律意见。实际事件由个人信息保护负责人及法务人员判断。

韩国《个人信息保护法》第34条要求,个人信息处理者获知泄露等情形(丢失、被盗、泄露、伪造、篡改、损毁)后,应及时通知信息主体:涉及字段、发生时间与经过、信息主体可采取的减损方法、处理者的应对措施与救济程序、负责部门及联系方式,以及请求损害赔偿、争议调解等法定权利及行使方法等。2026年9月11日施行的修订,还新增了获知存在泄露等可能性时的通知。施行令规定,应在72小时内以书面等方式通知(需要紧急措施时,在相关事由消除后立即通知);具体内容尚未查明时,先通知已确认内容,再补充通知。施行令第40条规定,符合以下任一情形,应自获知起72小时内向韩国个人信息保护委员会或韩国互联网振兴院报告:涉及一千名以上信息主体的信息;涉及敏感信息或固有识别信息;因外部非法访问导致泄露。另设有不得已事由的期限例外,以及通过收回、删除使侵害权益的可能性显著降低时可不报告的但书。健康信息属于同法第23条的敏感信息。

实际含义有两点。要在72小时内回答“哪些字段、多少人、经什么路径”,就必须预先具备可确定范围的日志;即使尚未确认泄露,也可能需要判断通知义务,因此应在事件初期就将个人信息保护负责人纳入响应体系。NIST AI 600-1也说明,日志、变更管理记录与版本历史有助于共享事件信息。

深入阅读

证据保存与个人信息保护的平衡

调查需要原文,而个人信息保护又要求减少原文的保留,因此要将存储分开。基本审计日志采用脱敏后的结构化字段,保留较长时间;原文则短期保存在独立的证据库中,而且只有获得访问批准后,才能查看。一旦正式宣布发生事件,就在证据库中冻结相关时段的原文,并留下收集、查看与交接记录。分析时使用副本,而不是原件;副本也应附上完整性校验值。

如果各系统的时钟不同,就无法重建事件的先后顺序,因此应统一时间基准,并通过追踪标识符将事件连接起来。同时,还要预先制定调查渠道的规则,避免在调查过程中,把原文粘贴到即时通讯或工单中,造成二次暴露。

恢复受污染的记忆、索引、缓存

在智能体事件中,即使已经消除原因,污染也可能继续残留。受污染的文档会留在索引中,隐藏指令形成的“偏好”会留在长期记忆中,被污染的回答则会留在响应缓存里。恢复时应按以下顺序考虑:首先,停止污染源的写入;接着,根据污染发生的时段与路径,找出受影响的记忆项、索引片段和缓存项。如果事先保存了来源信息,这一步会容易得多。找到这些项目后,先将其排除出检索范围,予以隔离,然后再删除;索引则从可信的原始内容出发,按需要的范围重新构建。在污染期间签发或暴露的凭据,需要更换。最后,用能够复现相同污染的场景运行回归评估,之后才重新开放写入。

对于无法回答第1章那个问题——“受到污染时,要如何清除?”——的存储,在这一步,可能只能将其整体弃用。设计时就在记忆和索引中记录来源与写入时间,能够大幅降低恢复成本。

工作场景

同心牙科联盟:调试日志成了泄露通道

牙科医疗网络“同心牙科联盟”的负责人,在定期检查预约与咨询聊天机器人时,发现三个月前为了调查质量问题而启用的调试日志,至今仍然开着。整段对话原文不断被发送到外部日志分析服务。对话中包含患者姓名、联系方式、疼痛部位与治疗经历。该日志服务的项目,允许接近二十个账号访问,其中还包括外包开发公司的员工。

负责人首先进行了阻断:关闭调试日志,停止向外部传输,并将项目访问权限缩减到最少人员。随后,统计了传输持续的时段、已经发送的对话数量,以及不重复的患者人数;又通过日志服务的访问记录,确认在这一期间,究竟是谁查看过日志。虽然没有发现外部非法访问的痕迹,但当时的状态是,不因工作需要接触这些信息的人,也能够访问敏感的诊疗信息。

个人信息保护负责人和法务团队,在当天就加入了响应。治疗经历可能属于敏感信息,而根据施行令,敏感信息泄露可能不论涉及人数多少,都属于需要报告的情况。法务团队审查了是否需要通知与报告,并在72小时内作出结论。负责人整理的时段、信息项目、人数与查看记录,直接成为此次判断的依据。

为消除原因,团队规定,基本日志只保留经过脱敏的结构化字段(追踪标识符、工具名称、判定、token数量)。如果确实需要原文,则必须事先获得批准,并且只能在受限的内部存储中保留最多两周。调试设置加上了到期日,对外发送的数据则每季度进行审查。复盘中留下的原则是:“日志也是敏感数据,而且临时设置必须有到期日。”

海浪传媒:没有攻击者的钱包耗尽

内容公司“海浪传媒”在起草文章时,会使用资料研究智能体。智能体通过外部资料搜索连接器收集资料,再把摘要任务分配给下级智能体。某个周二的凌晨,系统发出警报:仅六个小时,就已经用掉月度预算的40%。但警报只通过邮件发送,因此直到早晨上班之前,都没有人看到。

值班人员查看日志,却没有发现攻击的痕迹。原来,搜索连接器在前一天晚上更新后,响应格式发生了变化。智能体无法解释返回的响应,就判断为“搜索失败”,于是重试。每次重试,又会新启动下级智能体,重新分配摘要任务;下级智能体也会调用同一个连接器,失败后继续重试。一个任务,就这样膨胀成了数百次模型调用。

阻断分成两步:先关闭连接器的连接,再取消所有正在进行的研究任务。确认取消按钮是否真的能够连下级智能体一起停止,花了一些时间,因为部分子任务在父任务取消之后,仍然继续运行。团队将这一情况记录为单独的缺陷。

防止再次发生的措施,重点是将警报变成阻断。团队为每个任务设置了模型调用次数、下级智能体数量、重试次数与成本的上限,让重试间隔逐渐拉长,并加入熔断器:同一种工具错误连续出现五次,就阻止该调用。系统还修复为,取消父任务时,子任务也随之停止。连接器固定版本,只有通过响应格式比较和回归测试的更新,才允许采用。达到组织每日预算时,就把研究功能降为只读摘要模式。复盘中写下:“即使没有恶意,也会发生无限制消耗。”“在没有人查看的时间里,发挥作用的是上限,而不是警报。”

易错点

  1. “换成便宜的模型,就解决了成本攻击。” 即使单价降低,只要请求没有上限,成本仍会持续增长。根本原因是没有上限的消耗。
  2. “设了成本警报,就能防止钱包耗尽。” 警报只是通知人。在没有人查看的时段,需要的是能够由代码停止执行的上限。
  3. “模型很受欢迎,所以已经得到验证。” 下载量或基准测试分数,不是完整性的证据。应核查来源、签名与哈希,并通过适合自身用途的评估加以确认。
  4. “固定了模型ID,行为就绝对不会变化。” 即使权重固定,服务基础设施的变更也可能使行为略有不同,而且模型最终还会退役。因此,应定期运行回归评估。
  5. “日志保留得越多越好。” 日志本身也是敏感数据。必须确定记录什么、对什么进行脱敏、保留多长时间,以及由谁查看。
  6. “等原因全部查明后再阻断。” 如果损害仍在持续,就应优先阻断。原因必须在恢复服务之前查明。
  7. “要更换密钥,只需重启服务。” 重启并不会撤销被盗的凭据。撤销和重新签发,需要另行执行。

要点速览

考前一天,请逐句朗读确认以下内容。

  • 审计日志用追踪标识符串联何时、何地、谁、什么,以及输入来源、工具调用、批准、判定、版本。
  • 日志中删除或脱敏token、密码、密钥、连接字符串、敏感个人信息,并防范日志伪造、篡改,管控查阅权限。
  • 用哈希用户标识符和护栏判定记录追踪滥用。
  • 无限制消耗不一定有攻击者;重试、分支、委托循环会放大成本。
  • 警报负责通知,上限负责停止;设置单任务预算与熔断器。
  • 模型文件检查来源、签名、哈希,可能包含执行代码的格式在隔离环境处理。
  • 工具与MCP服务器固定版本,更新时审查说明、参数、作用域变化。
  • 事件响应有六阶段;损害持续时,在完全查清范围前先阻断。修复原因、通过回归测试后再恢复。
  • 按工具、连接、功能、模式、任务准备阻断开关,并实际操作验证。
  • 疑似个人信息泄露时,及早请个人信息保护负责人加入,以判断72小时标准下的通知与报告义务。

查阅官方文档

自测

5-1. 根据OWASP Logging Cheat Sheet,写出四类应从日志删除或脱敏的数据,并举出一种可代替原文保留、用于调查的信息。

5-2. 说明成本警报与预算上限的区别,并写出可施加于单个智能体任务的两种上限。

5-3. 区分OWASP LLM10子风险中的“持续输入溢出”和“资源密集型查询”,并各举一项适合的控制。

5-4. 根据Anthropic文档,说明即使固定模型ID,同一提示词的行为仍可能变化的原因,并举出运营团队应做的一件事。

5-5. 允许一键添加本地MCP服务器的客户端,按照MCP安全最佳实践必须完成哪两件事?推荐使用什么运行环境?

5-6. 写出韩国《个人信息保护法施行令》第40条规定的三类须履行报告义务的情形及报告期限。

5-7. 设计题:为具有长期记忆的咨询智能体事件响应运行手册,设计四种阻断开关。逐一写明关闭什么、谁能关闭、关闭后停止什么。

实操练习

练习

制作LLM事件响应运行手册(50分钟)

  1. 选择本服务中可能发生的两种事件(如间接注入导致工具滥用、智能体循环调用导致成本激增)。
  2. 为每种事件制表,写明检测信号、阻断措施(谁、用什么开关)、确定范围所需日志字段、可能原因、回归测试项,以及通知判断应邀请谁。
  3. 确认阻断措施是否真实存在(逐工具开关、token撤销流程、预算上限),标出缺失项。
  4. 与同事进行一次15分钟桌面演练,记录卡住的位置。

完成标准: 两种事件都至少有一项可在五分钟内执行的阻断措施,缺失措施均注明负责人及准备期限。

练习

编写审计日志字段定义书(45分钟)

  1. 参考本章表格,以JSON示例定义一次请求应留下的日志字段(追踪标识符、输入来源、工具调用、批准、判定、版本、用量)。
  2. 为每个字段确定脱敏规则(原文、哈希、脱敏、不记录)、保留期限与查看权限。
  3. 检查能否仅凭此日志回答五个问题:何时开始、经哪条输入路径、哪个工具以哪些参数执行、谁批准、当时模型与提示词版本是什么。
  4. 若有问题无法回答,则增加字段,同时寻找不记录敏感原文的方法。

完成标准: 五个问题均可回答,没有任何字段以原文保留token、密码、密钥、敏感个人信息。