摘要
- RFC 10027 描述的攻击不必盗取密码:攻击者先在自己的设备发起流程,再诱导用户用真实身份完成认证和授权。缺失的是发起设备与用户决定之间的可信连接。
- 有效、未过期的一次性码或二维码能证明服务器建立了一笔待处理流程,却不能单独证明谁展示了它、用户是否预期这项操作,以及令牌最终交给哪台设备。
- Daniel Fett 与 Pieter Kasselman、Filip Skokan 共同撰写该最佳实践。文件把邻近性、协议选择、受信设备、最小权限、检测和恢复视为多层控制,而不是一枚“安全”标签。
跨设备授权的便利来自分工。电视、会议白板或公共终端不适合输入复杂密码,于是它展示二维码;手机保存凭证,也更适合完成多因素认证。用户扫一下,两个设备仿佛自然地连成一条可信链。
RFC 10027 要求工程师把这幅顺滑的产品画面拆开。消费设备负责发起并获得能力,授权设备负责识别用户和取得决定。二维码、短码或推送通知负责把流程从一端带到另一端。问题在于,这段人参与的传递常常没有自己的认证机制。
攻击者可以在远端设备发起请求,取得服务器真实签发的码,再用“客服处理故障”“需要重新激活”“请打开共享文件”等故事把码送到受害者面前。受害者进入真正的授权站点,输入真正的凭证,完成真正的第二因素,然后点击同意。身份提供方准确识别了用户,却未必知道用户眼前是哪台设备。
多因素认证没有失败
把这类事件称为“绕过 MFA”会掩盖控制缺口。多因素认证可能完全履行了职责:确认当前操作者是账户本人。系统没有完成的是另一项证明——把这次决定绑定到正确的发起者、用途和能力接收方。
RFC 10027 将其中一类称为跨设备同意钓鱼。攻击者不收集凭证,而是让用户替攻击者的客户端授予权限。另一类跨设备会话钓鱼则让用户交出可迁移已认证会话的代码。攻击所得可能是访问令牌、刷新令牌,或攻击者设备上的有效会话。因此,只改密码并不能证明授权和会话已被撤销。
二维码并非毫无证据价值。它可以是格式正确、服务器签发、唯一、短时有效且尚未使用的引用。但它回答的是“是否存在这笔待处理流程”,不必然回答“谁把它交给用户”“用户是否主动开始”“两台设备是否邻近”“权限是否合适”“哪个客户端获得结果”。真实的数据可以被放进虚假的语境。
Daniel Fett 关注的是边界
Daniel Fett 在本人网站上将自己介绍为专注身份与 Web 协议安全的顾问,并参与 OpenID Foundation 与 IETF 的 OAuth、OpenID Connect 工作。IETF 档案列出他在发行者识别、持有证明、OAuth 安全和选择性披露等方面的 RFC。RFC 10027 是他与另外两位作者的共同成果;这些经历不能被扩张为他对任何产品或部署拥有控制权。
他的研究方法对这个问题尤其重要:密码学步骤成功,只能证明该步骤定义的性质,不能替未建模的关系作证。RFC 10027 也说明,形式化分析可以在明确的协议层、攻击者能力和安全目标内排除攻击;它不能证明模型省略的实现细节永远正确。
因此,“已认证”必须带宾语。认证了谁,向谁认证,为哪笔交易认证?用户身份、发起设备、请求语境、用户意图、授权决定、令牌接收者和资源访问是七个不同事实。服务器可以是真的,而请求由攻击者发起;令牌可以绑定密钥,而密钥属于攻击者自己的设备;用户可以真心想打开眼前的白板,却把权限交给远方的客户端。
每种缓解措施都有自己的适用范围
RFC 10027 没有提出一种万能二维码,而是逐项说明控制与限制。
短时、一次性和唯一代码减少重放与批量滥用,但交互式攻击者可以等用户回应后再生成。速率限制能压低大规模攻击速度,对低频定向诱导作用有限。用户教育有帮助,但制作精良的恶意流程可能与正常授权几乎一样;真正的登录页反而会加强骗局的可信度。
邻近性更接近发起设备与授权设备的实际关系。BLE、NFC、超宽带、共享网络或位置可增加远程替换的成本。可 VPN、位置伪造、NAT、手机蜂窝网络以及合法的异地审批,都说明“看起来在附近”不等于“用户确有此意”。授权服务器能校验收到的信号,不能凭空测量物理距离。
只允许受管设备或受信网络发起,可以把入口缩小到更可问责的范围。但设备信任需要登记、证明、补丁与撤销;受信设备一旦被控制,仍可发起错误请求。限制权限和令牌寿命能降低误授权后的损失,不会把错误决定变正确。发送方约束令牌不易被搬到第三台机器,却不妨碍攻击者的原始客户端使用自己持有的密钥。
所以协议选择本身就是风险决定。具备能力时,RFC 10027 倾向使用能结合来源绑定和 BLE 邻近性的 FIDO 跨设备认证。若服务器已有联系用户的通道,CIBA 可减少一部分风险,但仍需阻止未经预期的推送。OAuth 设备授权流程兼容输入能力最弱的终端,也正因此承担更多语境风险;敏感、高价值或关键业务资源不应在缺乏额外控制时使用它。
绿色“同意”之后还缺一张收据
将 Heng Lu 的运行代码优先原则用于此处,可以得到一个朴素检查:界面声明不等于运行结果。“授权成功”只是状态,真正的结果是哪台设备获得了什么能力,并在何时对什么资源使用。
可审计的跨设备收据至少要连接:发起客户端身份与状态、授权设备、认证方式、两端展示的用途与权限、邻近或设备绑定证据、用户决定、令牌接收者与约束、首次使用、异常信号、撤销和恢复结果。这些信息必须按隐私最小化并限制访问,但不能用一枚绿色勾号代替。
责任也应沿控制能力分配。产品团队决定便利是否值得引入跨设备流程;身份团队选择协议、客户端、权限和令牌;终端与网络团队管理设备信任和邻近性;反欺诈团队识别异常发起与同意;资源服务器执行约束;客服和响应团队撤销授权并核实恢复。架构若选择不认证这条通道,就不能把认证责任全部推给用户的直觉。
Daniel Fett 和合著者带来的结论不是“不要使用二维码”,而是不要把可见的交接动作误当成已经认证的关系。
来源
- RFC 10027 — 跨设备流程安全最佳实践
- RFC 8628 — OAuth 2.0 设备授权流程
- RFC 9700 — OAuth 2.0 安全最佳实践
- RFC 9449 — OAuth 2.0 持有证明
- FIDO Alliance — Client to Authenticator Protocol 2.2
- W3C — Digital Credentials API
- IETF Datatracker — Daniel Fett
- Daniel Fett — 个人专业网站
- Daniel Fett — Cross-Device Session Fixation and how the DC API solves it
- Heng Lu — Running-Code Primacy
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
