使用短信的手机号码授权策略、最佳模式和实践

信息安全 验证 授权 短信
2021-08-23 09:18:55

近年来,手机号码已成为认证的重要因素,因此越来越多的企业采用短信的方式来获取用户的手机号码。

在典型情况下;

  1. 用户正在与之交互的 GUI(无论是网站还是应用程序)要求用户输入她/他的手机号码
  2. 然后服务器生成一个令牌和
  3. 将该令牌发送到提供的手机号码
  4. 那么用户必须切换到一个新的 GUI 例如,如果原来的 GUI 是一个网站,用户必须切换到她/他的移动设备才能在 SMS 收件箱中找到收到的消息。如果用户最初在应用程序中,则相同。在这种情况下,用户必须在她/他的智能手机上切换到 SMS 管理器应用程序
  5. 然后,用户必须将收到的令牌复制或记忆到
  6. 然后用户必须切换回原来的 GUI 和
  7. 将复制或记忆的令牌输入原始网站或应用程序,然后
  8. 击键(例如)和
  9. 等待服务器处理输入的令牌
  10. 最后,服务器验证输入的令牌,如果正确,则授权该手机号码,并将其设置为用户的身份验证方式,
  11. 最终结果显示在 GUI 上

这是大多数知名 IT 公司(如 Google、Facebook 等)用来授权其用户的典型场景。

现在假设另一种情况,

  1. 用户正在与之交互的 GUI(无论是网站还是应用程序)要求用户输入她/他的手机号码
  2. 然后服务器生成一个令牌和
  3. 在同一 GUI 中向用户显示该令牌,并要求用户使用用户输入的手机号码将其发送到指定号码(服务器消息中心号码 = SMCN)。
  4. 用户可能必须复制或记住显示的令牌,
  5. 然后用户必须切换到新的 GUI,例如,如果原始 GUI 是网站,用户必须切换到她/他的移动设备以键入令牌并将其发送到 SMCN。如果用户最初在应用程序中,则相同。在这种情况下,用户必须切换到她/他的智能手机上的 SMS 管理器应用程序来发送令牌。但是在这种情况下,应用程序可能会使用智能设备的编程 API 来调用 SMS Launcher 并代表用户预先填写消息的地址和内容。
  6. 用户只需将消息发送到 SMCN,
  7. 然后用户必须切换回原来的 GUI 和
  8. 点击一个键以声明令牌已发送到服务器,并且
  9. 等待服务器处理输入的令牌
  10. 最后,服务器验证输入的令牌,如果正确,则授权该手机号码,并将其设置为用户的身份验证方式,
  11. 最终结果显示在 GUI 上

现在的问题是,如果有的话,在安全性和其他因素方面哪种方法更好?

编辑:

我已经根据@Andre 编辑和回答更新了问题,以便更好地理解,

首先,这两种方法都可以用于身份验证和授权。假设有人登录了她/他的网上银行账户并想要转账,这里提到的方法可以用来授权用户并允许她转账或不转账。

其次,让我们专注于比较这两种方法,而不是谈论在authN和authZ过程中使用短信的缺点。

第三,比较两种选择,(如我之前所说)在这两种情况下,用户都必须记住或复制某些内容,然后将一个环境留给另一个环境并键入或粘贴它。因此,听起来,就可用性而言,两种方法是相同的;与方法一一样,用户必须将在 SMS 中收到的内容输入到原始 GUI 中,而在方法二中,用户必须将在原始 GUI 中看到的内容输入到 SMS 发送|接收 GUI 中。因此,在这两种情况下,用户都可能会出错。

2个回答

让我们看看一些不同的攻击以及它们如何影响两个不同的系统,然后是一些可用性考虑。

手机控制(平局)

如果攻击者完全控制了电话,那么无论如何游戏都结束了。但是,攻击者可能已经能够将木马安装到只有有限权限的手机上。至少在Android上,阅读和发送短信是不同的权限。然而,这个 secnario 感觉相当做作,我看不出为什么获得一个许可比获得另一个许可更难。

