Pokémon Go技术问题尴尬不断:为何要“强夺”Google账号的完整权限?

更新:Niantic Labs 向媒体给出回应,称《Pokémon Go》要求并自动获取 Google “完整账户权限”属错误,修复工作将通过下次客户端更新完成,届时客户端在登陆时将只申请必要的权限。同时,Google 方面也在后台收紧了《Pokémon Go》所能获得的权限。


《Pokémon Go》是任天堂 Pokémon(中译名口袋妖怪、宠物小精灵、精灵宝可梦)系列的最新游戏,由 Niantic Labs 联合开发,也是第一款 Pokémon 手游。不需多说,看到这篇文章的你,多半正在玩或者已经下载好了游戏。

但国外玩家发现,《 Pokémon Go》存在严重的账户安全风险。

游戏提供两种登陆方式:Google 或 Pokémon 训练师俱乐部(pokemon.com)。在欧美几乎人人都有 Google 账户,而之前 pokemon.com 由于技术故障无法接受新用户注册,因而大部分玩家都在用 Google 账户登陆。

国外玩家 Adam Revee 注意到,使用 Google 账户登陆之后,《Pokémon Go》直接获取了 Google 账户的“完整账户权限”(full access)。Adam Revee 在自己的博客上记录了这一发现,被 Twitter 上的数据安全大号@SwiftOnSecurity 转发,引起了安全界的广泛关注。

我在手机上检查了自己的账户,发现《Pokémon Go》的确标记为拥有整账户权限,相同待遇的只有 Chrome 浏览器。

pokemon-go-access-google

为了重现这个事件,我打开游戏,抓了附近的两只小精灵,等完服务器同步(存盘)的过程,然后打开菜单,注销(sign out)自己的账号,退出游戏。接下来,我点击上面的 Remove 按钮撤销了“Pokemon Go Release”的权限。

然后我重新打开游戏,并使用 Google 账户登陆。更严重的问题出现了:输入 Google 账户→输入密码并确认后,直接进入了游戏的读取界面,并没有弹出一个权限确认的菜单。

pokemon-go-auth

一般来说,使用 Google 账户登陆的第三方服务,在输入账号密码之后会出现下图这样的界面,要求你确认第三方服务可使用的权限。

以Medium 和 Soundcloud 举例,分别需要确认

以 Medium 和 Soundcloud 举例,前者获取了“电子邮件地址”和“基本资料信息”,后者仅需要“离线使用”权限。这些权限都需要确认允许才可以获取到。

我尝试了一下撤销权限还能不能玩游戏,情况很复杂。有时候能玩,但游戏地图道路读取不出来,只有飘在空中的 Pokéstop 和道场;有时候干脆无法加载游戏,或者显示服务器故障。

为什么不让用户确认权限?@SwiftOnSecurity 指出,登陆界面的确系 Google 的 OAuth 界面,如假包换。但问题在于 Niantic Labs 可能设置了浏览器自动化,跳过了权限确认页面,自动帮用户点了按钮——这是严重的安全事故。

 

20160711125114

 

另外,第三方应用的开发者在设计使用 Google、Facebook、Twitter 或其他更流行的账号体系登陆时,通常应该遵循“最小权限原则”,只申请应用正常运转所必须的权限。《Pokémon Go》从目前的全部功能来看,并没有获取完整权限的必要。现在这样一上来就要求完整权限,还不经确认,比“全家桶”有过之无不及。

Google 的账户帮助页面上有一段这样的描述:

当您向应用授予完整帐户权限后,该应用几乎可以查看和修改您 Google 帐户中的所有信息(但不能更改密码、删除帐户,或以您的名义使用 Google 电子钱包付款)。

某些 Google 应用可能具有完整帐户权限。例如,您可能会看到,您下载到 iPhone 的“Google 地图”应用具有完整帐户权限。

请仅将“完整帐户权限”授予您完全信任且已安装到您的个人计算机、手机或平板电脑上的应用。

更具体讲,授予一个第三方应用“完整账户权限”,意味着它可以:

查看你的邮件;以你的身份发邮件;获取你 Google Drive 云盘里的所有文件,包括已经删除的;调取你的搜索记录,包括地图里的导航记录;看任何你在 Google Photos 里备份的照片,包括隐私照片;了解或修改其他各种各样的资料;登陆其他用 Google 账户登陆的服务。

至于由 Niantic Labs 和任天堂旗下 Pokémon Company 这两家还算知名的公司联合开发的游戏,为何出现如此严重的账户权限事故,除了粗心大意,恐怕暂无其他解释。来自 Slack 的开发者 Ari Rubinstein 测试了《Pokémon Go》的 OAuth 模块,发现应该是 Niantic Labs 采用了一个过期的 API,会错误地向 Google 发送申请完整权限的请求。Niantic Labs 此前属于 Google 旗下,最近在 Google 的拆分重组中独立出来,这可能是它们所用开发工具过期的原因之一。

身为架构工程师的 Adam Renee 表示,他并非怀疑 Niantic Labs 会拿着用户 Google 账户的完整权限胡作非为。问题在于,Niantic Labs 的数据安全水平如何,在业界并没有公开的资料。更何况现在《Pokémon Go》如此火爆,难免有黑客盯上这座数据金矿,谁也无法保证之前发生在网易、CSDN、雅虎、Target 等公司内的数据泄露事故,不会发生在 Niantic Labs 身上(此前已经有黑客修改游戏的 Android APK 安装包,在游戏里添加恶意代码。)

 

订阅更多文章