從掃碼登錄的原理分析QQ大量被盜事件
6 月 26 號(hào)晚上,大量 QQ 被盜的新聞一度沖上微博熱搜。很多人反映自己的 QQ 不受控制地發(fā)送大量違規(guī)圖片。
6 月 27 號(hào)早上,騰訊 QQ 官方下場(chǎng)發(fā)了公告。
公告總結(jié)來(lái)說(shuō)就是“用戶掃了釣魚(yú)二維碼,和騰訊無(wú)關(guān)”。
到底和騰訊有關(guān)嗎?我們來(lái)分析分析。
掃碼登錄
先看 QQ 掃描登錄的流程,大致分為三個(gè)階段:
- 二維碼展示階段
- 掃碼階段
- 登錄確認(rèn)階段
先簡(jiǎn)單過(guò)一下登錄流程:
- 用戶打開(kāi)電腦 QQ。
- 電腦 QQ 顯示一個(gè)二維碼。
- 用戶拿起手機(jī)掃碼。
- 電腦 QQ 顯示“掃碼成功,請(qǐng)用 QQ 手機(jī)版確認(rèn)”。
- 手機(jī) QQ 顯示“您正在一臺(tái)新設(shè)備登錄 QQ”,讓用戶選擇請(qǐng)選擇登錄還是拒絕。
- 用戶選擇登錄,電腦 QQ 登錄成功,整個(gè)流程結(jié)束。
根據(jù)用戶的行為畫(huà)出整個(gè)時(shí)序圖:
這套掃碼登錄的流程在業(yè)界被廣泛地使用,也足以證明其合理性。
過(guò)程一共有四個(gè)參與者,分別是:用戶、手機(jī)、電腦、騰訊 QQ 服務(wù)器。
黑客無(wú)法偽造用戶、手機(jī)、和騰訊 QQ 服務(wù)器這三個(gè)參與者,但是可以在電腦端上動(dòng)手腳,這次的盜號(hào)事件,正是如此。
到底是怎么攻擊的呢?我們往下看。
黑客如何盜號(hào)
根據(jù)我了解到的一些信息,我大膽猜測(cè)一下盜號(hào)的過(guò)程:
網(wǎng)吧里面的 WeGame 被黑客注入了,然后黑客用手表 QQ 的登錄二維碼偽裝成 WeGame 的登錄二維碼,劫持了用戶的授權(quán)信息,黑客利用授權(quán)信息和騰訊服務(wù)器交互,批量發(fā)送圖片。
按照我的推論,還原一下犯罪現(xiàn)場(chǎng):
首先,黑客入侵一個(gè)大的網(wǎng)吧管理服務(wù)商,在 WeGame 這個(gè)軟件上面注入一層釣魚(yú)入口。
然后這個(gè)服務(wù)商下的網(wǎng)吧下載了這個(gè)被注入的 WeGame。
用戶去網(wǎng)吧上網(wǎng),打開(kāi) WeGame 的時(shí)候同時(shí)也打開(kāi)了釣魚(yú)入口。
這個(gè)釣魚(yú)入口輸入賬號(hào)密碼顯示登錄錯(cuò)誤。
于是,用戶只能掃碼登錄,用戶一掃描,看到的卻是登錄手表 QQ。
用戶感到疑惑,但是也沒(méi)有想太多,點(diǎn)了確定登錄。
授權(quán)成功,黑客拿到授權(quán)信息。
整個(gè)過(guò)程黑客并沒(méi)有直接盜取到你的賬號(hào)密碼,只是通過(guò)“釣魚(yú)”拿到了你的授權(quán)信息。
而騰訊的服務(wù)器,只認(rèn)授權(quán)信息不認(rèn)人,只要授權(quán)信息是對(duì)的,不管誰(shuí)去請(qǐng)求,騰訊都會(huì)放行。
就這樣,黑客得到了服務(wù)器的信任,讓你的賬號(hào)批量發(fā)送圖片。
回答
按照上面的推論,會(huì)有幾個(gè)問(wèn)題:
1.為什么沒(méi)有把被盜號(hào)的人擠下線。
上面提到了,黑客拿到的是手表 QQ 的授權(quán)信息,手表QQ 和手機(jī) QQ 以及電腦 QQ 都不沖突。
也就是說(shuō),即使你手機(jī) QQ 在線,黑客也能發(fā)送消息,甚至你一邊撤回,黑客還能一邊繼續(xù)發(fā)圖片。
2.類似大量盜號(hào)事件是不是第一次?
不是。早在五月份就有類似的案例,但看起來(lái)騰訊并沒(méi)有重視。
3.為什么 QQ 經(jīng)常被盜,但是微信沒(méi)有這種情況?
QQ 誕生于 1999 年,屬于遠(yuǎn)古時(shí)代的產(chǎn)物,歷史遺留問(wèn)題比較多。
微信誕生于 2011 年,跳過(guò)了 QQ 踩過(guò)的一些坑,權(quán)限把控得也更嚴(yán)格。
雖然功能上微信沒(méi)有 QQ 強(qiáng)大,但安全方面一直做得比 QQ 要好。畢竟安全是微信和支付寶這種帶有金融屬性的軟件的根基,安全做不好是玩不下去的。
4.為什么沒(méi)有掃過(guò)任何碼 QQ 也被盜了?為什么三百年沒(méi)用過(guò)的 QQ 也被盜了?為什么有些去世的人的 QQ 也被盜了?
如果真的有這種情況,那我也沒(méi)法解釋,只能讓騰訊來(lái)解釋了。
一些其他看法
上面是我根據(jù)網(wǎng)上的信息推測(cè)處理的,網(wǎng)絡(luò)上還有其他的觀點(diǎn)。
比較主流的是“學(xué)習(xí)通信息撞庫(kù)”和“js 劫取授權(quán)信息”。
學(xué)習(xí)通撞庫(kù)
這種說(shuō)法的核心是:學(xué)習(xí)通泄漏了用戶的信息,然后有些用戶學(xué)習(xí)通的密碼和 QQ 密碼設(shè)置的是一樣,間接導(dǎo)致用戶 QQ 密碼泄漏。
我個(gè)人覺(jué)得這種可能性很低。
為什么呢?
第一,騰訊和學(xué)習(xí)通這種體量的 APP 肯定會(huì)對(duì)用戶密碼脫敏加密處理,并不能直接撞庫(kù)攻擊。
第二,就算破解了加密方式,拿到了用戶的密碼,也很難直接登錄用戶的 QQ。因?yàn)樵诘卿浀臅r(shí)候,會(huì)觸發(fā)新設(shè)備登錄驗(yàn)證,如果拿不到用戶的登錄驗(yàn)證碼,是沒(méi)有辦法登錄成功的。
JS 取授權(quán)信息
根據(jù)酷安大佬@JiuXia2025 的說(shuō)法,此次大量 QQ 被盜是因?yàn)橛脩酎c(diǎn)了某個(gè)鏈接,然后被 js 劫取了瀏覽器里面的 Cookie,黑客從中拿到了能控制 QQ 賬號(hào)的 key,從而批量發(fā)送圖片。
圖片來(lái)自于why技術(shù)
對(duì)于大佬的實(shí)力,我不懷疑。
對(duì)于大佬的觀點(diǎn),我保持一個(gè)懷疑的態(tài)度。
第一,我不相信這么多年過(guò)去了,騰訊還沒(méi)有對(duì) js 攻擊做防護(hù)。
第二,我不認(rèn)為在 QQ 里面點(diǎn)開(kāi)一個(gè)鏈接,QQ 會(huì)給瀏覽器授權(quán)具備“發(fā)送消息”的權(quán)限。如果沒(méi)有“發(fā)送消息”的權(quán)限,就算瀏覽器的授權(quán)信息算被 js 劫取也沒(méi)有任何意義。
總結(jié)
總結(jié)一下我的觀點(diǎn)就是:
一個(gè)有錢(qián)人家里錢(qián)太多了總是被偷,于是這個(gè)有錢(qián)人花重金打造了世界上最牛的門(mén),開(kāi)門(mén)需要經(jīng)過(guò)二十四道機(jī)關(guān)和五次密碼確認(rèn),最后還需要驗(yàn)證指紋和人臉。
即使這樣,這個(gè)有錢(qián)人的錢(qián)還是被偷了。
為什么還會(huì)被偷呢?
記者采訪了這個(gè)有錢(qián)人。
這個(gè)有錢(qián)人只說(shuō)了一句話:一切責(zé)任盡在用戶。
寫(xiě)在最后
吃瓜歸吃瓜,還是要搞技術(shù)的,我預(yù)估掃碼登錄的流程會(huì)成為近期熱門(mén)面試題。
為什么呢?
第一,可以驗(yàn)證候選人對(duì)技術(shù)有沒(méi)有敏銳的捕捉力。
第二,可以很好地延伸到其他技術(shù)點(diǎn)。比如:
- Redis 過(guò)期時(shí)間怎么設(shè)置?項(xiàng)目中有用到過(guò)嗎?
- Token、Cookie、Session 三者有什么區(qū)別?
- 為什么要輪詢二維碼狀態(tài)?用 Http 長(zhǎng)連接不行嗎?用 Websocket 不行嗎?
- 還有哪些常見(jiàn)的攻擊手段?應(yīng)對(duì)措施分別是什么?
- 了解 OAuth2.0 和 JWT 嗎?
你看,這一套組合拳下來(lái)是不是行云流水、一氣呵成?