由于 Twitter 禁用了短信双因素身份验证,我认为深入研究短信欺诈的运作方式以及应用程序开发人员如何防范它会很有趣。
这是一个关于不正当激励、短视监管和技术独创性的迷人故事。
让我们深入挖掘吧! 👇
首先,让我们回顾一下 Twitter 最近的公告:
简单来说,这意味着只有 Twitter 付费版本的用户才会在登录时收到发送到手机的代码。
了解短信欺诈的关键是了解某些号码是收费的。如果您想向该号码拨打电话或发送短信,则需要花费一些钱(通常为数十美分),而该号码的所有者可以从这数十美分中获得一部分。
这些电话号码的所有者通常会提供合法的服务,这些服务需要花钱才能提供并为其用户提供价值,例如电话投票、约会和技术支持。
然而,这些数字可以用来轻松获利🤑
一个坏演员,我们称他为鲍勃,掌握了几个高级电话号码[1]。鲍勃可能是一名黑客,也可能是一名出了问题的移动电话网络运营商。
鲍勃找到了一个网络服务,可以将短信发送到他的高级电话号码。这些消息可以是双因素身份验证码、一次性密码或作为服务一部分发送给用户的任何其他文本消息(例如, partiful.com通过 SMS 发送事件提醒)。
鲍勃找到了一种方法,可以让该服务向他的付费电话号码发送数千条短信。这可能很容易。前端服务可能很容易操纵,而后端端点可能不受保护并且很容易进行逆向工程。
更糟糕的是,许多服务使用标准化端点来发送短信。这使得鲍勃更容易找到要攻击的站点。例如,如果服务使用第三方对用户进行身份验证并发送 2FA 或 OTP 代码(例如 Auth0),则发送 SMS 的端点大多是已知的:Bob 需要做的就是找到一种方法来发现 Auth0 Web 服务的 ID(相当简单,因为 Web 服务的前端发出包含此 ID 的请求),然后他们可以攻击使用该第三方服务的所有站点。
最后,鲍勃让该服务向他的付费电话号码发送数千条短信。 Web 服务亏损💵💵💵,而 Bob 获利。
没有一种灵丹妙药可以防止短信欺诈。但这里有一些可行的想法:
如果使用第三方服务(例如 Auth0)对用户进行身份验证,您可以混淆用于发送 SMS 的端点。虽然这不能完全阻止攻击,但它确实使发现可能发生的攻击变得更加困难。
与自行车窃贼瞄准最容易盗窃的自行车类似,优秀的黑客会转向更容易黑客攻击的网络服务。我的预感是,这种方法对于应用程序的长尾来说足够有效。
阻止来自云提供商、欺诈性 ISP 或其他粗略 IP 的所有请求。这应该相当容易实现——许多服务都可以让您评估 IP 地址的质量——并且可能非常有效。
向发送短信的端点添加基于IP的速率限制以阻止Bob的攻击。如果设置正确,这不会影响合法用户。然而,这只适用于简单的攻击。如果 Bob 设计他的攻击来从各种 IP 地址发送请求(分布式攻击),那么这将不起作用。
仅向特定电话号码发送少量短信,然后再在冷静期内阻止该电话号码。我们可以在前端执行此操作,但如果 Bob 下定决心,他可以找出要攻击的后端端点。在后端阻止电话号码更加困难:它需要保留电话号码及其最近的登录尝试记录[2]。
强制用户在向他们发送短信之前解决验证码。虽然这种方法可以很好地阻止攻击者(大规模解决验证码既困难又昂贵),但它确实会降低用户的服务体验。
使用libphonenumber识别并阻止高费率电话号码。虽然这看起来很有希望,但我不知道数据有多可靠以及这种方法有多有效。
仅向付费帐户发送短信。这就是 Twitter 所采用的方法。这不是一个坏选择,但正如您从上面的列表中看到的,您还可以采取许多其他方法。
阻止拥有大量欺诈用户的移动电话网络运营商。这将阻止明显不良的网络运营商,但如果网络有许多合法用户,则效果不佳。
请改用 WhatsApp 发送消息。与 SMS 不同,WhatsApp 是免费的,但并非世界各地的所有用户都使用 WhatsApp[3]。
一个好的解决方案将充分利用上述方法,按时间投入和有效性确定优先级,直到攻击者转向更容易的目标。
我在实施上述措施方面有一些个人经验,并且有一两个关于我的团队如何处理后果的故事可以分享。但这是另一个故事了……👨💻
这引出了我的最后一点:
在我看来,Twilio——一个占主导地位的短信 API——有巨大的机会提供短信欺诈保护,作为其标准 API 的(免费?🙏)附加组件。
由于 Twilio 拥有所有帐户中有关欺诈电话号码和运营商的数据,因此 Twilio 具有独特的优势,可以在不良号码和运营商成为多个网络服务的大问题之前快速阻止它们。
Twilio 甚至可以使用Silent Network Auth (下一代身份验证机制)直接检测无效电话号码,而且感觉这个实用程序应该在用户之间共享。
我很想听听人们使用过的任何其他想法、想法和方法——请通过在下面发表评论来分享,我们都可以学习。
现在就是这样 - 保护这些端点,祝您度过愉快的一周!
HackerNews 上有一个精彩的讨论。
[1] 请注意,这些高级电话号码甚至不需要工作:它们不需要连接到正在工作并注册到手机的 SIM 卡。只要可以路由到它们,就可以在这次攻击中使用它们。
[2] 我很好奇是否有一个好的数据结构和算法可以使其高效且大规模工作。如果您知道的话请分享!
[3] 感谢 HN 上的 @csharpminor 的建议。