开发人员对用户是负有责任的。现如今不需要很多人,也不用经过很多审查,就能直接到达如此多的用户,这在人类历史上从来没有出现过。集中发布这事我们的确干了超过500年了,但是在到达数百万用户之前,必须经手数十个人。 这些人包括评论家、核实人员、编辑和调查人员。而如今,一个很小的团队,甚至是一个开发人员就能在几天时间里涉足数百万人的个人生活。大部分情况下这种强大的能力对每个人皆有利,然而我们越来越频繁看到开发人员步入歧途。大部分的用户没有足够的技术知识来理解开发人员的设计,就算是有技术背景的人通常也不愿意多费周折。
在发表这篇文章之前,我联系过QuizUp的开发商——Plain Vanilla。我告诉他们我发现一些安全方面的隐患,并表示愿意提供任何形式的帮助。截至发表之时已经过去好几天了,他们并没有跟我索取细节或者以任何方式回复我。关于这事的详情请查看本文末。
最近有一款iOS平台的游戏很火爆,安装量甚至远超过了当初的Instagram和Snapchat。经常关注App Store的人可能已经注意到了这款席卷移动平台名叫”QuizUp“游戏。我发现这个游戏是因为我注意到它使用的一个搜索关键字恰好是我开发的一个火爆小游戏”Trivium”的名字。我下载并试玩了一下这个游戏。虽然游戏还不错,但总感觉某些东西和它的原理不一致。开发人员有本能好奇心,尤其是对技术,它促使我开始继续探索。接下来的发现先是让我吃惊,然后是震惊。
QuizUp 的定位是一个社交网络的问答游戏。在运行前你需要用email或Facebook帐号进行注册。进入游戏后,玩家会与另一个玩家进行匹配,然后互相在线问答7轮问题。问题的类别多达250个。我自己也写过一个很受欢迎的问答游戏,用户也达几十万。令我吃惊的是他们能实时的提供250个类别的问题。无论从技术角度还是玩家角度都是很了不起的。但事实上,这只能算是一个取巧的策略。在继续研究QuizUp的逻辑时,我还有更让人吃惊的发现。
自从App Store运营以来,发生过好几起违反iOS隐私条约的事件,包括Path被联邦政府罚款$800000,还有加州针对移动应用隐私暴露起诉Delta Airlines。话说到此,你或许能感觉到开发人员应该关心用户个人数据的隐密性。而QuizUp完全是无视隐私。大多数情况下,泄露隐私无非是信息被明文储存,其他人获得了访问权限。而QuizUp是把另一个用户的个人信息通过明文传给你的iphone、或者是iPod touch。这些信息包括但不限于: 全名、Facebook帐号、邮件地址、照片、性别、生日甚至是用户的当前位置。在我遇到的人中,我成功获得了上百个人的个人信息。
我们之间的联系除了QuizUp再无其他。当然这些人也同样可以获得我的信息。需要提醒大家的是这些人并没有在软件里添加为好友,根本就是陌生人。
我并不打算说明如何阅读这些数据,因为我不想写一个如何获得数百万iOS用户个人信息的说明。但这件事就算是交给一个菜鸟也能在15分钟内搞定。这些信息足以在现实中定位一个人。老网民或许知道这种“跟踪“活动并不是少数,而是很常见的。我提供了一小段真实的用户数据,当然为了保护隐私我进行了删减。这段数据就是QuizUp在游戏过程中发送到我手机上的。如果你玩过这个游戏,你的隐私也就暴露给其他用户了。
- "player": {
- "banner_slugs": [],
- "banners": [],
- "bio": null,
- "birthday": null,
- "coordinates": null,
- "email": "p***********@aol.com",
- "followers": [],
- "following": [],
- "gender": "male",
- "has_email_login": false,
- "id": "2****************6",
- "is_ghost": false,
- "location": {
- "city_name": null,
- "country_code": "US",
- "country_name": "United States",
- "region_code": "FL",
- "region_name": "Florida"
- },
- "name": "Matt P*******",
- "picture_urls": {
- [*EDITOR NOTE: EXIF intact avatars which may show GPS location where they were taken*]
- "large": "http://cdn.players.production.quizup.com/players/*********/large.jpg",
- "mini": "http://cdn.players.production.quizup.com/players/**********/mini.jpg",
- "original": "https://fbcdn-profile-a.akamaihd.net/*******988956887_n.jpg",
- "square": "http://cdn.players.production.quizup.com/players/*******/square.jpg",
- "wallpaper/large": "http://cdn.players.production.quizup.com/players/********/large.jpg",
- "wallpaper/original": "https://fbcdn-sphotos-b-a.akamaihd.net/*******629378032_n.jpg"
- },
- "platform": "iOS",
- "team_member": false,
- "title": "Golden",
- "twitter": null
- }
QuizUp上有个”好友“栏。你可以给联系人发送一条短信,邀请他们下载这个游戏。本来这是一个很好的特性。但为了使用这个功能,QuizUp要求访问你的通讯录。一旦你允许它访问,所有的联系人都将收到邮件,而且仍然是以明文的方式发送到QuizUp的服务器。你可能认为我只是手动的通过短信一对一邀请,但后台却在传送联系人信息。这同样违反了法律,跟那个被罚的”Path”是一个性质。
随着调查的深入,我发现的小问题多达上百个,这少不了安全研究人员的协助,而且他们也对这个问题开始感兴趣了。这些问题包含明文传输密码,搞乱Twitter联系人等等,我就不一一列举了。
我认为我是一个有职业道德的开发者。客户经常请我们公司开发iOS应用以及配置服务器。在过程中我们总会提出关于安全和隐私的顾虑,但一般没人采我们。但我将一贯抵制生成虚假评论以及收集用户数据。大部分开发都有这个道德底线,至少我希望是这样。
通过调查,我发现这个游戏不仅暴露用户的隐私,而且有意违反安全策略方面的最佳实践,并有意欺骗用户。QuizUp在推广时声称提供实时的社交游戏体验。他们在网站上,新闻发布上一直强调实时性。遗憾的是,这种实时性是一种很虚假的实时性。
#p#
在开始游戏后,另一个玩家的答案在回答问题前就已经产生了。基于这一点我可以推断,至少在某些情况下,你只是在和对方的上一次游戏过程娱乐。另外在没有其他玩家可以用来匹配时,它们似乎还创建一些虚拟玩家来匹配。虽然很难搞清具体的网络通信情况,但可以肯定他们花了很多力气试图把一个单机游戏搞得像在线游戏。
- "234092424316998311": {
- "answers": {
- "129970": {
- "answer_id": "520575",
- "answer_time": 0.39787783333332527
- },
- "130141": {
- "answer_id": "521261",
- "answer_time": 2.3160219166666707
- },
- "130145": {
- "answer_id": "521277",
- "answer_time": 2.704801374999988
- },
- "130210": {
- "answer_id": "521538",
- "answer_time": 1.2145604166667
- },
- "130234": {
- "answer_id": "521631",
- "answer_time": 1.4425444999999968
- },
- "130315": {
- "answer_id": "521955",
- "answer_time": 3.067427958333326
- },
- "130332": {
- "answer_id": "522026",
- "answer_time": 0.4041142916667013
- }
- }
得益于其他的安全漏洞,我可以实时看到在每一个类别里游戏的当前玩家数。在一个空房间里寻找匹配玩家居然能在几秒中内匹配成功。这再次证明他们说的实时在线游戏至少部分存在欺骗。我当然也没有一个确切的方式来测试我的观点。
没有安全和隐私也就罢了,在游戏里作弊也是小菜一碟。每一轮游戏开始的时候,所有问题的答案已经出来了。你可以轻易的修改思考问题以及回答问题的时间。一个简单的测试就可以发现你可以修改答案、分数以及排名。花几个小时就能轻松战胜程序并成为每个类别的顶级玩家。
这个游戏不出我所料采用了Flurry来做分析。所有与Flurry的交互数据都很安全。虽然开发人员可以获得Flurry的token,但对我以及玩家来说并不是什么问题。更大的问题在于Facebook的token可以直接获得明文. 请往下看(再次屏蔽部分内容)。如果你有一些额外的技术背景你就
可以直接发表内容而不需要用户的授权。然而我对于Facebook了解有限,这个任务就留给其他人探索吧。
- {
- "app_version":"1.0.2",
- "device_token":"prod-production:6b650a251a6b29bcb0b5ae66f028e2c75da1b43e466cbe****************",
- "install_uuid":"7901450C-C2DA-4C42-97EA-*************",
- "app_id":"quizup",
- "device_type":"iPod Touch Fifth Generation",
- "platform":"ios",
- "access_token":"CAAD2XpLDyg8BACHXXCveTWfhU7wh1fX4oZCMqraR2s6UfFfQ3wVcSnRqZCTWrUz5yTb1B6NZAcX83Be8wjIPAI9EDJbD0BNPW5rCfYIZB44cAAZAGT6rJvIKrh5d6IzB8S9wFgc8wQIhPH95kwUxktJBK1A8NzgajIONrr7pjrtK87hZAh4P*****************************"
- }
我至少已经确认两起我朋友的Facebook信息被QuizUp直接以明文储存到NSUserDefaults,他们甚至有的都没有使用这个程序。我不怎么使用Facebook所以不方便去测试这一类的问题。
尽管QuizUp也采用https来发起所有的网络连接,但他们传回设备的数据直接就是可阅读的文本,而且这些数据本身就很敏感。其中大量的数据根本就不可能用到。比如,我没有任何理由需要知道对方玩家的邮件地址。
最让人震惊的就是这些风投公司,这其中不乏大型的和知名的。我的问题是,到底他们有没有认真审查这家公司还是他们根本就不在乎。我已经搞不清这两者哪种更严重了。一个公司可以在对技术和研发投入如此不用心的情况下还能赚这么多钱,这是不是一种泡沫现象?
QuizUp还违反了诸多苹果公司的审查原则,据此直接可以一开始就拒绝合作。比如6.2和6.3章节是针对游戏中心ID的隐私的,这一条QuizUp同样没有用心。QuizUp还违反了苹果公司强制执行的隐私条款,而且苹果公司一般不会容忍违反这些条款的行为。17.1和17.2是明显违反了,17.4也有嫌疑。苹果公司很难去监控这些行为,当然也不能怪苹果公司,毕竟每天都有大量的软件进出系统。其实他们可以对忽略这些条款的开发人员予以重罚,但问题是处罚对于后面的开发者有威慑力吗?
用户信赖开发者不会乱来,他们也不会察觉我们这里讨论的问题。我们公司以及员工做了很大努力以确保我们是站在用户这边的。为了降低成本而走捷径或开快车最终只能是损害开发者的信誉。对于现在的部分开发人员我很失望,他们放弃了道德阵地而选择混水摸鱼。我相信如果你让世界变得更好,哪怕你只出了很少的力,那你一定睡得更香。
在准备这篇文章过程中,我咨询了移动安全领域的专家 Nick Amott,他帮助我验证,调查和研究问题。我试图验证我所有的结论,但没有源代码我也无法完全确定,尤其是那些关于实时匹配和游戏机制方面的。我希望外面的安全领域社区能够关注并研究有价值的问题。
11月25日更新: QuizUp在Tech Crunch上回复了这些问题。我坚持我的观点并再次呼吁第三方安全研究专家进行调查。我的文章不会公开发表以便保护QuizUp的用户。但如果有任何媒体或研究人员联系我,我将予以提供。我也很乐意贴出之前发给他们的邮件,他们声称从来没有收到过。
他们说已经修复了一些安全漏洞,所有想重现我说的问题得取决于这些问题是否被修复。
11月25日第二次更新: 一个叫”Jokull”的人自称是QuizUp程序员,他在Hacker News上说,是有很小的可能性出现我们不能找到对方玩家,玩家最终与机器人进行游戏,但我们选择最大化的提升用户体验。 这也证明了我之前不太确定的一些问题。回答一些读者的问题:他们至今没有问我关于我发现的问题以及关于修复问题的建议。
11月26日更新: Plain Vanilla的高管联系过我。他们很积极地想去修复我发现的问题。这需要时间和精力,但我认为是一个比较好的结果。我也会向让读者提供后续进展。他们立即在服务器端修复了信息泄露漏洞,客户端也不会发送对方玩家的敏感数据了。我希望这一课能提醒那些创业公司在冲向市场前能多考虑一下用户的隐私。
原文链接: Kyle Richter 翻译: 伯乐在线 - 梧桐