otp-challenger

🔐 敏感操作前的双因素认证

🥥26总安装量 12评分人数 11
100% 的用户推荐

支持 TOTP/YubiKey 的双因素认证 Skill,为部署、财务等敏感操作提供企业级身份验证防护,来自可信开源社区。

A

基本安全,请在特定环境下使用

  • 来自可信组织或认证账号,需要结合权限范围判断
  • ✅ 严格的输入验证机制(白名单正则、长度限制),有效防范命令注入攻击
  • ✅ YubiKey API 集成安全合规(HTTPS 传输、HMAC-SHA1 签名、Nonce 防重放)
  • ✅ 完善的速率限制(默认 3 次失败锁定)和文件锁机制,防止暴力破解和竞态条件
  • ⚠️ OTP_FAILURE_HOOK 功能可执行任意 shell 命令,需谨慎配置以防提权风险
  • ⚠️ 状态文件与审计日志默认未加密,建议加强文件系统权限保护

使用说明

核心用法

OTP Challenger 是专为 OpenClaw 框架设计的身份验证技能,用于在执行敏感操作前强制要求用户完成双因素认证(2FA)。该技能支持两种验证模式:基于时间的一次性密码(TOTP,6位数字)和 YubiKey 硬件密钥(44位 ModHex 字符)。

使用流程通常如下:当用户尝试执行敏感操作(如 kubectl apply 部署命令、财务转账、PII 数据导出或管理员权限变更)时,系统会拦截该请求并调用 verify.sh 脚本要求输入 OTP 码。脚本自动检测码类型(6位为 TOTP,44位为 YubiKey),验证成功后会在 memory/otp-state.json 中记录验证状态,默认 24 小时内无需重复验证。配套提供的 check-status.sh 可用于查询验证状态,generate-secret.sh 则可生成新的 TOTP 密钥和二维码。

显著优点

该技能在安全性设计上表现突出:首先,输入验证极为严格,用户 ID 限制为字母数字和特定符号(^[a-zA-Z0-9@._-]+$),长度不超过 255 字符,有效防止命令注入攻击。其次,YubiKey 集成遵循安全最佳实践,使用 HTTPS 通信、HMAC-SHA1 签名验证、16 字符随机 Nonce 防重放攻击,并设置 10 秒超时防止挂起。

此外,技能内置完善的防护机制:支持可配置的速率限制(默认 3 次失败后锁定 5 分钟)、文件锁(flock)确保状态文件操作原子性、审计日志记录所有验证事件。TOTP 实现遵循 RFC 6238 标准,支持 ±1 个时间窗口(90 秒)的时钟偏差容忍。状态文件仅存储时间戳而非密钥,降低了信息泄露风险。

潜在缺点与局限性

尽管安全性较高,但该技能存在若干需要注意的限制。最主要的风险来自 OTP_FAILURE_HOOK 功能——这是一个高权限配置项,允许在验证失败时执行任意 shell 命令,若配置不当可能导致严重的安全问题。

其次,技能依赖多个外部系统工具(oathtooljqcurlopenssl),在部分精简环境中可能需要额外安装。状态文件和审计日志默认未加密存储,虽然不含密钥,但在多用户共享环境中可能存在隐私风险。此外,密钥配置(OTP_SECRETYUBIKEY_SECRET_KEY)目前依赖环境变量或 YAML 文件,虽支持 1Password 等密钥管理器引用,但默认方式仍有改进空间。

适合的目标群体

该技能特别适合以下场景:DevOps 团队需要在 CI/CD 流程中为生产环境部署增加人工确认环节;金融科技公司处理转账、支付审批等敏感财务操作;企业 IT 管理员执行用户权限变更、数据导出等管理员操作;以及任何需要符合 SOC 2、ISO 27001 等合规要求,需要在自动化流程中保留强身份验证环节的组织。

使用风险与注意事项

部署该技能时需重点关注配置安全:务必谨慎使用 OTP_FAILURE_HOOK,仅配置来自可信来源的脚本,避免执行未经验证的命令。建议将 OTP_INTERVAL_HOURS 设置为 8-12 小时而非默认 24 小时,在安全性与便利性间取得平衡。生产环境应使用 1Password、Bitwarden 等密钥管理器引用而非明文存储密钥。定期检查审计日志可及时发现暴力破解尝试。此外,确保状态文件目录的文件系统权限严格限制,防止未授权读取验证状态信息。

otp-challenger 内容

文件夹图标docs文件夹
文件夹图标implementation-plans文件夹
文件夹图标2025-01-31-yubikey-support文件夹
文件夹图标plans文件夹
文件夹图标examples文件夹
文件夹图标openclaw文件夹
文件夹图标memory文件夹
文件夹图标tests文件夹
手动下载zip · 45.6 kB
phase_01.mdtext/markdown
请选择文件