Otp Challenger

🔐 敏感操作前强制TOTP身份验证

security-identity榜 #1

基于TOTP的身份验证技能,在执行部署、转账、数据访问等敏感操作前强制要求用户二次确认,提供24小时验证窗口和状态检查机制。

收藏
9.1k
安装
2.8k
版本
1.0.0
CLS 安全性认证2026-06-23
点击查看完整报告 >

使用说明

OTP Identity Challenge Skill 综合评估

核心用法

该技能为OpenClaw代理提供运行时身份验证能力,通过RFC 6238标准TOTP(基于时间的一次性密码)机制,在执行敏感操作前强制验证用户身份。核心工作流包含:调用verify.sh验证6位动态码 → 记录带时间戳的验证状态 → 通过check-status.sh查询验证有效期(默认24小时)。支持内置TOTP生成器或外部oathtool验证,状态以JSON形式持久化存储,无密钥泄露风险。

显著优点

1. 零信任执行层:将身份验证从"登录时一次"延伸至"每次敏感操作时",有效防御会话劫持和未授权操作
2. 无缝集成设计:提供Shell函数接口(verify_otpcheck_otp_status),技能开发者仅需两行代码即可嵌入审批流程

3. 灵活配置体系:支持OpenClaw配置、环境变量、1Password密钥引用三种密钥存储方式,适配不同安全等级需求

4. 时钟容差机制:内置±90秒时间窗口容忍,减少因系统时间偏差导致的验证失败

5. 状态持久化:验证记录跨会话保持,避免短时间内重复验证造成的用户疲劳

潜在缺点与局限性

  • 单点故障风险:若OTP_SECRET以明文存储于配置文件,获取shell权限的攻击者可完全绕过验证(文档已明确警示此限制)
  • 社会工程学脆弱性:如文档所述,无法防御用户被诱骗主动向攻击者提供有效OTP码
  • 设备依赖瓶颈:用户必须始终携带配置正确的 authenticator 设备,设备丢失/损坏将导致合法操作阻塞
  • 状态文件权限隐患memory/otp-state.json的读写权限若配置不当,可能导致验证状态被篡改或窥探
  • 无多因素叠加:仅支持单TOTP因素,未结合生物特征、硬件密钥等更强认证方式

适合人群

  • DevOps/SRE工程师:需为kubectl applyterraform apply等生产环境操作添加审批闸口
  • 平台管理员:管理多用户OpenClaw实例,需审计追踪敏感操作执行者身份
  • 金融科技开发者:处理转账、支付审批等需要加密意图证明的场景
  • 安全意识较强的个人用户:希望为自托管AI助手添加操作级保护层的进阶用户

常规风险

| 风险类型 | 等级 | 说明 |
|---------|------|------|
| 配置泄露 | 中 | 密钥以明文存储于`~/.openclaw/config.yaml`时,文件权限不当可导致完全绕过 |
| 状态篡改 | 低 | `memory/otp-state.json`若可被其他进程写入,攻击者可伪造"已验证"状态 |
| 重放攻击 | 极低 | 30秒时间窗口+单次验证记录机制已基本消除此风险 |
| 钓鱼攻击 | 高 | 技术机制无法防御,依赖用户安全意识 |
| 依赖链攻击 | 低 | `jq`、`python3`等依赖若为恶意版本,可拦截验证逻辑 |

安全解读

核心用法

OTP Skill 是一个为 OpenClaw 生态设计的身份验证中间件,允许任何 Skill 在执行敏感操作前强制要求用户输入 TOTP(基于时间的一次性密码)验证码。核心工作流程为:

1. 验证触发:敏感操作 Skill 调用 verify.sh <user_id> <code> 发起身份挑战
2. 本地校验:与存储的 Base32 密钥比对,采用 RFC 6238 标准 TOTP 算法(HMAC-SHA1,30秒窗口)

3. 状态管理:验证通过后写入 memory/otp-state.json,记录验证时间戳与过期时间

4. 时效检查:后续操作通过 check-status.sh 查询验证是否在有效期内(默认24小时)

显著优点

  • 零网络依赖:纯本地运算,无外部 API 调用,彻底杜绝数据外泄风险
  • 标准合规:严格遵循 RFC 6238 TOTP 标准,兼容 Google Authenticator、Authy、1Password、Bitwarden 等主流应用
  • 灵活集成:通过 source 方式嵌入其他 Skill,两行代码即可为任意 Bash 脚本添加身份验证层
  • 隐私最小化:仅持久化时间戳,不存储任何用户身份或验证码信息,符合 GDPR 最小化原则
  • 防御暴力破解:内置速率限制与文件锁机制,防止竞态条件和暴力破解
  • 企业级密钥管理:支持环境变量、1Password/Bitwarden 密钥引用,避免硬编码

潜在缺点与局限性

  • T3 来源级别:维护者为个人开发者(Ryan Nelson),非知名组织,重大更新需人工代码审查
  • 依赖管理风险:Node.js 版本依赖 otpauth npm 包,需手动关注安全更新,缺乏 package.json 锁定机制
  • 配置解析不一致get-current-code.sh 使用 grep 正则提取 YAML 配置,存在解析错误风险(verify.sh 已使用 Python 安全解析)
  • 状态文件权限未加固:创建 otp-state.json 时未显式设置 0600 权限,多用户环境存在信息泄露隐患
  • 无内置审计日志:虽支持外部日志记录,但 Skill 本身不自动写入 syslog 或结构化日志
  • 时钟同步依赖:TOTP 有效性依赖系统时间 NTP 同步,时钟漂移会导致验证失败

适合人群

  • DevOps/平台工程师:为 kubectl、Terraform、Ansible 等部署脚本添加强制审批流程
  • 安全管理员:在 AI Agent 环境中实施最小权限原则,防止会话劫持导致的越权操作
  • 财务/合规团队:为自动转账、报表导出、敏感数据访问等操作建立密码学级身份证明
  • 个人高阶用户:为自建 OpenClaw 实例添加企业级安全层,保护云基础设施

常规风险

| 风险类型 | 说明 | 缓解措施 |
|---------|------|---------|
| **密钥泄露** | 若攻击者获取 shell 访问权限,可读取 `OTP_SECRET` 环境变量或配置文件 | 使用 1Password/Bitwarden 密钥引用,限制文件系统权限 |
| **钓鱼攻击** | 用户可能被诱骗在非预期场景输入 OTP 码 | 严格遵循 Skill 设计哲学,仅对真正敏感操作挑战用户,并明确提示验证原因 |
| **设备丢失** | 认证设备(手机)被盗后,攻击者可生成有效验证码 | 结合其他因素(如 IP 白名单、硬件密钥)构建纵深防御 |
| **重放攻击** | 截获的 OTP 码在 30 秒内可重复使用 | 单次验证后即更新状态,同一验证码无法通过重复验证 |
| **社会工程学** | 攻击者伪装成 Agent 诱导用户执行 `/otp` 命令 | 建立明确的操作语境,避免在聊天界面滥用 OTP 提示 |

使用建议

遵循其设计哲学「OTP 应在需要时显而易见,不需要时完全隐形」,避免对每个命令都挑战用户导致「安全疲劳」。建议配置 8-12 小时的 intervalHours,配合 15 分钟 gracePeriodMinutes,在安全性与用户体验间取得平衡。生产环境部署前,建议审查 GitHub 仓库最新 commit,确认无恶意变更后再启用。

Otp Challenger 内容

手动下载zip · 16.0 kB
check-status.shtext/x-shellscript
请选择文件