MITM对FIDO UAF和U2F的攻击

信息安全 中间人 证书颁发机构 菲多
2021-08-16 01:37:12

Universal 2nd Factor (U2F) Overview的第 6 节中,讨论了 MITM 攻击——在该节的末尾,它写道:

It is still possible to MITM a user's authentication to a site if the MITM is 

a. able to get a server cert for the actual origin name issued by a valid CA, and 
b. ChannelIDs are NOT supported by the browser. 

But this is quite a high bar. 

我不相信这是一个如此高的标准。我们已经看到了很多攻击者能够获得虚假但受信任的 CA 签名证书的案例。而且,TLS ChannelID 并没有被大多数浏览器和服务器广泛采用(事实上,RFC 草案提案在 2013 年就已经过期)。此外,即使两个端点都支持 TLS ChannelID,活跃的 MITM 攻击者也可以在 ClientHello 消息期间通过降级攻击来阻止 TLS ChannelID 被使用。

我赞赏 FIDO 为减少我们对密码的依赖、使身份验证更安全、对用户来说更不麻烦而取得的飞跃。但是,它似乎在防止 MITM 攻击方面做得很少,攻击者能够获得假但受信任的证书,我们必须继续完全相信和信任 CA,它有让我们失望的历史。当然,如果连接可以被活跃的 MITM 攻击者破坏,即使是最安全的身份验证协议也是无用的。

其他基于密钥的身份验证协议(例如 SSH)通过内置在协议中的公钥固定来防止 MITM 攻击。例如,使用 SSH 时,客户端会存储它们连接的服务器的公钥。在建立连接之后,在密钥交换期间和尝试任何客户端身份验证之前 - 客户端通过检查服务器使用的公钥是否与文件中的公钥相同来验证它确实连接到预期的服务器对于该服务器,并确保服务器通过一些需要私钥的加密操作拥有与公钥相关联的私钥。

当然,HPKP(没有 FIDO)可用于在浏览器中固定站点的 SSL/TLS 证书,但这有其自身的问题

我很好奇为什么 FIDO UAF 和 U2F 的架构师没有将协议更进一步,而是在协议中嵌入了一种公钥固定方法(可能使用与用于 SSL/TLS 连接的密钥对不同的密钥对),所以客户端可以确保他们在尝试进行身份验证之前连接到合法服务器,例如 SSH。有人愿意假设吗?

1个回答

我分享你对 U2F 是一项好工作的全球感受,即使它是一项完成了一半的工作。:) 注意:我在一家拥有自己的 U2F 认证产品的小公司(FIDO 联盟成员)内担任安全架构师。

关于过期的 TLS ChannelID 支持,它应该最终演变为令牌绑定支持(更新的规范,相同的目标)。 https://datatracker.ietf.org/doc/draft-ietf-tokbind-https/ 是的,在服务器端实现 TlS 通道 ID 并不容易(BoringSSL 库可以提供帮助),是的,它仅受 Chrome 支持客户端,是的,它可以降级......但好处是,如果您正在考虑在自己的服务器/服务上使用 U2F,它仍然可以完成并且您可以强制执行。总比没有好,虽然在许多全球服务(gmail、facebook...)上,TLS 通道 ID 保护确实被停用了。

关于关键锁定辩论以及为什么服务器认证部分依赖于好/坏的旧 SSL 服务器证书,最初的决定可能是技术困难和“政治”定位的混合结果。U2F(和 UAF)已经在客户端攻击了已建立的证书颁发机构...注意:这些是匿名的客户端密钥对,但相关的证明/生产证书可以由 FIDO 联盟私钥签名(成为其自己的证书颁发机构...)。

处理相互身份验证也需要更大的内存......我不在乎,但这对于某些解决方案提供商来说可能是个问题。

无论最初的真正原因是什么,它都没有完成,据我所知,这种功能没有计划用于未来的 U2F 版本......也没有计划用于WebAuthN(U2F/UAF 的继任者)。

但这并不意味着 U2F 不能适应支持增强的相互身份验证功能......我正在与其他几个傻瓜一起工作:欢迎来到我们的疯狂:)