QuizUp游戲泄露用戶隱私有感:開發(fā)人員的責(zé)任
開發(fā)人員對(duì)用戶是負(fù)有責(zé)任的。現(xiàn)如今不需要很多人,也不用經(jīng)過很多審查,就能直接到達(dá)如此多的用戶,這在人類歷史上從來沒有出現(xiàn)過。集中發(fā)布這事我們的確干了超過500年了,但是在到達(dá)數(shù)百萬用戶之前,必須經(jīng)手?jǐn)?shù)十個(gè)人。 這些人包括評(píng)論家、核實(shí)人員、編輯和調(diào)查人員。而如今,一個(gè)很小的團(tuán)隊(duì),甚至是一個(gè)開發(fā)人員就能在幾天時(shí)間里涉足數(shù)百萬人的個(gè)人生活。大部分情況下這種強(qiáng)大的能力對(duì)每個(gè)人皆有利,然而我們?cè)絹碓筋l繁看到開發(fā)人員步入歧途。大部分的用戶沒有足夠的技術(shù)知識(shí)來理解開發(fā)人員的設(shè)計(jì),就算是有技術(shù)背景的人通常也不愿意多費(fèi)周折。
在發(fā)表這篇文章之前,我聯(lián)系過QuizUp的開發(fā)商——Plain Vanilla。我告訴他們我發(fā)現(xiàn)一些安全方面的隱患,并表示愿意提供任何形式的幫助。截至發(fā)表之時(shí)已經(jīng)過去好幾天了,他們并沒有跟我索取細(xì)節(jié)或者以任何方式回復(fù)我。關(guān)于這事的詳情請(qǐng)查看本文末。
最近有一款iOS平臺(tái)的游戲很火爆,安裝量甚至遠(yuǎn)超過了當(dāng)初的Instagram和Snapchat。經(jīng)常關(guān)注App Store的人可能已經(jīng)注意到了這款席卷移動(dòng)平臺(tái)名叫”QuizUp“游戲。我發(fā)現(xiàn)這個(gè)游戲是因?yàn)槲易⒁獾剿褂玫囊粋€(gè)搜索關(guān)鍵字恰好是我開發(fā)的一個(gè)火爆小游戲”Trivium”的名字。我下載并試玩了一下這個(gè)游戲。雖然游戲還不錯(cuò),但總感覺某些東西和它的原理不一致。開發(fā)人員有本能好奇心,尤其是對(duì)技術(shù),它促使我開始繼續(xù)探索。接下來的發(fā)現(xiàn)先是讓我吃驚,然后是震驚。
QuizUp 的定位是一個(gè)社交網(wǎng)絡(luò)的問答游戲。在運(yùn)行前你需要用email或Facebook帳號(hào)進(jìn)行注冊(cè)。進(jìn)入游戲后,玩家會(huì)與另一個(gè)玩家進(jìn)行匹配,然后互相在線問答7輪問題。問題的類別多達(dá)250個(gè)。我自己也寫過一個(gè)很受歡迎的問答游戲,用戶也達(dá)幾十萬。令我吃驚的是他們能實(shí)時(shí)的提供250個(gè)類別的問題。無論從技術(shù)角度還是玩家角度都是很了不起的。但事實(shí)上,這只能算是一個(gè)取巧的策略。在繼續(xù)研究QuizUp的邏輯時(shí),我還有更讓人吃驚的發(fā)現(xiàn)。
自從App Store運(yùn)營以來,發(fā)生過好幾起違反iOS隱私條約的事件,包括Path被聯(lián)邦政府罰款$800000,還有加州針對(duì)移動(dòng)應(yīng)用隱私暴露起訴Delta Airlines。話說到此,你或許能感覺到開發(fā)人員應(yīng)該關(guān)心用戶個(gè)人數(shù)據(jù)的隱密性。而QuizUp完全是無視隱私。大多數(shù)情況下,泄露隱私無非是信息被明文儲(chǔ)存,其他人獲得了訪問權(quán)限。而QuizUp是把另一個(gè)用戶的個(gè)人信息通過明文傳給你的iphone、或者是iPod touch。這些信息包括但不限于: 全名、Facebook帳號(hào)、郵件地址、照片、性別、生日甚至是用戶的當(dāng)前位置。在我遇到的人中,我成功獲得了上百個(gè)人的個(gè)人信息。
我們之間的聯(lián)系除了QuizUp再無其他。當(dāng)然這些人也同樣可以獲得我的信息。需要提醒大家的是這些人并沒有在軟件里添加為好友,根本就是陌生人。
我并不打算說明如何閱讀這些數(shù)據(jù),因?yàn)槲也幌雽懸粋€(gè)如何獲得數(shù)百萬iOS用戶個(gè)人信息的說明。但這件事就算是交給一個(gè)菜鳥也能在15分鐘內(nèi)搞定。這些信息足以在現(xiàn)實(shí)中定位一個(gè)人。老網(wǎng)民或許知道這種“跟蹤“活動(dòng)并不是少數(shù),而是很常見的。我提供了一小段真實(shí)的用戶數(shù)據(jù),當(dāng)然為了保護(hù)隱私我進(jìn)行了刪減。這段數(shù)據(jù)就是QuizUp在游戲過程中發(fā)送到我手機(jī)上的。如果你玩過這個(gè)游戲,你的隱私也就暴露給其他用戶了。
- "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上有個(gè)”好友“欄。你可以給聯(lián)系人發(fā)送一條短信,邀請(qǐng)他們下載這個(gè)游戲。本來這是一個(gè)很好的特性。但為了使用這個(gè)功能,QuizUp要求訪問你的通訊錄。一旦你允許它訪問,所有的聯(lián)系人都將收到郵件,而且仍然是以明文的方式發(fā)送到QuizUp的服務(wù)器。你可能認(rèn)為我只是手動(dòng)的通過短信一對(duì)一邀請(qǐng),但后臺(tái)卻在傳送聯(lián)系人信息。這同樣違反了法律,跟那個(gè)被罰的”Path”是一個(gè)性質(zhì)。
隨著調(diào)查的深入,我發(fā)現(xiàn)的小問題多達(dá)上百個(gè),這少不了安全研究人員的協(xié)助,而且他們也對(duì)這個(gè)問題開始感興趣了。這些問題包含明文傳輸密碼,搞亂Twitter聯(lián)系人等等,我就不一一列舉了。
我認(rèn)為我是一個(gè)有職業(yè)道德的開發(fā)者。客戶經(jīng)常請(qǐng)我們公司開發(fā)iOS應(yīng)用以及配置服務(wù)器。在過程中我們總會(huì)提出關(guān)于安全和隱私的顧慮,但一般沒人采我們。但我將一貫抵制生成虛假評(píng)論以及收集用戶數(shù)據(jù)。大部分開發(fā)都有這個(gè)道德底線,至少我希望是這樣。
通過調(diào)查,我發(fā)現(xiàn)這個(gè)游戲不僅暴露用戶的隱私,而且有意違反安全策略方面的最佳實(shí)踐,并有意欺騙用戶。QuizUp在推廣時(shí)聲稱提供實(shí)時(shí)的社交游戲體驗(yàn)。他們?cè)诰W(wǎng)站上,新聞發(fā)布上一直強(qiáng)調(diào)實(shí)時(shí)性。遺憾的是,這種實(shí)時(shí)性是一種很虛假的實(shí)時(shí)性。
#p#
在開始游戲后,另一個(gè)玩家的答案在回答問題前就已經(jīng)產(chǎn)生了。基于這一點(diǎn)我可以推斷,至少在某些情況下,你只是在和對(duì)方的上一次游戲過程娛樂。另外在沒有其他玩家可以用來匹配時(shí),它們似乎還創(chuàng)建一些虛擬玩家來匹配。雖然很難搞清具體的網(wǎng)絡(luò)通信情況,但可以肯定他們花了很多力氣試圖把一個(gè)單機(jī)游戲搞得像在線游戲。
- "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
- }
- }
得益于其他的安全漏洞,我可以實(shí)時(shí)看到在每一個(gè)類別里游戲的當(dāng)前玩家數(shù)。在一個(gè)空房間里尋找匹配玩家居然能在幾秒中內(nèi)匹配成功。這再次證明他們說的實(shí)時(shí)在線游戲至少部分存在欺騙。我當(dāng)然也沒有一個(gè)確切的方式來測試我的觀點(diǎn)。
沒有安全和隱私也就罷了,在游戲里作弊也是小菜一碟。每一輪游戲開始的時(shí)候,所有問題的答案已經(jīng)出來了。你可以輕易的修改思考問題以及回答問題的時(shí)間。一個(gè)簡單的測試就可以發(fā)現(xiàn)你可以修改答案、分?jǐn)?shù)以及排名。花幾個(gè)小時(shí)就能輕松戰(zhàn)勝程序并成為每個(gè)類別的頂級(jí)玩家。
這個(gè)游戲不出我所料采用了Flurry來做分析。所有與Flurry的交互數(shù)據(jù)都很安全。雖然開發(fā)人員可以獲得Flurry的token,但對(duì)我以及玩家來說并不是什么問題。更大的問題在于Facebook的token可以直接獲得明文. 請(qǐng)往下看(再次屏蔽部分內(nèi)容)。如果你有一些額外的技術(shù)背景你就
可以直接發(fā)表內(nèi)容而不需要用戶的授權(quán)。然而我對(duì)于Facebook了解有限,這個(gè)任務(wù)就留給其他人探索吧。
- {
- "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*****************************"
- }
我至少已經(jīng)確認(rèn)兩起我朋友的Facebook信息被QuizUp直接以明文儲(chǔ)存到NSUserDefaults,他們甚至有的都沒有使用這個(gè)程序。我不怎么使用Facebook所以不方便去測試這一類的問題。
盡管QuizUp也采用https來發(fā)起所有的網(wǎng)絡(luò)連接,但他們傳回設(shè)備的數(shù)據(jù)直接就是可閱讀的文本,而且這些數(shù)據(jù)本身就很敏感。其中大量的數(shù)據(jù)根本就不可能用到。比如,我沒有任何理由需要知道對(duì)方玩家的郵件地址。
最讓人震驚的就是這些風(fēng)投公司,這其中不乏大型的和知名的。我的問題是,到底他們有沒有認(rèn)真審查這家公司還是他們根本就不在乎。我已經(jīng)搞不清這兩者哪種更嚴(yán)重了。一個(gè)公司可以在對(duì)技術(shù)和研發(fā)投入如此不用心的情況下還能賺這么多錢,這是不是一種泡沫現(xiàn)象?
QuizUp還違反了諸多蘋果公司的審查原則,據(jù)此直接可以一開始就拒絕合作。比如6.2和6.3章節(jié)是針對(duì)游戲中心ID的隱私的,這一條QuizUp同樣沒有用心。QuizUp還違反了蘋果公司強(qiáng)制執(zhí)行的隱私條款,而且蘋果公司一般不會(huì)容忍違反這些條款的行為。17.1和17.2是明顯違反了,17.4也有嫌疑。蘋果公司很難去監(jiān)控這些行為,當(dāng)然也不能怪蘋果公司,畢竟每天都有大量的軟件進(jìn)出系統(tǒng)。其實(shí)他們可以對(duì)忽略這些條款的開發(fā)人員予以重罰,但問題是處罰對(duì)于后面的開發(fā)者有威懾力嗎?
用戶信賴開發(fā)者不會(huì)亂來,他們也不會(huì)察覺我們這里討論的問題。我們公司以及員工做了很大努力以確保我們是站在用戶這邊的。為了降低成本而走捷徑或開快車最終只能是損害開發(fā)者的信譽(yù)。對(duì)于現(xiàn)在的部分開發(fā)人員我很失望,他們放棄了道德陣地而選擇混水摸魚。我相信如果你讓世界變得更好,哪怕你只出了很少的力,那你一定睡得更香。
在準(zhǔn)備這篇文章過程中,我咨詢了移動(dòng)安全領(lǐng)域的專家 Nick Amott,他幫助我驗(yàn)證,調(diào)查和研究問題。我試圖驗(yàn)證我所有的結(jié)論,但沒有源代碼我也無法完全確定,尤其是那些關(guān)于實(shí)時(shí)匹配和游戲機(jī)制方面的。我希望外面的安全領(lǐng)域社區(qū)能夠關(guān)注并研究有價(jià)值的問題。
11月25日更新: QuizUp在Tech Crunch上回復(fù)了這些問題。我堅(jiān)持我的觀點(diǎn)并再次呼吁第三方安全研究專家進(jìn)行調(diào)查。我的文章不會(huì)公開發(fā)表以便保護(hù)QuizUp的用戶。但如果有任何媒體或研究人員聯(lián)系我,我將予以提供。我也很樂意貼出之前發(fā)給他們的郵件,他們聲稱從來沒有收到過。
他們說已經(jīng)修復(fù)了一些安全漏洞,所有想重現(xiàn)我說的問題得取決于這些問題是否被修復(fù)。
11月25日第二次更新: 一個(gè)叫”Jokull”的人自稱是QuizUp程序員,他在Hacker News上說,是有很小的可能性出現(xiàn)我們不能找到對(duì)方玩家,玩家最終與機(jī)器人進(jìn)行游戲,但我們選擇最大化的提升用戶體驗(yàn)。 這也證明了我之前不太確定的一些問題。回答一些讀者的問題:他們至今沒有問我關(guān)于我發(fā)現(xiàn)的問題以及關(guān)于修復(fù)問題的建議。
11月26日更新: Plain Vanilla的高管聯(lián)系過我。他們很積極地想去修復(fù)我發(fā)現(xiàn)的問題。這需要時(shí)間和精力,但我認(rèn)為是一個(gè)比較好的結(jié)果。我也會(huì)向讓讀者提供后續(xù)進(jìn)展。他們立即在服務(wù)器端修復(fù)了信息泄露漏洞,客戶端也不會(huì)發(fā)送對(duì)方玩家的敏感數(shù)據(jù)了。我希望這一課能提醒那些創(chuàng)業(yè)公司在沖向市場前能多考慮一下用戶的隱私。
原文鏈接: Kyle Richter 翻譯: 伯樂在線 - 梧桐