当智能手机没有像智能卡这样的硬件令牌功能时,是否可以严格地将智能手机视为 2FA 的“你拥有的东西”?

信息安全 多因素 手机 u2f
2021-09-05 03:58:32

似乎 2FA 纯粹主义者似乎更喜欢安全密钥(如 ubikey 或智能卡),而其他人似乎有更轻松的立场,甚至似乎包括“拥有”没有物理元素,如电子邮件地址、电话号码或对安装在注册设备上的某个应用程序的推送通知挑战(该设备只有一个“软”可克隆私钥)。

我主要研究了最后一个(推送消息),但在我看来,所有可以复制的东西(以非物理方式/或体力劳动)都可能被写成不完全可靠的“物理”拥有你(所以它不算一个因素)。

但这让我感到困惑,因为(在我看来)可靠的 2 因素协议描述(如U2F )并没有完全排除“......完全软件实现......”

同样从手机被黑客入侵(或克隆)的假设出发,我们可以说黑客不再存在真正的第二个因素,因为它可能会访问存储在移动浏览器中的密码(另一个假设)(我正在保护Web 应用程序;) 和软件令牌(甚至硬件令牌,假设设备上有完全访问权限)。

我想我想问:什么会构成使用智能手机的实际 2FA 实现,什么不会?还是我只是将理论与实际实现混为一谈?


对于使用软件令牌方法,我只能考虑使用无法保存的密码来保护它(以减轻智能手机黑客事件的影响)。但这会不会让它再次成为“你知道的东西”,从而减轻第二个因素(在这种情况下,第一个因素也是“你知道的东西”)?

4个回答

【这是我的观点,不代表行业观点】

我完全同意存储在你的主设备上的一些秘密数据模糊了“你知道的东西”和“你拥有的东西”之间的界限。我认为,它落在哪一边取决于数据是什么、身份验证协议如何工作的细节,以及你从什么角度看待它。

从技术上讲,yubikeys、智能卡,甚至OTP fobs也是存储在软件中的一段秘密数据,尽管这种方式即使对于具有物理访问权限的攻击者来说也很难提取。我会争辩说,你证明拥有的东西不是设备,而是秘密数据。对于硬件令牌,这些是相同的,但人们会将相同的想法应用于手机和其他类型的秘密,我不确定这是思考它的正确方法。

“知道”与“拥有”的定义

它是什么类型的秘密,以及您的设备如何存储和访问它,提供了一个可滑动的安全等级 ( plain text file --> yubikey)。“知道”和“拥有”之间的界限就在那里。我认为,你在哪里画这条线,很大程度上取决于你采取谁的观点。一些例子:

  • 最终用户的观点:您可能在“来自我的记忆”与“存储在设备上”之间划清界限。
  • 系统管理员的观点:您可能会在是否可以要求退回设备并确信用户不再拥有该秘密方面划清界限。
  • Authentication Server 的观点:在大多数情况下,服务器无法判断秘密是来自安全设备,还是来自用户输入的密码。所以从它的角度来看,相关的区别是它是否是共享秘密客户端和服务器都知道,或者它是否是某种公钥,您需要在不泄露实际秘密的情况下证明其拥有。实际的试金石是“知道”往往容易受到记录和重放攻击,而“有”往往不会。

在某些情况下,每个人都同意:用户在文本框中输入的密码显然是“知道”,而带有 RSA 密钥对的智能卡显然是“拥有”。但是,无论您如何定义“知道”与“拥有”,我认为总会存在上述观点之一认为“知道”而另一种观点认为“拥有”的极端情况。

思想实验

假设系统管理员为您生成一个新的随机密码,将其加密存储在 yubikey 上,这样密钥将根据请求释放加密密码,并且只有您的 VPN 客户端拥有解密密钥并实际使用明文密码(不知道这是否是现实的,但是,嘿,这是一个思想实验)。这是知道还是拥有?从最终用户的角度来看,这当然是一个拥有......他们无法在没有 fob 的情况下进入他们的帐户。从管理员的角度来看,它(大部分)是有的,因为除非用户不遗余力地破解 fob 和 VPN 客户端,否则用户无法学习密码,因此您可以要求 fob 取回并将其提供给另一个员工。但从服务器的角度来看,它肯定是知道的,因为它看到的都是明文密码,

服务器视角

作为应用程序开发人员,对我来说重要的理论区别是:

使用“您知道的东西”(即密码),您可以通过网络将秘密本身发送到服务器。使用“您拥有的东西”(通常是加密密钥或种子),您永远不会发送秘密本身,而是一次性价值或挑战响应,以证明您拥有秘密。

考虑一个嗅探您的网络流量的中间人。他们可以窃取您的用户名/密码。使用 OTP / yubikey / 等,秘密数据是加密密钥或 RNG 种子。他们可以嗅探他们想要的所有消息,他们永远无法恢复“你拥有的东西”的秘密。

我认为,如果检索第二个因素需要攻击者访问您的设备(物理访问或 rootkit)或您的另一个帐户,那么它符合我对“您拥有的东西”的定义。

抗克隆

一旦攻击者已经可以访问设备,对克隆的抵抗显然是一个好处,但(对我来说)没有必要满足定义。毕竟,要进行克隆,攻击者已经需要“拥有”设备。那时能够使用设备冒充您与能够克隆设备冒充您之间的区别在理论上是没有意义的,因为无论哪种方式,他们已经有能力冒充您。

