Otp Challenger

🔐 敏感操作前的身份确认守护者

为敏感操作执行前提供TOTP双因素身份验证,确保操作者真实身份,防止会话劫持与未授权操作。

收藏
9.9k
安装
2.7k
版本
1.0.3
CLS 安全性认证2026-05-18
点击查看完整报告 >

使用说明

核心用法

OTP Challenger 是一款面向智能代理(agent)和技能(skill)的身份验证中间件,在执行敏感操作前强制要求用户提供基于时间的一次性密码(TOTP)。核心流程为:代理调用 verify.sh 验证用户提供的6位动态码,验证通过后记录时效状态(默认24小时),后续脚本可通过 check-status.sh 查询验证有效性。

关键脚本:

  • verify.sh <user_id> <code> — 验证OTP并更新状态
  • check-status.sh <user_id> — 检查验证是否仍有效
  • generate-secret.sh <account> — 生成TOTP密钥(含QR码)

配置方式: 支持 OpenClaw 配置文件、环境变量 OTP_SECRET 或 1Password 密钥引用(推荐),可自定义验证间隔、宽限期、状态文件路径等。

显著优点

1. 标准化TOTP实现:遵循 RFC 6238,兼容 Google Authenticator、Authy、1Password、Bitwarden 等主流应用
2. 零敏感信息持久化:状态文件仅存储时间戳,密钥永不写入状态存储

3. 灵活集成:通过 source 方式嵌入现有技能脚本,无需复杂API调用

4. 失败可观测性:支持 OTP_FAILURE_HOOK 自定义失败回调,可对接 Slack/PagerDuty 或触发防护性停机

5. 内置降级方案:可选 oathtool 验证,但自带 Python TOTP 生成器确保核心功能零外部依赖(除 jq/python3)

潜在缺点与局限性

  • 主机安全依赖:若攻击者已获得 OpenClaw 所在主机的 shell 权限,可直接读取配置文件中的密钥
  • 无防钓鱼保护:用户仍可能被骗取OTP码(与所有TOTP方案相同局限)
  • 单点配置风险:密钥配置于服务端,多用户场景需额外扩展(当前设计偏向个人/单用户代理)
  • 时间同步要求:依赖系统NTP同步,极端时钟偏移可能导致验证失败
  • 状态文件本地存储:默认 memory/otp-state.json 为本地文件,分布式部署需自行外接存储

适合人群

  • 使用 OpenClaw 框架的开发者,需要为部署、财务、数据导出等敏感操作添加身份确认层
  • 个人开发者或小团队,通过本地代理管理基础设施(kubectl/terraform)
  • 已使用1Password/Bitwarden等密码管理器,希望引用托管密钥的安全意识用户

常规风险

| 风险类型 | 等级 | 说明 |
|---------|------|------|
| 配置泄露 | 中 | 密钥以明文或1Password引用形式存储于配置文件,需严格限制文件权限(0600) |
| 会话劫持缓解 | 低 | 有效防护:窃取聊天会话无法绕过OTP验证 |
| 重放攻击 | 低 | 有效防护:TOTP码30秒窗口+单次验证机制 |
| 内部威胁 | 中 | 若攻击者已控制代理进程,可直接读取内存中的密钥 |
| 社会工程 | 高 | 用户可能被诱导在恶意场景下提供OTP码,需配合安全培训 |

建议缓解措施: 使用1Password引用替代明文密钥、设置较短验证间隔(8小时)、启用失败钩子监控异常尝试、确保 memory/ 目录权限严格。

安全解读

核心用法

otp-challenger 是一款为 AI Agent 工作流设计的身份验证中间件,在执行敏感操作(如生产部署、财务转账、数据导出)前强制要求用户输入 TOTP 动态码,完成二次身份确认

工作流程
1. 管理员预配置 TOTP 密钥(支持 1Password/Bitwarden 等密码管理器引用)

2. 用户触发敏感操作时,Agent 调用 verify.sh <user_id> <code> 挑战身份

3. 验证通过后,状态写入 memory/otp-state.json(仅含时间戳,不含密钥),默认 24 小时内免重复验证

4. 其他脚本通过 check-status.sh 查询验证 freshness,决定是否放行操作

技术实现

  • 遵循 RFC 6238 TOTP 标准(HMAC-SHA1,30秒窗口,±1 窗口容错)
  • 内置 Python TOTP 生成器,可选 oathtool 双重验证
  • 文件级 flock 锁防止并发竞态,原子写入状态

显著优点

| 维度 | 说明 |
|------|------|
| **架构安全** | 纵深防御设计:输入正则校验、速率限制(默认3次失败锁定)、审计日志、失败回调钩子(可联动 Slack/PagerDuty) |
| **配置灵活** | 支持环境变量、YAML、1Password secret reference 三种密钥注入方式,避免硬编码 |
| **零网络依赖** | 纯本地验证,无外泄风险;可选的 `OTP_FAILURE_HOOK` 也完全由用户控制 |
| **透明可审计** | 结构化日志记录验证事件,支持重放攻击检测(代码指纹机制) |
| **生态集成** | 与 OpenClaw 技能系统原生兼容,技能作者仅需 `source ../otp/verify.sh` 即可接入 |

潜在局限

1. 单点密钥风险:TOTP secret 需存储在 OpenClaw 运行环境,若主机被攻破,密钥可被读取(这是 TOTP 方案的固有局限,非实现缺陷)
2. 时间同步依赖:依赖系统 NTP 同步,时钟漂移超过 90 秒会导致验证失败

3. 遗留测试脚本get-current-code.sh 仍使用 grep|awk 不安全解析 YAML,虽仅用于测试,但存在命令注入隐患(RISK-001

4. 外部工具依赖:需预装 jqpython3oathtool(可选),在受限环境可能缺失

适合人群

  • DevOps/SRE:为 kubectl applyterraform apply 等生产部署命令添加审批 gate
  • 数据工程师:控制敏感数据导出、PII 访问的授权流程
  • 财务自动化场景:大额转账、支付审批前的身份确认
  • 企业安全团队:构建符合 SOX/ISO27001 要求的操作审计链

常规风险

| 风险 | 等级 | 说明 |
|------|------|------|
| 主机沦陷导致密钥泄露 | **中** | TOTP secret 以明文形式存在于运行环境,需配合主机加固 |
| 钓鱼攻击 | **中** | 用户可能被诱导在恶意场景输入 OTP,需配合用户教育 |
| 设备盗窃 | **中** | 攻击者获取 authenticator 设备后可生成合法码,建议结合设备 PIN/生物识别 |
| 竞态条件 | **低** | 已通过 flock 原子锁修复,早期版本存在此问题 |
| 配置注入 | **低** | `get-current-code.sh` 遗留不安全解析,但不影响核心验证路径 |

缓解建议:密钥使用 1Password/Bitwarden 引用、设置短有效期(8-12 小时)、启用失败钩子监控异常尝试、定期轮换 secret。

Otp Challenger 内容

examples文件夹
openclaw文件夹
手动下载zip · 19.0 kB
cron-expire.shtext/x-shellscript
请选择文件