返回安全研究YOFUNE_LABS / C001

实验室案例 · 受控复盘

内部知识 Agent
如何把部门文档读出边界

背景、架构、风险、攻击路径、修复与复测:一次实验室知识库评估的完整记录。

实验室案例,不是客户背书

本文是 Yofune_Labs Security Lab 按常见企业架构搭建的受控复盘。部门、系统和人物均为实验室设定,用于说明评估方法。它不表示夜船有明已与某家企业签订项目,也不表示文中风险已在生产环境发生。

本文是 Yofune_Labs Security Lab 的受控复盘。我们按制造企业常见的“内部知识问答”架构搭建隔离环境,部门名称、人员和系统均为实验室设定,用于说明评估方法。它不是对某家企业的项目报告,也不表示生产环境已发生同样事件。

01背景

实验室设定:一家制造企业把工艺手册、质量规范和部分人事说明放进同一个知识库,供内部问答 Agent 使用。目标是减少“文件在哪个盘”的询问。安全团队希望确认:工艺工程师能不能问到质量部未授权文件。

02架构

可见组件如下:

  • 对话应用,员工用域账号登录
  • 编排层,把问题交给问答 Agent
  • 向量检索服务,使用独立服务账号读取全部文档切片
  • 生成模型,负责总结检索片段
  • 可选的“相关工单”查询工具,演示阶段未打开写权限

信任假设写在设计文档里:登录过的人是内部人员;模型会被提示“尊重部门权限”;知识库管理员认为敏感文件“一般不会被问到”。

03风险

第一,检索层身份与对话层身份脱节。员工登录只约束了谁能打开聊天窗口,不约束检索器能取哪些切片。

第二,多部门语料混在同一索引。语义相近的质量文件,会作为工艺问题的“有帮助上下文”出现。

第三,回答会进入会话日志。即便界面没有下载按钮,越权摘要已经被存下来。

04攻击路径

实验室扮演工艺岗位用户,提问返修流程。检索器按相似度返回三份切片,其中一份来自质量部内部说明,含有不应出现在工艺岗位视野的组织信息。

Agent 把三份切片一并总结。没有触发任何“权限拒绝”,因为工具调用本身是检索,检索账号拥有全库读权限。

路径可以写成:

登录身份(工艺)→ 自然语言问题 → 全库检索 → 质量部切片进入上下文 → 生成带越权信息的回答 → 写入会话日志

我们没有构造特殊对抗字符串。普通业务问法已经足够。

05修复

检索请求必须携带调用者身份,并在取切片时过滤部门标签。过滤做不到,就把质量部语料从该 Agent 的索引中撤出。

按部门分索引或分命名空间。提示词里的保密条款降为辅助,不再充当控制。

回答引用必须可回查到文档编号和权限标签。对跨权限命中打告警。

06复测

加上检索过滤后,同一问法不再返回质量部切片。回答变短,只覆盖工艺手册。我们再使用带明确文件名的提问,确认过滤不是仅对模糊问法生效。

会话日志抽查未见该内部说明。修复记入回归集:以后索引变更,先跑这条路径。

这次实验室评估要交给负责人的结论很具体:问答窗口的登录,不能代表知识库的授权。不修检索层,Agent 越聪明,越权摘要越完整。