我很确定对此没有正确的答案,并且与 Mikes 的帖子类似,这只是我的观点……

使用手机的主要弱点是倾向于依赖 SMS 消息来证明对设备的访问。

虽然不是微不足道的,但可以在没有物理访问设备或 SIM 的情况下克隆 SIM 卡,并且对过程的依赖不受身份验证系统的控制,尤其是用户的控制。对我来说,这将这个选项排除在 2FA 系统之外,因为所依赖的程序控制的可靠性本质上是未知的。

有理由认为,在低影响环境或潜在攻击者不太可能尝试克隆 SIM 卡的威胁场景中,这不会是一个问题。接受风险(依赖于未知可靠性的外部依赖)可能是完全有道理的,但甚至无法主观地断言用户在给定时间点拥有设备的信心水平我确实认为它可以被描述为 2FA 解决方案。

还有一个问题是,如果风险情景不需要它是可靠的,或者如果风险评估表明一个额外的因素是必要的,至少有一些没有引入的东西,那么为什么还要费心尝试实施一个额外的因素某种程度的虚假安全感/控制虚假陈述。如果访问控制系统将来有可能扩展到更敏感的数据,则这一点尤其重要,而良好的做法将要求对控制进行审查,如果有人不打扰并在此基础上签字实施 2FA 可能会有一个令人讨厌的惊喜。

另一方面,在智能手机上安装带有骑行计数器的应用程序的系统更接近于成为访问设备的可靠指示。虽然获取设备访问权限的远程漏洞利用并非不可能,但它更复杂且(毫无根据的断言)不太可能。

对于某些情况,我认为手机被所有者“保护”的便利性和可能性意味着基于应用程序的 2FA 解决方案所需的妥协是值得的,我通常将其正式称为伪 2FA 或类似的词。

当今大多数智能手机都有“防篡改安全存储”,可用于存储 OTP 机密。这些构造使得无法提取或复制秘密值,它只能“用于”计算 OTP。

这可以被视为“您拥有的东西”,因为硬件无法复制,即使您的合作或疏忽也不行。基本上,令牌及其秘密数据“焊接在一起”,因此您必须使用令牌才能使用秘密数据。

但是,仅依赖于存储在不安全介质上的秘密的“软令牌”,我会考虑更多的“你知道的东西”。

同样,我将适用于物理令牌。如果令牌可以保密,那么我会认为它是“你拥有的东西”。如果秘密可以通过某种方式轻松复制,那么它就是“你知道的东西”。

我会使用这个“测试”来决定令牌/智能手机是否可以被认为是“你拥有的东西”或“你知道的东西”。

1:想象一下有问题的令牌设备或项目。

2:想象一下它被放在公共长椅上,躺在那里,假设一整天。

3:1天后,您返回并找到您的设备。

4:如果设备在不改变任何秘密的情况下仍然可以信任,那么它是“你拥有的东西”,否则它是“你知道的东西”。我们还想象,如果它是一部手机,它会重新格式化并且相同的密码会重新安装在手机中。

另一个简单的考虑是,想象一个流氓员工。你从他那里取回令牌(不改变或替换任何秘密)。流氓员工仍然可以登录相关服务吗?考虑这样一个事实,即流氓员工可以篡改令牌以提取其秘密。

通常 apossession factor由加密密钥表示。

智能卡

在智能卡上生成并且不能(容易)从智能卡中提取的私钥可能是最安全的加密密钥,因此是最好的第二个因素(拥有)。

U2F

像 yubikey 这样的 U2F 设备也有一个从主密钥派生的私钥。(关于这个主密钥的安全性的讨论超出了这里的范围)。

尤比奇

用作 OTP 令牌的 yubikey 使用对称密钥生成一次性密码,例如基于 RFC 4226。

钥匙扣

大多数硬件密钥卡令牌使用带有对称密钥的 RFC 4226 或 RFC6238。嗯 - 这个密钥是由供应商生成并写入硬件的。这大大削弱了拥有因素的想法,因为您必须信任供应商才能销毁此密钥的任何副本。

手机

现在我们来到智能手机。谷歌想出了谷歌身份验证器。我将此称为第二个因素,因为它也可以根据 RFC 4226 和 RFC 6238 基于加密(秘密)密钥工作。但是google 身份验证器的推出过程很糟糕智能手机中的密钥实际上存在于一台功能强大、在线修补严重的“计算机”中。是的,智能手机与应用程序一起使用时是第二个因素,但相当薄弱。

2路认证

如果您使用智能手机获取推送消息或 SMS,我不会将此称为第二个因素 - 而是双向身份验证。有趣的区别如下:

您可以通过让手机完全离线来“保护”您的 Google 身份验证器。攻击者需要攻击真正的手机——真正的第二个因素。

如果您正在接收短信,则被攻击者完全不需要关心您的手机。你的手机不是第二因素。攻击者可能更容易攻击网络(技术上或通过社交工程)并重新路由 SMS。那么你的第二个因素/电话在哪里呢?这完全不合情理。

但毕竟您需要考虑,您需要多少安全性以及您愿意承担多少剩余风险。