概述:
根据外媒报道,近期有一名黑客公开表示,他可以利用付费电话直接从Instagram(2000美金),Google(0美金)和Microsoft(500美金)公司盗取金钱。
这些公司都有一个共性,他们都提供了一种电话语音验证服务,用户可以利用这项服务并通过计算机电话语音来获取验证码和登录令牌。
但是,这些公司在这一步操作中往往会忽略很重要的一点,即确认用户提供的这个电话号码是否是合法的,或者至少要去确认这个号码是否是付费电话。
这个漏洞也就意味着,攻击者可以从这些公司中窃取大量金钱。
在上述的三家互联网公司中,Microsoft受这个问题影响的程度最为严重,因为攻击者几乎可以让Microsoft的语音电话验证无限制地在同一时间段内不断拨打同一个付费电话。目前,相关漏洞已经被报告给了各个公司,并已经得到了妥善解决。根据漏洞奖励计划,漏洞的发现者也得到了相应的奖励。
Instagram:
Instagram允许用户将自己的手机号码与Instagram账号进行绑定,这样一来,其他的用户就可以通过Instagram的内置通讯录来搜索到自己的通讯录好友。
在输入了电话号码之后,Instagram会向用户所输入的手机号发送一个长度为六位数的短信验证码。
但是,如果在三分钟之内,用户没有在下面这个界面中输入相应的验证码,Instagram将会给用户拨打语音电话(号码归属地为美国加利福尼亚州):
这通电话时长大约为十七秒钟。通过Burp Suite中的Burp Repeater(中继器),我们捕获到了网络请求数据,具体信息如下图所示:
由于系统对发送至服务器的请求进行了限制,所以发送至地址https://i.instagram.com/api/v1/accounts/robocall_user/的请求只能每隔30秒钟才能重放一次。
但是我们还可以注意到,Instagram并不会对用户提供的手机号码进行验证,系统会给用户提供的任何手机号码拨打语音验证电话。
例如,我们可以在eurocall24.com上注册一个英国的收费电话,每分钟收费价格为0.06英镑。将这个号码提交给Instagram之后,系统会直接拨打这个电话。
为了证实这一观点,我们在Burp Intruder的帮助下,让Instagram的语音验证系统自动拨号了六十余次,每次间隔为30秒钟。
在十七分钟的实验过程中,我们象征性地窃取了一英镑:
因此我们可以这样估算,一名攻击者每三十分钟就可以成功窃取1英镑,即每天窃取48英镑。
这也就意味着,换算过来就是每个月1440英镑,或者每年17280英镑。
而这一数字仅仅是一个Instagram账号所对应的一个付费号码。但是,攻击者可以轻易地创建一百个这样的帐号,并管理这些绑定了付费号码的Instagram帐号。
这样计算下来,攻击者每天都可以窃取4800英镑,即每个月窃取144000英镑,或者每年窃取728000英镑。
除此之外我们还发现, 攻击者只需要使用一个付费号码和一百个Instagram帐号,就实现上述的这种攻击。虽然每个帐号同一时间内,Instagram的服务器只允许其每三十秒发送一次请求。但是付费号码在这一段时间内,却可以尝试与不同的Instagram帐号进行绑定。
Facebook的修复策略
Facebook在了解到了这个问题之后,首次给出的回应如下:
这是我们在产品中专门添加的功能。我们并不认为这是一个安全漏洞,但是正如安全研究专家所建议的那样,我们确实应该对其进行控制,并检测用户提供的绑定手机号,以防止这一功能被犯罪分子所利用。
难道他们已经默认允许我们通过这样的方式从Instagram偷钱吗?
在经过了一系列探讨之后,Facebook在其官方声明中写到:
感谢大家对这一问题的持续关注。我们的系统中已经添加了一个专门用于监控和阻止恶意请求的服务,而这样的一种安全风险也是我们可以接受的。
一般来说,基于多个账号的攻击方式通常被归类为“垃圾邮件或者社会工程学技术”的范畴,所以这一问题的提交并不符合我们白帽漏洞计划的相关要求。
最终,Facebook在与我们进行了进一步磋商之后,Faceboo表示:
对于安全人员提交的这一问题,我们将会对服务的运行机制进行微调,并修改请求的频率限制。
所以,提交这一问题的白帽黑客将会得到我们给予的奖励。当技术人员成功修复了这一问题之后,我们将会告知各位。十分感谢!
目前,公司的安全技术人员已经解决了这个问题,相应的漏洞也已经得到了修复。
Google:付费号码和双因子身份验证
对于Google而言,这个问题就更加复杂了。
根据Google公司的处理方式,Google并不会在用户进行账号绑定的过程中给用户拨打语音验证电话,但是他们会通过其他的方式来向用户提供一个六位数的双因素身份验证令牌:
测试发现,当我们输入了一个付费电话之后,我们仍然会接到Google打来的电话。
但是,当我们在多次尝试的过程中,如果没有输入有效的口令,Google将会屏蔽这个电话号码。
然而幸运的是,eurocall24.com支持将呼叫转移到一个SIP服务器(“呼叫中心”),并通过SIP客户端来进行收费:
通过将收费电话绑定到呼叫中心之后,我们就可以将这个号码作为我们的2FA手机号码来输入了。
提交之后,我们可以在客户端接到语音验证电话。这也就意味着,我们将能够接收到正确的口令,并提交给Google:
Google的修复策略:
目前,Google公司的安全技术人员正在寻找相应的解决方案。由于问题涉及到整个电信行业的运行机制,所以想要完全防止这类事情的发生几乎是不可能的。
但是我们有相应的措施来应对这个问题,并在短时间内阻止这种非法操作。
Microsoft : Office 365套件与付费电话
在Office 365套件的注册过程中,我们可以提交一个电话号码,Microsoft随后便会向这个号码拨打语音验证电话。
我们发现,虽然Microsoft的确会拨打我们输入的付费电话,但是在七次失败的注册尝试之后,Microsoft便会屏蔽这个号码。
但是,我们也有两种不同的方法来绕过这种保护机制,进而实现让Microsoft去拨打更多的付费电话。
Microsoft的解决方案:
根据安全研究人员提供的信息,我们已经成功修复了号码拦截机制中存在的问题,并提供了五百美金作为奖励。
最终的奖励金额由漏洞奖励计划的裁决小组敲定。据此,我们也希望更多的第三方安全人员能够帮助我们改善服务质量,提高用户的体验度。
虽然这个漏洞并不会对用户产生影响,但是这个漏洞会让微软公司的产品陷入安全风险之中。
所以我们认可这是一个安全漏洞,因此我们选择给报告这一漏洞的安全人员提供五百美金的奖励。
我们一直希望安全研究专家们能够积极帮助我们提升产品的安全性,共同为安全社区做出贡献。