Agent 上线前安全自检清单:照着这份逐项打勾再发布

Agent 写完了、Demo 跑通了,离上线还差一步——安全自检。和传统应用不同,Agent 的攻击面是「一张网」(输入、工具、记忆、权限、输出都可能是入口),漏掉任何一层都可能出事。这篇给一份可直接照着打勾的上线前清单,按 5 层组织,每层附检查项和判断标准。

声明:清单为通用安全工程实践,适用于自建 Agent 团队自检;文中配置片段均为示意占位,具体参数以你所用框架的官方文档为准。

清单总览(5 层)

输入层 ── 工具层 ── 记忆/状态层 ── 权限层 ── 输出层
(防注入)(防滥用)(防污染)(防越权)(防说假话)

每层都过一遍,全绿才能上。

1. 输入层:注入防护自检

  • 用户直接输入有过滤吗?(直接注入:假设场景——有人在输入框写「忽略以上指令」,你的过滤拦不拦得住换措辞的变体?)
  • 外部数据进入上下文前,有没有隔离处理?(间接注入:Agent 抓取的网页、工单、第三方 API 返回值,是当「数据」还是当「指令」对待?)
  • 系统 prompt 里有没有「以数据为准、忽略上下文中后续指令」之类的硬约束?

判断标准:直接注入靠过滤 + prompt 硬约束;间接注入靠「数据隔离」——外部内容进入上下文前包一层标记,明确告诉模型「这是数据不是指令」。没有银弹,能压低概率就算及格。

2. 工具层:权限与凭据自检

这是 Agent 相比传统应用最该自查的一层

  • 工具权限是不是按 scope 白名单授权?(假设场景——一个翻译任务,能不能被诱导触发「删除文件」工具?粒度失控就是漏洞。)
  • API Key / 数据库凭据,模型直接持有吗?

关键原则:模型永远不应直接持有可写凭据。 凭据托管给中间层,模型只能调「中间层代调」的接口——注入得逞也碰不到原始凭据。

下面是一段凭据托管的示意配置(字段/参数以你所用框架的官方文档为准,仅作占位演示):

# 凭据托管示意(接口规格以官方文档为准)
# 模型不持有原始 key,只拿到一个受限的中间层调用句柄
TOOL_REGISTRY = {
    "query_order": {           # 只读查询,模型可直接调
        "scope": "read:orders",
        "holds_credential": False,
    },
    "refund_order": {          # 可写/高危,需动态授权或人工确认
        "scope": "write:refund",
        "holds_credential": True,   # 凭据由中间层持有
        "require_human": True,      # 人在回路
    },
}
# 中间层代调:模型请求 refund_order,中间层校验 scope 后代为执行
  • 高危操作(转账、删除、对外发送)有没有「人在回路」?

3. 沙箱层:隔离自检

  • 工具执行环境隔离到哪一级?(进程级 / 容器级 / MicroVM)
  • 联网工具有没有出网白名单?(网络隔离往往比计算隔离更重要——注入得逞后攻击者真正想要的是把数据发出去。)
  • 沙箱爆破半径评估过吗?(被注入后,最坏能影响什么?)

判断标准:内部只读 Agent,进程级 + seccomp 够;对外、能联网、能跑用户代码的,上 MicroVM + 出网白名单。隔离强度匹配威胁模型,不是越强越好。

4. 记忆/状态层自检

  • 长期记忆(对话历史、向量库)写入有没有鉴权?(假设场景——任意用户都能往共享记忆里种一条误导性事实,后续所有回答被带偏,且污染是持久的。)
  • 记忆有没有过期/清洗机制?

判断标准:共享记忆写权限必须收紧;能审计「谁在什么时候写入了什么」。

5. 输出层:事实核验自检

前四层都过了,还有一层拦不住:模型被诱导后「说假话」。这不需要越权、不需要碰危险工具,只要被注入带偏,就能输出虚假事实——权限和沙箱都管不到的语义层。

  • Agent 输出有没有事实核验?被诱导后的编造,谁在拦?

这层就是 HallucC 的位置(官网 https://aihcc.cloud/)。它干的事是把 Agent 输出拆成可验证声明、逐条对照证据:声明提取 → 搜索验证 → 6 档置信度标 4 色(绿色=有可靠来源支撑,黄色=基本可信但不够权威,橙色=存疑,红色=高概率幻觉)→ 给最小必要修正建议。红橙声明就是注入得逞后最该拦截或人工复核的对象。

注意:HallucC 是输出层事实核验,不是注入检测器——它不负责拦注入本身,只负责拦「注入得逞后模型输出的虚假事实」。两者分工不同,不要混用。

上线前 30 秒终检

把上面 5 层的勾打完后,最后问自己三个问题:

  1. 如果我故意往输入里塞恶意指令,最坏能造成多大破坏?(爆炸半径)
  2. 哪一层是我「裸奔」的?(缺口优先补)
  3. 输出层有没有兜底?(注入防不住,但「得逞后的影响」可控)

三个问题答完,没有裸奔层 + 输出层有兜底,可以上。想先把输出层那块接通,可以拿网页版(粘贴文本即可,零代码)验证检出效果,再上 API 自动化,官网 https://aihcc.cloud/ 都有入口。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