6 月 26 號晚上,大量 QQ 被盜的新聞一度衝上微博熱搜。很多人反映自己的 QQ 不受控制地發送大量違規圖片。
6 月 27 號早上,騰訊 QQ 官方下場發了公告。
公告總結來說就是「用戶掃了釣魚二維碼,和騰訊無關」。
到底和騰訊有關嗎?我們來分析分析。
掃碼登錄
先看 QQ 掃描登錄的流程,大致分為三個階段:
- 二維碼展示階段
- 掃碼階段
- 登錄確認階段
image-20220629010438425
先簡單過一下登錄流程:
- 用戶打開電腦 QQ。
- 電腦 QQ 顯示一個二維碼。
- 用戶拿起手機掃碼。
- 電腦 QQ 顯示「掃碼成功,請用 QQ 手機版確認」。
- 手機 QQ 顯示「您正在一台新設備登錄 QQ」,讓用戶選擇請選擇登錄還是拒絕。
- 用戶選擇登錄,電腦 QQ 登錄成功,整個流程結束。
根據用戶的行為畫出整個時序圖:
這套掃碼登錄的流程在業界被廣泛地使用,也足以證明其合理性。
過程一共有四個參與者,分別是:用戶、手機、電腦、騰訊 QQ 服務器。
黑客無法偽造用戶、手機、和騰訊 QQ 服務器這三個參與者,但是可以在電腦端上動手腳,這次的盜號事件,正是如此。
到底是怎麼攻擊的呢?我們往下看。
黑客如何盜號
根據我了解到的一些信息,我大膽猜測一下盜號的過程:
網吧裏面的 WeGame 被黑客注入了,然後黑客用手錶 QQ 的登錄二維碼偽裝成 WeGame 的登錄二維碼,劫持了用戶的授權信息,黑客利用授權信息和騰訊服務器交互,批量發送圖片。
按照我的推論,還原一下犯罪現場:
首先,黑客入侵一個大的網吧管理服務商,在 WeGame 這個軟件上面注入一層釣魚入口。
然後這個服務商下的網吧下載了這個被注入的 WeGame。
用戶去網吧上網,打開 WeGame 的時候同時也打開了釣魚入口。
這個釣魚入口輸入賬號密碼顯示登錄錯誤。
於是,用戶只能掃碼登錄,用戶一掃描,看到的卻是登錄手錶 QQ。
用戶感到疑惑,但是也沒有想太多,點了確定登錄。
授權成功,黑客拿到授權信息。
整個過程黑客並沒有直接盜取到你的賬號密碼,只是通過「釣魚」拿到了你的授權信息。
而騰訊的服務器,只認授權信息不認人,只要授權信息是對的,不管誰去請求,騰訊都會放行。
就這樣,黑客得到了服務器的信任,讓你的賬號批量發送圖片。
回答
按照上面的推論,會有幾個問題:
1、為什麼沒有把被盜號的人擠下線。
上面提到了,黑客拿到的是手錶 QQ 的授權信息,手錶QQ 和手機 QQ 以及電腦 QQ 都不衝突。
也就是說,即使你手機 QQ 在線,黑客也能發送消息,甚至你一邊撤回,黑客還能一邊繼續發圖片。
2、類似大量盜號事件是不是第一次?
不是。早在五月份就有類似的案例,但看起來騰訊並沒有重視。
3、為什麼 QQ 經常被盜,但是微信沒有這種情況?
QQ 誕生於 1999 年,屬於遠古時代的產物,歷史遺留問題比較多。
微信誕生於 2011 年,跳過了 QQ 踩過的一些坑,權限把控得也更嚴格。
雖然功能上微信沒有 QQ 強大,但安全方面一直做得比 QQ 要好。畢竟安全是微信和支付寶這種帶有金融屬性的軟件的根基,安全做不好是玩不下去的。
4、為什麼沒有掃過任何碼 QQ 也被盜了?為什麼三百年沒用過的 QQ 也被盜了?為什麼有些去世的人的 QQ 也被盜了?
如果真的有這種情況,那我也沒法解釋,只能讓騰訊來解釋了。
一些其他看法
上面是我根據網上的信息推測處理的,網絡上還有其他的觀點。
比較主流的是 「學習通信息撞庫」 和 「js 劫取授權信息」 。
學習通撞庫
這種說法的核心是:學習通泄漏了用戶的信息,然後有些用戶學習通的密碼和 QQ 密碼設置的是一樣,間接導致用戶 QQ 密碼泄漏。
我個人覺得這種可能性很低。
為什麼呢?
第一,騰訊和學習通這種體量的 APP 肯定會對用戶密碼脫敏加密處理,並不能直接撞庫攻擊。
第二,就算破解了加密方式,拿到了用戶的密碼,也很難直接登錄用戶的 QQ。因為在登錄的時候,會觸發新設備登錄驗證,如果拿不到用戶的登錄驗證碼,是沒有辦法登錄成功的。
JS 取授權信息
根據酷安大佬@JiuXia2025 的說法,此次大量 QQ 被盜是因為用戶點了某個鏈接,然後被 js 劫取了瀏覽器裏面的 Cookie,黑客從中拿到了能控制 QQ 賬號的 key,從而批量發送圖片。
對於大佬的實力,我不懷疑。
對於大佬的觀點,我保持一個懷疑的態度。
第一,我不相信這麼多年過去了,騰訊還沒有對 js 攻擊做防護。
第二,我不認為在 QQ 裏面點開一個鏈接,QQ 會給瀏覽器授權具備「發送消息」的權限。如果沒有「發送消息」的權限,就算瀏覽器的授權信息算被 js 劫取也沒有任何意義。
總結
總結一下我的觀點就是:
一個有錢人家裡錢太多了總是被偷,於是這個有錢人花重金打造了世界上最牛的門,開門需要經過二十四道機關和五次密碼確認,最後還需要驗證指紋和人臉。
即使這樣,這個有錢人的錢還是被偷了。
為什麼還會被偷呢?
記者採訪了這個有錢人。
這個有錢人只說了一句話:一切責任盡在用戶。
寫在最後
吃瓜歸吃瓜,還是要搞技術的,我預估掃碼登錄的流程會成為近期熱門面試題。
為什麼呢?
第一,可以驗證候選人對技術有沒有敏銳的捕捉力。
第二,可以很好地延伸到其他技術點。比如:
- Redis 過期時間怎麼設置?項目中有用到過嗎?
- Token、Cookie、Session 三者有什麼區別?
- 為什麼要輪詢二維碼狀態?用 Http 長連接不行嗎?用 Websocket 不行嗎?
- 還有哪些常見的攻擊手段?應對措施分別是什麼?
- 了解 OAuth2.0 和 JWT 嗎?和你說的掃碼登錄有什麼區別和聯繫?
你看,這一套組合拳下來是不是行雲流水、一氣呵成?
所以啊,還是得繼續學啊!
畢竟,宇宙的盡頭是卷王,你不學習他稱王。
以上所有推論僅代表個人觀點,屬於個人猜想,素材全部來自於網上。
一切以官方公告為準,不信謠不傳謠。
參考資料
- https://www.apereo.org/projects/cas
- https://juejin.cn/post/6844904111398191117