Facebook Connect、Google Sign-In、Twitter Sign-In……多年来,互联网巨头一直在提供单点登录服务(Single Sign On,SSO),开发人员可以将其集成到他们的移动应用程序中。因此,想要使用 TripAdvisor、Pokemon Go 或 IMDb 数据库的人可以下载该应用程序并几乎直接开始使用它,因为注册和连接是由 Facebook Connect 或 Google Sign-In 负责的。但这种轻松访问管理帐户创建的方式也隐藏着巨大的安全风险。
值此大会召开之际2016 年欧洲黑帽大会三位香港安全研究人员——杨荣海、刘永昌和刘天宇——刚刚证明,大量第三方应用程序未能很好地实现这些身份验证服务,从而使黑客可以通过自己的用户帐户登录。移动终端,从世界任何地方,只需知道用户的账号即可。这并不难找到:有时 Google 搜索就足够了。
支付酒店房间费用、网上购物……
研究人员表示,这个问题非常普遍,影响着全球至少 10 亿用户。事实上,研究人员精选了 14 个非常流行且易受攻击的应用程序,详细说明了暴露的数据和可能发生的欺诈交易(见下表)。他们显然没有透露自己的名字,但你可以找到一些东西:地图应用程序、酒店预订、电子商务、音乐、消息传递等。通过盗用用户的身份,黑客可以支付酒店房间费用、在线购物、拨打免费电话等。
这些应用程序的总下载量已超过24亿次。考虑到身份识别服务的采用率(51%),研究人员估计至少有 10 亿个账户因此容易受到攻击。他们将分析重点放在Android世界上,但他们强调这个问题并不取决于操作系统。因此,他们确信 iOS 应用程序同样容易受到攻击。
要从技术上理解这个问题,必须首先深入研究身份验证机制。 Facebook Connect 和其他使用 OAuth2.0 和 OpenID Connect 协议(见下图)。
当用户想要登录第三方应用程序(例如IMDB)时,它将联系身份识别服务提供商(例如Facebook)的应用程序。然后,它将查询其服务器以获取用户数据(通常是电子邮件和帐户标识符)以及访问令牌(Access Token,AT)。用户数据也可以被签名。
签名和令牌传输到第三方应用程序,第三方应用程序将它们发送到其服务器。然后后者将验证数据签名并确保令牌与用户数据相对应。如果一切匹配,您就可以访问您的帐户。
不幸的是,这些检查并不总是得到很好的实施。某些应用程序不验证令牌或数据签名。他们将仅根据用户在 Google、Facebook 或其他网站上的标识符来识别用户。
为了利用这个缺陷,黑客可以安静地呆在家里。他所要做的就是为自己配备一个安装了第三方应用程序(例如IMDB)和识别应用程序(例如Facebook)的终端,最重要的是一个允许类型攻击的设备中间的人(例如 SSL 代理)能够拦截和修改请求。他使用自己的帐户登录,接收来自身份验证服务的响应,并将自己的帐号替换为目标的帐号。很快,他就通过自己的终端连接到了受害者的帐户。
当然,认证服务应用程序可以对TLS证书进行验证(证书固定)。在这种情况下,黑客可以尝试卸载它。因此,第三方应用程序将被迫启动网络浏览器,而智能手机上不支持此功能。如果身份验证服务只是禁止使用网络浏览器,事情就会变得复杂。然后,黑客可能被迫对应用程序进行逆向工程以删除证书固定功能。这也是三位研究人员对 Facebook 应用程序所做的事情。
不容易纠正
解决这个问题并不是弹指一挥间就能解决的。首先由各个第三方应用程序开发人员正确实施身份验证协议。然而,ID 服务提供商还应该在所有这些安全方面更好地告知和指导这些开发人员,例如提供更好的文档。
避免不愉快的意外的一个简单方法是不使用这些身份验证服务,而是直接在第三方应用程序上设置密码。显然,它不太实用,并且需要你很好地管理你的密码。但这是另一个问题...