社会工程学(#1 获胜)

如果这就是消息所包含的全部内容,那么欺骗某些用户阅读代码很容易。打电话给用户,说你来自手机公司测试接收或其他什么,他们很快就会收到一条消息来回读。(一个称职的攻击者可能会想出一个比我刚刚做的更好的谎言。)

但是,如果 SMS 包含对代码是什么的解释(并且可能是针对网络钓鱼的明确警告),这可能会变得困难,从而揭示您所有的社会工程学谎言。

必须发送 SMS 的用户不会收到此类警告。该用户可能会因“只需将此代码发送到此号码即可领取您的免费跑车”之类的技巧而堕落。不是每个人都会为此而堕落,但有些人会,特别是如果这是他们很少使用的服务,所以他们不认识这个数字。

窃听电话网络(#2 获胜)

由于GSM 加密是出了名的弱,而且可以在互联网上购买用于 MitM 的假手机信号塔,攻击者可能会试图窃听 SMS 通信。这不是理论上的威胁,而是在野外发生的事情

对于系统一,窃听者必须在用户尝试登录时读取发送给用户的密码。然后攻击者需要在用户之前使用它(如果过程是自动化的,应该很容易)。这要求攻击者在用户碰巧登录服务时处于目标的物理附近。

使用系统二,攻击者是否读取 SMS 无关紧要。密码对于用户设备是(或至少应该是)唯一的,即使攻击者知道用户发送的密码,他也无法在他的设备上进行身份验证。

短信欺骗(#1 获胜,主要问题)

SMS欺骗是在野外使用的非常真实的东西。如果攻击者可以在 SMS 中欺骗用户的电话号码,他可以克服备选方案二。这是该方法的一个主要弱点。

我刚刚搜索了“免费短信欺骗服务”并想出了这个网站。当然,即使您的计算机文盲叔叔也可以这样做,从而绕过您的身份验证方案。

可用性(#1 获胜)

备选方案二在可用性方面有一些缺点:

  • 用户必须输入密码号码才能将其发送到。这需要更长的时间。复制粘贴的两件事是一件的两倍。
  • 用户可能输入错误的电话号码,导致登录失败。如果在替代密码中输入了错误的密码,则很容易向用户提供适当的反馈。如果输入了错误的电话号码,服务器就很难知道发生了什么并向用户提供正确的反馈。
  • 发送 SMS 可能会为用户花钱。

结论

在安全方面,它是 2-1 对替代之一。但是不同的漏洞有多严重?我认为,尤其是 SMS 欺骗以及社会工程是比窃听更大的威胁。它们都可以在世界任何地方完成,并且需要更少的精力和技术知识。SMS 欺骗可能会大规模自动完成。

因此,即使将可用性放在一边,我认为替代方案是更安全的替代方案。

TL;博士

您可以欺骗 SMS 的发件人,使其无法识别发件人。使用第一个替代方案。

这两个选项在以下方面是不同的:

  1. 公司向客户发送短信
  2. 客户发短信给公司

如果我们仔细考虑在电话网络中如何验证身份,我们会发现导致公司选择选项 1 的核心安全问题。无论何时拨打电话或发送短信,您都知道您拨打的号码是什么。但是,当您接到电话或短信时,您不知道它的来源。

让我们从公司的角度来看这个问题。他们的目标是通过两种方式验证用户的身份。该公司已经信任自己。用户的身份通过密码和接收短信来验证。该公司知道 SMS 将到达他们发送它的电话号码,因为电话系统就是这样工作的。因此,如果同一个人拥有密码和电话,那么他们也拥有 SMS 消息和其中包含的令牌。建立信任。

在第二种选择中,不能从公司的角度建立信任。该公司将收到来自任意来源的短信,并且无法确定它来自哪个电话号码。(具有讽刺意味的是,客户可以通过这种方式验证公司的身份,但公司无法验证客户的身份)。

这与我们被告知永远不要向声称来自我们银行的人提供银行详细信息的原因相同。相反,谨慎的人会挂断电话并拨打他们银行的电话号码,以验证他们正在与之交谈的人的身份。