在电脑上登录qq怎么样更加安全(从扫码登录的原理一层一层分析“QQ大量被盗事件”)
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/cashttps://juejin.cn/post/6844904111398191117