虽然输入验证和输出过滤是LLM攻击防御的主要方法,但它们并非万无一失。老练的攻击者不断想出新方法来规避静态防御。因此,通过模型监控和异常检测进行持续警惕,是LLM安全策略中不可或缺的一环。这包括实时或近实时地观察LLM系统行为,以识别偏离常规的行为模式,这可能表明存在恶意活动、滥用或正在出现的弱点。
可以把它看作是LLM的安全摄像系统。即使门上有坚固的锁(输入净化器)和为使用者制定的明确规则(输出过滤器),您仍然需要留意可能预示异常行为的举动。
监控什么:信号与指标
有效的监控取决于追踪正确的信号。这些信号可以源自用户输入、模型输出,或LLM系统自身的运行特点。
输入特征
仔细检查输入到LLM的提示语可以显示出利用它的企图。请考虑追踪以下内容:
- 提示语结构与内容:
- 长度与复杂性: 异常长或复杂的提示语突然激增。
- 异常字符序列: 存在过多特殊字符、混淆的指令,或试图注入控制序列。
- 重复模式: 来自一个或多个来源的相似或相同提示语出现频率很高,这可能表明存在自动化攻击或模糊测试尝试。
- 语义漂移: 所提问题的主题或类型发生显著变化,特别是当它们倾向于敏感或超出范围的区域时。
- 来源信息:
- IP地址与地理位置: 来自非预期地理位置或已知恶意IP地址的请求突然涌入。
- 用户代理字符串: 异常或缺失的用户代理信息。
- API密钥使用: API密钥使用模式异常,例如休眠的API密钥突然变得非常活跃。
输出特征
LLM的响应是其内部状态和潜在泄露的丰富信息来源。监控以下内容:
- 内容标记 (token):
- 生成违禁内容: 检测仇恨言论、有害言论、个人身份信息(PII),或违反使用政策的响应。这通常涉及使用辅助分类模型或关键词列表。
- 意外的代码生成: 如果您的LLM不应生成代码,则输出中出现的任何代码都是危险信号。
- 敏感系统信息泄露: 输出内容泄露内部系统详情、配置或提示语。
- 行为指标:
- 响应长度与冗长程度: 输出始终过短、过长,或与典型交互相比表现出异常冗长。
- 重复或乱码: 模型陷入循环或生成无意义的文本。
- 延迟激增: 生成响应所需时间显著增加,这可能表明存在资源耗尽攻击或某些输入的处理效率低下。
- 置信度分数: 如果您的模型提供输出的置信度分数,请追踪许多响应中突然下降或异常低的分数。
系统与运行指标
LLM部署的整体健康状况和运行状态提供背景信息:
- 资源利用率: 监控CPU、GPU、内存和网络带宽。异常激增可能表明拒绝服务攻击尝试或低效查询。
- 错误率: API错误率、模型异常或基础设施错误的增加。
- 交互日志: 维护提示语、响应(如果敏感,则为响应的哈希值)、时间戳和用户标识符的详细日志。
异常检测方法
一旦您收集到这些指标,下一步就是分析它们以发现异常。可以使用多种方法,从简单到更复杂不等:
1. 基于规则的系统
这些是最直接的方法,涉及预定义规则和阈值。
- 阈值: 如果提示语长度超过2000个字符,或者单个IP每分钟发出超过100个请求,则发出警报。
- 模式匹配: 使用正则表达式标记 (token)包含已知恶意字符串或越狱尝试的提示语或响应。
- 黑名单/白名单: 阻止来自已知不良IP的请求,或仅允许来自特定用户代理的请求。
尽管易于实施,但基于规则的系统通常很脆弱,并且可能被了解规则的攻击者绕过。它们最适合用于捕获已知、常见的问题。
2. 统计方法
统计方法寻找偏离正常行为既定基线的现象。
- 移动平均值与标准差: 追踪响应延迟或毒性分数等指标的移动平均值。如果当前值偏离移动平均值超过(例如)3个标准差,则触发警报。
例如,如果过去一小时的平均毒性分数,S平均,为0.1,标准差,σ,为0.05,那么一个分数为0.3的新响应将偏离(0.3−0.1)/0.05=4个标准差,将其标记为异常。
- 频率分析: 监控某些词语、短语或主题的频率。提示语中“密码”或“信用卡”的频率突然激增可能值得怀疑。
- 异常值检测: Z-score或四分位距(IQR)等方法可以识别与其余数据显著不同的数据点。
下图显示了LLM输出平均情感分数的时间序列。其中一次突然、急剧的下降被检测为异常。
LLM输出情感分数随时间的变化,其中突出显示了检测到的异常下降。
统计方法比简单规则更具适应性,但需要仔细调整参数 (parameter)和基线。
3. 基于机器学习 (machine learning)(ML)的方法
ML模型可以学习正常行为的复杂模式,并识别其他方法可能遗漏的细微异常。
- 监督学习 (supervised learning): 如果您拥有正常和恶意交互的带标签数据,您可以训练一个分类器(例如,随机森林、支持向量 (vector)机、神经网络 (neural network))来检测攻击。这需要持续的努力来收集和标注数据。
- 无监督学习 (unsupervised learning): 这些方法不需要带标签的数据。
- 聚类: 将相似的交互分组。不适合任何聚类的交互可能就是异常的。
- 自编码器: 训练用于重建正常输入的神经网络。对于异常输入,它们将产生更高的重建误差。
- 护栏模型: 这些是专门的ML模型,通常是较小的LLM或分类器,与您的主LLM并行运行。其目的是评估提示语和响应的安全性、安保性或适用性。例如,护栏模型可能会评估提示语是否在尝试越狱,或者响应是否包含有害内容。
基于ML的系统可能很强大,但开发、部署和维护起来更复杂。它们还会引入针对监控模型本身的对抗性攻击风险。
设置您的监控流程
LLM系统的典型监控流程包括几个阶段:
数据流通过LLM监控系统,从输入/输出捕获到警报生成和响应。
- 数据收集: 从所有相关组件收集日志和指标:LLM交互(提示语、响应)、API网关日志、系统性能计数器。
- 特征提取: 将原始数据转换为异常检测算法可以使用的有意义的特征(例如,文本嵌入 (embedding)、情感分数、请求速率)。
- 异常检测: 应用上述一种或多种方法来分析特征。
- 警报与报告: 当检测到重大异常时,为安全团队生成警报。仪表盘可以提供系统行为和检测到的异常的可视化概览。
- 响应: 根据警报,人工分析师进行调查,或者触发自动化响应(例如阻止某个IP或限制某个用户的速率)。
LLM监控的难题
有效监控LLM伴随着一系列难题:
- 定义“正常”: LLM为多功能性而设计。它们的“正常”行为可以非常广泛,使得区分良性创造性与恶意滥用变得困难。基线需要持续完善。
- 语义理解: 许多攻击依赖于细微的语义操纵,而基于关键词或简单统计方法可能遗漏。监控系统理想情况下需要一定程度的语义理解。
- 数据量: 生产环境中的LLM会生成大量日志数据,使得存储、处理和实时分析计算密集。
- 不断变化的威胁: 攻击者不断找到利用LLM的新方法,这要求监控策略能够迅速适应。
- 误报与警报疲劳: 过于敏感的检测规则或模型可能导致大量误报,从而导致安全团队忽略重要警报。调整系统以在灵敏度和误报之间达到可接受的平衡非常重要。
尽管存在这些难题,模型监控和异常检测并非可有可无。它们提供了一个重要的反馈循环,使您能够检测绕过其他防御的攻击,了解正在出现的威胁模式,并最终提高LLM应用的安全态势。这种持续的监督有助于确保您的LLM安全地按预期运行,形成您整体纵深防御策略的一个动态响应组件。