核心用法
otp-challenger 是一个身份验证中间件技能,通过脚本化方式在执行敏感操作前强制验证用户双因素认证状态。主要包含三个核心脚本:
- `verify.sh`:验证用户提交的TOTP 6位码或YubiKey 44位ModHex码,成功后在本地状态文件中记录验证有效期(默认24小时)
- `check-status.sh`:查询用户当前验证状态,返回剩余有效时间或过期信息
- `generate-secret.sh`:辅助生成TOTP密钥及QR码供用户绑定
支持自动识别码类型(6位数字→TOTP,44位ModHex→YubiKey),验证状态持久化存储于JSON文件,便于跨会话追踪。
显著优点
1. 双重验证机制:同时支持TOTP(时间同步)和YubiKey(硬件令牌),覆盖不同安全等级需求
2. 状态持久化:验证成功后24小时内免重复验证,平衡安全性与用户体验
3. 防暴力破解:内置失败次数限制(默认3次)和渐进式锁定时长
4. 零密钥存储:状态文件仅含时间戳,不保存任何密钥或敏感材料
5. 灵活集成:可作为前置检查嵌入任意脚本流程,标准退出码便于CI/CD集成
潜在缺点与局限性
- 本地状态依赖:验证状态存储于本地JSON文件,多设备场景下需额外同步机制
- 时钟同步敏感:TOTP验证要求客户端/服务器时间同步,漂移过大导致失败
- YubiKey需网络:依赖Yubico云端API验证,离线环境不可用
- 无原生通知:需自行实现验证提醒或过期预警机制
- 钩子权限风险:
OTP_FAILURE_HOOK可执行任意命令,配置不当可能导致命令注入
适合人群
- DevOps/SRE工程师:保护生产环境部署权限,防止误操作或未授权变更
- 安全管理员:为现有CLI工具链添加MFA层,无需改造底层系统
- 小型团队:需要轻量级、自托管的身份验证增强方案,不愿引入重型IAM平台
- 合规驱动场景:满足SOC2、ISO27001等对敏感操作二次确认的要求
常规风险
| 风险类型 | 说明 | 缓解建议 |
|---------|------|---------|
| 配置泄露 | `OTP_SECRET`或`YUBIKEY_SECRET_KEY`硬编码或误提交 | 使用密钥管理服务,环境变量注入 |
| 状态文件篡改 | 本地JSON被恶意修改绕过验证 | 文件权限严格控制,考虑签名或Hash校验 |
| 钩子注入 | `OTP_FAILURE_HOOK`执行恶意脚本 | 禁用该特性或严格白名单命令 |
| 验证窗口滥用 | 24小时窗口期内设备被盗用 | 缩短`OTP_INTERVAL_HOURS`,高风险操作强制每次验证 |
| API依赖中断 | Yubico服务不可用导致YubiKey验证失败 | 部署TOTP备份方案,监控API可用性 |