近日,有大量用户通过社交平台反馈称,自己或朋友的QQ号出现被盗号的情况,收到多个朋友发来的不良图片。
6月27日,腾讯QQ官微发布声明称:6月26日晚上10点左右,收到部分用户反馈QQ号码被盗。QQ安全团队高度重视并立即展开调查,发现主要原因系用户扫描过不法分子伪造的游戏登录二维码并授权登录,该登录行为被黑产团伙劫持并记录,随后被不法分子利用发送不良图片广告。
确认原因后,QQ第一时间组织安全技术力量,积极对抗黑产作恶,目前受影响范围已得到控制,受此事件影响的用户账号也于今日凌晨陆续恢复正常使用。
“对于给用户带来的不便,我们深表歉意!目前我们正在收集整理黑产团伙的犯罪证据,后续将根据需要配合有关部门开展工作,保护平台及用户的正当权益。在此,也提醒广大用户,不要扫描来源不明的二维码。在非常用环境下登录帐号时要提高安全警惕,防范帐号被盗风险。”QQ表示。

打开网易新闻 查看更多图片

推测一下可能的攻击手段,这个攻击手法可以说是扫码登录这种模式下的一个根本性的漏洞,不仅仅影响到QQ,以后可能会波及到更多的扫码登录应用:

  1. 攻击者打开QQ PC端,PC端提示一个扫描登录的二维码
  2. 攻击者识别二维码将二维码转化为网址
  3. 攻击者选定一个钓鱼用的网站,提示用户请使用QQ扫码登录,将第二步得到的网址重新转化为二维码展示在网站上。也可以使用伪造的QQ客户端。
  4. 这意味着,被攻击用户扫描的二维码,其实是攻击者打开的QQ PC端上的二维码
  5. 用户此时扫码后应该提示“您正在登录QQ PC客户端”,而并非用户打开的网站,但用户很可能直接忽略了相关的提示并进行了确认
  6. 攻击者的QQ PC端现在登录了被攻击者的账号

可以看出这个跟二维码的第三方登录权限隔离之类的毫无关联,这就是用登录PC客户端的二维码进行了欺骗性的钓鱼,欺骗客户让客户确认登录,本质上是一种钓鱼攻击。许多人对输入用户名密码的地方会很警惕,防止被钓鱼网站欺骗,但并没有意识到扫码其实跟输入用户名密码是一样的。QQ和微信允许将扫描登录的二维码直接嵌入目标网站,这导致这种钓鱼攻击实施起来更加简单。

打开网易新闻 查看更多图片

为了防止类似情况发生,请尽量做到:

  1. 尽量避免在不熟悉的电脑和网站上扫描二维码
  2. 务必仔细确认登录前的提示信息,看提示的登录类型和要登录的网站是否和提示的一致

对于客户端登录的情况来说,即使确认了登录信息,也很难确认是否被二维码劫持,只能说在安全问题解决之前,根本不要通过扫码(当然也不要通过用户名密码)在不信任的电脑上登录客户端。

QQ具体的登录流程没有仔细研究过,但扫码登录基本上来说类似于OAuth,弱点也跟OAuth类似,而客户端登录相当于public client,在相关安全性中是最弱的一种,如果客户端实现不当,会有更多的劫持攻击手法,根本上只能说目前不要再不安全的环境中扫码登录(当然也不要用密码登录)

对于应用设计者来说,可以考虑以下的策略来加固二维码登录流程:

  1. 增加地域检测。如果生成二维码时的来源IP地址和扫描二维码时手机的IP地址所在地不同,则提供显著的风险提示,尽量防止用户进行这类异地登录操作。原理在于从前面的攻击手法中不难看出,在某地生成二维码而在另一个地点展示是二维码劫持中的基本步骤,而攻击者通常难以保证生成二维码和展示二维码在同一物理地域。
  2. 精心设计请求流程,例如引入类似于OAuth中PKCE这样的机制防范一部分钓鱼攻击手法(目前没有办法完全阻止像前面例子中的攻击手段)

再次提醒大家,扫描二维码并确认的操作和输入用户名密码的风险等同,请务必慎重。