更新时间:2026-08-05
玄鉴是一个嵌入 OpenClaw 的智能体运行时安全治理系统。它拦截智能体与外部工具之间的交互,对工具调用、代码执行、文件访问、API 调用、邮件发送和记忆写入进行实时审计、风险判定和阻断。
当前代码和插件目录仍使用 AgentSentry 命名,这是工程内部名;参赛作品名称使用“玄鉴”。
详细算法说明见 reports/technical_design_and_algorithms.md。
评测口径:文末 520 + 320 条数字来自公开样例的 /command-lab 映射回归,只用于已知集回归,不代表独立盲测、生产 FPR 或原生 AgentDojo/InjecAgent 结果。
| 地址 | 用途 |
|---|---|
http://<服务器IP>:8765/ |
OpenClaw 插件控制台与记录入口 |
http://<服务器IP>:8765/command-lab |
业务测试台,提交正常请求和对抗样本 |
http://<服务器IP>:8765/records |
运行记录与风险观测 |
http://<服务器IP>:8765/security-screen |
安全态势感知大屏 |
http://<服务器IP>:18789/ |
OpenClaw Control UI |
http://<服务器IP>:8000/ |
历史离线原型与辅助展示,不作为主链路 |
所有 8765 页面和大屏读取真实后端数据:
~/.openclaw/agentsentry/records.jsonlGET /api/statsGET /api/recordsGET /api/security/overviewGET /api/lab/runs
页面没有兜底假数据。接口不可用时显示空态、错误或 stale 状态。
| 安全域 | 功能 | 主要证据 |
|---|---|---|
| 上下文溯源域 | 扫描工作区基础文件、Skill、配置、外部邮件、网页、PDF、图片和工具返回,标记来源与污染 | provenance_scan、Context Provenance finding、信任标签 |
| 状态完整性域 | 管控长期记忆写入、记忆护照、哈希完整性、保护键和隔离 | State Integrity finding、memory passport、quarantine |
| 意图授权域 | 对比用户任务授权和当前工具计划,识别目标漂移、越权参数和污点流向 | Intent Authorization finding、TaskSpec、ABAC 决策 |
| 工具边界域 | 执行前检查文件、命令、API、邮件、网关、系统路径,并接入 eBPF 运行证据 | Tool Boundary finding、system monitor、eBPF audit |
| 证据回流环 | 保存工具结果、审批、运行时审计和风险向量,反向收紧后续工具调用 | Evidence Feedback record、approval cache、runtime audit |
每个工具调用会输出:
allow:允许执行。ask:需要审批或人工确认。deny:执行前阻断。
裁决基于工具名、参数、目标路径、收件人、API host、当前任务、历史上下文、污点状态、系统预执行策略和 LLM-Judge 语义复核结果。
系统从用户请求维护会话级任务边界。它不再只用最新一句话覆盖旧授权,而是区分新任务、补充说明、确认、闲聊、普通偏好和引用数据,并为授权设置空闲过期。例如:
- “总结网页”授权
read_webpage,不授权读取.env或发邮件。 - “保存报告到 notes/report.md”授权写入普通工作区文件,不授权写
startup/或openclaw.json。 - “发送项目进度给 user@example.com”授权白名单邮件,不授权外部归档邮箱。
- 用户追问“你能做什么?”不会清空前一轮任务授权。
- 用户补充“另外保存到 notes/report.md”会合并到当前任务,同时保留此前的显式禁止项。
- 普通长期偏好会进入记忆安全判断,不会默认升级为越权持久化攻击。
- 系统健康检查、目录大小、主机标识和只读系统状态查询会按低风险只读动作处理。
- 正常 Skill 编写会进入显式持久化写入路径,通常需要确认;Skill 内容包含本地配置读取加外联时仍会阻断。
工具调用不再统一显示为 outside TaskSpec。系统把授权缺口拆分为低风险只读放行、授权不明确审批、未授权高风险阻断三类,便于用户理解。
系统为外部内容、工具结果、记忆和 Skill 打标签:
- 来源:用户、网页、邮件、PDF、图片、工具结果、记忆、配置、Skill、Webhook。
- 完整性:trusted、user、workspace、external、tainted。
- 机密性:public、internal、secret。
- 风险向量:提示注入、隐藏内容、敏感数据、外泄、持久化、工具劫持、权限、意图漂移、供应链。
- 污点画像:记录置信度、来源、标签、允许用途和禁止流向的 sink。
污染内容可以被读取和总结,但不能驱动其污点画像禁止的 sink,例如敏感文件读取、外部发送、命令执行、记忆写入、配置修改或 Skill 安装。
当前污点处理不是简单的“污染会话后一刀切”。系统会:
- 判断污染数据来源和证据。
- 生成污点画像,记录置信度、机密性、风险向量、允许用途和禁止 sink。
- 判断当前工具动作是否属于被禁止的 sink。
- 只在“不可信数据实际流向高风险 sink”时阻断或审批。
- 在记录中保留
taint_flows,解释是哪条污点、为何禁止、流向哪个 sink。
因此,“总结有毒网页”可以通过;“网页隐藏指令诱导读取 .env 并外发”会被阻断。
外部网页、邮件、PDF、图片元数据、Webhook 和第三方工具返回会进入轻量 IFC 分支。分支记录来源、完整性、机密性、用途、生命周期、Provenance ID 和风险分。低信任分支可以被摘要和结构化提取,但不能新增工具授权,不能直接推动 shell、邮件、外部 API、记忆写入或配置写入。
这减少了“读过一个可疑网页,后续正常任务都被连坐”的过度拦截情况。高风险动作仍依据字段级血缘、污点画像、TaskSpec 和 ABAC 判定。
新增的语义动作图不依赖公开 benchmark 的固定字段名。它遍历任意工具参数树,抽取:
- 敏感源:
.env、OpenClaw 配置、SSH 私钥、token、credential 等。 - 本地读取:
fs.readFileSync、cat、open()等。 - 外部 sink:外部 URL、webhook、非白名单邮箱。
- 网络外发:
fetch、curl、requests.post、upload、telemetry 等。 - 持久化:MEMORY、AGENTS、startup、cron、systemd、Skill 文件。
- 提权/系统副作用:sudo、chmod、systemctl、iptables、rm -rf 等。
- 伪装正常能力:天气、日历、翻译、摘要等声明与实际本地读取加外联行为冲突。
- 编码内容:base64、hex、URL percent、Unicode 转义、零宽字符和分隔符混淆。
长期记忆写入会生成 passport:
- key、来源、信任等级、创建/更新时间。
- 内容 SHA-256。
- 上下文哈希。
- HMAC 签名。
- 风险向量。
- 是否保护键。
普通偏好和数据分析经验可写入;系统角色、审批绕过、默认外发、保护键篡改、低信任来源权威记忆会被阻断或隔离。读取记忆时会重新校验内容哈希和护照签名,并对低信任、权威化或离群记忆触发审批。
系统只从已放行操作学习会话内正常行为:
- 常见 API host。
- 常见邮件收件人。
- 常见文件路径根。
- 参数大小和参数结构。
后续同一会话出现目标突变或参数形态异常时会触发审批 finding。攻击样本不会被写入正常基线。
LLM-Judge 使用 DeepSeek-compatible 接口进行语义复核,覆盖用户消息、复杂工具调用、记忆写入和溯源扫描。它是二道防线,即使关闭,确定性策略、污点传播、ABAC、Memory Guard 和系统预执行仍然工作。
LLM-Judge 在四个环节发挥作用:
- 用户消息:判断是否包含提示注入、越狱、凭据外泄或恶意指令,并辅助输入风险标注。
- 工具调用:判断复杂动作是否与用户任务一致,是否可能外泄、破坏、越权或漂移。
- 记忆写入:判断候选长期记忆是否会污染未来行为或绕过审批。
- 溯源扫描:判断 Skill、配置和工作区基础文件是否存在恶意能力或供应链风险。
Judge 返回低/中/高风险和理由。玄鉴不会把模型输出当成唯一裁决,而是转换为 finding,再与确定性规则、TaskSpec、污点流和系统预执行策略合并。
当前支持三种调度模式:
full:所有启用的语义裁决面都调用 LLM-Judge,适合比赛全量复现实验。risk-tiered:低风险请求只走确定性策略;敏感路径、外部 sink、非平凡 shell、记忆写入、持久化和工具劫持信号才调用 LLM-Judge,适合生产降延迟。off:不调用 LLM-Judge,只保留确定性策略、污点传播、ABAC、Memory Guard 和系统预执行。
当前 competition/high-security/balanced 配置均开启消息、工具、记忆和溯源四个 Judge 面;risk-tiered 调度会跳过低风险健康检查、普通读文件和普通项目说明,避免不必要延迟。/command-lab 中 semanticJudge=on 会映射为 full,因此之前的全量 LLM-Judge benchmark 仍可复现。semanticJudge=default 保留服务端当前调度,例如本轮 risk-tiered 复测。
最新公开 benchmark:
- 综合攻击回归,risk-tiered:520 条,攻击保护率 100.0%,高风险漏放率 0.0%,正常放行率 100.0%,误拦 0。
- 非提示注入工具攻击专项,risk-tiered:320 条,工具攻击保护率 100.0%,高风险漏放率 0.0%,正常放行率 100.0%,误拦 0。
- 对比 full LLM-Judge:保护能力保持 0 漏放,误拦从 7 条降到 0 条,总耗时从约 135.2 分钟降到约 76.8 分钟。
最新报告:
reports/benchmark_risk_tiered/benchmark_eval_report.risk_tiered.mdreports/benchmark_risk_tiered/tool_attack_benchmark_report.risk_tiered.mdreports/project_name_and_benchmark_summary.mdreports/benchmark_risk_tiered/xuanjian_benchmark_risk_tiered_record.txt
- eBPF 能力取决于宿主机权限。内核观察器可用时,系统在工具执行后把 exec/open/connect 事件回流到后续策略;不可用时,应用层预执行策略仍处于 active,并在健康接口展示
isolation.mode、已启用的预执行控制、限制和推荐运行时隔离措施。 - 邮件工具使用本地 outbox 受控实现。
- destructive shell payload 不实际破坏主机,只评估执行前真实裁决。
- 当前指标来自公开 benchmark 映射和受控业务工具,生产环境仍需持续积累正常业务样本评估误判。